Re: [PATCH i-g-t v4 4/6] tests/kms_ccs: Test case where the CCS buffer was not provided

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 17-09-27 15:34:17, Gabriel Krisman Bertazi wrote:
Signed-off-by: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxxxx>
---
tests/kms_ccs.c | 37 +++++++++++++++++++++++++++----------
1 file changed, 27 insertions(+), 10 deletions(-)

diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
index 73025a1e019f..35dfcca6be14 100644
--- a/tests/kms_ccs.c
+++ b/tests/kms_ccs.c
@@ -33,8 +33,12 @@ enum test_flags {
	TEST_ROTATE_180			= 1 << 2,
	TEST_BAD_PIXEL_FORMAT		= 1 << 3,
	TEST_BAD_ROTATION_90		= 1 << 4,
+	TEST_NO_AUX_BUFFER		= 1 << 5,
};

+#define TEST_FAIL_ON_ADDFB2 \
+	(TEST_BAD_PIXEL_FORMAT | TEST_NO_AUX_BUFFER)
+

Adding the define confuses things more than it helps IMO.

enum test_fb_flags {
	FB_COMPRESSED			= 1 << 0,
	FB_HAS_PLANE			= 1 << 1,
@@ -315,22 +319,29 @@ static void generate_fb(data_t *data, struct igt_fb *fb,
		 */
		int ccs_width = ALIGN(width * 4, 32) / 32;
		int ccs_height = ALIGN(height, 16) / 16;
-		f.pitches[1] = ALIGN(ccs_width * 1, 128);
-		f.modifier[1] = modifier;

I think the case you're trying to test should have the modifier set for plane1,
just no handle, size or whatever. If you don't do this, I'm not sure what you're
actually testing.

-		f.offsets[1] = size[0];
-		size[1] = f.pitches[1] * ALIGN(ccs_height, 32);
+		int ccs_pitches = ALIGN(ccs_width * 1, 128);
+		int ccs_offsets = size[0];
+
+		size[1] = ccs_pitches * ALIGN(ccs_height, 32);

		f.handles[0] = gem_create(data->drm_fd, size[0] + size[1]);
-		f.handles[1] = f.handles[0];
-		render_ccs(data, f.handles[1], f.offsets[1], size[1],
-			   height, f.pitches[1]);
+
+		if (!(data->flags & TEST_NO_AUX_BUFFER)) {
+			f.modifier[1] = modifier;
+			f.handles[1] = f.handles[0];
+			f.pitches[1] = ccs_pitches;
+			f.offsets[1] = ccs_offsets;
+
+			render_ccs(data, f.handles[1], f.offsets[1], size[1],
+				   height, f.pitches[1]);
+		}
	} else
		f.handles[0] = gem_create(data->drm_fd, size[0]);

	render_fb(data, f.handles[0], size[0], fb_flags, height, f.pitches[0]);

	ret = drmIoctl(data->drm_fd, LOCAL_DRM_IOCTL_MODE_ADDFB2, &f);
-	if (data->flags & TEST_BAD_PIXEL_FORMAT) {
+	if (data->flags & TEST_FAIL_ON_ADDFB2) {
		igt_assert_eq(ret, -1);
		igt_assert_eq(errno, EINVAL);
		return;
@@ -379,7 +390,7 @@ static void try_config(data_t *data, enum test_fb_flags fb_flags)
			    drm_mode->vdisplay, fb_flags);
	}

-	if (data->flags & TEST_BAD_PIXEL_FORMAT)
+	if (data->flags & TEST_FAIL_ON_ADDFB2)
		return;

	igt_plane_set_position(primary, 0, 0);
@@ -446,7 +457,8 @@ static void test_output(data_t *data)
	}

	if (data->flags & TEST_BAD_PIXEL_FORMAT ||
-	    data->flags & TEST_BAD_ROTATION_90) {
+	    data->flags & TEST_BAD_ROTATION_90 ||
+	    data->flags & TEST_NO_AUX_BUFFER) {
		try_config(data, fb_flags | FB_COMPRESSED);
	}

@@ -515,6 +527,11 @@ igt_main
		}

		data.plane = NULL;
+
+		data.flags = TEST_NO_AUX_BUFFER;
+		igt_subtest_f("pipe-%s-missing-ccs-buffer", pipe_name)
+			test_output(&data);
+
	}

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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux