From: chandra konduru <chandra.kond...@intel.com>

This patch has below improvements:
 - use tile-Y for fb1 which is used for 90/270 rotation
 - add 90/270 rotation tests along with scaling
 - remove primary_plane_scaling flag which isn't required anymore
 - use helper igt_get_image_size() to get image size
 - use fb's width/height to initialize fb1 in prepare_crtc
 - position fb3 at (0,0) and set its src size to fb size

Depends on "Prep work for adding NV12 testcase" patch which adds
helper function igt_get_image_size().

v2:
-Remove primary_plane_scaling flag (Thomas)
-Fix running the test from any directory (Tvrtko)

Signed-off-by: chandra konduru <chandra.kond...@intel.com>
---
 tests/kms_plane_scaling.c | 88 ++++++++++++++++++++++++-----------------------
 1 file changed, 45 insertions(+), 43 deletions(-)

diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 00db5cb..aa88040 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -101,11 +101,11 @@ static void prepare_crtc(data_t *data, igt_output_t 
*output, enum pipe pipe,
        data->fb_id1 = igt_create_fb(data->drm_fd,
                        mode->hdisplay, mode->vdisplay,
                        DRM_FORMAT_XRGB8888,
-                       LOCAL_I915_FORMAT_MOD_X_TILED, /* tiled */
+                       LOCAL_I915_FORMAT_MOD_Y_TILED, /* tiled */
                        &data->fb1);
        igt_assert(data->fb_id1);
 
-       paint_color(data, &data->fb1, mode->hdisplay, mode->vdisplay);
+       paint_color(data, &data->fb1, data->fb1.width, data->fb1.height);
 
        /*
         * We always set the primary plane to actually enable the pipe as
@@ -206,10 +206,8 @@ static void test_plane_scaling(data_t *d)
 {
        igt_display_t *display = &d->display;
        igt_output_t *output;
-       cairo_surface_t *image;
        enum pipe pipe;
        int valid_tests = 0;
-       int primary_plane_scaling = 0; /* For now */
 
        igt_require(d->display.has_universal_planes);
        igt_require(d->num_scalers);
@@ -223,12 +221,7 @@ static void test_plane_scaling(data_t *d)
                mode = igt_output_get_mode(output);
 
                /* allocate fb2 with image size */
-               image = cairo_image_surface_create_from_png(FILE_NAME);
-               igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
-               d->image_w = cairo_image_surface_get_width(image);
-               d->image_h = cairo_image_surface_get_height(image);
-               cairo_surface_destroy(image);
-
+               igt_get_image_size(FILE_NAME, &d->image_w, &d->image_h);
                d->fb_id2 = igt_create_fb(d->drm_fd,
                                d->image_w, d->image_h,
                                DRM_FORMAT_XRGB8888,
@@ -249,22 +242,35 @@ static void test_plane_scaling(data_t *d)
                d->plane1 = igt_output_get_plane(output, IGT_PLANE_PRIMARY);
                prepare_crtc(d, output, pipe, d->plane1, mode, 
COMMIT_UNIVERSAL);
 
-               if (primary_plane_scaling) {
-                       /* Primary plane upscaling */
-                       igt_fb_set_position(&d->fb1, d->plane1, 100, 100);
-                       igt_fb_set_size(&d->fb1, d->plane1, 500, 500);
-                       igt_plane_set_position(d->plane1, 0, 0);
-                       igt_plane_set_size(d->plane1, mode->hdisplay, 
mode->vdisplay);
-                       igt_display_commit2(display, COMMIT_UNIVERSAL);
+               /* Primary plane upscaling with 90 rotation */
+               paint_color(d, &d->fb1, 360, 640);
+               igt_fb_set_position(&d->fb1, d->plane1, 0, 0);
+               igt_fb_set_size(&d->fb1, d->plane1, 360, 640);
+               igt_plane_set_position(d->plane1, 0, 0);
+               igt_plane_set_size(d->plane1, mode->hdisplay, mode->vdisplay);
+               igt_plane_set_rotation(d->plane1, IGT_ROTATION_90);
+               igt_display_commit2(display, COMMIT_UNIVERSAL);
 
-                       /* Primary plane 1:1 no scaling */
+               /* Primary plane upscaling with 270 rotation */
+               if (d->fb1.width >= 720 && d->fb1.height >= 1280) {
+                       paint_color(d, &d->fb1, 720, 1280);
                        igt_fb_set_position(&d->fb1, d->plane1, 0, 0);
-                       igt_fb_set_size(&d->fb1, d->plane1, d->fb1.width, 
d->fb1.height);
+                       igt_fb_set_size(&d->fb1, d->plane1, 720, 1280);
                        igt_plane_set_position(d->plane1, 0, 0);
                        igt_plane_set_size(d->plane1, mode->hdisplay, 
mode->vdisplay);
+                       igt_plane_set_rotation(d->plane1, IGT_ROTATION_270);
                        igt_display_commit2(display, COMMIT_UNIVERSAL);
                }
 
+               /* Primary plane 1:1 no scaling & no rotation */
+               paint_color(d, &d->fb1, d->fb1.width, d->fb1.height);
+               igt_fb_set_position(&d->fb1, d->plane1, 0, 0);
+               igt_fb_set_size(&d->fb1, d->plane1, d->fb1.width, 
d->fb1.height);
+               igt_plane_set_position(d->plane1, 0, 0);
+               igt_plane_set_size(d->plane1, mode->hdisplay, mode->vdisplay);
+               igt_plane_set_rotation(d->plane1, IGT_ROTATION_0);
+               igt_display_commit2(display, COMMIT_UNIVERSAL);
+
                /* Set up fb2->plane2 mapping. */
                d->plane2 = igt_output_get_plane(output, IGT_PLANE_2);
                igt_plane_set_fb(d->plane2, &d->fb2);
@@ -292,14 +298,12 @@ static void test_plane_scaling(data_t *d)
                igt_plane_set_size(d->plane2, 500, 500 * 
d->fb2.height/d->fb2.width);
                igt_display_commit2(display, COMMIT_UNIVERSAL);
 
-               if (primary_plane_scaling) {
-                       /* Primary plane up scaling */
-                       igt_fb_set_position(&d->fb1, d->plane1, 100, 100);
-                       igt_fb_set_size(&d->fb1, d->plane1, 500, 500);
-                       igt_plane_set_position(d->plane1, 0, 0);
-                       igt_plane_set_size(d->plane1, mode->hdisplay, 
mode->vdisplay);
-                       igt_display_commit2(display, COMMIT_UNIVERSAL);
-               }
+               /* Primary plane up scaling */
+               igt_fb_set_position(&d->fb1, d->plane1, 100, 100);
+               igt_fb_set_size(&d->fb1, d->plane1, 500, 500);
+               igt_plane_set_position(d->plane1, 0, 0);
+               igt_plane_set_size(d->plane1, mode->hdisplay, mode->vdisplay);
+               igt_display_commit2(display, COMMIT_UNIVERSAL);
 
                /* Set up fb3->plane3 mapping. */
                d->plane3 = igt_output_get_plane(output, IGT_PLANE_3);
@@ -318,25 +322,23 @@ static void test_plane_scaling(data_t *d)
                igt_plane_set_position(d->plane2, 100, 100);
                igt_plane_set_size(d->plane2, d->fb2.width-200, 
d->fb2.height-200);
 
-               igt_fb_set_position(&d->fb3, d->plane3, 100, 100);
-               igt_fb_set_size(&d->fb3, d->plane3, d->fb3.width-400, 
d->fb3.height-400);
-               igt_plane_set_position(d->plane3, 10, 10);
-               igt_plane_set_size(d->plane3, mode->hdisplay-300, 
mode->vdisplay-300);
+               igt_fb_set_position(&d->fb3, d->plane3, 0, 0);
+               igt_fb_set_size(&d->fb3, d->plane3, d->fb3.width, 
d->fb3.height);
+               igt_plane_set_position(d->plane3, 500, 500);
+               igt_plane_set_size(d->plane3, d->fb3.width * 2/3, d->fb3.height 
* 2/3);
                igt_display_commit2(display, COMMIT_UNIVERSAL);
 
-               if (primary_plane_scaling) {
-                       /* Switch scaler from plane 1 to plane 2 */
-                       igt_fb_set_position(&d->fb1, d->plane1, 0, 0);
-                       igt_fb_set_size(&d->fb1, d->plane1, d->fb1.width, 
d->fb1.height);
-                       igt_plane_set_position(d->plane1, 0, 0);
-                       igt_plane_set_size(d->plane1, mode->hdisplay, 
mode->vdisplay);
+               /* Switch scaler from plane 1 to plane 2 */
+               igt_fb_set_position(&d->fb1, d->plane1, 0, 0);
+               igt_fb_set_size(&d->fb1, d->plane1, d->fb1.width, 
d->fb1.height);
+               igt_plane_set_position(d->plane1, 0, 0);
+               igt_plane_set_size(d->plane1, mode->hdisplay, mode->vdisplay);
 
-                       igt_fb_set_position(&d->fb2, d->plane2, 100, 100);
-                       igt_fb_set_size(&d->fb2, d->plane2, 
d->fb2.width-500,d->fb2.height-500);
-                       igt_plane_set_position(d->plane2, 100, 100);
-                       igt_plane_set_size(d->plane2, mode->hdisplay-200, 
mode->vdisplay-200);
-                       igt_display_commit2(display, COMMIT_UNIVERSAL);
-               }
+               igt_fb_set_position(&d->fb2, d->plane2, 100, 100);
+               igt_fb_set_size(&d->fb2, d->plane2, 
d->fb2.width-500,d->fb2.height-500);
+               igt_plane_set_position(d->plane2, 100, 100);
+               igt_plane_set_size(d->plane2, mode->hdisplay-200, 
mode->vdisplay-200);
+               igt_display_commit2(display, COMMIT_UNIVERSAL);
 
                /* back to single plane mode */
                igt_plane_set_fb(d->plane2, NULL);
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to