diff mbox

[i-g-t,2/2] igt/kms_rotation_crc: Add RGB565 90 degree test for gen>9

Message ID 1510671515-522-3-git-send-email-juhapekka.heikkila@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Juha-Pekka Heikkila Nov. 14, 2017, 2:58 p.m. UTC
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.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
---
 tests/kms_rotation_crc.c | 101 ++++++++++-------------------------------------
 1 file changed, 20 insertions(+), 81 deletions(-)

Comments

Ville Syrjälä Nov. 14, 2017, 3:24 p.m. UTC | #1
On Tue, Nov 14, 2017 at 04:58:35PM +0200, Juha-Pekka Heikkila wrote:
> 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.
> 
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
> ---
>  tests/kms_rotation_crc.c | 101 ++++++++++-------------------------------------
>  1 file changed, 20 insertions(+), 81 deletions(-)
> 
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 27d1f80..0ed2ce3 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -376,7 +376,7 @@ 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) {
> +			if (data->override_fmt == DRM_FORMAT_C8) {

I think it would be cleaner to have some kind of data->expected_error
and then do

if (data->expected_error) {
	igt_assertt(ret, data->expected_error);
	contine;
}

That way it's obvious which subtests expect an error and which don't.

>  				igt_assert_eq(ret, -EINVAL);
>  				continue;
>  			}
> @@ -421,70 +421,6 @@ 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,
> -					   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);
> -	enum igt_commit_style commit = COMMIT_LEGACY;
> -	int fd = data->gfx_fd;
> -	igt_plane_t *plane;
> -	drmModeModeInfo *mode;
> -	unsigned int stride, size, w, h;
> -	uint32_t gem_handle;
> -	int ret;
> -
> -	plane = igt_output_get_plane_type(output, plane_type);
> -	igt_require(igt_plane_has_prop(plane, IGT_PLANE_ROTATION));
> -
> -	if (plane_type == DRM_PLANE_TYPE_PRIMARY || plane_type == DRM_PLANE_TYPE_CURSOR)
> -		commit = COMMIT_UNIVERSAL;
> -
> -	if (plane_type == DRM_PLANE_TYPE_CURSOR)
> -		igt_require(display->has_cursor_plane);
> -
> -	if (data->display.is_atomic)
> -		commit = COMMIT_ATOMIC;
> -
> -	mode = igt_output_get_mode(output);
> -	w = mode->hdisplay;
> -	h = mode->vdisplay;
> -
> -	for (stride = 512; stride < (w * bpp / 8); stride *= 2)
> -		;
> -	for (size = 1024*1024; size < stride * h; size *= 2)
> -		;
> -
> -	gem_handle = gem_create(fd, size);
> -	ret = __gem_set_tiling(fd, gem_handle, I915_TILING_Y, stride);
> -	igt_assert_eq(ret, 0);
> -
> -	do_or_die(__kms_addfb(fd, gem_handle, w, h, stride,
> -		  format, tiling, LOCAL_DRM_MODE_FB_MODIFIERS,
> -		  &data->fb.fb_id));
> -	data->fb.width = w;
> -	data->fb.height = h;
> -	data->fb.gem_handle = gem_handle;
> -
> -	igt_plane_set_fb(plane, NULL);
> -	igt_display_commit(display);
> -
> -	igt_plane_set_rotation(plane, data->rotation);
> -	igt_plane_set_fb(plane, &data->fb);
> -	igt_plane_set_size(plane, h, w);
> -
> -	ret = igt_display_try_commit2(display, commit);
> -
> -	igt_output_set_pipe(output, PIPE_NONE);
> -
> -	kmstest_restore_vt_mode();
> -	igt_remove_fb(fd, &data->fb);
> -	igt_assert_eq(ret, 0);
> -}
> -
>  static void test_plane_rotation_exhaust_fences(data_t *data,
>  					       igt_output_t *output,
>  					       int plane_type)
> @@ -697,7 +633,12 @@ igt_main
>  		data.pos_x = 0,
>  		data.pos_y = 0;
>  		data.rotation = IGT_ROTATION_90;
> -		data.override_fmt = DRM_FORMAT_RGB565;
> +		/*
> +		 * Inside test_plane_rotation() there's
> +		 * check for DRM_FORMAT_C8 to make this
> +		 * test work correctly.
> +		 */
> +		data.override_fmt = DRM_FORMAT_C8;
>  		test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
>  	}
>  
> @@ -709,24 +650,22 @@ 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") {
> +		/*
> +		 * this test requires hw greater than gen9
> +		 */
> +		igt_require(gen > 9);

