public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Brian Welty <brian.welty@intel.com>
Subject: [igt-dev] [PATCH v2 6/6] tests/gem_render_copy: Add media compression subtests
Date: Wed,  4 Dec 2019 15:50:49 +0200	[thread overview]
Message-ID: <20191204135049.8815-1-imre.deak@intel.com> (raw)
In-Reply-To: <20191129103843.5765-7-imre.deak@intel.com>

Add subtests using the vebox copy function to test the blit
functionality involving media compressed source and destination buffers.

These cover all the source and destination tiling formats supported by
the vebox engine and validate the buffer sharing between the render and
vebox engine (a render compressed buffer used by the vebox engine and a
media compressed buffer used by the render engine).

v2:
- Rebase on latest igt.
  Simplify the condition for enabling media compression in the surface
  state.

Cc: Mika Kahola <mika.kahola@intel.com>
Cc: Brian Welty <brian.welty@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 lib/gen9_render.h            |  44 ++++++++----
 lib/rendercopy_gen9.c        |  14 ++--
 tests/i915/gem_render_copy.c | 127 ++++++++++++++++++++++++++++++++++-
 3 files changed, 162 insertions(+), 23 deletions(-)

diff --git a/lib/gen9_render.h b/lib/gen9_render.h
index ab99563a..6274e902 100644
--- a/lib/gen9_render.h
+++ b/lib/gen9_render.h
@@ -86,20 +86,36 @@ struct gen9_surface_state {
 		uint32_t pad1:1;
 	} ss6;
 
