From b769a7c96b4ccf33b9ea75f4d99856995b5ac571 Mon Sep 17 00:00:00 2001 From: Tvrtko Ursulin Date: Wed, 22 Apr 2015 16:46:46 +0100 Subject: kms_rotation_crc: Consolidate plane and cursor code paths There can only be one, either a plane or a cursor, in each subtest so there is no need for two framebuffer varilables and also some codepaths can be unified. Signed-off-by: Tvrtko Ursulin Cc: Sonika Jindal Reviewed-by: Sonika Jindal Signed-off-by: Thomas Wood --- tests/kms_rotation_crc.c | 150 ++++++++++++++++++++--------------------------- 1 file changed, 62 insertions(+), 88 deletions(-) (limited to 'tests/kms_rotation_crc.c') diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c index f871e2af..60819b31 100644 --- a/tests/kms_rotation_crc.c +++ b/tests/kms_rotation_crc.c @@ -34,81 +34,64 @@ typedef struct { int gfx_fd; igt_display_t display; struct igt_fb fb; - struct igt_fb fb_cursor; struct igt_fb fb_modeset; igt_crc_t ref_crc; igt_pipe_crc_t *pipe_crc; igt_rotation_t rotation; int pos_x; int pos_y; + unsigned int w, h; } data_t; static void -paint_squares(data_t *data, struct igt_fb *fb, drmModeModeInfo *mode, - igt_rotation_t rotation, igt_plane_t *plane) +paint_squares(data_t *data, drmModeModeInfo *mode, igt_rotation_t rotation, + igt_plane_t *plane) { cairo_t *cr; - int w, h; + unsigned int w = data->w; + unsigned int h = data->h; - if (plane->is_cursor) { - w = 128; - h = 128; - cr = igt_get_cairo_ctx(data->gfx_fd, &data->fb_cursor); + cr = igt_get_cairo_ctx(data->gfx_fd, &data->fb); - if (rotation == IGT_ROTATION_180) { - cairo_translate(cr, w, h); - cairo_rotate(cr, M_PI); - } - - igt_paint_color(cr, 0, 0, w / 2, h / 2, .75, 0.5, 0.5); - igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 0.5, .75, 0.5); - igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 0.5, 0.5, .75); - igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, .75, .75, .75); - } else { - w = mode->hdisplay; - h = mode->vdisplay; - - cr = igt_get_cairo_ctx(data->gfx_fd, fb); + if (rotation == IGT_ROTATION_180) { + cairo_translate(cr, w, h); + cairo_rotate(cr, M_PI); + } - if (rotation == IGT_ROTATION_180) { - cairo_translate(cr, w, h); - cairo_rotate(cr, M_PI); - } + /* + * "rotation" is used for creating ref rotated fb and + * "data->rotation" is used to determine the required size + * while creating unrotated fb. + */ + if (rotation == IGT_ROTATION_90) { + /* Paint 4 squares with width == height in Blue, Red, + Green, White Clockwise order to look like 90 degree rotated*/ + w = h = mode->vdisplay; + igt_paint_color(cr, 0, 0, w / 2, h / 2, 0.0, 0.0, 1.0); + igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 1.0, 0.0, 0.0); + igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 1.0, 1.0, 1.0); + igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, 0.0, 1.0, 0.0); + + } else if (rotation == IGT_ROTATION_270) { + /* Paint 4 squares with width == height in Green, White, + Blue, Red Clockwise order to look like 270 degree rotated*/ + w = h = mode->vdisplay; + igt_paint_color(cr, 0, 0, w / 2, h / 2, 0.0, 1.0, 0.0); + igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 1.0, 1.0, 1.0); + igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 1.0, 0.0, 0.0); + igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, 0.0, 0.0, 1.0); - /* - * "rotation" is used for creating ref rotated fb and - * "data->rotation" is used to determine the required size - * while creating unrotated fb. - */ - if (rotation == IGT_ROTATION_90) { - /* Paint 4 squares with width == height in Blue, Red, - Green, White Clockwise order to look like 90 degree rotated*/ - w = h = mode->vdisplay; - igt_paint_color(cr, 0, 0, w / 2, h / 2, 0.0, 0.0, 1.0); - igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 1.0, 0.0, 0.0); - igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 1.0, 1.0, 1.0); - igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, 0.0, 1.0, 0.0); - - } else if (rotation == IGT_ROTATION_270) { - /* Paint 4 squares with width == height in Green, White, - Blue, Red Clockwise order to look like 270 degree rotated*/ + } else { + if (data->rotation == IGT_ROTATION_90 || + data->rotation == IGT_ROTATION_270) w = h = mode->vdisplay; - igt_paint_color(cr, 0, 0, w / 2, h / 2, 0.0, 1.0, 0.0); - igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 1.0, 1.0, 1.0); - igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 1.0, 0.0, 0.0); - igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, 0.0, 0.0, 1.0); - - } else { - if (data->rotation == IGT_ROTATION_90 || - data->rotation == IGT_ROTATION_270) - w = h = mode->vdisplay; - /* Paint with 4 squares of Red, Green, White, Blue Clockwise */ - igt_paint_color(cr, 0, 0, w / 2, h / 2, 1.0, 0.0, 0.0); - igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 0.0, 1.0, 0.0); - igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 0.0, 0.0, 1.0); - igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, 1.0, 1.0, 1.0); - } + /* Paint with 4 squares of Red, Green, White, Blue Clockwise */ + igt_paint_color(cr, 0, 0, w / 2, h / 2, 1.0, 0.0, 0.0); + igt_paint_color(cr, w / 2, 0, w / 2, h / 2, 0.0, 1.0, 0.0); + igt_paint_color(cr, 0, h / 2, w / 2, h / 2, 0.0, 0.0, 1.0); + igt_paint_color(cr, w / 2, h / 2, w / 2, h / 2, 1.0, 1.0, 1.0); } + cairo_destroy(cr); } @@ -117,9 +100,10 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe, { drmModeModeInfo *mode; igt_display_t *display = &data->display; - int fb_id, fb_cursor_id, fb_modeset_id; - int w, h; + int fb_id, fb_modeset_id; + unsigned int w, h; uint64_t tiling = LOCAL_DRM_FORMAT_MOD_NONE; + uint32_t pixel_format = DRM_FORMAT_XRGB8888; enum igt_commit_style commit = COMMIT_LEGACY; igt_plane_t *primary; @@ -136,7 +120,7 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe, fb_modeset_id = igt_create_fb(data->gfx_fd, w, h, - DRM_FORMAT_XRGB8888, + pixel_format, tiling, &data->fb_modeset); igt_assert(fb_modeset_id); @@ -157,35 +141,31 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe, * frame can fit in */ if (data->rotation == IGT_ROTATION_90 || - data->rotation == IGT_ROTATION_270) { + data->rotation == IGT_ROTATION_270) { tiling = LOCAL_I915_FORMAT_MOD_Y_TILED; w = h = mode->vdisplay; + } else if (plane->is_cursor) { + pixel_format = DRM_FORMAT_ARGB8888; + w = h = 128; } + data->w = w; + data->h = h; + fb_id = igt_create_fb(data->gfx_fd, - w, h, - DRM_FORMAT_XRGB8888, - tiling, - &data->fb); + w, h, + pixel_format, + tiling, + &data->fb); igt_assert(fb_id); - fb_cursor_id = igt_create_fb(data->gfx_fd, - 128, 128, - DRM_FORMAT_ARGB8888, - LOCAL_DRM_FORMAT_MOD_NONE, - &data->fb_cursor); - igt_assert(fb_cursor_id); - /* Step 1: create a reference CRC for a software-rotated fb */ - if (plane->is_cursor) { - paint_squares(data, &data->fb_cursor, mode, data->rotation, plane); - igt_plane_set_fb(plane, &data->fb_cursor); - } else { - paint_squares(data, &data->fb, mode, data->rotation, plane); - igt_plane_set_fb(plane, &data->fb); + paint_squares(data, mode, data->rotation, plane); + igt_plane_set_fb(plane, &data->fb); + if (!plane->is_cursor) igt_plane_set_position(plane, data->pos_x, data->pos_y); - } + if (plane->is_primary || plane->is_cursor) { igt_require(data->display.has_universal_planes); commit = COMMIT_UNIVERSAL; @@ -198,13 +178,8 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe, * Step 2: prepare the plane with an non-rotated fb let the hw * rotate it. */ - if (plane->is_cursor) { - paint_squares(data, &data->fb_cursor, mode, IGT_ROTATION_0, plane); - igt_plane_set_fb(plane, &data->fb_cursor); - } else { - paint_squares(data, &data->fb, mode, IGT_ROTATION_0, plane); - igt_plane_set_fb(plane, &data->fb); - } + paint_squares(data, mode, IGT_ROTATION_0, plane); + igt_plane_set_fb(plane, &data->fb); } static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane) @@ -215,7 +190,6 @@ static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane) data->pipe_crc = NULL; igt_remove_fb(data->gfx_fd, &data->fb); - igt_remove_fb(data->gfx_fd, &data->fb_cursor); igt_remove_fb(data->gfx_fd, &data->fb_modeset); /* XXX: see the note in prepare_crtc() */ -- cgit v1.2.3