gen >= 10 is a more customary way of writing this. The comment is
redundant.

> +		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;

I wonder where we're resetting data.override_tiling/fmt etc. between
the subtests? Maybe we're not and this whole thing is super buggy if you
do multiple subtests in the same run?

> -
> -		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;
> +		test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
>  	}
>  
>  	igt_subtest_f("exhaust-fences") {
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 27d1f80..0ed2ce3 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -376,7 +376,7 @@  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) {
+			if (data->override_fmt == DRM_FORMAT_C8) {
 				igt_assert_eq(ret, -EINVAL);
 				continue;
 			}
@@ -421,70 +421,6 @@  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,
-					   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);
-	enum igt_commit_style commit = COMMIT_LEGACY;
-	int fd = data->gfx_fd;
-	igt_plane_t *plane;
-	drmModeModeInfo *mode;
-	unsigned int stride, size, w, h;
-	uint32_t gem_handle;
-	int ret;
-
-	plane = igt_output_get_plane_type(output, plane_type);
-	igt_require(igt_plane_has_prop(plane, IGT_PLANE_ROTATION));
-
-	if (plane_type == DRM_PLANE_TYPE_PRIMARY || plane_type == DRM_PLANE_TYPE_CURSOR)
-		commit = COMMIT_UNIVERSAL;
-
-	if (plane_type == DRM_PLANE_TYPE_CURSOR)
-		igt_require(display->has_cursor_plane);
-
-	if (data->display.is_atomic)
-		commit = COMMIT_ATOMIC;
-
-	mode = igt_output_get_mode(output);
-	w = mode->hdisplay;
-	h = mode->vdisplay;
-
-	for (stride = 512; stride < (w * bpp / 8); stride *= 2)
-		;
-	for (size = 1024*1024; size < stride * h; size *= 2)
-		;
-
-	gem_handle = gem_create(fd, size);
-	ret = __gem_set_tiling(fd, gem_handle, I915_TILING_Y, stride);
-	igt_assert_eq(ret, 0);
-
-	do_or_die(__kms_addfb(fd, gem_handle, w, h, stride,
-		  format, tiling, LOCAL_DRM_MODE_FB_MODIFIERS,
-		  &data->fb.fb_id));
-	data->fb.width = w;
-	data->fb.height = h;
-	data->fb.gem_handle = gem_handle;
-
-	igt_plane_set_fb(plane, NULL);
-	igt_display_commit(display);
-
-	igt_plane_set_rotation(plane, data->rotation);
-	igt_plane_set_fb(plane, &data->fb);
-	igt_plane_set_size(plane, h, w);
-
-	ret = igt_display_try_commit2(display, commit);
-
-	igt_output_set_pipe(output, PIPE_NONE);
-
-	kmstest_restore_vt_mode();
-	igt_remove_fb(fd, &data->fb);
-	igt_assert_eq(ret, 0);
-}
-
 static void test_plane_rotation_exhaust_fences(data_t *data,
 					       igt_output_t *output,
 					       int plane_type)
@@ -697,7 +633,12 @@  igt_main
 		data.pos_x = 0,
 		data.pos_y = 0;
 		data.rotation = IGT_ROTATION_90;
-		data.override_fmt = DRM_FORMAT_RGB565;
+		/*
+		 * Inside test_plane_rotation() there's
+		 * check for DRM_FORMAT_C8 to make this
+		 * test work correctly.
+		 */
+		data.override_fmt = DRM_FORMAT_C8;
 		test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
 	}
 
@@ -709,24 +650,22 @@  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") {
+		/*
+		 * this test requires hw greater than gen9
+		 */
+		igt_require(gen > 9);
+		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;
+		test_plane_rotation(&data, DRM_PLANE_TYPE_PRIMARY);
 	}
 
 	igt_subtest_f("exhaust-fences") {