summaryrefslogtreecommitdiff
path: root/tests/kms_concurrent.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/kms_concurrent.c')
-rw-r--r--tests/kms_concurrent.c65
1 files changed, 30 insertions, 35 deletions
diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
index a0280d15..14ca5fab 100644
--- a/tests/kms_concurrent.c
+++ b/tests/kms_concurrent.c
@@ -57,33 +57,11 @@ struct {
static void test_init(data_t *data, enum pipe pipe, int n_planes,
igt_output_t *output)
{
- drmModeModeInfo *mode;
- igt_plane_t *primary;
- int ret;
-
data->plane = calloc(n_planes, sizeof(*data->plane));
igt_assert_f(data->plane != NULL, "Failed to allocate memory for planes\n");
data->fb = calloc(n_planes, sizeof(struct igt_fb));
igt_assert_f(data->fb != NULL, "Failed to allocate memory for FBs\n");
-
- igt_output_set_pipe(output, pipe);
-
- primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- data->plane[primary->index] = primary;
-
- mode = igt_output_get_mode(output);
-
- igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
- DRM_FORMAT_XRGB8888,
- LOCAL_I915_FORMAT_MOD_X_TILED,
- 0.0f, 0.0f, 1.0f,
- &data->fb[primary->index]);
-
- igt_plane_set_fb(data->plane[primary->index], &data->fb[primary->index]);
-
- ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
- igt_skip_on(ret != 0);
}
static void test_fini(data_t *data, enum pipe pipe, int n_planes,
@@ -184,7 +162,6 @@ prepare_planes(data_t *data, enum pipe pipe, int max_planes,
y[primary->index] = 0;
for (i = 0; i < max_planes; i++) {
igt_plane_t *plane = igt_output_get_plane(output, i);
- int ret;
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
continue;
@@ -207,18 +184,7 @@ prepare_planes(data_t *data, enum pipe pipe, int max_planes,
igt_plane_set_position(data->plane[i], x[i], y[i]);
igt_plane_set_fb(data->plane[i], &data->fb[i]);
-
- ret = igt_display_try_commit_atomic(&data->display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
- if (ret) {
- igt_plane_set_fb(data->plane[i], NULL);
- igt_remove_fb(data->drm_fd, &data->fb[i]);
- data->plane[i] = NULL;
- break;
- }
}
- max_planes = i;
-
- igt_assert_lt(0, max_planes);
/* primary plane */
data->plane[primary->index] = primary;
@@ -282,10 +248,39 @@ test_resolution_with_output(data_t *data, enum pipe pipe, igt_output_t *output)
const drmModeModeInfo *mode_hi, *mode_lo;
int iterations = opt.iterations < 1 ? 1 : opt.iterations;
bool loop_forever = opt.iterations == LOOP_FOREVER ? true : false;
- int i;
+ int i, c, ret;
+ int max_planes = data->display.pipes[pipe].n_planes;
+ igt_plane_t *primary;
+ drmModeModeInfo *mode;
i = 0;
while (i < iterations || loop_forever) {
+ igt_output_set_pipe(output, pipe);
+ for (c = 0; c < max_planes; c++) {
+ igt_plane_t *plane = igt_output_get_plane(output, c);
+
+ if (plane->type != DRM_PLANE_TYPE_PRIMARY)
+ continue;
+ primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+ data->plane[primary->index] = primary;
+ mode = igt_output_get_mode(output);
+ igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_I915_FORMAT_MOD_X_TILED,
+ 0.0f, 0.0f, 1.0f,
+ &data->fb[primary->index]);
+ igt_plane_set_fb(data->plane[primary->index], &data->fb[primary->index]);
+ ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
+ if (ret) {
+ igt_plane_set_fb(data->plane[i], NULL);
+ igt_remove_fb(data->drm_fd, &data->fb[i]);
+ data->plane[i] = NULL;
+ break;
+ }
+ }
+ max_planes = c;
+ igt_assert_lt(0, max_planes);
+
mode_hi = igt_output_get_mode(output);
mode_lo = get_lowres_mode(data, mode_hi, output);