@@ -376,10 +376,6 @@ static void test_plane_rotation(data_t *data, int plane_type)
igt_plane_set_size(plane, data->fb.height, data->fb.width);
ret = igt_display_try_commit2(display, commit);
- if (data->override_fmt || data->override_tiling) {
- igt_assert_eq(ret, -EINVAL);
- continue;
- }
/* Verify commit was ok. */
igt_assert_eq(ret, 0);
@@ -421,14 +417,13 @@ static void test_plane_rotation(data_t *data, int plane_type)
igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
}
-static void test_plane_rotation_ytiled_obj(data_t *data,
+static void test_bad_pixel_format(data_t *data,
igt_output_t *output,
int plane_type)
{
igt_display_t *display = &data->display;
uint64_t tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
- uint32_t format = DRM_FORMAT_XRGB8888;
- int bpp = igt_drm_format_to_bpp(format);
+ uint32_t format = DRM_FORMAT_C8;
enum igt_commit_style commit = COMMIT_LEGACY;
int fd = data->gfx_fd;
igt_plane_t *plane;
@@ -453,7 +448,7 @@ static void test_plane_rotation_ytiled_obj(data_t *data,
w = mode->hdisplay;
h = mode->vdisplay;
- for (stride = 512; stride < (w * bpp / 8); stride *= 2)
+ for (stride = 512; stride < w; stride *= 2)
;
for (size = 1024*1024; size < stride * h; size *= 2)
;
@@ -482,7 +477,9 @@ static void test_plane_rotation_ytiled_obj(data_t *data,
kmstest_restore_vt_mode();
igt_remove_fb(fd, &data->fb);
- igt_assert_eq(ret, 0);
+ data->fb.fb_id = 0;
+
+ igt_assert_eq(ret, -EINVAL);
}
static void test_plane_rotation_exhaust_fences(data_t *data,
@@ -693,12 +690,25 @@ igt_main
}
igt_subtest_f("bad-pixel-format") {
+ enum pipe pipe;
+ igt_output_t *output;
+ int valid_tests = 0;
+
igt_require(gen >= 9);
data.pos_x = 0,
data.pos_y = 0;
data.rotation = IGT_ROTATION_90;
- data.override_fmt = DRM_FORMAT_RGB565;
- test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
+
+ for_each_pipe_with_valid_output(&data.display, pipe, output) {
+ igt_output_set_pipe(output, pipe);
+
+ test_bad_pixel_format(&data, output, DRM_PLANE_TYPE_PRIMARY);
+
+ valid_tests++;
+ break;
+ }
+
+ igt_require_f(valid_tests, "invalid pixel format accepted for rotation\n");
}
igt_subtest_f("bad-tiling") {
@@ -709,24 +719,20 @@ igt_main
test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
}
- igt_subtest_f("primary-rotation-90-Y-tiled") {
- enum pipe pipe;
- igt_output_t *output;
- int valid_tests = 0;
+ igt_subtest_f("primary-rotation-90-Y-tiled-16bpp") {
+ igt_require(gen >= 10);
+ data.rotation = IGT_ROTATION_90;
+ data.override_fmt = DRM_FORMAT_RGB565;
+ data.override_tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
+ test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
+ }
+ igt_subtest_f("primary-rotation-90-Y-tiled") {
igt_require(gen >= 9);
data.rotation = IGT_ROTATION_90;
-
- for_each_pipe_with_valid_output(&data.display, pipe, output) {
- igt_output_set_pipe(output, pipe);
-
- test_plane_rotation_ytiled_obj(&data, output, DRM_PLANE_TYPE_PRIMARY);
-
- valid_tests++;
- break;
- }
-
- igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
+ data.override_fmt = DRM_FORMAT_XRGB8888;
+ data.override_tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
+ test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
}
igt_subtest_f("exhaust-fences") {
Gen10 onwards 90 and 270 degree rotations are supported for RGB565 format. v2 (Ville Syrjälä): As a side effect to keep bad-pixel-format test valid on all supported platforms it need to use DRM_FORMAT_C8 now. While at it clean up kms_rotation_crc test a bit, take out test_plane_rotation_ytiled_obj() function as test_plane_rotation() can basically do the same. v3 (Ville Syrjälä): repurpose test_plane_rotation_ytiled_obj() function for bad pixel testing with DRM_FORMAT_C8 as igt doesn't support this format. Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com> --- tests/kms_rotation_crc.c | 58 ++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 26 deletions(-)