[PATCH i-g-t 2/6] tests/gem_render_copy: Separate out mixed tiled ccs subtests

Imre Deak imre.deak at intel.com
Fri Nov 29 01:50:30 UTC 2019


Signed-off-by: Imre Deak <imre.deak at intel.com>
---
 tests/i915/gem_render_copy.c | 167 ++++++++++++++++++++++++++---------
 1 file changed, 126 insertions(+), 41 deletions(-)

diff --git a/tests/i915/gem_render_copy.c b/tests/i915/gem_render_copy.c
index cc8af1e1..15ba1704 100644
--- a/tests/i915/gem_render_copy.c
+++ b/tests/i915/gem_render_copy.c
@@ -197,6 +197,26 @@ static void *linear_copy(data_t *data, struct igt_buf *buf)
 	return linear;
 }
 
+static void
+copy_from_linear_buf(data_t *data, struct igt_buf *src, struct igt_buf *dst)
+{
+	void *linear;
+
+	igt_assert(src->tiling == I915_TILING_NONE);
+
+	gem_set_domain(data->drm_fd, src->bo->handle,
+		       I915_GEM_DOMAIN_CPU, 0);
+	linear = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
+			       src->bo->size, PROT_READ);
+
+	if (dst->tiling == I915_TILING_Yf)
+		copy_linear_to_yf(data, dst, linear);
+	else
+		copy_linear_to_gtt(data, dst, linear);
+
+	munmap(linear, src->bo->size);
+}
+
 static void scratch_buf_write_to_png(data_t *data, struct igt_buf *buf,
 				     const char *filename)
 {
@@ -580,7 +600,7 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 		 enum i915_compression dst_compression,
 		 int flags)
 {
-	struct igt_buf dst, src_ccs, dst_ccs, ref;
+	struct igt_buf ref, src_tiled, src_ccs, dst_ccs, dst;
 	struct {
 		struct igt_buf buf;
 		const char *filename;
@@ -631,6 +651,9 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 	for (int i = 0; i < num_src; i++)
 		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT, src[i].tiling,
 				 I915_COMPRESSION_NONE);
+	if (!src_mixed_tiled)
+		scratch_buf_init(data, &src_tiled, WIDTH, HEIGHT, src_tiling,
+				 I915_COMPRESSION_NONE);
 	scratch_buf_init(data, &dst, WIDTH, HEIGHT, dst_tiling,
 			 I915_COMPRESSION_NONE);
 	if (src_compressed)
@@ -658,9 +681,15 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 				 &src[i].buf, WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
 				 &ref, src[i].x, src[i].y);
 
+	if (!src_mixed_tiled)
+		copy_from_linear_buf(data, &ref, &src_tiled);
+
 	if (opt_dump_png) {
 		for (int i = 0; i < num_src; i++)
 			scratch_buf_write_to_png(data, &src[i].buf, src[i].filename);
+		if (!src_mixed_tiled)
+			scratch_buf_write_to_png(data, &src_tiled,
+						 "source-tiled.png");
 		scratch_buf_write_to_png(data, &dst, "destination.png");
 		scratch_buf_write_to_png(data, &ref, "reference.png");
 	}
@@ -679,31 +708,51 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 	 *	 |dst|src|
 	 *	  -------
 	 */