-	struct {
-		uint32_t resource_min_lod:12;
-
-		/* Only on Haswell */
-		uint32_t pad0:4;
-		uint32_t shader_chanel_select_a:3;
-		uint32_t shader_chanel_select_b:3;
-		uint32_t shader_chanel_select_g:3;
-		uint32_t shader_chanel_select_r:3;
-
-		uint32_t alpha_clear_color:1;
-		uint32_t blue_clear_color:1;
-		uint32_t green_clear_color:1;
-		uint32_t red_clear_color:1;
+	union {
+		struct {
+			uint32_t resource_min_lod:12;
+
+			/* Only on Haswell */
+			uint32_t pad0:4;
+			uint32_t shader_chanel_select_a:3;
+			uint32_t shader_chanel_select_b:3;
+			uint32_t shader_chanel_select_g:3;
+			uint32_t shader_chanel_select_r:3;
+
+			uint32_t alpha_clear_color:1;
+			uint32_t blue_clear_color:1;
+			uint32_t green_clear_color:1;
+			uint32_t red_clear_color:1;
+		} skl;
+		struct {
+			uint32_t resource_min_lod:12;
+
+			/* Only on Haswell */
+			uint32_t pad0:4;
+			uint32_t shader_chanel_select_a:3;
+			uint32_t shader_chanel_select_b:3;
+			uint32_t shader_chanel_select_g:3;
+			uint32_t shader_chanel_select_r:3;
+
+			uint32_t pad1:2;
+			uint32_t media_compression:1;
+			uint32_t pad2:1;
+		} tgl;
 	} ss7;
 
 	struct {
diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c
index bf9d2ee1..63b1023d 100644
--- a/lib/rendercopy_gen9.c
+++ b/lib/rendercopy_gen9.c
@@ -252,12 +252,14 @@ gen8_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf,
 	ss->ss2.width  = igt_buf_width(buf) - 1;
 	ss->ss3.pitch  = buf->stride - 1;
 
-	ss->ss7.shader_chanel_select_r = 4;
-	ss->ss7.shader_chanel_select_g = 5;
-	ss->ss7.shader_chanel_select_b = 6;
-	ss->ss7.shader_chanel_select_a = 7;
-
-	if (buf->aux.stride) {
+	ss->ss7.skl.shader_chanel_select_r = 4;
+	ss->ss7.skl.shader_chanel_select_g = 5;
+	ss->ss7.skl.shader_chanel_select_b = 6;
+	ss->ss7.skl.shader_chanel_select_a = 7;
+
+	if (buf->compression == I915_COMPRESSION_MEDIA)
+		ss->ss7.tgl.media_compression = 1;
+	else if (buf->aux.stride) {
 		ss->ss6.aux_mode = 0x5; /* AUX_CCS_E */
 		ss->ss6.aux_pitch = (buf->aux.stride / 128) - 1;
 
diff --git a/tests/i915/gem_render_copy.c b/tests/i915/gem_render_copy.c
index 9c36f38b..137c7c18 100644
--- a/tests/i915/gem_render_copy.c
+++ b/tests/i915/gem_render_copy.c
@@ -59,6 +59,7 @@ typedef struct {
 	drm_intel_bufmgr *bufmgr;
 	struct intel_batchbuffer *batch;
 	igt_render_copyfunc_t render_copy;
+	igt_vebox_copyfunc_t vebox_copy;
 } data_t;
 static int opt_dump_png = false;
 static int check_all_pixels = false;
@@ -595,6 +596,7 @@ static void scratch_buf_aux_check(data_t *data,
 }
 
 #define SOURCE_MIXED_TILED	1
+#define FORCE_VEBOX_DST_COPY	2
 
 static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 		 enum i915_compression src_compression,
@@ -634,6 +636,7 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 	const bool src_mixed_tiled = flags & SOURCE_MIXED_TILED;
 	const bool src_compressed = src_compression != I915_COMPRESSION_NONE;
 	const bool dst_compressed = dst_compression != I915_COMPRESSION_NONE;
+	const bool force_vebox_dst_copy = flags & FORCE_VEBOX_DST_COPY;
 
 	/*
 	 * The source tilings for mixed source tiling test cases are determined
@@ -641,6 +644,14 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 	 */
 	igt_assert(src_tiling == I915_TILING_NONE || !src_mixed_tiled);
 
+	/*
+	 * The vebox engine can produce only a media compressed or
+	 * uncompressed surface.
+	 */
+	igt_assert(!force_vebox_dst_copy ||
+		   dst_compression == I915_COMPRESSION_MEDIA ||
+		   dst_compression == I915_COMPRESSION_NONE);
+
 	/* no Yf before gen9 */
 	if (intel_gen(data->devid) < 9)
 		num_src--;
@@ -733,6 +744,10 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 					  &src_tiled, 0, 0, WIDTH, HEIGHT,
 					  &src_ccs,
 					  0, 0);
+		else if (src_compression == I915_COMPRESSION_MEDIA)
+			data->vebox_copy(data->batch,
+					 &src_tiled, WIDTH, HEIGHT,
+					 &src_ccs);
 
 		if (dst_compression == I915_COMPRESSION_RENDER) {
 			data->render_copy(data->batch, NULL,
@@ -746,6 +761,21 @@ static void test(data_t *data, uint32_t src_tiling, uint32_t dst_tiling,
 					  0, 0, WIDTH, HEIGHT,
 					  &dst,
 					  0, 0);
+		} else if (dst_compression == I915_COMPRESSION_MEDIA) {
+			data->vebox_copy(data->batch,
+					 src_compressed ? &src_ccs : &src_tiled,
+					 WIDTH, HEIGHT,
+					 &dst_ccs);
+
+			data->vebox_copy(data->batch,
+					 &dst_ccs,
+					 WIDTH, HEIGHT,
+					 &dst);
+		} else if (force_vebox_dst_copy) {
+			data->vebox_copy(data->batch,
+					 src_compressed ? &src_ccs : &src_tiled,
+					 WIDTH, HEIGHT,
+					 &dst);
 		} else {
 			data->render_copy(data->batch, NULL,
 					  src_compressed ? &src_ccs : &src_tiled,
@@ -854,6 +884,9 @@ static void buf_mode_to_str(uint32_t tiling, bool mixed_tiled,
 	case I915_COMPRESSION_RENDER:
 		compression_str = "ccs";
 		break;
+	case I915_COMPRESSION_MEDIA:
+		compression_str = "mc-ccs";
+		break;
 	default:
 		igt_assert(0);
 	}
@@ -929,6 +962,73 @@ igt_main_args("da", NULL, help_str, opt_handler, NULL)
 		{ I915_TILING_Yf,		I915_TILING_Y,
 		  I915_COMPRESSION_RENDER,	I915_COMPRESSION_RENDER,
 		  0, },
+
+		{ I915_TILING_NONE,		I915_TILING_Yf,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_NONE,		I915_TILING_Y,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+
+		{ I915_TILING_X,		I915_TILING_Yf,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_X,		I915_TILING_Y,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+
+		{ I915_TILING_Y,		I915_TILING_NONE,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Y,		I915_TILING_X,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Y,		I915_TILING_Y,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Y,		I915_TILING_Yf,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+
+		{ I915_TILING_Yf,		I915_TILING_NONE,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Yf,		I915_TILING_X,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Yf,		I915_TILING_Yf,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Yf,		I915_TILING_Y,
+		  I915_COMPRESSION_NONE,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+
+		{ I915_TILING_Y,		I915_TILING_Y,
+		  I915_COMPRESSION_MEDIA,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Yf,		I915_TILING_Yf,
+		  I915_COMPRESSION_MEDIA,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Y,		I915_TILING_Yf,
+		  I915_COMPRESSION_MEDIA,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+		{ I915_TILING_Yf,		I915_TILING_Y,
+		  I915_COMPRESSION_MEDIA,	I915_COMPRESSION_NONE,
+		  FORCE_VEBOX_DST_COPY, },
+
+		{ I915_TILING_Y,		I915_TILING_Y,
+		  I915_COMPRESSION_MEDIA,	I915_COMPRESSION_RENDER,
+		  0, },
+		{ I915_TILING_Y,		I915_TILING_Yf,
+		  I915_COMPRESSION_MEDIA,	I915_COMPRESSION_RENDER,
+		  0, },
+
+		{ I915_TILING_Y,		I915_TILING_Y,
+		  I915_COMPRESSION_RENDER,	I915_COMPRESSION_MEDIA,
+		  0, },
+		{ I915_TILING_Y,		I915_TILING_Yf,
+		  I915_COMPRESSION_RENDER,	I915_COMPRESSION_MEDIA,
+		  0, },
 	};
 	int i;
 
@@ -946,6 +1046,8 @@ igt_main_args("da", NULL, help_str, opt_handler, NULL)
 		igt_require_f(data.render_copy,
 			      "no render-copy function\n");
 
+		data.vebox_copy = igt_get_vebox_copyfunc(data.devid);
+
 		data.batch = intel_batchbuffer_alloc(data.bufmgr, data.devid);
 		igt_assert(data.batch);
 
@@ -957,13 +1059,25 @@ igt_main_args("da", NULL, help_str, opt_handler, NULL)
 		char src_mode[32];
 		char dst_mode[32];
 		const bool src_mixed_tiled = t->flags & SOURCE_MIXED_TILED;
+		const bool force_vebox_dst_copy = t->flags & FORCE_VEBOX_DST_COPY;
+		const bool vebox_copy_used =
+			t->src_compression == I915_COMPRESSION_MEDIA ||
+			t->dst_compression == I915_COMPRESSION_MEDIA ||
+			force_vebox_dst_copy;
+		const bool render_copy_used =
+			!vebox_copy_used ||
+			t->src_compression == I915_COMPRESSION_RENDER ||
+			t->dst_compression == I915_COMPRESSION_RENDER;
 
 		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.",
+		igt_describe_f("Test %s%s%s from a %s to a %s buffer.",
+			       render_copy_used ? "render_copy()" : "",
+			       render_copy_used && vebox_copy_used ? " and " : "",
+			       vebox_copy_used ? "vebox_copy()" : "",
 			       src_mode, dst_mode);
 
 		/* Preserve original test names */
@@ -971,12 +1085,19 @@ igt_main_args("da", NULL, help_str, opt_handler, NULL)
 		    t->dst_compression == I915_COMPRESSION_NONE)
 			src_mode[0] = '\0';
 
-		igt_subtest_f("%s%s%s",
-			      src_mode, src_mode[0] ? "-to-" : "", dst_mode)
+		igt_subtest_f("%s%s%s%s",
+			      src_mode,
+			      src_mode[0] ? "-to-" : "",
+			      force_vebox_dst_copy ? "vebox-" : "",
+			      dst_mode) {
+			igt_require_f(data.vebox_copy || !vebox_copy_used,
+				      "no vebox-copy function\n");
+
 			test(&data,
 			     t->src_tiling, t->dst_tiling,
 			     t->src_compression, t->dst_compression,
 			     t->flags);
+		}
 	}
 
 	igt_fixture {
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2019-12-04 13:50 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-29 10:38 [igt-dev] [PATCH i-g-t 0/6] lib: Add tests validating media compressed surfaces Imre Deak
2019-11-29 10:38 ` [igt-dev] [PATCH i-g-t 1/6] tests/gem_render_copy: Make subtest parameters more explicit Imre Deak
2019-12-03 11:52   ` Kahola, Mika
2019-11-29 10:38 ` [igt-dev] [PATCH i-g-t 2/6] tests/gem_render_copy: Separate out mixed tiled ccs subtests Imre Deak
2019-12-03 14:31   ` Kahola, Mika
2019-11-29 10:38 ` [igt-dev] [PATCH i-g-t 3/6] lib: Move aux pgtable state prepare/emit to intel_aux_pgtable.c Imre Deak
2019-12-03 14:50   ` Kahola, Mika
2019-11-29 10:38 ` [igt-dev] [PATCH i-g-t 4/6] lib/intel_aux_pgtable: Set MMIO remap for write the AUX pagedir reg Imre Deak
2019-12-04 12:35   ` Kahola, Mika
2019-11-29 10:38 ` [igt-dev] [PATCH i-g-t 5/6] lib: Add vebox copy support Imre Deak
2019-12-04 13:09   ` Kahola, Mika
2019-12-04 13:49   ` [igt-dev] [PATCH v2 " Imre Deak
2019-12-05 10:30     ` Kahola, Mika
2019-12-05  3:30   ` [igt-dev] [PATCH i-g-t " Bai, Guangyao
2019-12-05 13:49     ` Imre Deak
2019-11-29 10:38 ` [igt-dev] [PATCH i-g-t 6/6] tests/gem_render_copy: Add media compression subtests Imre Deak
2019-12-04 13:50   ` Imre Deak [this message]
2019-12-05 11:28     ` [igt-dev] [PATCH v2 " Kahola, Mika
2019-11-29 11:19 ` [igt-dev] ✓ Fi.CI.BAT: success for lib: Add tests validating media compressed surfaces Patchwork
2019-11-30  6:06 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2019-12-04 15:19 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib: Add tests validating media compressed surfaces (rev3) Patchwork
2019-12-04 15:59   ` Imre Deak
2019-12-09  8:36     ` Imre Deak
2019-12-09  9:55       ` Vudum, Lakshminarayana
2019-12-09  9:40 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191204135049.8815-1-imre.deak@intel.com \
    --to=imre.deak@intel.com \
    --cc=brian.welty@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox