From 887d89cc1dbab454d36095182d6e460331bcf199 Mon Sep 17 00:00:00 2001 From: Ville Syrjälä Date: Thu, 28 Mar 2019 19:35:34 +0200 Subject: tests/kms_plane: Eliminate modeset between every plane MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the pipe/primary plane stuff outside the plane loop so that we can avoid all that overhead (including a modeset) when switching from one plane to another. Reviewed-by: Daniel Vetter Signed-off-by: Ville Syrjälä --- tests/kms_plane.c | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) (limited to 'tests/kms_plane.c') diff --git a/tests/kms_plane.c b/tests/kms_plane.c index 4007c894..3f14dbf8 100644 --- a/tests/kms_plane.c +++ b/tests/kms_plane.c @@ -447,8 +447,6 @@ static void test_format_plane_color(data_t *data, enum pipe pipe, static bool test_format_plane(data_t *data, enum pipe pipe, igt_output_t *output, igt_plane_t *plane) { - igt_plane_t *primary; - struct igt_fb primary_fb; struct igt_fb fb = {}; drmModeModeInfo *mode; uint32_t format, ref_format; @@ -481,18 +479,6 @@ static bool test_format_plane(data_t *data, enum pipe pipe, igt_output_name(output), kmstest_plane_type_name(plane->type), kmstest_pipe_name(pipe), plane->index); - igt_create_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, - DRM_FORMAT_XRGB8888, LOCAL_DRM_FORMAT_MOD_NONE, &primary_fb); - - igt_output_set_pipe(output, pipe); - primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); - igt_plane_set_fb(primary, &primary_fb); - - igt_display_commit2(&data->display, data->display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY); - - set_legacy_lut(data, pipe, 0xfc00); - - test_init(data, pipe); igt_pipe_crc_start(data->pipe_crc); igt_info("Testing format " IGT_FORMAT_FMT " on %s.%u\n", @@ -562,17 +548,9 @@ static bool test_format_plane(data_t *data, enum pipe pipe, } igt_pipe_crc_stop(data->pipe_crc); - test_fini(data); - - set_legacy_lut(data, pipe, 0xffff); - igt_plane_set_fb(primary, NULL); igt_plane_set_fb(plane, NULL); - igt_output_set_pipe(output, PIPE_NONE); - igt_display_commit2(&data->display, data->display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY); - igt_remove_fb(data->drm_fd, &fb); - igt_remove_fb(data->drm_fd, &primary_fb); return result; } @@ -580,6 +558,9 @@ static bool test_format_plane(data_t *data, enum pipe pipe, static void test_pixel_formats(data_t *data, enum pipe pipe) { + struct igt_fb primary_fb; + igt_plane_t *primary; + drmModeModeInfo *mode; bool result; igt_output_t *output; igt_plane_t *plane; @@ -587,13 +568,36 @@ test_pixel_formats(data_t *data, enum pipe pipe) output = igt_get_single_output_for_pipe(&data->display, pipe); igt_require(output); + mode = igt_output_get_mode(output); + + igt_create_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, + DRM_FORMAT_XRGB8888, LOCAL_DRM_FORMAT_MOD_NONE, &primary_fb); + + igt_output_set_pipe(output, pipe); + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); + igt_plane_set_fb(primary, &primary_fb); + + igt_display_commit2(&data->display, data->display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY); + + set_legacy_lut(data, pipe, 0xfc00); + + test_init(data, pipe); + result = true; for_each_plane_on_pipe(&data->display, pipe, plane) result &= test_format_plane(data, pipe, output, plane); - igt_assert_f(result, "At least one CRC mismatch happened\n"); + test_fini(data); - igt_output_set_pipe(output, PIPE_ANY); + set_legacy_lut(data, pipe, 0xffff); + + igt_plane_set_fb(primary, NULL); + igt_output_set_pipe(output, PIPE_NONE); + igt_display_commit2(&data->display, data->display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY); + + igt_remove_fb(data->drm_fd, &primary_fb); + + igt_assert_f(result, "At least one CRC mismatch happened\n"); } static void -- cgit v1.2.3