-	if (src_compressed)
-		data->render_copy(data->batch, NULL,
-				  &dst, 0, 0, WIDTH, HEIGHT,
-				  &src_ccs, 0, 0);
+	if (src_mixed_tiled) {
+		if (dst_compressed)
+			data->render_copy(data->batch, NULL,
+					  &dst, 0, 0, WIDTH, HEIGHT,
+					  &dst_ccs, 0, 0);
 
-	for (int i = 0; i < num_src; i++)
-		data->render_copy(data->batch, NULL,
-				  &src[i].buf,
-				  WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
-				  src_compressed ? &src_ccs : &dst,
-				  src[i].x, src[i].y);
-
-	if (src_compressed || dst_compressed)
-		data->render_copy(data->batch, NULL,
-				  src_compressed ? &src_ccs : &dst,
-				  0, 0, WIDTH, HEIGHT,
-				  dst_compressed ? &dst_ccs : &dst,
-				  0, 0);
+		for (int i = 0; i < num_src; i++)
+			data->render_copy(data->batch, NULL,
+					  &src[i].buf,
+					  WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
+					  dst_compressed ? &dst_ccs : &dst,
+					  src[i].x, src[i].y);
 
-	if (dst_compressed)
-		data->render_copy(data->batch, NULL,
-				  &dst_ccs,
-				  0, 0, WIDTH, HEIGHT,
-				  &dst,
-				  0, 0);
+		if (dst_compressed)
+			data->render_copy(data->batch, NULL,
+					  &dst_ccs, 0, 0, WIDTH, HEIGHT,
+					  &dst, 0, 0);
+
+	} else {
+		if (src_compression == I915_COMPRESSION_RENDER)
+			data->render_copy(data->batch, NULL,
+					  &src_tiled, 0, 0, WIDTH, HEIGHT,
+					  &src_ccs,
+					  0, 0);
+
+		if (dst_compression == I915_COMPRESSION_RENDER) {
+			data->render_copy(data->batch, NULL,
+					  src_compressed ? &src_ccs : &src_tiled,
+					  0, 0, WIDTH, HEIGHT,
+					  &dst_ccs,
+					  0, 0);
+
+			data->render_copy(data->batch, NULL,
+					  &dst_ccs,
+					  0, 0, WIDTH, HEIGHT,
+					  &dst,
+					  0, 0);
+		} else {
+			data->render_copy(data->batch, NULL,
+					  src_compressed ? &src_ccs : &src_tiled,
+					  0, 0, WIDTH, HEIGHT,
+					  &dst,
+					  0, 0);
+		}
+	}
 
 	if (opt_dump_png){
 		scratch_buf_write_to_png(data, &dst, "result.png");
@@ -771,22 +820,45 @@ const char *help_str =
 	"  -a\tCheck all pixels\n"
 	;
 
-static const char *buf_mode_str(uint32_t tiling,
-				enum i915_compression compression)
+static void buf_mode_to_str(uint32_t tiling, bool mixed_tiled,
+			    enum i915_compression compression,
+			    char *buf, int buf_size)
 {
-	switch (tiling) {
-	default:
+	const char *compression_str;
+	const char *tiling_str;
+
+	if (mixed_tiled)
+		tiling_str = "mixed-tiled";
+	else switch (tiling) {
 	case I915_TILING_NONE:
-		return "linear";
+		tiling_str = "linear";
+		break;
 	case I915_TILING_X:
-		return "x-tiled";
+		tiling_str = "x-tiled";
+		break;
 	case I915_TILING_Y:
-		return compression == I915_COMPRESSION_RENDER ? "y-tiled-ccs" :
-								"y-tiled";
+		tiling_str = "y-tiled";
+		break;
 	case I915_TILING_Yf:
-		return compression == I915_COMPRESSION_RENDER ? "yf-tiled-ccs" :
-								"yf-tiled";
+		tiling_str = "yf-tiled";
+		break;
+	default:
+		igt_assert(0);
 	}
+
+	switch (compression) {
+	case I915_COMPRESSION_NONE:
+		compression_str = "";
+		break;
+	case I915_COMPRESSION_RENDER:
+		compression_str = "ccs";
+		break;
+	default:
+		igt_assert(0);
+	}
+
+	snprintf(buf, buf_size, "%s%s%s",
+		 tiling_str, compression_str[0] ? "-" : "", compression_str);
 }
 
 igt_main_args("da", NULL, help_str, opt_handler, NULL)
@@ -811,6 +883,13 @@ igt_main_args("da", NULL, help_str, opt_handler, NULL)
 		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
 		  SOURCE_MIXED_TILED, },
 
+		{ I915_TILING_NONE,		I915_TILING_Y,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_RENDER,
+		  SOURCE_MIXED_TILED },
+		{ I915_TILING_NONE,		I915_TILING_Yf,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_RENDER,
+		  SOURCE_MIXED_TILED },
+
 		{ I915_TILING_Y,		I915_TILING_NONE,
 		  I915_COMPRESSION_RENDER,	I915_COMPRESSION_NONE,
 		  0, },
@@ -874,19 +953,25 @@ igt_main_args("da", NULL, help_str, opt_handler, NULL)
 
 	for (i = 0; i < ARRAY_SIZE(tests); i++) {
 		const struct test_desc *t = &tests[i];
-		const char *src_mode = buf_mode_str(t->src_tiling,
-						    t->src_compression);
-		const char *dst_mode = buf_mode_str(t->dst_tiling,
-						    t->dst_compression);
+		char src_mode[32];
+		char dst_mode[32];
 		const bool src_mixed_tiled = t->flags & SOURCE_MIXED_TILED;
 
+		buf_mode_to_str(t->src_tiling, src_mixed_tiled,
+				t->src_compression, src_mode, sizeof(src_mode));
+		buf_mode_to_str(t->dst_tiling, false,
+				t->dst_compression, dst_mode, sizeof(dst_mode));
+
 		igt_describe_f("Test render_copy() from a %s to a %s buffer.",
 			       src_mode, dst_mode);
 
+		/* Preserve original test names */
+		if (src_mixed_tiled &&
+		    t->dst_compression == I915_COMPRESSION_NONE)
+			src_mode[0] = '\0';
+
 		igt_subtest_f("%s%s%s",
-			      src_mixed_tiled ? "" : src_mode,
-			      src_mixed_tiled ? "" : "-to-",
-			      dst_mode)
+			      src_mode, src_mode[0] ? "-to-" : "", dst_mode)
 			test(&data,
 			     t->src_tiling, t->dst_tiling,
 			     t->src_compression, t->dst_compression,
-- 
2.17.1



More information about the Intel-gfx-trybot mailing list