diff options
author | Mahesh Kumar <mahesh1.kumar@intel.com> | 2017-12-13 15:20:47 +0530 |
---|---|---|
committer | Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | 2018-01-17 10:21:46 +0100 |
commit | 085d414238472bc42bb030b981a371e39b54f93e (patch) | |
tree | 674bc4595ea0c5a1a8ccc23fc87bbf71efafc202 | |
parent | eeefac933a917f0ed7a150f48c3c1a414c32d898 (diff) |
tests/kms_plane_scaling: Fix basic scaling test, v3.
PIPEC doesnt have 3rd plane in GEN9. So, we skip the
3rd plane related scaling test where 2nd OVERLAY
plane is not available.
Restricting downscaling to (9/10)x original size of the
image to avoid "Max pixel rate limitation" of the hardware.
When testing with a resolution of 1024x768, the test fails
in iterate_plane_scaling because height becomes out of bounds.
Lastly, instead of a fixed test image, generate a test pattern
at runtime to not run into bxt's hardware limits for scaling.
Later patches in this series will cover corner cases of
scaling.
Changes since v1:
- Move out the code reshuffle to a separate commit. (Maarten)
This makes it more clear what's fixed.
Changes since v2:
- Fix iterate_plane_scaling on 1024x768. (Maarten)
- Instead of upscaling a test image, use the test pattern with a color. (Maarten)
Using a 600x600 test pattern doesn't run into BXT's
hardware limits for scaling.
Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
Signed-off-by: Jyoti Yadav <jyoti.r.yadav@intel.com>
Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
-rw-r--r-- | tests/kms_plane_scaling.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c index 37e05158..cf4a8a11 100644 --- a/tests/kms_plane_scaling.c +++ b/tests/kms_plane_scaling.c @@ -53,8 +53,6 @@ typedef struct { igt_plane_t *plane4; } data_t; -#define FILE_NAME "1080p-left.png" - static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe, igt_plane_t *plane, drmModeModeInfo *mode, enum igt_commit_style s) { @@ -156,7 +154,9 @@ static void iterate_plane_scaling(data_t *d, drmModeModeInfo *mode) /* adjust fb size */ for (w = mode->hdisplay; w <= d->fb2.width; w+=10) { - h = w * mode->hdisplay / mode->vdisplay; + /* Source coordinates must not be clipped. */ + h = min(w * mode->hdisplay / mode->vdisplay, d->fb2.height); + igt_fb_set_size(&d->fb2, d->plane2, w, h); igt_display_commit2(display, COMMIT_UNIVERSAL); } @@ -173,11 +173,10 @@ test_plane_scaling_on_pipe(data_t *d, enum pipe pipe, igt_output_t *output) igt_output_set_pipe(output, pipe); mode = igt_output_get_mode(output); - /* allocate fb2 with image size */ - d->fb_id2 = igt_create_image_fb(d->drm_fd, 0, 0, - DRM_FORMAT_XRGB8888, - LOCAL_I915_FORMAT_MOD_X_TILED, /* tiled */ - FILE_NAME, &d->fb2); + d->fb_id2 = igt_create_color_pattern_fb(display->drm_fd, 600, 600, + DRM_FORMAT_XRGB8888, + LOCAL_I915_FORMAT_MOD_X_TILED, /* tiled */ + .5, .5, .5, &d->fb2); igt_assert(d->fb_id2); d->fb_id3 = igt_create_pattern_fb(d->drm_fd, @@ -231,7 +230,9 @@ test_plane_scaling_on_pipe(data_t *d, enum pipe pipe, igt_output_t *output) igt_fb_set_position(&d->fb2, d->plane2, 0, 0); igt_fb_set_size(&d->fb2, d->plane2, d->fb2.width, d->fb2.height); igt_plane_set_position(d->plane2, 10, 10); - igt_plane_set_size(d->plane2, 500, 500 * d->fb2.height/d->fb2.width); + + /* Downscale (10/9)x of original image */ + igt_plane_set_size(d->plane2, (d->fb2.width * 10)/9, (d->fb2.height * 10)/9); igt_display_commit2(display, COMMIT_UNIVERSAL); if (primary_plane_scaling) { @@ -247,6 +248,11 @@ test_plane_scaling_on_pipe(data_t *d, enum pipe pipe, igt_output_t *output) d->plane3 = igt_output_get_plane(output, 2); igt_plane_set_fb(d->plane3, &d->fb3); + if(d->plane3->type == DRM_PLANE_TYPE_CURSOR) { + igt_debug("Plane-3 doesnt exist on pipe %s\n", kmstest_pipe_name(pipe)); + goto cleanup; + } + /* 3rd plane windowed - no scaling */ igt_fb_set_position(&d->fb3, d->plane3, 100, 100); igt_fb_set_size(&d->fb3, d->plane3, d->fb3.width-300, d->fb3.height-300); @@ -280,6 +286,7 @@ test_plane_scaling_on_pipe(data_t *d, enum pipe pipe, igt_output_t *output) igt_display_commit2(display, COMMIT_UNIVERSAL); } +cleanup: /* back to single plane mode */ igt_plane_set_fb(d->plane2, NULL); igt_plane_set_fb(d->plane3, NULL); |