[Intel-gfx] [PATCH] Improvements to kms_plane_scaling
Chandra Konduru
chandra.konduru at intel.com
Mon May 11 15:51:44 PDT 2015
From: chandra konduru <chandra.konduru at 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.konduru at 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
More information about the Intel-gfx
mailing list