All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header
@ 2019-03-05  1:47 Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy Dhinakaran Pandiyan
                   ` (13 more replies)
  0 siblings, 14 replies; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Dhinakaran Pandiyan

Create a gen9 specific struct so that the gen-9+ Yf/Ys tiling bits can be
added there.

Suggested-by: Katarzyna Dec <katarzyna.dec@intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 lib/gen8_render.h     |   1 -
 lib/gen9_render.h     | 120 ++++++++++++++++++++++++++++++++++++++++++
 lib/rendercopy_gen9.c |   2 +-
 3 files changed, 121 insertions(+), 2 deletions(-)

diff --git a/lib/gen8_render.h b/lib/gen8_render.h
index c62047d8..7e33bea2 100644
--- a/lib/gen8_render.h
+++ b/lib/gen8_render.h
@@ -10,7 +10,6 @@
 #define GEN8_3DSTATE_HIER_DEPTH_BUFFER		GEN4_3D(3, 0, 0x07)
 #define GEN8_3DSTATE_MULTISAMPLE		GEN4_3D(3, 0, 0x0d)
 # define GEN8_3DSTATE_MULTISAMPLE_NUMSAMPLES_2			(1 << 1)
-# define GEN9_3DSTATE_MULTISAMPLE_NUMSAMPLES_16			(4 << 1)
 
 #define GEN8_3DSTATE_WM_HZ_OP			GEN4_3D(3, 0, 0x52)
 
diff --git a/lib/gen9_render.h b/lib/gen9_render.h
index 77f4966c..48945019 100644
--- a/lib/gen9_render.h
+++ b/lib/gen9_render.h
@@ -13,4 +13,124 @@
 #define GEN9_PIPELINE_SELECTION_MASK		(3 << 8)
 #define GEN9_PIPELINE_SELECT			(GEN4_3D(1, 1, 4) | (3 << 8))
 
+#define GEN9_3DSTATE_MULTISAMPLE_NUMSAMPLES_16	(4 << 1)
+
+/* Shamelessly ripped from mesa */
+struct gen9_surface_state {
+	struct {
+		uint32_t cube_pos_z:1;
+		uint32_t cube_neg_z:1;
+		uint32_t cube_pos_y:1;
+		uint32_t cube_neg_y:1;
+		uint32_t cube_pos_x:1;
+		uint32_t cube_neg_x:1;
+		uint32_t media_boundary_pixel_mode:2;
+		uint32_t render_cache_read_write:1;
+		uint32_t smapler_l2_bypass:1;
+		uint32_t vert_line_stride_ofs:1;
+		uint32_t vert_line_stride:1;
+		uint32_t tiled_mode:2;
+		uint32_t horizontal_alignment:2;
+		uint32_t vertical_alignment:2;
+		uint32_t surface_format:9;     /**< BRW_SURFACEFORMAT_x */
+		uint32_t pad0:1;
+		uint32_t is_array:1;
+		uint32_t surface_type:3;       /**< BRW_SURFACE_1D/2D/3D/CUBE */
+	} ss0;
+
+	struct {
+		uint32_t qpitch:15;
+		uint32_t pad1:4;
+		uint32_t base_mip_level:5;
+		uint32_t memory_object_control:7;
+		uint32_t pad0:1;
+	} ss1;
+
+	struct {
+		uint32_t width:14;
+		uint32_t pad1:2;
+		uint32_t height:14;
+		uint32_t pad0:2;
+	} ss2;
+
+	struct {
+		uint32_t pitch:18;
+		uint32_t pad:3;
+		uint32_t depth:11;
+	} ss3;
+
+	struct {
+		uint32_t minimum_array_element:27;
+		uint32_t pad0:5;
+	} ss4;
+
+	struct {
+		uint32_t mip_count:4;
+		uint32_t min_lod:4;
+		uint32_t pad3:6;
+		uint32_t coherency_type:1;
+		uint32_t pad2:5;
+		uint32_t ewa_disable_for_cube:1;
+		uint32_t y_offset:3;
+		uint32_t pad0:1;
+		uint32_t x_offset:7;
+	} ss5;
+
+	struct {
+		uint32_t aux_mode:3;
+		uint32_t aux_pitch:9;
+		uint32_t pad0:4;
+		uint32_t aux_qpitch:15;
+		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;
+	} ss7;
+
+	struct {
+		uint32_t base_addr;
+	} ss8;
+
+	struct {
+		uint32_t base_addr_hi;
+	} ss9;
+
+	struct {
+		uint32_t aux_base_addr;
+	} ss10;
+
+	struct {
+		uint32_t aux_base_addr_hi;
+	} ss11;
+
+	struct {
+		uint32_t hiz_depth_clear_value;
+	} ss12;
+
+	struct {
+		uint32_t reserved;
+	} ss13;
+
+	struct {
+		uint32_t reserved;
+	} ss14;
+
+	struct {
+		uint32_t reserved;
+	} ss15;
+};
+
 #endif
diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c
index e3d95a68..b21b43c0 100644
--- a/lib/rendercopy_gen9.c
+++ b/lib/rendercopy_gen9.c
@@ -176,7 +176,7 @@ gen6_render_flush(struct intel_batchbuffer *batch,
 static uint32_t
 gen8_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf,
 	      int is_dst) {
-	struct gen8_surface_state *ss;
+	struct gen9_surface_state *ss;
 	uint32_t write_domain, read_domain, offset;
 	int ret;
 
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
@ 2019-03-05  1:47 ` Dhinakaran Pandiyan
  2019-03-05 10:14   ` Katarzyna Dec
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling Dhinakaran Pandiyan
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Dhinakaran Pandiyan

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Set up the surface state accordingly to support Yf/Ys tiling.

From DK:
 Rebase.
 Move support to gen-9 surface state
Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
Cc: Katarzyna Dec <katarzyna.dec@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 lib/gen9_render.h     | 6 ++++--
 lib/rendercopy_gen9.c | 8 +++++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/lib/gen9_render.h b/lib/gen9_render.h
index 48945019..9ee5782b 100644
--- a/lib/gen9_render.h
+++ b/lib/gen9_render.h
@@ -67,9 +67,11 @@ struct gen9_surface_state {
 	struct {
 		uint32_t mip_count:4;
 		uint32_t min_lod:4;
-		uint32_t pad3:6;
+		uint32_t mip_tail_start_lod:4;
+		uint32_t pad3:2;
 		uint32_t coherency_type:1;
-		uint32_t pad2:5;
+		uint32_t pad2:3;
+		uint32_t trmode:2;
 		uint32_t ewa_disable_for_cube:1;
 		uint32_t y_offset:3;
 		uint32_t pad0:1;
diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c
index b21b43c0..2cf1ab16 100644
--- a/lib/rendercopy_gen9.c
+++ b/lib/rendercopy_gen9.c
@@ -204,9 +204,15 @@ gen8_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf,
 	ss->ss0.horizontal_alignment = 1; /* align 4 */
 	if (buf->tiling == I915_TILING_X)
 		ss->ss0.tiled_mode = 2;
-	else if (buf->tiling == I915_TILING_Y)
+	else if (buf->tiling != I915_TILING_NONE)
 		ss->ss0.tiled_mode = 3;
 
+	if (buf->tiling == I915_TILING_Yf)
+		ss->ss5.trmode = 1;
+	else if (buf->tiling == I915_TILING_Ys)
+		ss->ss5.trmode = 2;
+	ss->ss5.mip_tail_start_lod = 1; /* needed with trmode */
+
 	ss->ss8.base_addr = buf->bo->offset64;
 	ss->ss9.base_addr_hi = buf->bo->offset64 >> 32;
 
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy Dhinakaran Pandiyan
@ 2019-03-05  1:47 ` Dhinakaran Pandiyan
  2019-03-05 14:26   ` Katarzyna Dec
  2019-03-07  1:33   ` [igt-dev] [PATCH i-g-t v2 " Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 4/7] lib/igt_fb: Use rendercopy for rendering into compressed buffers Dhinakaran Pandiyan
                   ` (11 subsequent siblings)
  13 siblings, 2 replies; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Dhinakaran Pandiyan

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Let's test Yf tiling now that rendercopy can handle it.

v2: From DK
 Set bpp for Yf buffer and rebase.

Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
Cc: Katarzyna Dec <katarzyna.dec@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 tests/i915/gem_render_copy.c | 246 +++++++++++++++++++++++++++--------
 1 file changed, 195 insertions(+), 51 deletions(-)

diff --git a/tests/i915/gem_render_copy.c b/tests/i915/gem_render_copy.c
index 0cd4e50f..afe2df05 100644
--- a/tests/i915/gem_render_copy.c
+++ b/tests/i915/gem_render_copy.c
@@ -72,11 +72,85 @@ static const char *make_filename(const char *filename)
 	return buf;
 }
 
-static void *linear_copy(data_t *data, struct igt_buf *buf)
+static void *yf_ptr(void *ptr,
+		    unsigned int x, unsigned int y,
+		    unsigned int stride, unsigned int cpp)
 {
-	void *map, *linear;
+       x *= cpp;
+
+       return ptr +
+	       ((y & ~0x1f) * stride) +
+	       ((y & 0x10) * 64) +
+	       ((y & 0x8) * 32) +
+	       ((y & 0x7) * 16) +
+	       ((x & ~0x3f) * 32) +
+	       ((x & 0x20) * 16) +
+	       ((x & 0x10) * 8) +
+	       (x & 0xf);
+}
 
-	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
+static void copy_linear_to_yf(data_t *data, struct igt_buf *buf, const uint32_t *linear)
+{
+	int height = igt_buf_height(buf);
+	int width = igt_buf_width(buf);
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
+	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
+			    buf->bo->size, PROT_READ | PROT_WRITE);
+
+	for (int y = 0; y < height; y++) {
+		for (int x = 0; x < width; x++) {
+			uint32_t *ptr = yf_ptr(map, x, y, buf->stride, 4);
+
+			*ptr = linear[y * width + x];
+		}
+	}
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_yf_to_linear(data_t *data, struct igt_buf *buf, uint32_t *linear)
+{
+	int height = igt_buf_height(buf);
+	int width = igt_buf_width(buf);
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_CPU, 0);
+	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
+			    buf->bo->size, PROT_READ);
+
+	for (int y = 0; y < height; y++) {
+		for (int x = 0; x < width; x++) {
+			uint32_t *ptr = yf_ptr(map, x, y, buf->stride, 4);
+
+			linear[y * width + x] = *ptr;
+		}
+	}
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_linear_to_gtt(data_t *data, struct igt_buf *buf, const uint32_t *linear)
+{
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+
+	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
+			    buf->bo->size, PROT_READ | PROT_WRITE);
+
+	memcpy(map, linear, buf->bo->size);
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_gtt_to_linear(data_t *data, struct igt_buf *buf, uint32_t *linear)
+{
+	void *map;
 
 	gem_set_domain(data->drm_fd, buf->bo->handle,
 		       I915_GEM_DOMAIN_GTT, 0);
@@ -87,6 +161,18 @@ static void *linear_copy(data_t *data, struct igt_buf *buf)
 	igt_memcpy_from_wc(linear, map, buf->bo->size);
 
 	munmap(map, buf->bo->size);
+}
+
+static void *linear_copy(data_t *data, struct igt_buf *buf)
+{
+	void *linear;
+
+	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
+
+	if (buf->tiling == I915_TILING_Yf)
+		copy_yf_to_linear(data, buf, linear);
+	else
+		copy_gtt_to_linear(data, buf, linear);
 
 	return linear;
 }
@@ -173,7 +259,7 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
 	cairo_surface_t *surface;
 	cairo_pattern_t *pat;
 	cairo_t *cr;
-	void *map, *linear;
+	void *linear;
 
 	linear = linear_copy(data, buf);
 
@@ -216,15 +302,10 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
 
 	cairo_surface_destroy(surface);
 
-	gem_set_domain(data->drm_fd, buf->bo->handle,
-		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
-
-	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
-			    buf->bo->size, PROT_READ | PROT_WRITE);
-
-	memcpy(map, linear, buf->bo->size);
-
-	munmap(map, buf->bo->size);
+	if (buf->tiling == I915_TILING_Yf)
+		copy_linear_to_yf(data, buf, linear);
+	else
+		copy_linear_to_gtt(data, buf, linear);
 
 	free(linear);
 }
@@ -236,36 +317,59 @@ scratch_buf_copy(data_t *data,
 {
 	int width = igt_buf_width(dst);
 	int height  = igt_buf_height(dst);
-	uint32_t *linear_dst, *linear_src;
+	uint32_t *linear_dst;
 
 	igt_assert_eq(igt_buf_width(dst), igt_buf_width(src));
 	igt_assert_eq(igt_buf_height(dst), igt_buf_height(src));
 	igt_assert_eq(dst->bo->size, src->bo->size);
 
+	w = min(w, width - sx);
+	w = min(w, width - dx);
+
+	h = min(h, height - sy);
+	h = min(h, height - dy);
+
 	gem_set_domain(data->drm_fd, dst->bo->handle,
 		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
-	gem_set_domain(data->drm_fd, src->bo->handle,
-		       I915_GEM_DOMAIN_GTT, 0);
-
 	linear_dst = gem_mmap__gtt(data->drm_fd, dst->bo->handle,
 				   dst->bo->size, PROT_WRITE);
-	linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
-				   src->bo->size, PROT_READ);
 
-	w = min(w, width - sx);
-	w = min(w, width - dx);
+	if (src->tiling == I915_TILING_Yf) {
+		void *map;
 
-	h = min(h, height - sy);
-	h = min(h, height - dy);
+		gem_set_domain(data->drm_fd, src->bo->handle,
+			       I915_GEM_DOMAIN_CPU, 0);
+		map = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
+				    src->bo->size, PROT_READ);
+
+		for (int y = 0; y < h; y++) {
+			for (int x = 0; x < w; x++) {
+				const uint32_t *ptr = yf_ptr(map, sx+x, sy+y, src->stride, 4);
+
+				linear_dst[(dy+y) * width + dx+x] = *ptr;
+			}
+		}
+
+		munmap(map, src->bo->size);
+	} else {
+		uint32_t *linear_src;
+
+		gem_set_domain(data->drm_fd, src->bo->handle,
+			       I915_GEM_DOMAIN_GTT, 0);
 
-	for (int y = 0; y < h; y++) {
-		igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
-				   &linear_src[(sy+y) * width + sx],
-				   w * 4);
+		linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
+					   src->bo->size, PROT_READ);
+
+		for (int y = 0; y < h; y++) {
+			igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
+					   &linear_src[(sy+y) * width + sx],
+					   w * 4);
+		}
+
+		munmap(linear_src, src->bo->size);
 	}
 
 	munmap(linear_dst, dst->bo->size);
-	munmap(linear_src, src->bo->size);
 }
 
 static void scratch_buf_init(data_t *data, struct igt_buf *buf,
@@ -282,7 +386,8 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 		int size;
 
 		igt_require(intel_gen(data->devid) >= 9);
-		igt_assert_eq(tiling, I915_TILING_Y);
+		igt_assert(tiling == I915_TILING_Y ||
+			   tiling == I915_TILING_Yf);
 
 		buf->stride = ALIGN(width * 4, 128);
 		buf->size = buf->stride * height;
@@ -299,8 +404,21 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 
 		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
 
-		drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
-		igt_assert_eq(tiling, req_tiling);
+		if (tiling == I915_TILING_Y) {
+			drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
+			igt_assert_eq(tiling, req_tiling);
+		}
+	} else if (req_tiling == I915_TILING_Yf) {
+		int size;
+
+		buf->stride = ALIGN(width * 4, 128);
+		buf->size = buf->stride * height;
+		buf->tiling = tiling;
+		buf->bpp = 32;
+
+		size = buf->stride * ALIGN(height, 32);
+
+		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
 	} else {
 		buf->bo = drm_intel_bo_alloc_tiled(data->bufmgr, "",
 						   width, height, 4,
@@ -396,7 +514,7 @@ static void scratch_buf_aux_check(data_t *data,
 		     "Aux surface indicates that nothing was compressed\n");
 }
 
-static void test(data_t *data, uint32_t tiling, bool test_ccs)
+static void test(data_t *data, uint32_t tiling, uint64_t ccs_modifier)
 {
 	struct igt_buf dst, ccs, ref;
 	struct {
@@ -404,7 +522,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 		const char *filename;
 		uint32_t tiling;
 		int x, y;
-	} src[3] = {
+	} src[] = {
 		{
 			.filename = "source-linear.png",
 			.tiling = I915_TILING_NONE,
@@ -420,18 +538,31 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 			.tiling = I915_TILING_Y,
 			.x = WIDTH/2+1, .y = 1,
 		},
+		{
+			.filename = "source-yf-tiled.png",
+			.tiling = I915_TILING_Yf,
+			.x = 1, .y = 1,
+		},
 	};
 
 	int opt_dump_aub = igt_aub_dump_enabled();
+	int num_src = ARRAY_SIZE(src);
+
+	/* no Yf before gen9 */
+	if (intel_gen(data->devid) < 9)
+		num_src--;
+
+	if (tiling == I915_TILING_Yf || ccs_modifier)
+		igt_require(intel_gen(data->devid) >= 9);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT, src[i].tiling, false);
 	scratch_buf_init(data, &dst, WIDTH, HEIGHT, tiling, false);
-	if (test_ccs)
-		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, I915_TILING_Y, true);
+	if (ccs_modifier)
+		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, ccs_modifier, true);
 	scratch_buf_init(data, &ref, WIDTH, HEIGHT, I915_TILING_NONE, false);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_draw_pattern(data, &src[i].buf,
 					 0, 0, WIDTH, HEIGHT,
 					 0, 0, WIDTH, HEIGHT, true);
@@ -442,13 +573,13 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 	scratch_buf_copy(data,
 			 &dst, 0, 0, WIDTH, HEIGHT,
 			 &ref, 0, 0);
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_copy(data,
 				 &src[i].buf, WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
 				 &ref, src[i].x, src[i].y);
 
 	if (opt_dump_png) {
-		for (int i = 0; i < ARRAY_SIZE(src); i++)
+		for (int i = 0; i < num_src; i++)
 			scratch_buf_write_to_png(data, &src[i].buf, src[i].filename);
 		scratch_buf_write_to_png(data, &dst, "destination.png");
 		scratch_buf_write_to_png(data, &ref, "reference.png");
@@ -468,24 +599,24 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 	 *	 |dst|src|
 	 *	  -------
 	 */
-	if (test_ccs)
+	if (ccs_modifier)
 		data->render_copy(data->batch, NULL,
 				  &dst, 0, 0, WIDTH, HEIGHT,
 				  &ccs, 0, 0);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	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,
-				  test_ccs ? &ccs : &dst, src[i].x, src[i].y);
+				  ccs_modifier ? &ccs : &dst, src[i].x, src[i].y);
 
-	if (test_ccs)
+	if (ccs_modifier)
 		data->render_copy(data->batch, NULL,
 				  &ccs, 0, 0, WIDTH, HEIGHT,
 				  &dst, 0, 0);
 
 	if (opt_dump_png){
 		scratch_buf_write_to_png(data, &dst, "result.png");
-		if (test_ccs) {
+		if (ccs_modifier) {
 			scratch_buf_write_to_png(data, &ccs, "compressed.png");
 			scratch_buf_aux_write_to_png(data, &ccs, "compressed-aux.png");
 		}
@@ -505,7 +636,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 		scratch_buf_check(data, &dst, &ref, WIDTH - 10, HEIGHT - 10);
 	}
 
-	if (test_ccs)
+	if (ccs_modifier)
 		scratch_buf_aux_check(data, &ccs);
 }
 
@@ -546,18 +677,31 @@ int main(int argc, char **argv)
 	}
 
 	igt_subtest("linear")
-		test(&data, I915_TILING_NONE, false);
+		test(&data, I915_TILING_NONE, 0);
 	igt_subtest("x-tiled")
-		test(&data, I915_TILING_X, false);
+		test(&data, I915_TILING_X, 0);
 	igt_subtest("y-tiled")
-		test(&data, I915_TILING_Y, false);
+		test(&data, I915_TILING_Y, 0);
+	igt_subtest("yf-tiled")
+		test(&data, I915_TILING_Yf, 0);
 
 	igt_subtest("y-tiled-ccs-to-linear")
-		test(&data, I915_TILING_NONE, true);
+		test(&data, I915_TILING_NONE, I915_TILING_Y);
 	igt_subtest("y-tiled-ccs-to-x-tiled")
-		test(&data, I915_TILING_X, true);
+		test(&data, I915_TILING_X, I915_TILING_Y);
 	igt_subtest("y-tiled-ccs-to-y-tiled")
-		test(&data, I915_TILING_Y, true);
+		test(&data, I915_TILING_Y, I915_TILING_Y);
+	igt_subtest("y-tiled-ccs-to-yf-tiled")
+		test(&data, I915_TILING_Yf, I915_TILING_Y);
+
+	igt_subtest("yf-tiled-ccs-to-linear")
+		test(&data, I915_TILING_NONE, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-x-tiled")
+		test(&data, I915_TILING_X, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-y-tiled")
+		test(&data, I915_TILING_Y, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-yf-tiled")
+		test(&data, I915_TILING_Yf, I915_TILING_Yf);
 
 	igt_fixture {
 		intel_batchbuffer_free(data.batch);
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t 4/7] lib/igt_fb: Use rendercopy for rendering into compressed buffers
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling Dhinakaran Pandiyan
@ 2019-03-05  1:47 ` Dhinakaran Pandiyan
  2019-03-06 22:42   ` Clinton Taylor
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 5/7] lib/igt_fb: s/tiling/modifier/ where appropriate Dhinakaran Pandiyan
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Clinton Taylor, Dhinakaran Pandiyan

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Plug in rendercopy to the cairo surface stuff so that we can
generate compressed buffers with cairo.

v2: s/modifier_has_ccs/is_ccs_modifier/

v3: From DK
 Set buf.bpp when initializing and rebase.
v4: From DK
Fix Yf-tiled BGR formats

Cc: Clinton Taylor <clinton.a.taylor@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 lib/igt_fb.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 144 insertions(+), 11 deletions(-)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 9dca2a46..b480a0a1 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -299,6 +299,7 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
 		}
 		break;
 	case LOCAL_I915_FORMAT_MOD_Y_TILED:
+	case LOCAL_I915_FORMAT_MOD_Y_TILED_CCS:
 		igt_require_intel(fd);
 		if (intel_gen(intel_get_drm_devid(fd)) == 2) {
 			*width_ret = 128;
@@ -312,6 +313,7 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
 		}
 		break;
 	case LOCAL_I915_FORMAT_MOD_Yf_TILED:
+	case LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS:
 		igt_require_intel(fd);
 		switch (fb_bpp) {
 		case 8:
@@ -362,10 +364,19 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
 	}
 }
 
+static bool is_ccs_modifier(uint64_t modifier)
+{
+	return modifier == LOCAL_I915_FORMAT_MOD_Y_TILED_CCS ||
+		modifier == LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS;
+}
+
 static unsigned fb_plane_width(const struct igt_fb *fb, int plane)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
+	if (is_ccs_modifier(fb->tiling) && plane == 1)
+		return DIV_ROUND_UP(fb->width, 1024) * 128;
+
 	if (plane == 0)
 		return fb->width;
 
@@ -376,13 +387,19 @@ static unsigned fb_plane_bpp(const struct igt_fb *fb, int plane)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
-	return format->plane_bpp[plane];
+	if (is_ccs_modifier(fb->tiling) && plane == 1)
+		return 8;
+	else
+		return format->plane_bpp[plane];
 }
 
 static unsigned fb_plane_height(const struct igt_fb *fb, int plane)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
+	if (is_ccs_modifier(fb->tiling) && plane == 1)
+		return DIV_ROUND_UP(fb->height, 512) * 32;
+
 	if (plane == 0)
 		return fb->height;
 
@@ -393,7 +410,10 @@ static int fb_num_planes(const struct igt_fb *fb)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
-	return format->num_planes;
+	if (is_ccs_modifier(fb->tiling))
+		return 2;
+	else
+		return format->num_planes;
 }
 
 static void fb_init(struct igt_fb *fb,
@@ -561,8 +581,10 @@ uint64_t igt_fb_mod_to_tiling(uint64_t modifier)
 	case LOCAL_I915_FORMAT_MOD_X_TILED:
 		return I915_TILING_X;
 	case LOCAL_I915_FORMAT_MOD_Y_TILED:
+	case LOCAL_I915_FORMAT_MOD_Y_TILED_CCS:
 		return I915_TILING_Y;
 	case LOCAL_I915_FORMAT_MOD_Yf_TILED:
+	case LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS:
 		return I915_TILING_Yf;
 	default:
 		igt_assert(0);
@@ -1459,8 +1481,54 @@ struct fb_blit_upload {
 	int fd;
 	struct igt_fb *fb;
 	struct fb_blit_linear linear;
+	drm_intel_bufmgr *bufmgr;
+	struct intel_batchbuffer *batch;
 };
 
+static void init_buf(struct fb_blit_upload *blit,
+		     struct igt_buf *buf,
+		     const struct igt_fb *fb,
+		     const char *name)
+{
+	igt_assert_eq(fb->offsets[0], 0);
+
+	buf->bo = gem_handle_to_libdrm_bo(blit->bufmgr, blit->fd,
+					  name, fb->gem_handle);
+	buf->tiling = igt_fb_mod_to_tiling(fb->tiling);
+	buf->stride = fb->strides[0];
+	buf->bpp = fb->plane_bpp[0];
+	buf->size = fb->size;
+
+	if (is_ccs_modifier(fb->tiling)) {
+		igt_assert_eq(fb->strides[0] & 127, 0);
+		igt_assert_eq(fb->strides[1] & 127, 0);
+
+		buf->aux.offset = fb->offsets[1];
+		buf->aux.stride = fb->strides[1];
+	}
+}
+
+static void rendercopy(struct fb_blit_upload *blit,
+		       const struct igt_fb *dst_fb,
+		       const struct igt_fb *src_fb)
+{
+	struct igt_buf src = {}, dst = {};
+	igt_render_copyfunc_t render_copy =
+		igt_get_render_copyfunc(intel_get_drm_devid(blit->fd));
+
+	igt_require(render_copy);
+
+	igt_assert_eq(dst_fb->offsets[0], 0);
+	igt_assert_eq(src_fb->offsets[0], 0);
+
+	init_buf(blit, &src, src_fb, "cairo rendercopy src");
+	init_buf(blit, &dst, dst_fb, "cairo rendercopy dst");
+
+	render_copy(blit->batch, NULL,
+		    &src, 0, 0, dst_fb->plane_width[0], dst_fb->plane_height[0],
+		    &dst, 0, 0);
+}
+
 static void blitcopy(const struct igt_fb *dst_fb,
 		     const struct igt_fb *src_fb)
 {
@@ -1498,7 +1566,10 @@ static void free_linear_mapping(struct fb_blit_upload *blit)
 	gem_set_domain(fd, linear->fb.gem_handle,
 		       I915_GEM_DOMAIN_GTT, 0);
 
-	blitcopy(fb, &linear->fb);
+	if (blit->batch)
+		rendercopy(blit, fb, &linear->fb);
+	else
+		blitcopy(fb, &linear->fb);
 
 	gem_sync(fd, linear->fb.gem_handle);
 	gem_close(fd, linear->fb.gem_handle);
@@ -1515,8 +1586,26 @@ static void destroy_cairo_surface__blit(void *arg)
 	free(blit);
 }
 
-static void setup_linear_mapping(int fd, struct igt_fb *fb, struct fb_blit_linear *linear)
+static void destroy_cairo_surface__rendercopy(void *arg)
+{
+	struct fb_blit_upload *blit = arg;
+
+	blit->fb->cairo_surface = NULL;
+
+	free_linear_mapping(blit);
+
+	intel_batchbuffer_free(blit->batch);
+	drm_intel_bufmgr_destroy(blit->bufmgr);
+
+	free(blit);
+}
+
+static void setup_linear_mapping(struct fb_blit_upload *blit)
 {
+	int fd = blit->fd;
+	struct igt_fb *fb = blit->fb;
+	struct fb_blit_linear *linear = &blit->linear;
+
 	/*
 	 * We create a linear BO that we'll map for the CPU to write to (using
 	 * cairo). This linear bo will be then blitted to its final
@@ -1535,7 +1624,10 @@ static void setup_linear_mapping(int fd, struct igt_fb *fb, struct fb_blit_linea
 	gem_set_domain(fd, linear->fb.gem_handle,
 			I915_GEM_DOMAIN_GTT, 0);
 
-	blitcopy(&linear->fb, fb);
+	if (blit->batch)
+		rendercopy(blit, &linear->fb, fb);
+	else
+		blitcopy(&linear->fb, fb);
 
 	gem_sync(fd, linear->fb.gem_handle);
 
@@ -1552,12 +1644,12 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb)
 	struct fb_blit_upload *blit;
 	cairo_format_t cairo_format;
 
-	blit = malloc(sizeof(*blit));
+	blit = calloc(1, sizeof(*blit));
 	igt_assert(blit);
 
 	blit->fd = fd;
 	blit->fb = fb;
-	setup_linear_mapping(fd, fb, &blit->linear);
+	setup_linear_mapping(blit);
 
 	cairo_format = drm_format_to_cairo(fb->drm_format);
 	fb->cairo_surface =
@@ -1572,6 +1664,36 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb)
 				    blit, destroy_cairo_surface__blit);
 }
 
+static void create_cairo_surface__rendercopy(int fd, struct igt_fb *fb)
+{
+	struct fb_blit_upload *blit;
+	cairo_format_t cairo_format;
+
+	blit = calloc(1, sizeof(*blit));
+	igt_assert(blit);
+
+	blit->fd = fd;
+	blit->fb = fb;
+
+	blit->bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
+	blit->batch = intel_batchbuffer_alloc(blit->bufmgr,
+					      intel_get_drm_devid(fd));
+
+	setup_linear_mapping(blit);
+
+	cairo_format = drm_format_to_cairo(fb->drm_format);
+	fb->cairo_surface =
+		cairo_image_surface_create_for_data(blit->linear.map,
+						    cairo_format,
+						    fb->width, fb->height,
+						    blit->linear.fb.strides[0]);
+	fb->domain = I915_GEM_DOMAIN_GTT;
+
+	cairo_surface_set_user_data(fb->cairo_surface,
+				    (cairo_user_data_key_t *)create_cairo_surface__rendercopy,
+				    blit, destroy_cairo_surface__rendercopy);
+}
+
 /**
  * igt_dirty_fb:
  * @fd: open drm file descriptor
@@ -2337,7 +2459,7 @@ static void destroy_cairo_surface__convert(void *arg)
 
 static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 {
-	struct fb_convert_blit_upload *blit = malloc(sizeof(*blit));
+	struct fb_convert_blit_upload *blit = calloc(1, sizeof(*blit));
 	struct fb_convert cvt = { };
 	const struct format_desc_struct *f = lookup_drm_format(fb->drm_format);
 	unsigned drm_format;
@@ -2369,6 +2491,13 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 
 	blit->base.fd = fd;
 	blit->base.fb = fb;
+
+	if (is_ccs_modifier(fb->tiling)) {
+		blit->base.bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
+		blit->base.batch = intel_batchbuffer_alloc(blit->base.bufmgr,
+						   intel_get_drm_devid(fd));
+	}
+
 	blit->shadow_ptr = igt_fb_create_cairo_shadow_buffer(fd, drm_format,
 							     fb->width,
 							     fb->height,
@@ -2376,8 +2505,10 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 	igt_assert(blit->shadow_ptr);
 
 	if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED ||
-	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED) {
-		setup_linear_mapping(fd, fb, &blit->base.linear);
+	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED ||
+	    fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED_CCS ||
+	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS) {
+		setup_linear_mapping(&blit->base);
 	} else {
 		blit->base.linear.fb = *fb;
 		blit->base.linear.fb.gem_handle = 0;
@@ -2456,8 +2587,10 @@ cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb)
 		    ((f->cairo_id == CAIRO_FORMAT_INVALID) &&
 		     (f->pixman_id != PIXMAN_invalid)))
 			create_cairo_surface__convert(fd, fb);
+		else if (is_ccs_modifier(fb->tiling))
+			create_cairo_surface__rendercopy(fd, fb);
 		else if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED ||
-		    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED)
+			 fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED)
 			create_cairo_surface__blit(fd, fb);
 		else
 			create_cairo_surface__gtt(fd, fb);
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t 5/7] lib/igt_fb: s/tiling/modifier/ where appropriate
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (2 preceding siblings ...)
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 4/7] lib/igt_fb: Use rendercopy for rendering into compressed buffers Dhinakaran Pandiyan
@ 2019-03-05  1:47 ` Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 6/7] lib/igt_fb: Function to create a bo for passed in igt_fb Dhinakaran Pandiyan
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Clinton Taylor, Dhinakaran Pandiyan

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Rename the igt_fb.tiling to igt_fb.modifier to better reflect
what information it carries. Now it's clear whether we're talking
about a modifier or a i915 tiling thing.

Cc: Clinton Taylor <clinton.a.taylor@intel.com>
From DK:
Rebased on vc4 changes

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 lib/igt_fb.c    | 126 ++++++++++++++++++++++++------------------------
 lib/igt_fb.h    |  22 ++++-----
 tests/kms_ccs.c |   2 +-
 3 files changed, 75 insertions(+), 75 deletions(-)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index b480a0a1..db12a30d 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -261,7 +261,7 @@ static const struct format_desc_struct *lookup_drm_format(uint32_t drm_format)
 /**
  * igt_get_fb_tile_size:
  * @fd: the DRM file descriptor
- * @tiling: tiling layout of the framebuffer (as framebuffer modifier)
+ * @modifier: tiling layout of the framebuffer (as framebuffer modifier)
  * @fb_bpp: bits per pixel of the framebuffer
  * @width_ret: width of the tile in bytes
  * @height_ret: height of the tile in lines
@@ -269,17 +269,17 @@ static const struct format_desc_struct *lookup_drm_format(uint32_t drm_format)
  * This function returns width and height of a tile based on the given tiling
  * format.
  */
-void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
+void igt_get_fb_tile_size(int fd, uint64_t modifier, int fb_bpp,
 			  unsigned *width_ret, unsigned *height_ret)
 {
-	uint32_t vc4_tiling_param = 0;
+	uint32_t vc4_modifier_param = 0;
 
 	if (is_vc4_device(fd)) {
-		vc4_tiling_param = fourcc_mod_broadcom_param(tiling);
-		tiling = fourcc_mod_broadcom_mod(tiling);
+		vc4_modifier_param = fourcc_mod_broadcom_param(modifier);
+		modifier = fourcc_mod_broadcom_mod(modifier);
 	}
 
-	switch (tiling) {
+	switch (modifier) {
 	case LOCAL_DRM_FORMAT_MOD_NONE:
 		if (is_i915_device(fd))
 			*width_ret = 64;
@@ -342,22 +342,22 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
 	case DRM_FORMAT_MOD_BROADCOM_SAND32:
 		igt_require_vc4(fd);
 		*width_ret = 32;
-		*height_ret = vc4_tiling_param;
+		*height_ret = vc4_modifier_param;
 		break;
 	case DRM_FORMAT_MOD_BROADCOM_SAND64:
 		igt_require_vc4(fd);
 		*width_ret = 64;
-		*height_ret = vc4_tiling_param;
+		*height_ret = vc4_modifier_param;
 		break;
 	case DRM_FORMAT_MOD_BROADCOM_SAND128:
 		igt_require_vc4(fd);
 		*width_ret = 128;
-		*height_ret = vc4_tiling_param;
+		*height_ret = vc4_modifier_param;
 		break;
 	case DRM_FORMAT_MOD_BROADCOM_SAND256:
 		igt_require_vc4(fd);
 		*width_ret = 256;
-		*height_ret = vc4_tiling_param;
+		*height_ret = vc4_modifier_param;
 		break;
 	default:
 		igt_assert(false);
@@ -374,7 +374,7 @@ static unsigned fb_plane_width(const struct igt_fb *fb, int plane)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
-	if (is_ccs_modifier(fb->tiling) && plane == 1)
+	if (is_ccs_modifier(fb->modifier) && plane == 1)
 		return DIV_ROUND_UP(fb->width, 1024) * 128;
 
 	if (plane == 0)
@@ -387,7 +387,7 @@ static unsigned fb_plane_bpp(const struct igt_fb *fb, int plane)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
-	if (is_ccs_modifier(fb->tiling) && plane == 1)
+	if (is_ccs_modifier(fb->modifier) && plane == 1)
 		return 8;
 	else
 		return format->plane_bpp[plane];
@@ -397,7 +397,7 @@ static unsigned fb_plane_height(const struct igt_fb *fb, int plane)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
-	if (is_ccs_modifier(fb->tiling) && plane == 1)
+	if (is_ccs_modifier(fb->modifier) && plane == 1)
 		return DIV_ROUND_UP(fb->height, 512) * 32;
 
 	if (plane == 0)
@@ -410,7 +410,7 @@ static int fb_num_planes(const struct igt_fb *fb)
 {
 	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
 
-	if (is_ccs_modifier(fb->tiling))
+	if (is_ccs_modifier(fb->modifier))
 		return 2;
 	else
 		return format->num_planes;
@@ -431,7 +431,7 @@ static void fb_init(struct igt_fb *fb,
 
 	fb->width = width;
 	fb->height = height;
-	fb->tiling = modifier;
+	fb->modifier = modifier;
 	fb->drm_format = drm_format;
 	fb->fd = fd;
 	fb->num_planes = fb_num_planes(fb);
@@ -450,7 +450,7 @@ static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
 	uint32_t min_stride = fb->plane_width[plane] *
 		(fb->plane_bpp[plane] / 8);
 
-	if (fb->tiling != LOCAL_DRM_FORMAT_MOD_NONE &&
+	if (fb->modifier != LOCAL_DRM_FORMAT_MOD_NONE &&
 	    is_i915_device(fb->fd) &&
 	    intel_gen(intel_get_drm_devid(fb->fd)) <= 3) {
 		uint32_t stride;
@@ -470,7 +470,7 @@ static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
 	} else {
 		unsigned int tile_width, tile_height;
 
-		igt_get_fb_tile_size(fb->fd, fb->tiling, fb->plane_bpp[plane],
+		igt_get_fb_tile_size(fb->fd, fb->modifier, fb->plane_bpp[plane],
 				     &tile_width, &tile_height);
 
 		return ALIGN(min_stride, tile_width);
@@ -479,7 +479,7 @@ static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
 
 static uint64_t calc_plane_size(struct igt_fb *fb, int plane)
 {
-	if (fb->tiling != LOCAL_DRM_FORMAT_MOD_NONE &&
+	if (fb->modifier != LOCAL_DRM_FORMAT_MOD_NONE &&
 	    is_i915_device(fb->fd) &&
 	    intel_gen(intel_get_drm_devid(fb->fd)) <= 3) {
 		uint64_t min_size = (uint64_t) fb->strides[plane] *
@@ -501,7 +501,7 @@ static uint64_t calc_plane_size(struct igt_fb *fb, int plane)
 	} else {
 		unsigned int tile_width, tile_height;
 
-		igt_get_fb_tile_size(fb->fd, fb->tiling, fb->plane_bpp[plane],
+		igt_get_fb_tile_size(fb->fd, fb->modifier, fb->plane_bpp[plane],
 				     &tile_width, &tile_height);
 
 		/* Special case where the "tile height" represents a
@@ -540,19 +540,19 @@ static uint64_t calc_fb_size(struct igt_fb *fb)
  * @width: width of the framebuffer in pixels
  * @height: height of the framebuffer in pixels
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer (as framebuffer modifier)
+ * @modifier: tiling layout of the framebuffer (as framebuffer modifier)
  * @size_ret: returned size for the framebuffer
  * @stride_ret: returned stride for the framebuffer
  *
  * This function returns valid stride and size values for a framebuffer with the
  * specified parameters.
  */
-void igt_calc_fb_size(int fd, int width, int height, uint32_t drm_format, uint64_t tiling,
+void igt_calc_fb_size(int fd, int width, int height, uint32_t drm_format, uint64_t modifier,
 		      uint64_t *size_ret, unsigned *stride_ret)
 {
 	struct igt_fb fb;
 
-	fb_init(&fb, fd, width, height, drm_format, tiling,
+	fb_init(&fb, fd, width, height, drm_format, modifier,
 		IGT_COLOR_YCBCR_BT709, IGT_COLOR_YCBCR_LIMITED_RANGE);
 
 	fb.size = calc_fb_size(&fb);
@@ -682,7 +682,7 @@ static int create_bo_for_fb(struct igt_fb *fb)
 	 * specify a custom size or stride. Yet the caller is free to specify
 	 * them, so we need to make sure to use a device BO then.
 	 */
-	if (fb->tiling || fb->size || fb->strides[0] ||
+	if (fb->modifier || fb->size || fb->strides[0] ||
 	    (is_i915_device(fd) && igt_format_is_yuv(fb->drm_format)))
 		device_bo = true;
 
@@ -699,14 +699,14 @@ static int create_bo_for_fb(struct igt_fb *fb)
 		if (is_i915_device(fd)) {
 			fb->gem_handle = gem_create(fd, fb->size);
 			gem_set_tiling(fd, fb->gem_handle,
-				       igt_fb_mod_to_tiling(fb->tiling),
+				       igt_fb_mod_to_tiling(fb->modifier),
 				       fb->strides[0]);
 		} else if (is_vc4_device(fd)) {
 			fb->gem_handle = igt_vc4_create_bo(fd, fb->size);
 
-			if (fb->tiling == DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED)
+			if (fb->modifier == DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED)
 				igt_vc4_set_tiling(fd, fb->gem_handle,
-						   fb->tiling);
+						   fb->modifier);
 		} else {
 			igt_assert(false);
 		}
@@ -1103,7 +1103,7 @@ void igt_paint_image(cairo_t *cr, const char *filename,
  * @width: width of the framebuffer in pixel
  * @height: height of the framebuffer in pixel
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer (as framebuffer modifier)
+ * @modifier: tiling layout of the framebuffer (as framebuffer modifier)
  * @fb: pointer to an #igt_fb structure
  * @bo_size: size of the backing bo (0 for automatic size)
  * @bo_stride: stride of the backing bo (0 for automatic stride)
@@ -1120,7 +1120,7 @@ void igt_paint_image(cairo_t *cr, const char *filename,
  */
 unsigned int
 igt_create_fb_with_bo_size(int fd, int width, int height,
-			   uint32_t format, uint64_t tiling,
+			   uint32_t format, uint64_t modifier,
 			   struct igt_fb *fb, uint64_t bo_size,
 			   unsigned bo_stride)
 {
@@ -1129,7 +1129,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height,
 	enum igt_color_range color_range = IGT_COLOR_YCBCR_LIMITED_RANGE;
 	uint32_t flags = 0;
 
-	fb_init(fb, fd, width, height, format, tiling,
+	fb_init(fb, fd, width, height, format, modifier,
 		color_encoding, color_range);
 
 	for (int i = 0; i < fb->num_planes; i++)
@@ -1137,8 +1137,8 @@ igt_create_fb_with_bo_size(int fd, int width, int height,
 
 	fb->size = bo_size;
 
-	igt_debug("%s(width=%d, height=%d, format=0x%x, tiling=0x%"PRIx64", size=%"PRIu64")\n",
-		  __func__, width, height, format, tiling, bo_size);
+	igt_debug("%s(width=%d, height=%d, format=0x%x, modifier=0x%"PRIx64", size=%"PRIu64")\n",
+		  __func__, width, height, format, modifier, bo_size);
 
 	create_bo_for_fb(fb);
 	igt_assert(fb->gem_handle > 0);
@@ -1146,12 +1146,12 @@ igt_create_fb_with_bo_size(int fd, int width, int height,
 	igt_debug("%s(handle=%d, pitch=%d)\n",
 		  __func__, fb->gem_handle, fb->strides[0]);
 
-	if (fb->tiling || igt_has_fb_modifiers(fd))
+	if (fb->modifier || igt_has_fb_modifiers(fd))
 		flags = LOCAL_DRM_MODE_FB_MODIFIERS;
 
 	do_or_die(__kms_addfb(fb->fd, fb->gem_handle,
 			      fb->width, fb->height,
-			      fb->drm_format, fb->tiling,
+			      fb->drm_format, fb->modifier,
 			      fb->strides, fb->offsets, fb->num_planes, flags,
 			      &fb->fb_id));
 
@@ -1164,7 +1164,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height,
  * @width: width of the framebuffer in pixel
  * @height: height of the framebuffer in pixel
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer
+ * @modifier: tiling layout of the framebuffer
  * @fb: pointer to an #igt_fb structure
  *
  * This function allocates a gem buffer object suitable to back a framebuffer
@@ -1178,9 +1178,9 @@ igt_create_fb_with_bo_size(int fd, int width, int height,
  * The kms id of the created framebuffer.
  */
 unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
-			   uint64_t tiling, struct igt_fb *fb)
+			   uint64_t modifier, struct igt_fb *fb)
 {
-	return igt_create_fb_with_bo_size(fd, width, height, format, tiling, fb,
+	return igt_create_fb_with_bo_size(fd, width, height, format, modifier, fb,
 					  0, 0);
 }
 
@@ -1190,7 +1190,7 @@ unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
  * @width: width of the framebuffer in pixel
  * @height: height of the framebuffer in pixel
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer
+ * @modifier: tiling layout of the framebuffer
  * @r: red value to use as fill color
  * @g: green value to use as fill color
  * @b: blue value to use as fill color
@@ -1208,14 +1208,14 @@ unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
  * failure.
  */
 unsigned int igt_create_color_fb(int fd, int width, int height,
-				 uint32_t format, uint64_t tiling,
+				 uint32_t format, uint64_t modifier,
 				 double r, double g, double b,
 				 struct igt_fb *fb /* out */)
 {
 	unsigned int fb_id;
 	cairo_t *cr;
 
-	fb_id = igt_create_fb(fd, width, height, format, tiling, fb);
+	fb_id = igt_create_fb(fd, width, height, format, modifier, fb);
 	igt_assert(fb_id);
 
 	cr = igt_get_cairo_ctx(fd, fb);
@@ -1231,7 +1231,7 @@ unsigned int igt_create_color_fb(int fd, int width, int height,
  * @width: width of the framebuffer in pixel
  * @height: height of the framebuffer in pixel
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer
+ * @modifier: tiling layout of the framebuffer
  * @fb: pointer to an #igt_fb structure
  *
  * This function allocates a gem buffer object suitable to back a framebuffer
@@ -1246,13 +1246,13 @@ unsigned int igt_create_color_fb(int fd, int width, int height,
  * failure.
  */
 unsigned int igt_create_pattern_fb(int fd, int width, int height,
-				   uint32_t format, uint64_t tiling,
+				   uint32_t format, uint64_t modifier,
 				   struct igt_fb *fb /* out */)
 {
 	unsigned int fb_id;
 	cairo_t *cr;
 
-	fb_id = igt_create_fb(fd, width, height, format, tiling, fb);
+	fb_id = igt_create_fb(fd, width, height, format, modifier, fb);
 	igt_assert(fb_id);
 
 	cr = igt_get_cairo_ctx(fd, fb);
@@ -1268,7 +1268,7 @@ unsigned int igt_create_pattern_fb(int fd, int width, int height,
  * @width: width of the framebuffer in pixel
  * @height: height of the framebuffer in pixel
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer
+ * @modifier: tiling layout of the framebuffer
  * @r: red value to use as fill color
  * @g: green value to use as fill color
  * @b: blue value to use as fill color
@@ -1287,14 +1287,14 @@ unsigned int igt_create_pattern_fb(int fd, int width, int height,
  * failure.
  */
 unsigned int igt_create_color_pattern_fb(int fd, int width, int height,
-					 uint32_t format, uint64_t tiling,
+					 uint32_t format, uint64_t modifier,
 					 double r, double g, double b,
 					 struct igt_fb *fb /* out */)
 {
 	unsigned int fb_id;
 	cairo_t *cr;
 
-	fb_id = igt_create_fb(fd, width, height, format, tiling, fb);
+	fb_id = igt_create_fb(fd, width, height, format, modifier, fb);
 	igt_assert(fb_id);
 
 	cr = igt_get_cairo_ctx(fd, fb);
@@ -1311,7 +1311,7 @@ unsigned int igt_create_color_pattern_fb(int fd, int width, int height,
  * @width: width of the framebuffer in pixel or 0
  * @height: height of the framebuffer in pixel or 0
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer
+ * @modifier: tiling layout of the framebuffer
  * @filename: filename of the png image to draw
  * @fb: pointer to an #igt_fb structure
  *
@@ -1323,7 +1323,7 @@ unsigned int igt_create_color_pattern_fb(int fd, int width, int height,
  * failure.
  */
 unsigned int igt_create_image_fb(int fd, int width, int height,
-				 uint32_t format, uint64_t tiling,
+				 uint32_t format, uint64_t modifier,
 				 const char *filename,
 				 struct igt_fb *fb /* out */)
 {
@@ -1339,7 +1339,7 @@ unsigned int igt_create_image_fb(int fd, int width, int height,
 		height = cairo_image_surface_get_height(image);
 	cairo_surface_destroy(image);
 
-	fb_id = igt_create_fb(fd, width, height, format, tiling, fb);
+	fb_id = igt_create_fb(fd, width, height, format, modifier, fb);
 
 	cr = igt_get_cairo_ctx(fd, fb);
 	igt_paint_image(cr, filename, 0, 0, width, height);
@@ -1415,7 +1415,7 @@ static void stereo_fb_layout_from_mode(struct stereo_fb_layout *layout,
  * @drm_fd: open i915 drm file descriptor
  * @mode: A stereo 3D mode.
  * @format: drm fourcc pixel format code
- * @tiling: tiling layout of the framebuffer
+ * @modifier: tiling layout of the framebuffer
  *
  * Create a framebuffer for use with the stereo 3D mode specified by @mode.
  *
@@ -1424,7 +1424,7 @@ static void stereo_fb_layout_from_mode(struct stereo_fb_layout *layout,
  * failure.
  */
 unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode,
-				  uint32_t format, uint64_t tiling)
+				  uint32_t format, uint64_t modifier)
 {
 	struct stereo_fb_layout layout;
 	cairo_t *cr;
@@ -1433,7 +1433,7 @@ unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode,
 
 	stereo_fb_layout_from_mode(&layout, mode);
 	fb_id = igt_create_fb(drm_fd, layout.fb_width, layout.fb_height, format,
-			      tiling, &fb);
+			      modifier, &fb);
 	cr = igt_get_cairo_ctx(drm_fd, &fb);
 
 	igt_paint_image(cr, "1080p-left.png",
@@ -1494,12 +1494,12 @@ static void init_buf(struct fb_blit_upload *blit,
 
 	buf->bo = gem_handle_to_libdrm_bo(blit->bufmgr, blit->fd,
 					  name, fb->gem_handle);
-	buf->tiling = igt_fb_mod_to_tiling(fb->tiling);
+	buf->tiling = igt_fb_mod_to_tiling(fb->modifier);
 	buf->stride = fb->strides[0];
 	buf->bpp = fb->plane_bpp[0];
 	buf->size = fb->size;
 
-	if (is_ccs_modifier(fb->tiling)) {
+	if (is_ccs_modifier(fb->modifier)) {
 		igt_assert_eq(fb->strides[0] & 127, 0);
 		igt_assert_eq(fb->strides[1] & 127, 0);
 
@@ -1544,14 +1544,14 @@ static void blitcopy(const struct igt_fb *dst_fb,
 					   src_fb->gem_handle,
 					   src_fb->offsets[i],
 					   src_fb->strides[i],
-					   igt_fb_mod_to_tiling(src_fb->tiling),
+					   igt_fb_mod_to_tiling(src_fb->modifier),
 					   0, 0, /* src_x, src_y */
 					   dst_fb->plane_width[i], dst_fb->plane_height[i],
 					   dst_fb->plane_bpp[i],
 					   dst_fb->gem_handle,
 					   dst_fb->offsets[i],
 					   dst_fb->strides[i],
-					   igt_fb_mod_to_tiling(dst_fb->tiling),
+					   igt_fb_mod_to_tiling(dst_fb->modifier),
 					   0, 0 /* dst_x, dst_y */);
 	}
 }
@@ -2492,7 +2492,7 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 	blit->base.fd = fd;
 	blit->base.fb = fb;
 
-	if (is_ccs_modifier(fb->tiling)) {
+	if (is_ccs_modifier(fb->modifier)) {
 		blit->base.bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
 		blit->base.batch = intel_batchbuffer_alloc(blit->base.bufmgr,
 						   intel_get_drm_devid(fd));
@@ -2504,10 +2504,10 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 							     &blit->shadow_fb);
 	igt_assert(blit->shadow_ptr);
 
-	if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED ||
-	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED ||
-	    fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED_CCS ||
-	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS) {
+	if (fb->modifier == LOCAL_I915_FORMAT_MOD_Y_TILED ||
+	    fb->modifier == LOCAL_I915_FORMAT_MOD_Yf_TILED ||
+	    fb->modifier == LOCAL_I915_FORMAT_MOD_Y_TILED_CCS ||
+	    fb->modifier == LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS) {
 		setup_linear_mapping(&blit->base);
 	} else {
 		blit->base.linear.fb = *fb;
@@ -2587,10 +2587,10 @@ cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb)
 		    ((f->cairo_id == CAIRO_FORMAT_INVALID) &&
 		     (f->pixman_id != PIXMAN_invalid)))
 			create_cairo_surface__convert(fd, fb);
-		else if (is_ccs_modifier(fb->tiling))
+		else if (is_ccs_modifier(fb->modifier))
 			create_cairo_surface__rendercopy(fd, fb);
-		else if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED ||
-			 fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED)
+		else if (fb->modifier == LOCAL_I915_FORMAT_MOD_Y_TILED ||
+			 fb->modifier == LOCAL_I915_FORMAT_MOD_Yf_TILED)
 			create_cairo_surface__blit(fd, fb);
 		else
 			create_cairo_surface__gtt(fd, fb);
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index e1d885e2..24d40b18 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -53,7 +53,7 @@
  * @drm_format: DRM FOURCC code
  * @width: width in pixels
  * @height: height in pixels
- * @tiling: tiling mode as a DRM framebuffer modifier
+ * @modifier: tiling mode as a DRM framebuffer modifier
  * @size: size in bytes of the underlying backing storage
  * @cairo_surface: optionally attached cairo drawing surface
  * @domain: current domain for cache flushing tracking on i915.ko
@@ -76,7 +76,7 @@ typedef struct igt_fb {
 	int height;
 	enum igt_color_encoding color_encoding;
 	enum igt_color_range color_range;
-	uint64_t tiling;
+	uint64_t modifier;
 	uint64_t size;
 	cairo_surface_t *cairo_surface;
 	unsigned int domain;
@@ -108,34 +108,34 @@ enum igt_text_align {
 	align_hcenter	= 0x08,
 };
 
-void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
+void igt_get_fb_tile_size(int fd, uint64_t modifier, int fb_bpp,
 			  unsigned *width_ret, unsigned *height_ret);
-void igt_calc_fb_size(int fd, int width, int height, uint32_t format, uint64_t tiling,
+void igt_calc_fb_size(int fd, int width, int height, uint32_t format, uint64_t modifier,
 		      uint64_t *size_ret, unsigned *stride_ret);
 unsigned int
 igt_create_fb_with_bo_size(int fd, int width, int height,
-			   uint32_t format, uint64_t tiling,
+			   uint32_t format, uint64_t modifier,
 			   struct igt_fb *fb, uint64_t bo_size,
 			   unsigned bo_stride);
 unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
-			   uint64_t tiling, struct igt_fb *fb);
+			   uint64_t modifier, struct igt_fb *fb);
 unsigned int igt_create_color_fb(int fd, int width, int height,
-				 uint32_t format, uint64_t tiling,
+				 uint32_t format, uint64_t modifier,
 				 double r, double g, double b,
 				 struct igt_fb *fb /* out */);
 unsigned int igt_create_pattern_fb(int fd, int width, int height,
-				   uint32_t format, uint64_t tiling,
+				   uint32_t format, uint64_t modifier,
 				   struct igt_fb *fb /* out */);
 unsigned int igt_create_color_pattern_fb(int fd, int width, int height,
-					 uint32_t format, uint64_t tiling,
+					 uint32_t format, uint64_t modifier,
 					 double r, double g, double b,
 					 struct igt_fb *fb /* out */);
 unsigned int igt_create_image_fb(int drm_fd,  int width, int height,
-				 uint32_t format, uint64_t tiling,
+				 uint32_t format, uint64_t modifier,
 				 const char *filename,
 				 struct igt_fb *fb /* out */);
 unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode,
-				  uint32_t format, uint64_t tiling);
+				  uint32_t format, uint64_t modifier);
 unsigned int igt_fb_convert_with_stride(struct igt_fb *dst, struct igt_fb *src,
 					uint32_t dst_fourcc,
 					uint64_t dst_modifier,
diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
index 1ed2b4a0..42596a45 100644
--- a/tests/kms_ccs.c
+++ b/tests/kms_ccs.c
@@ -388,7 +388,7 @@ static void generate_fb(data_t *data, struct igt_fb *fb,
 	fb->width = f.width;
 	fb->height = f.height;
 	fb->strides[0] = f.pitches[0];
-	fb->tiling = f.modifier[0];
+	fb->modifier = f.modifier[0];
 	fb->size = size[0];
 	fb->cairo_surface = NULL;
 	fb->domain = 0;
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t 6/7] lib/igt_fb: Function to create a bo for passed in igt_fb
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (3 preceding siblings ...)
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 5/7] lib/igt_fb: s/tiling/modifier/ where appropriate Dhinakaran Pandiyan
@ 2019-03-05  1:47 ` Dhinakaran Pandiyan
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 7/7] tests/kms_ccs: Generate compressed surfaces with rendercopy Dhinakaran Pandiyan
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Clinton Taylor, Dhinakaran Pandiyan

In order to execute negative tests that validate fb creation, tests need to
be able to call the addfb ioctl themselves so that the arguments can be
manipulated. Add a library function to provide an initialized fb without
registering the fb with the kernel.

Cc: Clinton Taylor <clinton.a.taylor@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/igt_fb.c | 9 +++++++++
 lib/igt_fb.h | 3 +++
 2 files changed, 12 insertions(+)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index db12a30d..b00d839d 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -743,6 +743,15 @@ out:
 	return fb->gem_handle;
 }
 
+void igt_create_bo_for_fb(int fd, int width, int height,
+			  uint32_t format, uint64_t modifier,
+			  struct igt_fb *fb /* out */)
+{
+	fb_init(fb, fd, width, height, format, modifier,
+		IGT_COLOR_YCBCR_BT709, IGT_COLOR_YCBCR_LIMITED_RANGE);
+	create_bo_for_fb(fb);
+}
+
 /**
  * igt_create_bo_with_dimensions:
  * @fd: open drm file descriptor
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index 24d40b18..7667579b 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -147,6 +147,9 @@ int igt_dirty_fb(int fd, struct igt_fb *fb);
 void *igt_fb_map_buffer(int fd, struct igt_fb *fb);
 void igt_fb_unmap_buffer(struct igt_fb *fb, void *buffer);
 
+void igt_create_bo_for_fb(int fd, int width, int height,
+			  uint32_t format, uint64_t modifier,
+			  struct igt_fb *fb);
 int igt_create_bo_with_dimensions(int fd, int width, int height, uint32_t format,
 				  uint64_t modifier, unsigned stride,
 				  uint64_t *size_ret, unsigned *stride_ret,
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t 7/7] tests/kms_ccs: Generate compressed surfaces with rendercopy
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (4 preceding siblings ...)
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 6/7] lib/igt_fb: Function to create a bo for passed in igt_fb Dhinakaran Pandiyan
@ 2019-03-05  1:47 ` Dhinakaran Pandiyan
  2019-03-05  2:47 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Patchwork
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-05  1:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Clinton Taylor, Dhinakaran Pandiyan

lib/igt_fb.c now has capability to make use of rendercopy, which means
we do not have to handwrite compressed buffers.

v2: Make colors struct static (Ville)

Cc: Clinton Taylor <clinton.a.taylor@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_ccs.c | 202 ++++++++++++------------------------------------
 1 file changed, 49 insertions(+), 153 deletions(-)

diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
index 42596a45..a74bd706 100644
--- a/tests/kms_ccs.c
+++ b/tests/kms_ccs.c
@@ -60,13 +60,14 @@ typedef struct {
 	igt_pipe_crc_t *pipe_crc;
 } data_t;
 
-#define RED			0x00ff0000
-#define COMPRESSED_RED		0x0ff0000f
-#define GREEN			0x0000ff00
-#define COMPRESSED_GREEN	0x000ff00f
-
-#define CCS_UNCOMPRESSED	0x0
-#define CCS_COMPRESSED		0x55
+static const struct {
+	double r;
+	double g;
+	double b;
+} colors[2] = {
+	{1.0, 0.0, 0.0},
+	{0.0, 1.0, 0.0}
+};
 
 /*
  * Limit maximum used sprite plane width so this test will not mistakenly
@@ -192,104 +193,32 @@ static bool plane_has_format_with_ccs(data_t *data, igt_plane_t *plane, uint32_t
 	return false;
 }
 
-static void render_fb(data_t *data, uint32_t gem_handle, unsigned int size,
-		      enum test_fb_flags fb_flags,
-		      int height, unsigned int stride)
+static void addfb_init(struct igt_fb *fb, struct drm_mode_fb_cmd2 *f)
 {
-	uint32_t *ptr;
-	unsigned int half_height, half_size;
-	uint32_t uncompressed_color = data->plane ? GREEN : RED;
-	uint32_t compressed_color =
-		data->plane ? COMPRESSED_GREEN : COMPRESSED_RED;
-	uint32_t bad_color = RED;
 	int i;
 
-	ptr = gem_mmap__cpu(data->drm_fd, gem_handle, 0, size,
-			    PROT_READ | PROT_WRITE);
+	f->width = fb->width;
+	f->height = fb->height;
+	f->pixel_format = fb->drm_format;
+	f->flags = LOCAL_DRM_MODE_FB_MODIFIERS;
 
-	if (fb_flags & FB_COMPRESSED) {
-		/* In the compressed case, we want the top half of the
-		 * surface to be uncompressed and the bottom half to be
-		 * compressed.
-		 *
-		 * We need to cut the surface on a CCS cache-line boundary,
-		 * otherwise, we're going to be in trouble when we try to
-		 * generate CCS data for the surface.  A cache line in the
-		 * CCS is 16x16 cache-line-pairs in the main surface.  16
-		 * cache lines is 64 rows high.
-		 */
-		half_height = ALIGN(height, 128) / 2;
-		half_size = half_height * stride;
-		for (i = 0; i < size / 4; i++) {
-			if (i < half_size / 4)
-				ptr[i] = uncompressed_color;
-			else
-				ptr[i] = compressed_color;
-		}
-	} else {
-		/* When we're displaying the primary plane underneath a
-		 * sprite plane, cut out a 128 x 128 area (less than the sprite)
-		 * plane size which we paint red, so we know easily if it's
-		 * bad.
-		 */
-		for (i = 0; i < size / 4; i++) {
-			if ((fb_flags & FB_HAS_PLANE) &&
-			    (i / (stride / 4)) < 128 &&
-			    (i % (stride / 4)) < 128) {
-				ptr[i] = bad_color;
-			} else {
-				ptr[i] = uncompressed_color;
-			}
-		}
+	for (i = 0; i < fb->num_planes; i++) {
+		f->handles[i] = fb->gem_handle;
+		f->modifier[i] = fb->modifier;
+		f->pitches[i] = fb->strides[i];
+		f->offsets[i] = fb->offsets[i];
 	}
-
-	munmap(ptr, size);
-}
-
-static unsigned int
-y_tile_y_pos(unsigned int offset, unsigned int stride)
-{
-	unsigned int y_tiles, y;
-	y_tiles = (offset / 4096) / (stride / 128);
-	y = y_tiles * 32 + ((offset & 0x1f0) >> 4);
-	return y;
-}
-
-static void render_ccs(data_t *data, uint32_t gem_handle,
-		       uint32_t offset, uint32_t size,
-		       int height, unsigned int ccs_stride)
-{
-	unsigned int half_height, ccs_half_height;
-	uint8_t *ptr;
-	int i;
-
-	half_height = ALIGN(height, 128) / 2;
-	ccs_half_height = half_height / 16;
-
-	ptr = gem_mmap__cpu(data->drm_fd, gem_handle, offset, size,
-			    PROT_READ | PROT_WRITE);
-
-	for (i = 0; i < size; i++) {
-		if (y_tile_y_pos(i, ccs_stride) < ccs_half_height)
-			ptr[i] = CCS_UNCOMPRESSED;
-		else
-			ptr[i] = CCS_COMPRESSED;
-	}
-
-	munmap(ptr, size);
 }
 
 static void generate_fb(data_t *data, struct igt_fb *fb,
 			int width, int height,
 			enum test_fb_flags fb_flags)
 {
-	struct local_drm_mode_fb_cmd2 f = {};
-	unsigned int size[2];
+	struct drm_mode_fb_cmd2 f = {0};
+	uint32_t format;
 	uint64_t modifier;
+	cairo_t *cr;
 	int ret;
-	uint32_t ccs_handle;
-
-	memset(fb, 0, sizeof(*fb));
 
 	/* Use either compressed or Y-tiled to test. However, given the lack of
 	 * available bandwidth, we use linear for the primary plane when
@@ -303,74 +232,52 @@ static void generate_fb(data_t *data, struct igt_fb *fb,
 	else
 		modifier = 0;
 
-	f.flags = LOCAL_DRM_MODE_FB_MODIFIERS;
-	f.width = width;
-	f.height = height;
-
 	if (data->flags & TEST_BAD_PIXEL_FORMAT)
-		f.pixel_format = DRM_FORMAT_RGB565;
+		format = DRM_FORMAT_RGB565;
 	else
-		f.pixel_format = DRM_FORMAT_XRGB8888;
+		format = DRM_FORMAT_XRGB8888;
 
-	f.pitches[0] = ALIGN(width * 4, 128);
-	f.modifier[0] = modifier;
-	f.offsets[0] = 0;
-	size[0] = f.pitches[0] * ALIGN(height, 32);
+	igt_create_bo_for_fb(data->drm_fd, width, height, format, modifier, fb);
+	igt_assert(fb->gem_handle > 0);
 
-	if (fb_flags & FB_COMPRESSED) {
-		/* From the Sky Lake PRM, Vol 12, "Color Control Surface":
-		 *
-		 *    "The compression state of the cache-line pair is
-		 *    specified by 2 bits in the CCS.  Each CCS cache-line
-		 *    represents an area on the main surface of 16x16 sets
-		 *    of 128 byte Y-tiled cache-line-pairs. CCS is always Y
-		 *    tiled."
-		 *
-		 * A "cache-line-pair" for a Y-tiled surface is two
-		 * horizontally adjacent cache lines.  When operating in
-		 * bytes and rows, this gives us a scale-down factor of
-		 * 32x16.  Since the main surface has a 32-bit format, we
-		 * need to multiply width by 4 to get bytes.
-		 */
-		int ccs_width = ALIGN(width * 4, 32) / 32;
-		int ccs_height = ALIGN(height, 16) / 16;
-		int ccs_pitches = ALIGN(ccs_width * 1, 128);
-		int ccs_offsets = size[0];
+	addfb_init(fb, &f);
 
+	if (fb_flags & FB_COMPRESSED) {
 		if (fb_flags & FB_MISALIGN_AUX_STRIDE) {
 			igt_skip_on_f(width <= 1024,
 				      "FB already has the smallest possible stride\n");
-			ccs_pitches -= 64;
+			f.pitches[1] -= 64;
 		}
-		else if (fb_flags & FB_SMALL_AUX_STRIDE) {
+
+		if (fb_flags & FB_SMALL_AUX_STRIDE) {
 			igt_skip_on_f(width <= 1024,
 				      "FB already has the smallest possible stride\n");
-			ccs_pitches = ALIGN(ccs_width/2, 128);
+			f.pitches[1] = ALIGN(f.pitches[1]/2, 128);
 		}
 
-		size[1] = ccs_pitches * ALIGN(ccs_height, 32);
-
-		f.handles[0] = gem_create(data->drm_fd, size[0] + size[1]);
-		if (data->flags & TEST_BAD_CCS_HANDLE) {
-			/* Put the CCS buffer on a different BO. */
-			ccs_handle = gem_create(data->drm_fd, size[0] + size[1]);
-		} else
-			ccs_handle = f.handles[0];
+		if (fb_flags & FB_ZERO_AUX_STRIDE)
+			f.pitches[1] = 0;
 
-		if (!(data->flags & TEST_NO_AUX_BUFFER)) {
-			f.modifier[1] = modifier;
-			f.handles[1] = ccs_handle;
-			f.offsets[1] = ccs_offsets;
-			f.pitches[1] = (fb_flags & FB_ZERO_AUX_STRIDE)? 0:ccs_pitches;
+		/* Put the CCS buffer on a different BO. */
+		if (data->flags & TEST_BAD_CCS_HANDLE)
+			f.handles[1] = gem_create(data->drm_fd, fb->size);
 
-			render_ccs(data, f.handles[1], f.offsets[1], size[1],
-				   height, ccs_pitches);
+		if (data->flags & TEST_NO_AUX_BUFFER) {
+			f.handles[1] = 0;
+			f.modifier[1] = 0;
+			f.pitches[1] = 0;
+			f.offsets[1] = 0;
 		}
-	} 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]);
+	if (!(data->flags & TEST_BAD_PIXEL_FORMAT)) {
+		int c = !!data->plane;
+
+		cr = igt_get_cairo_ctx(data->drm_fd, fb);
+		igt_paint_color(cr, 0, 0, width, height,
+				colors[c].r, colors[c].g, colors[c].b);
+		igt_put_cairo_ctx(data->drm_fd, fb, cr);
+	}
 
 	ret = drmIoctl(data->drm_fd, LOCAL_DRM_IOCTL_MODE_ADDFB2, &f);
 	if (data->flags & TEST_FAIL_ON_ADDFB2) {
@@ -381,17 +288,6 @@ static void generate_fb(data_t *data, struct igt_fb *fb,
 		igt_assert_eq(ret, 0);
 
 	fb->fb_id = f.fb_id;
-	fb->fd = data->drm_fd;
-	fb->gem_handle = f.handles[0];
-	fb->is_dumb = false;
-	fb->drm_format = f.pixel_format;
-	fb->width = f.width;
-	fb->height = f.height;
-	fb->strides[0] = f.pitches[0];
-	fb->modifier = f.modifier[0];
-	fb->size = size[0];
-	fb->cairo_surface = NULL;
-	fb->domain = 0;
 }
 
 static bool try_config(data_t *data, enum test_fb_flags fb_flags,
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (5 preceding siblings ...)
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 7/7] tests/kms_ccs: Generate compressed surfaces with rendercopy Dhinakaran Pandiyan
@ 2019-03-05  2:47 ` Patchwork
  2019-03-05  8:43 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-05  2:47 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header
URL   : https://patchwork.freedesktop.org/series/57553/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5702 -> IGTPW_2554
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/57553/revisions/1/mbox/

Known issues
------------

  Here are the changes found in IGTPW_2554 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@amdgpu/amd_basic@userptr:
    - fi-kbl-8809g:       PASS -> DMESG-WARN [fdo#108965]

  * igt@i915_module_load@reload:
    - fi-blb-e6850:       PASS -> INCOMPLETE [fdo#107718]

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-bsw-kefka:       PASS -> SKIP [fdo#109271]

  * igt@i915_pm_rpm@basic-rte:
    - fi-bsw-kefka:       PASS -> FAIL [fdo#108800]

  * igt@kms_pipe_crc_basic@read-crc-pipe-a:
    - fi-byt-clapper:     PASS -> FAIL [fdo#107362]

  * igt@prime_vgem@basic-fence-flip:
    - fi-ilk-650:         PASS -> FAIL [fdo#104008]

  
#### Possible fixes ####

  * igt@i915_pm_rpm@module-reload:
    - fi-skl-6770hq:      FAIL [fdo#108511] -> PASS

  * igt@i915_selftest@live_execlists:
    - fi-apl-guc:         INCOMPLETE [fdo#103927] / [fdo#109720] -> PASS

  * igt@kms_busy@basic-flip-a:
    - fi-kbl-7567u:       SKIP [fdo#109271] / [fdo#109278] -> PASS +2
    - fi-gdg-551:         FAIL [fdo#103182] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104008]: https://bugs.freedesktop.org/show_bug.cgi?id=104008
  [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362
  [fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
  [fdo#108511]: https://bugs.freedesktop.org/show_bug.cgi?id=108511
  [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569
  [fdo#108800]: https://bugs.freedesktop.org/show_bug.cgi?id=108800
  [fdo#108965]: https://bugs.freedesktop.org/show_bug.cgi?id=108965
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109294]: https://bugs.freedesktop.org/show_bug.cgi?id=109294
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109720]: https://bugs.freedesktop.org/show_bug.cgi?id=109720


Participating hosts (44 -> 39)
------------------------------

  Additional (1): fi-icl-y 
  Missing    (6): fi-hsw-4770r fi-ilk-m540 fi-hsw-peppy fi-byt-squawks fi-bsw-cyan fi-bdw-samus 


Build changes
-------------

    * IGT: IGT_4870 -> IGTPW_2554

  CI_DRM_5702: 6e90cfc547f7145e1c3c057a8d5f117888e23d91 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2554: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2554/
  IGT_4870: ed944b45563c694dc6373bc48dc83b8ba7edb19f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@gem_render_copy@yf-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-linear
+igt@gem_render_copy@yf-tiled-ccs-to-x-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-y-tiled
+igt@gem_render_copy@y-tiled-ccs-to-yf-tiled

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2554/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (6 preceding siblings ...)
  2019-03-05  2:47 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Patchwork
@ 2019-03-05  8:43 ` Patchwork
  2019-03-05 10:12 ` [igt-dev] [PATCH i-g-t 1/7] " Katarzyna Dec
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-05  8:43 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header
URL   : https://patchwork.freedesktop.org/series/57553/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5702_full -> IGTPW_2554_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/57553/revisions/1/mbox/

New tests
---------

  New tests have been introduced between CI_DRM_5702_full and IGTPW_2554_full:

### New IGT tests (6) ###

  * igt@gem_render_copy@y-tiled-ccs-to-yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.29] s

  * igt@gem_render_copy@yf-tiled-ccs-to-linear:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-x-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-y-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  

Known issues
------------

  Here are the changes found in IGTPW_2554_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_schedule@promotion-bsd2:
    - shard-apl:          NOTRUN -> SKIP [fdo#109271] +4

  * igt@i915_pm_rpm@gem-execbuf-stress-extra-wait:
    - shard-snb:          NOTRUN -> SKIP [fdo#109271] +39

  * igt@i915_pm_rps@reset:
    - shard-glk:          PASS -> FAIL [fdo#102250]

  * igt@kms_atomic_transition@4x-modeset-transitions-nonblocking-fencing:
    - shard-snb:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +4

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
    - shard-apl:          PASS -> INCOMPLETE [fdo#103927]

  * igt@kms_busy@extended-modeset-hang-newfb-render-d:
    - shard-kbl:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +1

  * igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b:
    - shard-kbl:          PASS -> DMESG-WARN [fdo#107956] +1
    - shard-snb:          PASS -> DMESG-WARN [fdo#107956]
    - shard-hsw:          PASS -> DMESG-WARN [fdo#107956]

  * igt@kms_busy@extended-pageflip-hang-newfb-render-b:
    - shard-apl:          NOTRUN -> DMESG-WARN [fdo#107956]

  * igt@kms_ccs@pipe-a-crc-sprite-planes-basic:
    - shard-apl:          PASS -> FAIL [fdo#106510] / [fdo#108145]
    - shard-kbl:          PASS -> FAIL [fdo#107725] / [fdo#108145]

  * igt@kms_color@pipe-a-gamma:
    - shard-kbl:          PASS -> FAIL [fdo#104782]

  * igt@kms_concurrent@pipe-e:
    - shard-hsw:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +2

  * igt@kms_cursor_crc@cursor-128x128-random:
    - shard-apl:          PASS -> FAIL [fdo#103232] +3

  * igt@kms_cursor_crc@cursor-64x64-sliding:
    - shard-kbl:          PASS -> FAIL [fdo#103232] +1

  * igt@kms_cursor_crc@cursor-alpha-opaque:
    - shard-glk:          PASS -> FAIL [fdo#109350]

  * igt@kms_draw_crc@fill-fb:
    - shard-glk:          PASS -> FAIL [fdo#103184]

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
    - shard-apl:          PASS -> FAIL [fdo#103167]
    - shard-kbl:          PASS -> FAIL [fdo#103167]

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite:
    - shard-glk:          PASS -> FAIL [fdo#103167] +2

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-pwrite:
    - shard-kbl:          NOTRUN -> SKIP [fdo#109271] +19

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-glk:          NOTRUN -> SKIP [fdo#109271] +22

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
    - shard-kbl:          PASS -> INCOMPLETE [fdo#103665]

  * igt@kms_plane@pixel-format-pipe-c-planes-source-clamping:
    - shard-glk:          PASS -> FAIL [fdo#108948]

  * igt@kms_plane@plane-position-covered-pipe-a-planes:
    - shard-glk:          PASS -> FAIL [fdo#103166] +6

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
    - shard-apl:          PASS -> FAIL [fdo#103166] +1

  * igt@kms_vblank@pipe-b-ts-continuation-dpms-suspend:
    - shard-apl:          PASS -> FAIL [fdo#104894]

  * igt@perf_pmu@semaphore-wait-idle-vcs0:
    - shard-hsw:          NOTRUN -> SKIP [fdo#109271] +29

  
#### Possible fixes ####

  * igt@kms_atomic_transition@1x-modeset-transitions-nonblocking:
    - shard-apl:          FAIL [fdo#109660] -> PASS

  * igt@kms_busy@extended-modeset-hang-newfb-render-a:
    - shard-hsw:          DMESG-WARN [fdo#107956] -> PASS +1
    - shard-snb:          DMESG-WARN [fdo#107956] -> PASS

  * igt@kms_busy@extended-modeset-hang-newfb-render-c:
    - shard-kbl:          DMESG-WARN [fdo#107956] -> PASS +1

  * igt@kms_color@pipe-a-degamma:
    - shard-apl:          FAIL [fdo#104782] / [fdo#108145] -> PASS

  * igt@kms_color@pipe-c-ctm-max:
    - shard-kbl:          FAIL [fdo#108147] -> PASS
    - shard-apl:          FAIL [fdo#108147] -> PASS

  * igt@kms_cursor_crc@cursor-256x85-sliding:
    - shard-kbl:          FAIL [fdo#103232] -> PASS +1

  * igt@kms_cursor_crc@cursor-64x21-offscreen:
    - shard-hsw:          INCOMPLETE [fdo#103540] -> PASS

  * igt@kms_cursor_crc@cursor-64x21-random:
    - shard-apl:          FAIL [fdo#103232] -> PASS +4

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
    - shard-hsw:          FAIL [fdo#105767] -> PASS

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-glk:          FAIL [fdo#104873] -> PASS

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move:
    - shard-glk:          FAIL [fdo#103167] -> PASS +7

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff:
    - shard-apl:          FAIL [fdo#103167] -> PASS +1
    - shard-kbl:          FAIL [fdo#103167] -> PASS

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-none:
    - shard-glk:          FAIL [fdo#103166] -> PASS

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-y:
    - shard-apl:          FAIL [fdo#103166] -> PASS +2

  * igt@kms_setmode@basic:
    - shard-kbl:          FAIL [fdo#99912] -> PASS

  * igt@kms_vblank@pipe-a-ts-continuation-suspend:
    - shard-kbl:          FAIL [fdo#104894] -> PASS
    - shard-apl:          FAIL [fdo#104894] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#102250]: https://bugs.freedesktop.org/show_bug.cgi?id=102250
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103184]: https://bugs.freedesktop.org/show_bug.cgi?id=103184
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782
  [fdo#104873]: https://bugs.freedesktop.org/show_bug.cgi?id=104873
  [fdo#104894]: https://bugs.freedesktop.org/show_bug.cgi?id=104894
  [fdo#105767]: https://bugs.freedesktop.org/show_bug.cgi?id=105767
  [fdo#106510]: https://bugs.freedesktop.org/show_bug.cgi?id=106510
  [fdo#107725]: https://bugs.freedesktop.org/show_bug.cgi?id=107725
  [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108147]: https://bugs.freedesktop.org/show_bug.cgi?id=108147
  [fdo#108948]: https://bugs.freedesktop.org/show_bug.cgi?id=108948
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109350]: https://bugs.freedesktop.org/show_bug.cgi?id=109350
  [fdo#109660]: https://bugs.freedesktop.org/show_bug.cgi?id=109660
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (6 -> 5)
------------------------------

  Missing    (1): shard-skl 


Build changes
-------------

    * IGT: IGT_4870 -> IGTPW_2554
    * Piglit: piglit_4509 -> None

  CI_DRM_5702: 6e90cfc547f7145e1c3c057a8d5f117888e23d91 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2554: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2554/
  IGT_4870: ed944b45563c694dc6373bc48dc83b8ba7edb19f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2554/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (7 preceding siblings ...)
  2019-03-05  8:43 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2019-03-05 10:12 ` Katarzyna Dec
  2019-03-07  2:07 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2) Patchwork
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Katarzyna Dec @ 2019-03-05 10:12 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

On Mon, Mar 04, 2019 at 05:47:36PM -0800, Dhinakaran Pandiyan wrote:
> Create a gen9 specific struct so that the gen-9+ Yf/Ys tiling bits can be
> added there.
> 
> Suggested-by: Katarzyna Dec <katarzyna.dec@intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Thanks for this change.
Reviewed-by: Katarzyna Dec <katarzyna.dec@intel.com>

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

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy Dhinakaran Pandiyan
@ 2019-03-05 10:14   ` Katarzyna Dec
  2019-03-07  1:39     ` Pandiyan, Dhinakaran
  0 siblings, 1 reply; 23+ messages in thread
From: Katarzyna Dec @ 2019-03-05 10:14 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

On Mon, Mar 04, 2019 at 05:47:37PM -0800, Dhinakaran Pandiyan wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Set up the surface state accordingly to support Yf/Ys tiling.
> 
> From DK:
>  Rebase.
>  Move support to gen-9 surface state
> Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
> Cc: Katarzyna Dec <katarzyna.dec@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
LGTM!
Reviewed-by: Katarzyna Dec <katarzyna.dec@intel.com>
Kasia :)
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling Dhinakaran Pandiyan
@ 2019-03-05 14:26   ` Katarzyna Dec
  2019-03-07  0:58     ` Dhinakaran Pandiyan
  2019-03-07  1:33   ` [igt-dev] [PATCH i-g-t v2 " Dhinakaran Pandiyan
  1 sibling, 1 reply; 23+ messages in thread
From: Katarzyna Dec @ 2019-03-05 14:26 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, igt-dev

On Mon, Mar 04, 2019 at 05:47:38PM -0800, Dhinakaran Pandiyan wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Let's test Yf tiling now that rendercopy can handle it.
> 
> v2: From DK
>  Set bpp for Yf buffer and rebase.
> 
> Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
> Cc: Katarzyna Dec <katarzyna.dec@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  tests/i915/gem_render_copy.c | 246 +++++++++++++++++++++++++++--------
>  1 file changed, 195 insertions(+), 51 deletions(-)
> 
> diff --git a/tests/i915/gem_render_copy.c b/tests/i915/gem_render_copy.c
> index 0cd4e50f..afe2df05 100644
> --- a/tests/i915/gem_render_copy.c
> +++ b/tests/i915/gem_render_copy.c
> @@ -72,11 +72,85 @@ static const char *make_filename(const char *filename)
>  	return buf;
>  }
>  
> -static void *linear_copy(data_t *data, struct igt_buf *buf)
> +static void *yf_ptr(void *ptr,
> +		    unsigned int x, unsigned int y,
> +		    unsigned int stride, unsigned int cpp)
>  {
> -	void *map, *linear;
> +       x *= cpp;
> +
> +       return ptr +
> +	       ((y & ~0x1f) * stride) +
> +	       ((y & 0x10) * 64) +
> +	       ((y & 0x8) * 32) +
> +	       ((y & 0x7) * 16) +
> +	       ((x & ~0x3f) * 32) +
> +	       ((x & 0x20) * 16) +
> +	       ((x & 0x10) * 8) +
> +	       (x & 0xf);
> +}
I looked through documentation and these ^ values e.g. ~0x1f others x/y & ? are
still mysterious. Maybe you can document them somehow?

>  
> -	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
> +static void copy_linear_to_yf(data_t *data, struct igt_buf *buf, const uint32_t *linear)
It would be better to move 'const uin32_t *linear' to next line (aligned with
others).
> +{
> +	int height = igt_buf_height(buf);
> +	int width = igt_buf_width(buf);
> +	void *map;
> +
> +	gem_set_domain(data->drm_fd, buf->bo->handle,
> +		       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> +	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
> +			    buf->bo->size, PROT_READ | PROT_WRITE);
> +
> +	for (int y = 0; y < height; y++) {
> +		for (int x = 0; x < width; x++) {
> +			uint32_t *ptr = yf_ptr(map, x, y, buf->stride, 4);
Value '4' here is a cpp. Is it color per pixel? Maybe we can define this value
somehow? I want to avoid situation when there will be no people understanding
this code onboard.
> +
> +			*ptr = linear[y * width + x];
> +		}
> +	}
> +
> +	munmap(map, buf->bo->size);
> +}
> +
> +static void copy_yf_to_linear(data_t *data, struct igt_buf *buf, uint32_t *linear)
> +{
> +	int height = igt_buf_height(buf);
> +	int width = igt_buf_width(buf);
> +	void *map;
> +
> +	gem_set_domain(data->drm_fd, buf->bo->handle,
> +		       I915_GEM_DOMAIN_CPU, 0);
> +	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
> +			    buf->bo->size, PROT_READ);
> +
> +	for (int y = 0; y < height; y++) {
> +		for (int x = 0; x < width; x++) {
> +			uint32_t *ptr = yf_ptr(map, x, y, buf->stride, 4);
> +
> +			linear[y * width + x] = *ptr;
> +		}
> +	}
> +
> +	munmap(map, buf->bo->size);
> +}
> +
> +static void copy_linear_to_gtt(data_t *data, struct igt_buf *buf, const uint32_t *linear)
> +{
> +	void *map;
> +
> +	gem_set_domain(data->drm_fd, buf->bo->handle,
> +		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> +
> +	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
> +			    buf->bo->size, PROT_READ | PROT_WRITE);
> +
> +	memcpy(map, linear, buf->bo->size);
> +
> +	munmap(map, buf->bo->size);
> +}
> +
> +static void copy_gtt_to_linear(data_t *data, struct igt_buf *buf, uint32_t *linear)
> +{
> +	void *map;
>  
>  	gem_set_domain(data->drm_fd, buf->bo->handle,
>  		       I915_GEM_DOMAIN_GTT, 0);
> @@ -87,6 +161,18 @@ static void *linear_copy(data_t *data, struct igt_buf *buf)
>  	igt_memcpy_from_wc(linear, map, buf->bo->size);
>  
>  	munmap(map, buf->bo->size);
> +}
> +
> +static void *linear_copy(data_t *data, struct igt_buf *buf)
> +{
> +	void *linear;
> +
> +	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
There is not silly questions, I believe, what is '16' ^ above? Is this size
fixed somehow? I would prefer defining it in some way.
> +
> +	if (buf->tiling == I915_TILING_Yf)
> +		copy_yf_to_linear(data, buf, linear);
> +	else
> +		copy_gtt_to_linear(data, buf, linear);
>  
>  	return linear;
>  }
> @@ -173,7 +259,7 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
>  	cairo_surface_t *surface;
>  	cairo_pattern_t *pat;
>  	cairo_t *cr;
> -	void *map, *linear;
> +	void *linear;
>  
>  	linear = linear_copy(data, buf);
>  
> @@ -216,15 +302,10 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
>  
>  	cairo_surface_destroy(surface);
>  
> -	gem_set_domain(data->drm_fd, buf->bo->handle,
> -		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> -
> -	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
> -			    buf->bo->size, PROT_READ | PROT_WRITE);
> -
> -	memcpy(map, linear, buf->bo->size);
> -
> -	munmap(map, buf->bo->size);
> +	if (buf->tiling == I915_TILING_Yf)
> +		copy_linear_to_yf(data, buf, linear);
> +	else
> +		copy_linear_to_gtt(data, buf, linear);
>  
>  	free(linear);
>  }
> @@ -236,36 +317,59 @@ scratch_buf_copy(data_t *data,
>  {
>  	int width = igt_buf_width(dst);
>  	int height  = igt_buf_height(dst);
> -	uint32_t *linear_dst, *linear_src;
> +	uint32_t *linear_dst;
>  
>  	igt_assert_eq(igt_buf_width(dst), igt_buf_width(src));
>  	igt_assert_eq(igt_buf_height(dst), igt_buf_height(src));
>  	igt_assert_eq(dst->bo->size, src->bo->size);
>  
> +	w = min(w, width - sx);
> +	w = min(w, width - dx);
> +
> +	h = min(h, height - sy);
> +	h = min(h, height - dy);
> +
>  	gem_set_domain(data->drm_fd, dst->bo->handle,
>  		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> -	gem_set_domain(data->drm_fd, src->bo->handle,
> -		       I915_GEM_DOMAIN_GTT, 0);
> -
>  	linear_dst = gem_mmap__gtt(data->drm_fd, dst->bo->handle,
>  				   dst->bo->size, PROT_WRITE);
> -	linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
> -				   src->bo->size, PROT_READ);
>  
> -	w = min(w, width - sx);
> -	w = min(w, width - dx);
> +	if (src->tiling == I915_TILING_Yf) {
> +		void *map;
>  
> -	h = min(h, height - sy);
> -	h = min(h, height - dy);
> +		gem_set_domain(data->drm_fd, src->bo->handle,
> +			       I915_GEM_DOMAIN_CPU, 0);
> +		map = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
> +				    src->bo->size, PROT_READ);
> +
> +		for (int y = 0; y < h; y++) {
> +			for (int x = 0; x < w; x++) {
> +				const uint32_t *ptr = yf_ptr(map, sx+x, sy+y, src->stride, 4);
Same comment as above according '4'.
> +
> +				linear_dst[(dy+y) * width + dx+x] = *ptr;
> +			}
> +		}
> +
> +		munmap(map, src->bo->size);
> +	} else {
> +		uint32_t *linear_src;
> +
> +		gem_set_domain(data->drm_fd, src->bo->handle,
> +			       I915_GEM_DOMAIN_GTT, 0);
>  
> -	for (int y = 0; y < h; y++) {
> -		igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
> -				   &linear_src[(sy+y) * width + sx],
> -				   w * 4);
How can you make sure that w*4 is enough? (Again - this can be a silly
question). As I see below it can be connected with stride, is it?

Kasia
> +		linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
> +					   src->bo->size, PROT_READ);
> +
> +		for (int y = 0; y < h; y++) {
> +			igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
> +					   &linear_src[(sy+y) * width + sx],
> +					   w * 4);
> +		}
> +
> +		munmap(linear_src, src->bo->size);
>  	}
>  
>  	munmap(linear_dst, dst->bo->size);
> -	munmap(linear_src, src->bo->size);
>  }
>  
>  static void scratch_buf_init(data_t *data, struct igt_buf *buf,
> @@ -282,7 +386,8 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
>  		int size;
>  
>  		igt_require(intel_gen(data->devid) >= 9);
> -		igt_assert_eq(tiling, I915_TILING_Y);
> +		igt_assert(tiling == I915_TILING_Y ||
> +			   tiling == I915_TILING_Yf);
>  
>  		buf->stride = ALIGN(width * 4, 128);
>  		buf->size = buf->stride * height;
> @@ -299,8 +404,21 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
>  
>  		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
>  
> -		drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
> -		igt_assert_eq(tiling, req_tiling);
> +		if (tiling == I915_TILING_Y) {
> +			drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
> +			igt_assert_eq(tiling, req_tiling);
> +		}
> +	} else if (req_tiling == I915_TILING_Yf) {
> +		int size;
> +
> +		buf->stride = ALIGN(width * 4, 128);
> +		buf->size = buf->stride * height;
> +		buf->tiling = tiling;
> +		buf->bpp = 32;
> +
> +		size = buf->stride * ALIGN(height, 32);
> +
> +		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
>  	} else {
>  		buf->bo = drm_intel_bo_alloc_tiled(data->bufmgr, "",
>  						   width, height, 4,
> @@ -396,7 +514,7 @@ static void scratch_buf_aux_check(data_t *data,
>  		     "Aux surface indicates that nothing was compressed\n");
>  }
>  
> -static void test(data_t *data, uint32_t tiling, bool test_ccs)
> +static void test(data_t *data, uint32_t tiling, uint64_t ccs_modifier)
>  {
>  	struct igt_buf dst, ccs, ref;
>  	struct {
> @@ -404,7 +522,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
>  		const char *filename;
>  		uint32_t tiling;
>  		int x, y;
> -	} src[3] = {
> +	} src[] = {
>  		{
>  			.filename = "source-linear.png",
>  			.tiling = I915_TILING_NONE,
> @@ -420,18 +538,31 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
>  			.tiling = I915_TILING_Y,
>  			.x = WIDTH/2+1, .y = 1,
>  		},
> +		{
> +			.filename = "source-yf-tiled.png",
> +			.tiling = I915_TILING_Yf,
> +			.x = 1, .y = 1,
> +		},
>  	};
>  
>  	int opt_dump_aub = igt_aub_dump_enabled();
> +	int num_src = ARRAY_SIZE(src);
> +
> +	/* no Yf before gen9 */
> +	if (intel_gen(data->devid) < 9)
> +		num_src--;
> +
> +	if (tiling == I915_TILING_Yf || ccs_modifier)
> +		igt_require(intel_gen(data->devid) >= 9);
>  
> -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> +	for (int i = 0; i < num_src; i++)
>  		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT, src[i].tiling, false);
>  	scratch_buf_init(data, &dst, WIDTH, HEIGHT, tiling, false);
> -	if (test_ccs)
> -		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, I915_TILING_Y, true);
> +	if (ccs_modifier)
> +		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, ccs_modifier, true);
>  	scratch_buf_init(data, &ref, WIDTH, HEIGHT, I915_TILING_NONE, false);
>  
> -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> +	for (int i = 0; i < num_src; i++)
>  		scratch_buf_draw_pattern(data, &src[i].buf,
>  					 0, 0, WIDTH, HEIGHT,
>  					 0, 0, WIDTH, HEIGHT, true);
> @@ -442,13 +573,13 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
>  	scratch_buf_copy(data,
>  			 &dst, 0, 0, WIDTH, HEIGHT,
>  			 &ref, 0, 0);
> -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> +	for (int i = 0; i < num_src; i++)
>  		scratch_buf_copy(data,
>  				 &src[i].buf, WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
>  				 &ref, src[i].x, src[i].y);
>  
>  	if (opt_dump_png) {
> -		for (int i = 0; i < ARRAY_SIZE(src); i++)
> +		for (int i = 0; i < num_src; i++)
>  			scratch_buf_write_to_png(data, &src[i].buf, src[i].filename);
>  		scratch_buf_write_to_png(data, &dst, "destination.png");
>  		scratch_buf_write_to_png(data, &ref, "reference.png");
> @@ -468,24 +599,24 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
>  	 *	 |dst|src|
>  	 *	  -------
>  	 */
> -	if (test_ccs)
> +	if (ccs_modifier)
>  		data->render_copy(data->batch, NULL,
>  				  &dst, 0, 0, WIDTH, HEIGHT,
>  				  &ccs, 0, 0);
>  
> -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> +	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,
> -				  test_ccs ? &ccs : &dst, src[i].x, src[i].y);
> +				  ccs_modifier ? &ccs : &dst, src[i].x, src[i].y);
>  
> -	if (test_ccs)
> +	if (ccs_modifier)
>  		data->render_copy(data->batch, NULL,
>  				  &ccs, 0, 0, WIDTH, HEIGHT,
>  				  &dst, 0, 0);
>  
>  	if (opt_dump_png){
>  		scratch_buf_write_to_png(data, &dst, "result.png");
> -		if (test_ccs) {
> +		if (ccs_modifier) {
>  			scratch_buf_write_to_png(data, &ccs, "compressed.png");
>  			scratch_buf_aux_write_to_png(data, &ccs, "compressed-aux.png");
>  		}
> @@ -505,7 +636,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
>  		scratch_buf_check(data, &dst, &ref, WIDTH - 10, HEIGHT - 10);
>  	}
>  
> -	if (test_ccs)
> +	if (ccs_modifier)
>  		scratch_buf_aux_check(data, &ccs);
>  }
>  
> @@ -546,18 +677,31 @@ int main(int argc, char **argv)
>  	}
>  
>  	igt_subtest("linear")
> -		test(&data, I915_TILING_NONE, false);
> +		test(&data, I915_TILING_NONE, 0);
>  	igt_subtest("x-tiled")
> -		test(&data, I915_TILING_X, false);
> +		test(&data, I915_TILING_X, 0);
>  	igt_subtest("y-tiled")
> -		test(&data, I915_TILING_Y, false);
> +		test(&data, I915_TILING_Y, 0);
> +	igt_subtest("yf-tiled")
> +		test(&data, I915_TILING_Yf, 0);
>  
>  	igt_subtest("y-tiled-ccs-to-linear")
> -		test(&data, I915_TILING_NONE, true);
> +		test(&data, I915_TILING_NONE, I915_TILING_Y);
>  	igt_subtest("y-tiled-ccs-to-x-tiled")
> -		test(&data, I915_TILING_X, true);
> +		test(&data, I915_TILING_X, I915_TILING_Y);
>  	igt_subtest("y-tiled-ccs-to-y-tiled")
> -		test(&data, I915_TILING_Y, true);
> +		test(&data, I915_TILING_Y, I915_TILING_Y);
> +	igt_subtest("y-tiled-ccs-to-yf-tiled")
> +		test(&data, I915_TILING_Yf, I915_TILING_Y);
> +
> +	igt_subtest("yf-tiled-ccs-to-linear")
> +		test(&data, I915_TILING_NONE, I915_TILING_Yf);
> +	igt_subtest("yf-tiled-ccs-to-x-tiled")
> +		test(&data, I915_TILING_X, I915_TILING_Yf);
> +	igt_subtest("yf-tiled-ccs-to-y-tiled")
> +		test(&data, I915_TILING_Y, I915_TILING_Yf);
> +	igt_subtest("yf-tiled-ccs-to-yf-tiled")
> +		test(&data, I915_TILING_Yf, I915_TILING_Yf);
>  
>  	igt_fixture {
>  		intel_batchbuffer_free(data.batch);
> -- 
> 2.17.1
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 4/7] lib/igt_fb: Use rendercopy for rendering into compressed buffers
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 4/7] lib/igt_fb: Use rendercopy for rendering into compressed buffers Dhinakaran Pandiyan
@ 2019-03-06 22:42   ` Clinton Taylor
  0 siblings, 0 replies; 23+ messages in thread
From: Clinton Taylor @ 2019-03-06 22:42 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, igt-dev

Reviewed-by: Clint Taylor <Clinton.A.Taylor@intel.com>


-Clint


On 3/4/19 5:47 PM, Dhinakaran Pandiyan wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Plug in rendercopy to the cairo surface stuff so that we can
> generate compressed buffers with cairo.
>
> v2: s/modifier_has_ccs/is_ccs_modifier/
>
> v3: From DK
>   Set buf.bpp when initializing and rebase.
> v4: From DK
> Fix Yf-tiled BGR formats
>
> Cc: Clinton Taylor <clinton.a.taylor@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>   lib/igt_fb.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++----
>   1 file changed, 144 insertions(+), 11 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index 9dca2a46..b480a0a1 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -299,6 +299,7 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
>   		}
>   		break;
>   	case LOCAL_I915_FORMAT_MOD_Y_TILED:
> +	case LOCAL_I915_FORMAT_MOD_Y_TILED_CCS:
>   		igt_require_intel(fd);
>   		if (intel_gen(intel_get_drm_devid(fd)) == 2) {
>   			*width_ret = 128;
> @@ -312,6 +313,7 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
>   		}
>   		break;
>   	case LOCAL_I915_FORMAT_MOD_Yf_TILED:
> +	case LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS:
>   		igt_require_intel(fd);
>   		switch (fb_bpp) {
>   		case 8:
> @@ -362,10 +364,19 @@ void igt_get_fb_tile_size(int fd, uint64_t tiling, int fb_bpp,
>   	}
>   }
>   
> +static bool is_ccs_modifier(uint64_t modifier)
> +{
> +	return modifier == LOCAL_I915_FORMAT_MOD_Y_TILED_CCS ||
> +		modifier == LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS;
> +}
> +
>   static unsigned fb_plane_width(const struct igt_fb *fb, int plane)
>   {
>   	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
>   
> +	if (is_ccs_modifier(fb->tiling) && plane == 1)
> +		return DIV_ROUND_UP(fb->width, 1024) * 128;
> +
>   	if (plane == 0)
>   		return fb->width;
>   
> @@ -376,13 +387,19 @@ static unsigned fb_plane_bpp(const struct igt_fb *fb, int plane)
>   {
>   	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
>   
> -	return format->plane_bpp[plane];
> +	if (is_ccs_modifier(fb->tiling) && plane == 1)
> +		return 8;
> +	else
> +		return format->plane_bpp[plane];
>   }
>   
>   static unsigned fb_plane_height(const struct igt_fb *fb, int plane)
>   {
>   	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
>   
> +	if (is_ccs_modifier(fb->tiling) && plane == 1)
> +		return DIV_ROUND_UP(fb->height, 512) * 32;
> +
>   	if (plane == 0)
>   		return fb->height;
>   
> @@ -393,7 +410,10 @@ static int fb_num_planes(const struct igt_fb *fb)
>   {
>   	const struct format_desc_struct *format = lookup_drm_format(fb->drm_format);
>   
> -	return format->num_planes;
> +	if (is_ccs_modifier(fb->tiling))
> +		return 2;
> +	else
> +		return format->num_planes;
>   }
>   
>   static void fb_init(struct igt_fb *fb,
> @@ -561,8 +581,10 @@ uint64_t igt_fb_mod_to_tiling(uint64_t modifier)
>   	case LOCAL_I915_FORMAT_MOD_X_TILED:
>   		return I915_TILING_X;
>   	case LOCAL_I915_FORMAT_MOD_Y_TILED:
> +	case LOCAL_I915_FORMAT_MOD_Y_TILED_CCS:
>   		return I915_TILING_Y;
>   	case LOCAL_I915_FORMAT_MOD_Yf_TILED:
> +	case LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS:
>   		return I915_TILING_Yf;
>   	default:
>   		igt_assert(0);
> @@ -1459,8 +1481,54 @@ struct fb_blit_upload {
>   	int fd;
>   	struct igt_fb *fb;
>   	struct fb_blit_linear linear;
> +	drm_intel_bufmgr *bufmgr;
> +	struct intel_batchbuffer *batch;
>   };
>   
> +static void init_buf(struct fb_blit_upload *blit,
> +		     struct igt_buf *buf,
> +		     const struct igt_fb *fb,
> +		     const char *name)
> +{
> +	igt_assert_eq(fb->offsets[0], 0);
> +
> +	buf->bo = gem_handle_to_libdrm_bo(blit->bufmgr, blit->fd,
> +					  name, fb->gem_handle);
> +	buf->tiling = igt_fb_mod_to_tiling(fb->tiling);
> +	buf->stride = fb->strides[0];
> +	buf->bpp = fb->plane_bpp[0];
> +	buf->size = fb->size;
> +
> +	if (is_ccs_modifier(fb->tiling)) {
> +		igt_assert_eq(fb->strides[0] & 127, 0);
> +		igt_assert_eq(fb->strides[1] & 127, 0);
> +
> +		buf->aux.offset = fb->offsets[1];
> +		buf->aux.stride = fb->strides[1];
> +	}
> +}
> +
> +static void rendercopy(struct fb_blit_upload *blit,
> +		       const struct igt_fb *dst_fb,
> +		       const struct igt_fb *src_fb)
> +{
> +	struct igt_buf src = {}, dst = {};
> +	igt_render_copyfunc_t render_copy =
> +		igt_get_render_copyfunc(intel_get_drm_devid(blit->fd));
> +
> +	igt_require(render_copy);
> +
> +	igt_assert_eq(dst_fb->offsets[0], 0);
> +	igt_assert_eq(src_fb->offsets[0], 0);
> +
> +	init_buf(blit, &src, src_fb, "cairo rendercopy src");
> +	init_buf(blit, &dst, dst_fb, "cairo rendercopy dst");
> +
> +	render_copy(blit->batch, NULL,
> +		    &src, 0, 0, dst_fb->plane_width[0], dst_fb->plane_height[0],
> +		    &dst, 0, 0);
> +}
> +
>   static void blitcopy(const struct igt_fb *dst_fb,
>   		     const struct igt_fb *src_fb)
>   {
> @@ -1498,7 +1566,10 @@ static void free_linear_mapping(struct fb_blit_upload *blit)
>   	gem_set_domain(fd, linear->fb.gem_handle,
>   		       I915_GEM_DOMAIN_GTT, 0);
>   
> -	blitcopy(fb, &linear->fb);
> +	if (blit->batch)
> +		rendercopy(blit, fb, &linear->fb);
> +	else
> +		blitcopy(fb, &linear->fb);
>   
>   	gem_sync(fd, linear->fb.gem_handle);
>   	gem_close(fd, linear->fb.gem_handle);
> @@ -1515,8 +1586,26 @@ static void destroy_cairo_surface__blit(void *arg)
>   	free(blit);
>   }
>   
> -static void setup_linear_mapping(int fd, struct igt_fb *fb, struct fb_blit_linear *linear)
> +static void destroy_cairo_surface__rendercopy(void *arg)
> +{
> +	struct fb_blit_upload *blit = arg;
> +
> +	blit->fb->cairo_surface = NULL;
> +
> +	free_linear_mapping(blit);
> +
> +	intel_batchbuffer_free(blit->batch);
> +	drm_intel_bufmgr_destroy(blit->bufmgr);
> +
> +	free(blit);
> +}
> +
> +static void setup_linear_mapping(struct fb_blit_upload *blit)
>   {
> +	int fd = blit->fd;
> +	struct igt_fb *fb = blit->fb;
> +	struct fb_blit_linear *linear = &blit->linear;
> +
>   	/*
>   	 * We create a linear BO that we'll map for the CPU to write to (using
>   	 * cairo). This linear bo will be then blitted to its final
> @@ -1535,7 +1624,10 @@ static void setup_linear_mapping(int fd, struct igt_fb *fb, struct fb_blit_linea
>   	gem_set_domain(fd, linear->fb.gem_handle,
>   			I915_GEM_DOMAIN_GTT, 0);
>   
> -	blitcopy(&linear->fb, fb);
> +	if (blit->batch)
> +		rendercopy(blit, &linear->fb, fb);
> +	else
> +		blitcopy(&linear->fb, fb);
>   
>   	gem_sync(fd, linear->fb.gem_handle);
>   
> @@ -1552,12 +1644,12 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb)
>   	struct fb_blit_upload *blit;
>   	cairo_format_t cairo_format;
>   
> -	blit = malloc(sizeof(*blit));
> +	blit = calloc(1, sizeof(*blit));
>   	igt_assert(blit);
>   
>   	blit->fd = fd;
>   	blit->fb = fb;
> -	setup_linear_mapping(fd, fb, &blit->linear);
> +	setup_linear_mapping(blit);
>   
>   	cairo_format = drm_format_to_cairo(fb->drm_format);
>   	fb->cairo_surface =
> @@ -1572,6 +1664,36 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb)
>   				    blit, destroy_cairo_surface__blit);
>   }
>   
> +static void create_cairo_surface__rendercopy(int fd, struct igt_fb *fb)
> +{
> +	struct fb_blit_upload *blit;
> +	cairo_format_t cairo_format;
> +
> +	blit = calloc(1, sizeof(*blit));
> +	igt_assert(blit);
> +
> +	blit->fd = fd;
> +	blit->fb = fb;
> +
> +	blit->bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
> +	blit->batch = intel_batchbuffer_alloc(blit->bufmgr,
> +					      intel_get_drm_devid(fd));
> +
> +	setup_linear_mapping(blit);
> +
> +	cairo_format = drm_format_to_cairo(fb->drm_format);
> +	fb->cairo_surface =
> +		cairo_image_surface_create_for_data(blit->linear.map,
> +						    cairo_format,
> +						    fb->width, fb->height,
> +						    blit->linear.fb.strides[0]);
> +	fb->domain = I915_GEM_DOMAIN_GTT;
> +
> +	cairo_surface_set_user_data(fb->cairo_surface,
> +				    (cairo_user_data_key_t *)create_cairo_surface__rendercopy,
> +				    blit, destroy_cairo_surface__rendercopy);
> +}
> +
>   /**
>    * igt_dirty_fb:
>    * @fd: open drm file descriptor
> @@ -2337,7 +2459,7 @@ static void destroy_cairo_surface__convert(void *arg)
>   
>   static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
>   {
> -	struct fb_convert_blit_upload *blit = malloc(sizeof(*blit));
> +	struct fb_convert_blit_upload *blit = calloc(1, sizeof(*blit));
>   	struct fb_convert cvt = { };
>   	const struct format_desc_struct *f = lookup_drm_format(fb->drm_format);
>   	unsigned drm_format;
> @@ -2369,6 +2491,13 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
>   
>   	blit->base.fd = fd;
>   	blit->base.fb = fb;
> +
> +	if (is_ccs_modifier(fb->tiling)) {
> +		blit->base.bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
> +		blit->base.batch = intel_batchbuffer_alloc(blit->base.bufmgr,
> +						   intel_get_drm_devid(fd));
> +	}
> +
>   	blit->shadow_ptr = igt_fb_create_cairo_shadow_buffer(fd, drm_format,
>   							     fb->width,
>   							     fb->height,
> @@ -2376,8 +2505,10 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
>   	igt_assert(blit->shadow_ptr);
>   
>   	if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED ||
> -	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED) {
> -		setup_linear_mapping(fd, fb, &blit->base.linear);
> +	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED ||
> +	    fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED_CCS ||
> +	    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS) {
> +		setup_linear_mapping(&blit->base);
>   	} else {
>   		blit->base.linear.fb = *fb;
>   		blit->base.linear.fb.gem_handle = 0;
> @@ -2456,8 +2587,10 @@ cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb)
>   		    ((f->cairo_id == CAIRO_FORMAT_INVALID) &&
>   		     (f->pixman_id != PIXMAN_invalid)))
>   			create_cairo_surface__convert(fd, fb);
> +		else if (is_ccs_modifier(fb->tiling))
> +			create_cairo_surface__rendercopy(fd, fb);
>   		else if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED ||
> -		    fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED)
> +			 fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED)
>   			create_cairo_surface__blit(fd, fb);
>   		else
>   			create_cairo_surface__gtt(fd, fb);
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling
  2019-03-05 14:26   ` Katarzyna Dec
@ 2019-03-07  0:58     ` Dhinakaran Pandiyan
  2019-03-08  9:59       ` Katarzyna Dec
  0 siblings, 1 reply; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-07  0:58 UTC (permalink / raw)
  To: Katarzyna Dec, igt-dev

On Tue, 2019-03-05 at 15:26 +0100, Katarzyna Dec wrote:
> On Mon, Mar 04, 2019 at 05:47:38PM -0800, Dhinakaran Pandiyan wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Let's test Yf tiling now that rendercopy can handle it.
> > 
> > v2: From DK
> >  Set bpp for Yf buffer and rebase.
> > 
> > Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
> > Cc: Katarzyna Dec <katarzyna.dec@intel.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > ---
> >  tests/i915/gem_render_copy.c | 246 +++++++++++++++++++++++++++--
> > ------
> >  1 file changed, 195 insertions(+), 51 deletions(-)
> > 
> > diff --git a/tests/i915/gem_render_copy.c
> > b/tests/i915/gem_render_copy.c
> > index 0cd4e50f..afe2df05 100644
> > --- a/tests/i915/gem_render_copy.c
> > +++ b/tests/i915/gem_render_copy.c
> > @@ -72,11 +72,85 @@ static const char *make_filename(const char
> > *filename)
> >  	return buf;
> >  }
> >  
> > -static void *linear_copy(data_t *data, struct igt_buf *buf)
> > +static void *yf_ptr(void *ptr,
> > +		    unsigned int x, unsigned int y,
> > +		    unsigned int stride, unsigned int cpp)
> >  {
> > -	void *map, *linear;
> > +       x *= cpp;
> > +
> > +       return ptr +
> > +	       ((y & ~0x1f) * stride) +
> > +	       ((y & 0x10) * 64) +
> > +	       ((y & 0x8) * 32) +
> > +	       ((y & 0x7) * 16) +
> > +	       ((x & ~0x3f) * 32) +
> > +	       ((x & 0x20) * 16) +
> > +	       ((x & 0x10) * 8) +
> > +	       (x & 0xf);
> > +}
> 
> I looked through documentation and these ^ values e.g. ~0x1f others
> x/y & ? are
> still mysterious. Maybe you can document them somehow?
The code reflects the internal tiling layout for Yf, which is
documented in libdrm: include/drm/drm_fourcc.h. I don't see any
documentation for other tiling formats in IGT either, so not sure how
exactly you want me to document this. Suggestions welcome :)

But, I think it's better to do any additional documentation work
outside this series as this is delaying an ICL bug fix.

> 
> >  
> > -	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
> > +static void copy_linear_to_yf(data_t *data, struct igt_buf *buf,
> > const uint32_t *linear)
> 
> It would be better to move 'const uin32_t *linear' to next line
> (aligned with
> others).
> > +{
> > +	int height = igt_buf_height(buf);
> > +	int width = igt_buf_width(buf);
> > +	void *map;
> > +
> > +	gem_set_domain(data->drm_fd, buf->bo->handle,
> > +		       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> > +	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
> > +			    buf->bo->size, PROT_READ | PROT_WRITE);
> > +
> > +	for (int y = 0; y < height; y++) {
> > +		for (int x = 0; x < width; x++) {
> > +			uint32_t *ptr = yf_ptr(map, x, y, buf->stride,
> > 4);
> 
> Value '4' here is a cpp. Is it color per pixel? Maybe we can define
> this value
> somehow? I want to avoid situation when there will be no people
> understanding
> this code onboard.
Changing this to buf->bpp / 8, that should be more intuitive.

> > +
> > +			*ptr = linear[y * width + x];
> > +		}
> > +	}
> > +
> > +	munmap(map, buf->bo->size);
> > +}
> > +
> > +static void copy_yf_to_linear(data_t *data, struct igt_buf *buf,
> > uint32_t *linear)
> > +{
> > +	int height = igt_buf_height(buf);
> > +	int width = igt_buf_width(buf);
> > +	void *map;
> > +
> > +	gem_set_domain(data->drm_fd, buf->bo->handle,
> > +		       I915_GEM_DOMAIN_CPU, 0);
> > +	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
> > +			    buf->bo->size, PROT_READ);
> > +
> > +	for (int y = 0; y < height; y++) {
> > +		for (int x = 0; x < width; x++) {
> > +			uint32_t *ptr = yf_ptr(map, x, y, buf->stride,
> > 4);
> > +
> > +			linear[y * width + x] = *ptr;
> > +		}
> > +	}
> > +
> > +	munmap(map, buf->bo->size);
> > +}
> > +
> > +static void copy_linear_to_gtt(data_t *data, struct igt_buf *buf,
> > const uint32_t *linear)
> > +{
> > +	void *map;
> > +
> > +	gem_set_domain(data->drm_fd, buf->bo->handle,
> > +		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> > +
> > +	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
> > +			    buf->bo->size, PROT_READ | PROT_WRITE);
> > +
> > +	memcpy(map, linear, buf->bo->size);
> > +
> > +	munmap(map, buf->bo->size);
> > +}
> > +
> > +static void copy_gtt_to_linear(data_t *data, struct igt_buf *buf,
> > uint32_t *linear)
> > +{
> > +	void *map;
> >  
> >  	gem_set_domain(data->drm_fd, buf->bo->handle,
> >  		       I915_GEM_DOMAIN_GTT, 0);
> > @@ -87,6 +161,18 @@ static void *linear_copy(data_t *data, struct
> > igt_buf *buf)
> >  	igt_memcpy_from_wc(linear, map, buf->bo->size);
> >  
> >  	munmap(map, buf->bo->size);
> > +}
> > +
> > +static void *linear_copy(data_t *data, struct igt_buf *buf)
> > +{
> > +	void *linear;
> > +
> > +	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
> 
> There is not silly questions, I believe, what is '16' ^ above? Is
> this size
> fixed somehow? I would prefer defining it in some way.
The alignment is useful to switch to faster implementation of memcpy
using SSE4 instructions.

> > +
> > +	if (buf->tiling == I915_TILING_Yf)
> > +		copy_yf_to_linear(data, buf, linear);
> > +	else
> > +		copy_gtt_to_linear(data, buf, linear);
> >  
> >  	return linear;
> >  }
> > @@ -173,7 +259,7 @@ static void scratch_buf_draw_pattern(data_t
> > *data, struct igt_buf *buf,
> >  	cairo_surface_t *surface;
> >  	cairo_pattern_t *pat;
> >  	cairo_t *cr;
> > -	void *map, *linear;
> > +	void *linear;
> >  
> >  	linear = linear_copy(data, buf);
> >  
> > @@ -216,15 +302,10 @@ static void scratch_buf_draw_pattern(data_t
> > *data, struct igt_buf *buf,
> >  
> >  	cairo_surface_destroy(surface);
> >  
> > -	gem_set_domain(data->drm_fd, buf->bo->handle,
> > -		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> > -
> > -	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
> > -			    buf->bo->size, PROT_READ | PROT_WRITE);
> > -
> > -	memcpy(map, linear, buf->bo->size);
> > -
> > -	munmap(map, buf->bo->size);
> > +	if (buf->tiling == I915_TILING_Yf)
> > +		copy_linear_to_yf(data, buf, linear);
> > +	else
> > +		copy_linear_to_gtt(data, buf, linear);
> >  
> >  	free(linear);
> >  }
> > @@ -236,36 +317,59 @@ scratch_buf_copy(data_t *data,
> >  {
> >  	int width = igt_buf_width(dst);
> >  	int height  = igt_buf_height(dst);
> > -	uint32_t *linear_dst, *linear_src;
> > +	uint32_t *linear_dst;
> >  
> >  	igt_assert_eq(igt_buf_width(dst), igt_buf_width(src));
> >  	igt_assert_eq(igt_buf_height(dst), igt_buf_height(src));
> >  	igt_assert_eq(dst->bo->size, src->bo->size);
> >  
> > +	w = min(w, width - sx);
> > +	w = min(w, width - dx);
> > +
> > +	h = min(h, height - sy);
> > +	h = min(h, height - dy);
> > +
> >  	gem_set_domain(data->drm_fd, dst->bo->handle,
> >  		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> > -	gem_set_domain(data->drm_fd, src->bo->handle,
> > -		       I915_GEM_DOMAIN_GTT, 0);
> > -
> >  	linear_dst = gem_mmap__gtt(data->drm_fd, dst->bo->handle,
> >  				   dst->bo->size, PROT_WRITE);
> > -	linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
> > -				   src->bo->size, PROT_READ);
> >  
> > -	w = min(w, width - sx);
> > -	w = min(w, width - dx);
> > +	if (src->tiling == I915_TILING_Yf) {
> > +		void *map;
> >  
> > -	h = min(h, height - sy);
> > -	h = min(h, height - dy);
> > +		gem_set_domain(data->drm_fd, src->bo->handle,
> > +			       I915_GEM_DOMAIN_CPU, 0);
> > +		map = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
> > +				    src->bo->size, PROT_READ);
> > +
> > +		for (int y = 0; y < h; y++) {
> > +			for (int x = 0; x < w; x++) {
> > +				const uint32_t *ptr = yf_ptr(map, sx+x,
> > sy+y, src->stride, 4);
> 
> Same comment as above according '4'.

s/4/src->bpp / 8

> > +
> > +				linear_dst[(dy+y) * width + dx+x] =
> > *ptr;
> > +			}
> > +		}
> > +
> > +		munmap(map, src->bo->size);
> > +	} else {
> > +		uint32_t *linear_src;
> > +
> > +		gem_set_domain(data->drm_fd, src->bo->handle,
> > +			       I915_GEM_DOMAIN_GTT, 0);
> >  
> > -	for (int y = 0; y < h; y++) {
> > -		igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
> > -				   &linear_src[(sy+y) * width + sx],
> > -				   w * 4);
> 
> How can you make sure that w*4 is enough?
Same as above, will switch to src->bpp / 4 and an assertion for dst-
>bpp == src->bpp

-DK

>  (Again - this can be a silly
> question). As I see below it can be connected with stride, is it?
> 
> Kasia
> > +		linear_src = gem_mmap__gtt(data->drm_fd, src->bo-
> > >handle,
> > +					   src->bo->size, PROT_READ);
> > +
> > +		for (int y = 0; y < h; y++) {
> > +			igt_memcpy_from_wc(&linear_dst[(dy+y) * width +
> > dx],
> > +					   &linear_src[(sy+y) * width +
> > sx],
> > +					   w * 4);
> > +		}
> > +
> > +		munmap(linear_src, src->bo->size);
> >  	}
> >  
> >  	munmap(linear_dst, dst->bo->size);
> > -	munmap(linear_src, src->bo->size);
> >  }
> >  
> >  static void scratch_buf_init(data_t *data, struct igt_buf *buf,
> > @@ -282,7 +386,8 @@ static void scratch_buf_init(data_t *data,
> > struct igt_buf *buf,
> >  		int size;
> >  
> >  		igt_require(intel_gen(data->devid) >= 9);
> > -		igt_assert_eq(tiling, I915_TILING_Y);
> > +		igt_assert(tiling == I915_TILING_Y ||
> > +			   tiling == I915_TILING_Yf);
> >  
> >  		buf->stride = ALIGN(width * 4, 128);
> >  		buf->size = buf->stride * height;
> > @@ -299,8 +404,21 @@ static void scratch_buf_init(data_t *data,
> > struct igt_buf *buf,
> >  
> >  		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size,
> > 4096);
> >  
> > -		drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
> > -		igt_assert_eq(tiling, req_tiling);
> > +		if (tiling == I915_TILING_Y) {
> > +			drm_intel_bo_set_tiling(buf->bo, &tiling, buf-
> > >stride);
> > +			igt_assert_eq(tiling, req_tiling);
> > +		}
> > +	} else if (req_tiling == I915_TILING_Yf) {
> > +		int size;
> > +
> > +		buf->stride = ALIGN(width * 4, 128);
> > +		buf->size = buf->stride * height;
> > +		buf->tiling = tiling;
> > +		buf->bpp = 32;
> > +
> > +		size = buf->stride * ALIGN(height, 32);
> > +
> > +		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size,
> > 4096);
> >  	} else {
> >  		buf->bo = drm_intel_bo_alloc_tiled(data->bufmgr, "",
> >  						   width, height, 4,
> > @@ -396,7 +514,7 @@ static void scratch_buf_aux_check(data_t *data,
> >  		     "Aux surface indicates that nothing was
> > compressed\n");
> >  }
> >  
> > -static void test(data_t *data, uint32_t tiling, bool test_ccs)
> > +static void test(data_t *data, uint32_t tiling, uint64_t
> > ccs_modifier)
> >  {
> >  	struct igt_buf dst, ccs, ref;
> >  	struct {
> > @@ -404,7 +522,7 @@ static void test(data_t *data, uint32_t tiling,
> > bool test_ccs)
> >  		const char *filename;
> >  		uint32_t tiling;
> >  		int x, y;
> > -	} src[3] = {
> > +	} src[] = {
> >  		{
> >  			.filename = "source-linear.png",
> >  			.tiling = I915_TILING_NONE,
> > @@ -420,18 +538,31 @@ static void test(data_t *data, uint32_t
> > tiling, bool test_ccs)
> >  			.tiling = I915_TILING_Y,
> >  			.x = WIDTH/2+1, .y = 1,
> >  		},
> > +		{
> > +			.filename = "source-yf-tiled.png",
> > +			.tiling = I915_TILING_Yf,
> > +			.x = 1, .y = 1,
> > +		},
> >  	};
> >  
> >  	int opt_dump_aub = igt_aub_dump_enabled();
> > +	int num_src = ARRAY_SIZE(src);
> > +
> > +	/* no Yf before gen9 */
> > +	if (intel_gen(data->devid) < 9)
> > +		num_src--;
> > +
> > +	if (tiling == I915_TILING_Yf || ccs_modifier)
> > +		igt_require(intel_gen(data->devid) >= 9);
> >  
> > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > +	for (int i = 0; i < num_src; i++)
> >  		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT,
> > src[i].tiling, false);
> >  	scratch_buf_init(data, &dst, WIDTH, HEIGHT, tiling, false);
> > -	if (test_ccs)
> > -		scratch_buf_init(data, &ccs, WIDTH, HEIGHT,
> > I915_TILING_Y, true);
> > +	if (ccs_modifier)
> > +		scratch_buf_init(data, &ccs, WIDTH, HEIGHT,
> > ccs_modifier, true);
> >  	scratch_buf_init(data, &ref, WIDTH, HEIGHT, I915_TILING_NONE,
> > false);
> >  
> > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > +	for (int i = 0; i < num_src; i++)
> >  		scratch_buf_draw_pattern(data, &src[i].buf,
> >  					 0, 0, WIDTH, HEIGHT,
> >  					 0, 0, WIDTH, HEIGHT, true);
> > @@ -442,13 +573,13 @@ static void test(data_t *data, uint32_t
> > tiling, bool test_ccs)
> >  	scratch_buf_copy(data,
> >  			 &dst, 0, 0, WIDTH, HEIGHT,
> >  			 &ref, 0, 0);
> > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > +	for (int i = 0; i < num_src; i++)
> >  		scratch_buf_copy(data,
> >  				 &src[i].buf, WIDTH/4, HEIGHT/4,
> > WIDTH/2-2, HEIGHT/2-2,
> >  				 &ref, src[i].x, src[i].y);
> >  
> >  	if (opt_dump_png) {
> > -		for (int i = 0; i < ARRAY_SIZE(src); i++)
> > +		for (int i = 0; i < num_src; i++)
> >  			scratch_buf_write_to_png(data, &src[i].buf,
> > src[i].filename);
> >  		scratch_buf_write_to_png(data, &dst,
> > "destination.png");
> >  		scratch_buf_write_to_png(data, &ref, "reference.png");
> > @@ -468,24 +599,24 @@ static void test(data_t *data, uint32_t
> > tiling, bool test_ccs)
> >  	 *	 |dst|src|
> >  	 *	  -------
> >  	 */
> > -	if (test_ccs)
> > +	if (ccs_modifier)
> >  		data->render_copy(data->batch, NULL,
> >  				  &dst, 0, 0, WIDTH, HEIGHT,
> >  				  &ccs, 0, 0);
> >  
> > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > +	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,
> > -				  test_ccs ? &ccs : &dst, src[i].x,
> > src[i].y);
> > +				  ccs_modifier ? &ccs : &dst, src[i].x,
> > src[i].y);
> >  
> > -	if (test_ccs)
> > +	if (ccs_modifier)
> >  		data->render_copy(data->batch, NULL,
> >  				  &ccs, 0, 0, WIDTH, HEIGHT,
> >  				  &dst, 0, 0);
> >  
> >  	if (opt_dump_png){
> >  		scratch_buf_write_to_png(data, &dst, "result.png");
> > -		if (test_ccs) {
> > +		if (ccs_modifier) {
> >  			scratch_buf_write_to_png(data, &ccs,
> > "compressed.png");
> >  			scratch_buf_aux_write_to_png(data, &ccs,
> > "compressed-aux.png");
> >  		}
> > @@ -505,7 +636,7 @@ static void test(data_t *data, uint32_t tiling,
> > bool test_ccs)
> >  		scratch_buf_check(data, &dst, &ref, WIDTH - 10, HEIGHT
> > - 10);
> >  	}
> >  
> > -	if (test_ccs)
> > +	if (ccs_modifier)
> >  		scratch_buf_aux_check(data, &ccs);
> >  }
> >  
> > @@ -546,18 +677,31 @@ int main(int argc, char **argv)
> >  	}
> >  
> >  	igt_subtest("linear")
> > -		test(&data, I915_TILING_NONE, false);
> > +		test(&data, I915_TILING_NONE, 0);
> >  	igt_subtest("x-tiled")
> > -		test(&data, I915_TILING_X, false);
> > +		test(&data, I915_TILING_X, 0);
> >  	igt_subtest("y-tiled")
> > -		test(&data, I915_TILING_Y, false);
> > +		test(&data, I915_TILING_Y, 0);
> > +	igt_subtest("yf-tiled")
> > +		test(&data, I915_TILING_Yf, 0);
> >  
> >  	igt_subtest("y-tiled-ccs-to-linear")
> > -		test(&data, I915_TILING_NONE, true);
> > +		test(&data, I915_TILING_NONE, I915_TILING_Y);
> >  	igt_subtest("y-tiled-ccs-to-x-tiled")
> > -		test(&data, I915_TILING_X, true);
> > +		test(&data, I915_TILING_X, I915_TILING_Y);
> >  	igt_subtest("y-tiled-ccs-to-y-tiled")
> > -		test(&data, I915_TILING_Y, true);
> > +		test(&data, I915_TILING_Y, I915_TILING_Y);
> > +	igt_subtest("y-tiled-ccs-to-yf-tiled")
> > +		test(&data, I915_TILING_Yf, I915_TILING_Y);
> > +
> > +	igt_subtest("yf-tiled-ccs-to-linear")
> > +		test(&data, I915_TILING_NONE, I915_TILING_Yf);
> > +	igt_subtest("yf-tiled-ccs-to-x-tiled")
> > +		test(&data, I915_TILING_X, I915_TILING_Yf);
> > +	igt_subtest("yf-tiled-ccs-to-y-tiled")
> > +		test(&data, I915_TILING_Y, I915_TILING_Yf);
> > +	igt_subtest("yf-tiled-ccs-to-yf-tiled")
> > +		test(&data, I915_TILING_Yf, I915_TILING_Yf);
> >  
> >  	igt_fixture {
> >  		intel_batchbuffer_free(data.batch);
> > -- 
> > 2.17.1
> > 

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

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t v2 3/7] tests/gem_render_copy: Test Yf tiling
  2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling Dhinakaran Pandiyan
  2019-03-05 14:26   ` Katarzyna Dec
@ 2019-03-07  1:33   ` Dhinakaran Pandiyan
  2019-03-09  3:36     ` [igt-dev] [PATCH i-g-t v3 " Dhinakaran Pandiyan
  1 sibling, 1 reply; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-07  1:33 UTC (permalink / raw)
  To: igt-dev; +Cc: Dhinakaran Pandiyan

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Let's test Yf tiling now that rendercopy can handle it.

v2: From DK
 Set bpp for Yf buffer and rebase.

v3: From DK
 More documentation, fewer unexplained constants (Kasia)

Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
Cc: Katarzyna Dec <katarzyna.dec@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 tests/i915/gem_render_copy.c | 265 +++++++++++++++++++++++++++--------
 1 file changed, 210 insertions(+), 55 deletions(-)

diff --git a/tests/i915/gem_render_copy.c b/tests/i915/gem_render_copy.c
index 0cd4e50f..252876bf 100644
--- a/tests/i915/gem_render_copy.c
+++ b/tests/i915/gem_render_copy.c
@@ -72,11 +72,91 @@ static const char *make_filename(const char *filename)
 	return buf;
 }
 
-static void *linear_copy(data_t *data, struct igt_buf *buf)
+static void *yf_ptr(void *ptr,
+		    unsigned int x, unsigned int y,
+		    unsigned int stride, unsigned int cpp)
 {
-	void *map, *linear;
+	x *= cpp;
+
+	return ptr +
+	       ((y & ~0x1f) * stride) +
+	       ((y & 0x10) * 64) +
+	       ((y & 0x8) * 32) +
+	       ((y & 0x7) * 16) +
+	       ((x & ~0x3f) * 32) +
+	       ((x & 0x20) * 16) +
+	       ((x & 0x10) * 8) +
+	       (x & 0xf);
+}
 
-	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
+static void copy_linear_to_yf(data_t *data, struct igt_buf *buf,
+			      const uint32_t *linear)
+{
+	int height = igt_buf_height(buf);
+	int width = igt_buf_width(buf);
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
+	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
+			    buf->bo->size, PROT_READ | PROT_WRITE);
+
+	for (int y = 0; y < height; y++) {
+		for (int x = 0; x < width; x++) {
+			uint32_t *ptr = yf_ptr(map, x, y,
+					       buf->stride, buf->bpp / 8);
+
+			*ptr = linear[y * width + x];
+		}
+	}
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_yf_to_linear(data_t *data, struct igt_buf *buf,
+			      uint32_t *linear)
+{
+	int height = igt_buf_height(buf);
+	int width = igt_buf_width(buf);
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_CPU, 0);
+	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
+			    buf->bo->size, PROT_READ);
+
+	for (int y = 0; y < height; y++) {
+		for (int x = 0; x < width; x++) {
+			uint32_t *ptr = yf_ptr(map, x, y,
+					       buf->stride, buf->bpp / 8);
+
+			linear[y * width + x] = *ptr;
+		}
+	}
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_linear_to_gtt(data_t *data, struct igt_buf *buf,
+			       const uint32_t *linear)
+{
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+
+	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
+			    buf->bo->size, PROT_READ | PROT_WRITE);
+
+	memcpy(map, linear, buf->bo->size);
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_gtt_to_linear(data_t *data, struct igt_buf *buf,
+			       uint32_t *linear)
+{
+	void *map;
 
 	gem_set_domain(data->drm_fd, buf->bo->handle,
 		       I915_GEM_DOMAIN_GTT, 0);
@@ -87,6 +167,19 @@ static void *linear_copy(data_t *data, struct igt_buf *buf)
 	igt_memcpy_from_wc(linear, map, buf->bo->size);
 
 	munmap(map, buf->bo->size);
+}
+
+static void *linear_copy(data_t *data, struct igt_buf *buf)
+{
+	void *linear;
+
+	/* 16B alignment allows to potentially make use of SSE4 for copying */
+	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
+
+	if (buf->tiling == I915_TILING_Yf)
+		copy_yf_to_linear(data, buf, linear);
+	else
+		copy_gtt_to_linear(data, buf, linear);
 
 	return linear;
 }
@@ -173,7 +266,7 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
 	cairo_surface_t *surface;
 	cairo_pattern_t *pat;
 	cairo_t *cr;
-	void *map, *linear;
+	void *linear;
 
 	linear = linear_copy(data, buf);
 
@@ -216,15 +309,10 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
 
 	cairo_surface_destroy(surface);
 
-	gem_set_domain(data->drm_fd, buf->bo->handle,
-		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
-
-	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
-			    buf->bo->size, PROT_READ | PROT_WRITE);
-
-	memcpy(map, linear, buf->bo->size);
-
-	munmap(map, buf->bo->size);
+	if (buf->tiling == I915_TILING_Yf)
+		copy_linear_to_yf(data, buf, linear);
+	else
+		copy_linear_to_gtt(data, buf, linear);
 
 	free(linear);
 }
@@ -236,36 +324,62 @@ scratch_buf_copy(data_t *data,
 {
 	int width = igt_buf_width(dst);
 	int height  = igt_buf_height(dst);
-	uint32_t *linear_dst, *linear_src;
+	uint32_t *linear_dst;
 
 	igt_assert_eq(igt_buf_width(dst), igt_buf_width(src));
 	igt_assert_eq(igt_buf_height(dst), igt_buf_height(src));
 	igt_assert_eq(dst->bo->size, src->bo->size);
+	igt_assert_eq(dst->bpp, src->bpp);
+
+	w = min(w, width - sx);
+	w = min(w, width - dx);
+
+	h = min(h, height - sy);
+	h = min(h, height - dy);
 
 	gem_set_domain(data->drm_fd, dst->bo->handle,
 		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
-	gem_set_domain(data->drm_fd, src->bo->handle,
-		       I915_GEM_DOMAIN_GTT, 0);
-
 	linear_dst = gem_mmap__gtt(data->drm_fd, dst->bo->handle,
 				   dst->bo->size, PROT_WRITE);
-	linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
-				   src->bo->size, PROT_READ);
 
-	w = min(w, width - sx);
-	w = min(w, width - dx);
+	if (src->tiling == I915_TILING_Yf) {
+		void *map;
 
-	h = min(h, height - sy);
-	h = min(h, height - dy);
+		gem_set_domain(data->drm_fd, src->bo->handle,
+			       I915_GEM_DOMAIN_CPU, 0);
+		map = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
+				    src->bo->size, PROT_READ);
+
+		for (int y = 0; y < h; y++) {
+			for (int x = 0; x < w; x++) {
+				const uint32_t *ptr = yf_ptr(map, sx+x, sy+y,
+							     src->stride,
+							     src->bpp / 8);
+
+				linear_dst[(dy+y) * width + dx+x] = *ptr;
+			}
+		}
+
+		munmap(map, src->bo->size);
+	} else {
+		uint32_t *linear_src;
 
-	for (int y = 0; y < h; y++) {
-		igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
-				   &linear_src[(sy+y) * width + sx],
-				   w * 4);
+		gem_set_domain(data->drm_fd, src->bo->handle,
+			       I915_GEM_DOMAIN_GTT, 0);
+
+		linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
+					   src->bo->size, PROT_READ);
+
+		for (int y = 0; y < h; y++) {
+			igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
+					   &linear_src[(sy+y) * width + sx],
+					   w * (src->bpp / 8));
+		}
+
+		munmap(linear_src, src->bo->size);
 	}
 
 	munmap(linear_dst, dst->bo->size);
-	munmap(linear_src, src->bo->size);
 }
 
 static void scratch_buf_init(data_t *data, struct igt_buf *buf,
@@ -274,6 +388,7 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 {
 	uint32_t tiling = req_tiling;
 	unsigned long pitch;
+	int bpp = 32;
 
 	memset(buf, 0, sizeof(*buf));
 
@@ -282,12 +397,13 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 		int size;
 
 		igt_require(intel_gen(data->devid) >= 9);
-		igt_assert_eq(tiling, I915_TILING_Y);
+		igt_assert(tiling == I915_TILING_Y ||
+			   tiling == I915_TILING_Yf);
 
-		buf->stride = ALIGN(width * 4, 128);
+		buf->stride = ALIGN(width * (bpp / 8), 128);
 		buf->size = buf->stride * height;
 		buf->tiling = tiling;
-		buf->bpp = 32;
+		buf->bpp = bpp;
 
 		aux_width = scratch_buf_aux_width(buf);
 		aux_height = scratch_buf_aux_height(buf);
@@ -299,18 +415,31 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 
 		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
 
-		drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
-		igt_assert_eq(tiling, req_tiling);
+		if (tiling == I915_TILING_Y) {
+			drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
+			igt_assert_eq(tiling, req_tiling);
+		}
+	} else if (req_tiling == I915_TILING_Yf) {
+		int size;
+
+		buf->stride = ALIGN(width * (bpp / 8), 128);
+		buf->size = buf->stride * height;
+		buf->tiling = tiling;
+		buf->bpp = bpp;
+
+		size = buf->stride * ALIGN(height, 32);
+
+		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
 	} else {
 		buf->bo = drm_intel_bo_alloc_tiled(data->bufmgr, "",
-						   width, height, 4,
+						   width, height, bpp / 8,
 						   &tiling, &pitch, 0);
 		igt_assert_eq(tiling, req_tiling);
 
 		buf->stride = pitch;
 		buf->tiling = tiling;
 		buf->size = pitch * height;
-		buf->bpp = 32;
+		buf->bpp = bpp;
 	}
 
 	igt_assert(igt_buf_width(buf) == width);
@@ -396,7 +525,7 @@ static void scratch_buf_aux_check(data_t *data,
 		     "Aux surface indicates that nothing was compressed\n");
 }
 
-static void test(data_t *data, uint32_t tiling, bool test_ccs)
+static void test(data_t *data, uint32_t tiling, uint64_t ccs_modifier)
 {
 	struct igt_buf dst, ccs, ref;
 	struct {
@@ -404,7 +533,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 		const char *filename;
 		uint32_t tiling;
 		int x, y;
-	} src[3] = {
+	} src[] = {
 		{
 			.filename = "source-linear.png",
 			.tiling = I915_TILING_NONE,
@@ -420,18 +549,31 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 			.tiling = I915_TILING_Y,
 			.x = WIDTH/2+1, .y = 1,
 		},
+		{
+			.filename = "source-yf-tiled.png",
+			.tiling = I915_TILING_Yf,
+			.x = 1, .y = 1,
+		},
 	};
 
 	int opt_dump_aub = igt_aub_dump_enabled();
+	int num_src = ARRAY_SIZE(src);
+
+	/* no Yf before gen9 */
+	if (intel_gen(data->devid) < 9)
+		num_src--;
+
+	if (tiling == I915_TILING_Yf || ccs_modifier)
+		igt_require(intel_gen(data->devid) >= 9);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT, src[i].tiling, false);
 	scratch_buf_init(data, &dst, WIDTH, HEIGHT, tiling, false);
-	if (test_ccs)
-		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, I915_TILING_Y, true);
+	if (ccs_modifier)
+		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, ccs_modifier, true);
 	scratch_buf_init(data, &ref, WIDTH, HEIGHT, I915_TILING_NONE, false);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_draw_pattern(data, &src[i].buf,
 					 0, 0, WIDTH, HEIGHT,
 					 0, 0, WIDTH, HEIGHT, true);
@@ -442,13 +584,13 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 	scratch_buf_copy(data,
 			 &dst, 0, 0, WIDTH, HEIGHT,
 			 &ref, 0, 0);
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_copy(data,
 				 &src[i].buf, WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
 				 &ref, src[i].x, src[i].y);
 
 	if (opt_dump_png) {
-		for (int i = 0; i < ARRAY_SIZE(src); i++)
+		for (int i = 0; i < num_src; i++)
 			scratch_buf_write_to_png(data, &src[i].buf, src[i].filename);
 		scratch_buf_write_to_png(data, &dst, "destination.png");
 		scratch_buf_write_to_png(data, &ref, "reference.png");
@@ -468,24 +610,24 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 	 *	 |dst|src|
 	 *	  -------
 	 */
-	if (test_ccs)
+	if (ccs_modifier)
 		data->render_copy(data->batch, NULL,
 				  &dst, 0, 0, WIDTH, HEIGHT,
 				  &ccs, 0, 0);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	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,
-				  test_ccs ? &ccs : &dst, src[i].x, src[i].y);
+				  ccs_modifier ? &ccs : &dst, src[i].x, src[i].y);
 
-	if (test_ccs)
+	if (ccs_modifier)
 		data->render_copy(data->batch, NULL,
 				  &ccs, 0, 0, WIDTH, HEIGHT,
 				  &dst, 0, 0);
 
 	if (opt_dump_png){
 		scratch_buf_write_to_png(data, &dst, "result.png");
-		if (test_ccs) {
+		if (ccs_modifier) {
 			scratch_buf_write_to_png(data, &ccs, "compressed.png");
 			scratch_buf_aux_write_to_png(data, &ccs, "compressed-aux.png");
 		}
@@ -505,7 +647,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 		scratch_buf_check(data, &dst, &ref, WIDTH - 10, HEIGHT - 10);
 	}
 
-	if (test_ccs)
+	if (ccs_modifier)
 		scratch_buf_aux_check(data, &ccs);
 }
 
@@ -546,18 +688,31 @@ int main(int argc, char **argv)
 	}
 
 	igt_subtest("linear")
-		test(&data, I915_TILING_NONE, false);
+		test(&data, I915_TILING_NONE, 0);
 	igt_subtest("x-tiled")
-		test(&data, I915_TILING_X, false);
+		test(&data, I915_TILING_X, 0);
 	igt_subtest("y-tiled")
-		test(&data, I915_TILING_Y, false);
+		test(&data, I915_TILING_Y, 0);
+	igt_subtest("yf-tiled")
+		test(&data, I915_TILING_Yf, 0);
 
 	igt_subtest("y-tiled-ccs-to-linear")
-		test(&data, I915_TILING_NONE, true);
+		test(&data, I915_TILING_NONE, I915_TILING_Y);
 	igt_subtest("y-tiled-ccs-to-x-tiled")
-		test(&data, I915_TILING_X, true);
+		test(&data, I915_TILING_X, I915_TILING_Y);
 	igt_subtest("y-tiled-ccs-to-y-tiled")
-		test(&data, I915_TILING_Y, true);
+		test(&data, I915_TILING_Y, I915_TILING_Y);
+	igt_subtest("y-tiled-ccs-to-yf-tiled")
+		test(&data, I915_TILING_Yf, I915_TILING_Y);
+
+	igt_subtest("yf-tiled-ccs-to-linear")
+		test(&data, I915_TILING_NONE, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-x-tiled")
+		test(&data, I915_TILING_X, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-y-tiled")
+		test(&data, I915_TILING_Y, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-yf-tiled")
+		test(&data, I915_TILING_Yf, I915_TILING_Yf);
 
 	igt_fixture {
 		intel_batchbuffer_free(data.batch);
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy
  2019-03-05 10:14   ` Katarzyna Dec
@ 2019-03-07  1:39     ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 23+ messages in thread
From: Pandiyan, Dhinakaran @ 2019-03-07  1:39 UTC (permalink / raw)
  To: Dec, Katarzyna; +Cc: igt-dev

On Tue, 2019-03-05 at 11:14 +0100, Katarzyna Dec wrote:
> On Mon, Mar 04, 2019 at 05:47:37PM -0800, Dhinakaran Pandiyan wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Set up the surface state accordingly to support Yf/Ys tiling.
> > 
> > From DK:
> >  Rebase.
> >  Move support to gen-9 surface state
> > Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
> > Cc: Katarzyna Dec <katarzyna.dec@intel.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> 
> LGTM!
> Reviewed-by: Katarzyna Dec <katarzyna.dec@intel.com>

Thanks for the reviews.
-DK


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

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2)
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (8 preceding siblings ...)
  2019-03-05 10:12 ` [igt-dev] [PATCH i-g-t 1/7] " Katarzyna Dec
@ 2019-03-07  2:07 ` Patchwork
  2019-03-07  3:03 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-07  2:07 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2)
URL   : https://patchwork.freedesktop.org/series/57553/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5713 -> IGTPW_2561
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/57553/revisions/2/mbox/

Known issues
------------

  Here are the changes found in IGTPW_2561 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@amdgpu/amd_basic@cs-sdma:
    - fi-kbl-7560u:       NOTRUN -> SKIP [fdo#109271] +17

  * igt@gem_exec_suspend@basic-s3:
    - fi-byt-clapper:     PASS -> INCOMPLETE [fdo#102657]

  * igt@i915_selftest@live_evict:
    - fi-bsw-kefka:       PASS -> DMESG-WARN [fdo#107709]

  * igt@kms_busy@basic-flip-c:
    - fi-blb-e6850:       NOTRUN -> SKIP [fdo#109271] / [fdo#109278]

  * igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
    - fi-blb-e6850:       NOTRUN -> SKIP [fdo#109271] +48

  * igt@runner@aborted:
    - fi-bsw-kefka:       NOTRUN -> FAIL [fdo#107709]

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s3:
    - fi-blb-e6850:       INCOMPLETE [fdo#107718] -> PASS

  * igt@i915_module_load@reload-with-fault-injection:
    - fi-kbl-7560u:       INCOMPLETE -> PASS

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-byt-j1900:       SKIP [fdo#109271] -> PASS
    - fi-bsw-kefka:       SKIP [fdo#109271] -> PASS

  * igt@i915_pm_rpm@basic-rte:
    - fi-byt-j1900:       FAIL [fdo#108800] -> PASS
    - fi-bsw-kefka:       FAIL [fdo#108800] -> PASS

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-kbl-7567u:       WARN [fdo#109380] -> PASS

  * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-c:
    - fi-kbl-7567u:       SKIP [fdo#109271] -> PASS +33

  * igt@prime_vgem@basic-fence-flip:
    - fi-ilk-650:         FAIL [fdo#104008] -> PASS

  
  [fdo#102657]: https://bugs.freedesktop.org/show_bug.cgi?id=102657
  [fdo#104008]: https://bugs.freedesktop.org/show_bug.cgi?id=104008
  [fdo#107709]: https://bugs.freedesktop.org/show_bug.cgi?id=107709
  [fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
  [fdo#108800]: https://bugs.freedesktop.org/show_bug.cgi?id=108800
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109380]: https://bugs.freedesktop.org/show_bug.cgi?id=109380


Participating hosts (44 -> 39)
------------------------------

  Missing    (5): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-kbl-r 


Build changes
-------------

    * IGT: IGT_4875 -> IGTPW_2561

  CI_DRM_5713: 29a41cf5dd10ee68873c16b67d6212b3bd470906 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2561: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2561/
  IGT_4875: 91908d36d0d5c90eea86e29736d2748d5ec55335 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@gem_render_copy@yf-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-linear
+igt@gem_render_copy@yf-tiled-ccs-to-x-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-y-tiled
+igt@gem_render_copy@y-tiled-ccs-to-yf-tiled

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2561/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2)
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (9 preceding siblings ...)
  2019-03-07  2:07 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2) Patchwork
@ 2019-03-07  3:03 ` Patchwork
  2019-03-09  4:18 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3) Patchwork
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-07  3:03 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2)
URL   : https://patchwork.freedesktop.org/series/57553/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5713_full -> IGTPW_2561_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/57553/revisions/2/mbox/

New tests
---------

  New tests have been introduced between CI_DRM_5713_full and IGTPW_2561_full:

### New IGT tests (6) ###

  * igt@gem_render_copy@y-tiled-ccs-to-yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-linear:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.28] s

  * igt@gem_render_copy@yf-tiled-ccs-to-x-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.25] s

  * igt@gem_render_copy@yf-tiled-ccs-to-y-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.25] s

  

Known issues
------------

  Here are the changes found in IGTPW_2561_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_isolation@vecs0-none:
    - shard-hsw:          NOTRUN -> SKIP [fdo#109271] +28

  * igt@gem_ctx_param@invalid-param-get:
    - shard-glk:          NOTRUN -> FAIL [fdo#109559]

  * igt@gem_exec_schedule@fifo-bsd2:
    - shard-snb:          NOTRUN -> SKIP [fdo#109271] +102

  * igt@gem_pwrite@huge-gtt-forwards:
    - shard-kbl:          NOTRUN -> SKIP [fdo#109271]

  * igt@kms_atomic_transition@1x-modeset-transitions-nonblocking-fencing:
    - shard-apl:          PASS -> FAIL [fdo#109660]
    - shard-kbl:          PASS -> FAIL [fdo#109660]

  * igt@kms_busy@extended-modeset-hang-newfb-render-c:
    - shard-hsw:          PASS -> DMESG-WARN [fdo#107956] +1

  * igt@kms_busy@extended-modeset-hang-newfb-render-e:
    - shard-apl:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +2

  * igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-f:
    - shard-hsw:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +2

  * igt@kms_ccs@pipe-a-crc-sprite-planes-basic:
    - shard-glk:          PASS -> FAIL [fdo#108145]

  * igt@kms_color@pipe-a-legacy-gamma:
    - shard-apl:          PASS -> FAIL [fdo#104782] / [fdo#108145]

  * igt@kms_color@pipe-c-ctm-max:
    - shard-kbl:          PASS -> FAIL [fdo#108147]
    - shard-apl:          PASS -> FAIL [fdo#108147]

  * igt@kms_cursor_crc@cursor-128x128-random:
    - shard-apl:          PASS -> FAIL [fdo#103232] +1

  * igt@kms_cursor_crc@cursor-128x128-suspend:
    - shard-kbl:          PASS -> INCOMPLETE [fdo#103665]

  * igt@kms_cursor_crc@cursor-128x42-sliding:
    - shard-kbl:          PASS -> FAIL [fdo#103232]
    - shard-apl:          NOTRUN -> FAIL [fdo#103232]

  * igt@kms_cursor_crc@cursor-256x256-suspend:
    - shard-kbl:          PASS -> FAIL [fdo#103191] / [fdo#103232]
    - shard-apl:          PASS -> FAIL [fdo#103191] / [fdo#103232]

  * igt@kms_cursor_crc@cursor-alpha-opaque:
    - shard-kbl:          PASS -> FAIL [fdo#109350]
    - shard-apl:          PASS -> FAIL [fdo#109350]

  * igt@kms_flip@2x-flip-vs-expired-vblank:
    - shard-glk:          PASS -> FAIL [fdo#105363]

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-apl:          PASS -> FAIL [fdo#103167] +2

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
    - shard-apl:          NOTRUN -> FAIL [fdo#103167]

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-glk:          NOTRUN -> FAIL [fdo#103167]

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
    - shard-glk:          PASS -> FAIL [fdo#103167] +7

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff:
    - shard-glk:          NOTRUN -> SKIP [fdo#109271] +19

  * igt@kms_plane@pixel-format-pipe-c-planes:
    - shard-apl:          PASS -> FAIL [fdo#103166] +2

  * igt@kms_plane@pixel-format-pipe-c-planes-source-clamping:
    - shard-apl:          PASS -> FAIL [fdo#108948] +1

  * igt@kms_plane_alpha_blend@pipe-b-alpha-opaque-fb:
    - shard-apl:          NOTRUN -> FAIL [fdo#108145]

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-y:
    - shard-kbl:          PASS -> FAIL [fdo#103166] +1

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-x:
    - shard-glk:          PASS -> FAIL [fdo#103166] +1
    - shard-apl:          NOTRUN -> FAIL [fdo#103166]

  * igt@kms_rotation_crc@multiplane-rotation-cropping-bottom:
    - shard-kbl:          PASS -> DMESG-FAIL [fdo#105763]

  * igt@kms_setmode@basic:
    - shard-glk:          PASS -> FAIL [fdo#99912]
    - shard-kbl:          PASS -> FAIL [fdo#99912]

  * igt@kms_universal_plane@universal-plane-gen9-features-pipe-e:
    - shard-glk:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +1

  * igt@kms_vblank@pipe-c-ts-continuation-suspend:
    - shard-apl:          PASS -> FAIL [fdo#104894] +1

  * igt@kms_vblank@pipe-c-wait-busy:
    - shard-snb:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +9

  * igt@prime_nv_pcopy@test3_5:
    - shard-apl:          NOTRUN -> SKIP [fdo#109271] +45

  
#### Possible fixes ####

  * igt@kms_busy@extended-modeset-hang-newfb-render-a:
    - shard-hsw:          DMESG-WARN [fdo#107956] -> PASS
    - shard-kbl:          DMESG-WARN [fdo#107956] -> PASS
    - shard-snb:          DMESG-WARN [fdo#107956] -> PASS

  * igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
    - shard-glk:          FAIL [fdo#108145] -> PASS

  * igt@kms_color@pipe-b-legacy-gamma:
    - shard-apl:          FAIL [fdo#104782] -> PASS

  * igt@kms_color@pipe-c-legacy-gamma:
    - shard-glk:          FAIL [fdo#104782] -> PASS

  * igt@kms_cursor_crc@cursor-256x256-random:
    - shard-apl:          FAIL [fdo#103232] -> PASS +3

  * igt@kms_cursor_crc@cursor-256x85-sliding:
    - shard-kbl:          FAIL [fdo#103232] -> PASS +1

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-glk:          FAIL [fdo#102887] / [fdo#105363] -> PASS

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render:
    - shard-apl:          FAIL [fdo#103167] -> PASS +1

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
    - shard-glk:          FAIL [fdo#103167] -> PASS +3

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
    - shard-kbl:          FAIL [fdo#103166] -> PASS

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-x:
    - shard-glk:          FAIL [fdo#103166] -> PASS +1

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
    - shard-apl:          FAIL [fdo#103166] -> PASS +4

  * igt@kms_vblank@pipe-b-ts-continuation-suspend:
    - shard-apl:          FAIL [fdo#104894] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#102887]: https://bugs.freedesktop.org/show_bug.cgi?id=102887
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782
  [fdo#104894]: https://bugs.freedesktop.org/show_bug.cgi?id=104894
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#105763]: https://bugs.freedesktop.org/show_bug.cgi?id=105763
  [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108147]: https://bugs.freedesktop.org/show_bug.cgi?id=108147
  [fdo#108948]: https://bugs.freedesktop.org/show_bug.cgi?id=108948
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109350]: https://bugs.freedesktop.org/show_bug.cgi?id=109350
  [fdo#109559]: https://bugs.freedesktop.org/show_bug.cgi?id=109559
  [fdo#109660]: https://bugs.freedesktop.org/show_bug.cgi?id=109660
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (6 -> 5)
------------------------------

  Missing    (1): shard-skl 


Build changes
-------------

    * IGT: IGT_4875 -> IGTPW_2561
    * Piglit: piglit_4509 -> None

  CI_DRM_5713: 29a41cf5dd10ee68873c16b67d6212b3bd470906 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2561: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2561/
  IGT_4875: 91908d36d0d5c90eea86e29736d2748d5ec55335 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2561/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling
  2019-03-07  0:58     ` Dhinakaran Pandiyan
@ 2019-03-08  9:59       ` Katarzyna Dec
  0 siblings, 0 replies; 23+ messages in thread
From: Katarzyna Dec @ 2019-03-08  9:59 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, igt-dev

On Wed, Mar 06, 2019 at 04:58:02PM -0800, Dhinakaran Pandiyan wrote:
> On Tue, 2019-03-05 at 15:26 +0100, Katarzyna Dec wrote:
> > On Mon, Mar 04, 2019 at 05:47:38PM -0800, Dhinakaran Pandiyan wrote:
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > 
> > > Let's test Yf tiling now that rendercopy can handle it.
> > > 
> > > v2: From DK
> > >  Set bpp for Yf buffer and rebase.
> > > 
> > > Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
> > > Cc: Katarzyna Dec <katarzyna.dec@intel.com>
> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > > ---
> > >  tests/i915/gem_render_copy.c | 246 +++++++++++++++++++++++++++--
> > > ------
> > >  1 file changed, 195 insertions(+), 51 deletions(-)
> > > 
> > > diff --git a/tests/i915/gem_render_copy.c
> > > b/tests/i915/gem_render_copy.c
> > > index 0cd4e50f..afe2df05 100644
> > > --- a/tests/i915/gem_render_copy.c
> > > +++ b/tests/i915/gem_render_copy.c
> > > @@ -72,11 +72,85 @@ static const char *make_filename(const char
> > > *filename)
> > >  	return buf;
> > >  }
> > >  
> > > -static void *linear_copy(data_t *data, struct igt_buf *buf)
> > > +static void *yf_ptr(void *ptr,
> > > +		    unsigned int x, unsigned int y,
> > > +		    unsigned int stride, unsigned int cpp)
> > >  {
> > > -	void *map, *linear;
> > > +       x *= cpp;
> > > +
> > > +       return ptr +
> > > +	       ((y & ~0x1f) * stride) +
> > > +	       ((y & 0x10) * 64) +
> > > +	       ((y & 0x8) * 32) +
> > > +	       ((y & 0x7) * 16) +
> > > +	       ((x & ~0x3f) * 32) +
> > > +	       ((x & 0x20) * 16) +
> > > +	       ((x & 0x10) * 8) +
> > > +	       (x & 0xf);
> > > +}
> > 
> > I looked through documentation and these ^ values e.g. ~0x1f others
> > x/y & ? are
> > still mysterious. Maybe you can document them somehow?
> The code reflects the internal tiling layout for Yf, which is
> documented in libdrm: include/drm/drm_fourcc.h. I don't see any
> documentation for other tiling formats in IGT either, so not sure how
> exactly you want me to document this. Suggestions welcome :)
> 
> But, I think it's better to do any additional documentation work
> outside this series as this is delaying an ICL bug fix.

I looked though libdrm code you mentioned and it still doesn't make any sense to
me. I also looked into gem_render_copy test and I agree that there is not so 
much of documentation, but what you are adding is introducing many magic numbers.
Maybe you could add e.g. #defines for this values.
For updating documentation - I agree that bugs fix is urgent, however if we
ommit it now, there will be for sure no time in the future to fix it.

Kasia :)
> 
> > 
> > >  
> > > -	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
> > > +static void copy_linear_to_yf(data_t *data, struct igt_buf *buf,
> > > const uint32_t *linear)
> > 
> > It would be better to move 'const uin32_t *linear' to next line
> > (aligned with
> > others).
> > > +{
> > > +	int height = igt_buf_height(buf);
> > > +	int width = igt_buf_width(buf);
> > > +	void *map;
> > > +
> > > +	gem_set_domain(data->drm_fd, buf->bo->handle,
> > > +		       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> > > +	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
> > > +			    buf->bo->size, PROT_READ | PROT_WRITE);
> > > +
> > > +	for (int y = 0; y < height; y++) {
> > > +		for (int x = 0; x < width; x++) {
> > > +			uint32_t *ptr = yf_ptr(map, x, y, buf->stride,
> > > 4);
> > 
> > Value '4' here is a cpp. Is it color per pixel? Maybe we can define
> > this value
> > somehow? I want to avoid situation when there will be no people
> > understanding
> > this code onboard.
> Changing this to buf->bpp / 8, that should be more intuitive.
> 
> > > +
> > > +			*ptr = linear[y * width + x];
> > > +		}
> > > +	}
> > > +
> > > +	munmap(map, buf->bo->size);
> > > +}
> > > +
> > > +static void copy_yf_to_linear(data_t *data, struct igt_buf *buf,
> > > uint32_t *linear)
> > > +{
> > > +	int height = igt_buf_height(buf);
> > > +	int width = igt_buf_width(buf);
> > > +	void *map;
> > > +
> > > +	gem_set_domain(data->drm_fd, buf->bo->handle,
> > > +		       I915_GEM_DOMAIN_CPU, 0);
> > > +	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
> > > +			    buf->bo->size, PROT_READ);
> > > +
> > > +	for (int y = 0; y < height; y++) {
> > > +		for (int x = 0; x < width; x++) {
> > > +			uint32_t *ptr = yf_ptr(map, x, y, buf->stride,
> > > 4);
> > > +
> > > +			linear[y * width + x] = *ptr;
> > > +		}
> > > +	}
> > > +
> > > +	munmap(map, buf->bo->size);
> > > +}
> > > +
> > > +static void copy_linear_to_gtt(data_t *data, struct igt_buf *buf,
> > > const uint32_t *linear)
> > > +{
> > > +	void *map;
> > > +
> > > +	gem_set_domain(data->drm_fd, buf->bo->handle,
> > > +		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> > > +
> > > +	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
> > > +			    buf->bo->size, PROT_READ | PROT_WRITE);
> > > +
> > > +	memcpy(map, linear, buf->bo->size);
> > > +
> > > +	munmap(map, buf->bo->size);
> > > +}
> > > +
> > > +static void copy_gtt_to_linear(data_t *data, struct igt_buf *buf,
> > > uint32_t *linear)
> > > +{
> > > +	void *map;
> > >  
> > >  	gem_set_domain(data->drm_fd, buf->bo->handle,
> > >  		       I915_GEM_DOMAIN_GTT, 0);
> > > @@ -87,6 +161,18 @@ static void *linear_copy(data_t *data, struct
> > > igt_buf *buf)
> > >  	igt_memcpy_from_wc(linear, map, buf->bo->size);
> > >  
> > >  	munmap(map, buf->bo->size);
> > > +}
> > > +
> > > +static void *linear_copy(data_t *data, struct igt_buf *buf)
> > > +{
> > > +	void *linear;
> > > +
> > > +	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
> > 
> > There is not silly questions, I believe, what is '16' ^ above? Is
> > this size
> > fixed somehow? I would prefer defining it in some way.
> The alignment is useful to switch to faster implementation of memcpy
> using SSE4 instructions.
> 
> > > +
> > > +	if (buf->tiling == I915_TILING_Yf)
> > > +		copy_yf_to_linear(data, buf, linear);
> > > +	else
> > > +		copy_gtt_to_linear(data, buf, linear);
> > >  
> > >  	return linear;
> > >  }
> > > @@ -173,7 +259,7 @@ static void scratch_buf_draw_pattern(data_t
> > > *data, struct igt_buf *buf,
> > >  	cairo_surface_t *surface;
> > >  	cairo_pattern_t *pat;
> > >  	cairo_t *cr;
> > > -	void *map, *linear;
> > > +	void *linear;
> > >  
> > >  	linear = linear_copy(data, buf);
> > >  
> > > @@ -216,15 +302,10 @@ static void scratch_buf_draw_pattern(data_t
> > > *data, struct igt_buf *buf,
> > >  
> > >  	cairo_surface_destroy(surface);
> > >  
> > > -	gem_set_domain(data->drm_fd, buf->bo->handle,
> > > -		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> > > -
> > > -	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
> > > -			    buf->bo->size, PROT_READ | PROT_WRITE);
> > > -
> > > -	memcpy(map, linear, buf->bo->size);
> > > -
> > > -	munmap(map, buf->bo->size);
> > > +	if (buf->tiling == I915_TILING_Yf)
> > > +		copy_linear_to_yf(data, buf, linear);
> > > +	else
> > > +		copy_linear_to_gtt(data, buf, linear);
> > >  
> > >  	free(linear);
> > >  }
> > > @@ -236,36 +317,59 @@ scratch_buf_copy(data_t *data,
> > >  {
> > >  	int width = igt_buf_width(dst);
> > >  	int height  = igt_buf_height(dst);
> > > -	uint32_t *linear_dst, *linear_src;
> > > +	uint32_t *linear_dst;
> > >  
> > >  	igt_assert_eq(igt_buf_width(dst), igt_buf_width(src));
> > >  	igt_assert_eq(igt_buf_height(dst), igt_buf_height(src));
> > >  	igt_assert_eq(dst->bo->size, src->bo->size);
> > >  
> > > +	w = min(w, width - sx);
> > > +	w = min(w, width - dx);
> > > +
> > > +	h = min(h, height - sy);
> > > +	h = min(h, height - dy);
> > > +
> > >  	gem_set_domain(data->drm_fd, dst->bo->handle,
> > >  		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> > > -	gem_set_domain(data->drm_fd, src->bo->handle,
> > > -		       I915_GEM_DOMAIN_GTT, 0);
> > > -
> > >  	linear_dst = gem_mmap__gtt(data->drm_fd, dst->bo->handle,
> > >  				   dst->bo->size, PROT_WRITE);
> > > -	linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
> > > -				   src->bo->size, PROT_READ);
> > >  
> > > -	w = min(w, width - sx);
> > > -	w = min(w, width - dx);
> > > +	if (src->tiling == I915_TILING_Yf) {
> > > +		void *map;
> > >  
> > > -	h = min(h, height - sy);
> > > -	h = min(h, height - dy);
> > > +		gem_set_domain(data->drm_fd, src->bo->handle,
> > > +			       I915_GEM_DOMAIN_CPU, 0);
> > > +		map = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
> > > +				    src->bo->size, PROT_READ);
> > > +
> > > +		for (int y = 0; y < h; y++) {
> > > +			for (int x = 0; x < w; x++) {
> > > +				const uint32_t *ptr = yf_ptr(map, sx+x,
> > > sy+y, src->stride, 4);
> > 
> > Same comment as above according '4'.
> 
> s/4/src->bpp / 8
> 
> > > +
> > > +				linear_dst[(dy+y) * width + dx+x] =
> > > *ptr;
> > > +			}
> > > +		}
> > > +
> > > +		munmap(map, src->bo->size);
> > > +	} else {
> > > +		uint32_t *linear_src;
> > > +
> > > +		gem_set_domain(data->drm_fd, src->bo->handle,
> > > +			       I915_GEM_DOMAIN_GTT, 0);
> > >  
> > > -	for (int y = 0; y < h; y++) {
> > > -		igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
> > > -				   &linear_src[(sy+y) * width + sx],
> > > -				   w * 4);
> > 
> > How can you make sure that w*4 is enough?
> Same as above, will switch to src->bpp / 4 and an assertion for dst-
> >bpp == src->bpp
> 
> -DK
> 
> >  (Again - this can be a silly
> > question). As I see below it can be connected with stride, is it?
> > 
> > Kasia
> > > +		linear_src = gem_mmap__gtt(data->drm_fd, src->bo-
> > > >handle,
> > > +					   src->bo->size, PROT_READ);
> > > +
> > > +		for (int y = 0; y < h; y++) {
> > > +			igt_memcpy_from_wc(&linear_dst[(dy+y) * width +
> > > dx],
> > > +					   &linear_src[(sy+y) * width +
> > > sx],
> > > +					   w * 4);
> > > +		}
> > > +
> > > +		munmap(linear_src, src->bo->size);
> > >  	}
> > >  
> > >  	munmap(linear_dst, dst->bo->size);
> > > -	munmap(linear_src, src->bo->size);
> > >  }
> > >  
> > >  static void scratch_buf_init(data_t *data, struct igt_buf *buf,
> > > @@ -282,7 +386,8 @@ static void scratch_buf_init(data_t *data,
> > > struct igt_buf *buf,
> > >  		int size;
> > >  
> > >  		igt_require(intel_gen(data->devid) >= 9);
> > > -		igt_assert_eq(tiling, I915_TILING_Y);
> > > +		igt_assert(tiling == I915_TILING_Y ||
> > > +			   tiling == I915_TILING_Yf);
> > >  
> > >  		buf->stride = ALIGN(width * 4, 128);
> > >  		buf->size = buf->stride * height;
> > > @@ -299,8 +404,21 @@ static void scratch_buf_init(data_t *data,
> > > struct igt_buf *buf,
> > >  
> > >  		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size,
> > > 4096);
> > >  
> > > -		drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
> > > -		igt_assert_eq(tiling, req_tiling);
> > > +		if (tiling == I915_TILING_Y) {
> > > +			drm_intel_bo_set_tiling(buf->bo, &tiling, buf-
> > > >stride);
> > > +			igt_assert_eq(tiling, req_tiling);
> > > +		}
> > > +	} else if (req_tiling == I915_TILING_Yf) {
> > > +		int size;
> > > +
> > > +		buf->stride = ALIGN(width * 4, 128);
> > > +		buf->size = buf->stride * height;
> > > +		buf->tiling = tiling;
> > > +		buf->bpp = 32;
> > > +
> > > +		size = buf->stride * ALIGN(height, 32);
> > > +
> > > +		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size,
> > > 4096);
> > >  	} else {
> > >  		buf->bo = drm_intel_bo_alloc_tiled(data->bufmgr, "",
> > >  						   width, height, 4,
> > > @@ -396,7 +514,7 @@ static void scratch_buf_aux_check(data_t *data,
> > >  		     "Aux surface indicates that nothing was
> > > compressed\n");
> > >  }
> > >  
> > > -static void test(data_t *data, uint32_t tiling, bool test_ccs)
> > > +static void test(data_t *data, uint32_t tiling, uint64_t
> > > ccs_modifier)
> > >  {
> > >  	struct igt_buf dst, ccs, ref;
> > >  	struct {
> > > @@ -404,7 +522,7 @@ static void test(data_t *data, uint32_t tiling,
> > > bool test_ccs)
> > >  		const char *filename;
> > >  		uint32_t tiling;
> > >  		int x, y;
> > > -	} src[3] = {
> > > +	} src[] = {
> > >  		{
> > >  			.filename = "source-linear.png",
> > >  			.tiling = I915_TILING_NONE,
> > > @@ -420,18 +538,31 @@ static void test(data_t *data, uint32_t
> > > tiling, bool test_ccs)
> > >  			.tiling = I915_TILING_Y,
> > >  			.x = WIDTH/2+1, .y = 1,
> > >  		},
> > > +		{
> > > +			.filename = "source-yf-tiled.png",
> > > +			.tiling = I915_TILING_Yf,
> > > +			.x = 1, .y = 1,
> > > +		},
> > >  	};
> > >  
> > >  	int opt_dump_aub = igt_aub_dump_enabled();
> > > +	int num_src = ARRAY_SIZE(src);
> > > +
> > > +	/* no Yf before gen9 */
> > > +	if (intel_gen(data->devid) < 9)
> > > +		num_src--;
> > > +
> > > +	if (tiling == I915_TILING_Yf || ccs_modifier)
> > > +		igt_require(intel_gen(data->devid) >= 9);
> > >  
> > > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > > +	for (int i = 0; i < num_src; i++)
> > >  		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT,
> > > src[i].tiling, false);
> > >  	scratch_buf_init(data, &dst, WIDTH, HEIGHT, tiling, false);
> > > -	if (test_ccs)
> > > -		scratch_buf_init(data, &ccs, WIDTH, HEIGHT,
> > > I915_TILING_Y, true);
> > > +	if (ccs_modifier)
> > > +		scratch_buf_init(data, &ccs, WIDTH, HEIGHT,
> > > ccs_modifier, true);
> > >  	scratch_buf_init(data, &ref, WIDTH, HEIGHT, I915_TILING_NONE,
> > > false);
> > >  
> > > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > > +	for (int i = 0; i < num_src; i++)
> > >  		scratch_buf_draw_pattern(data, &src[i].buf,
> > >  					 0, 0, WIDTH, HEIGHT,
> > >  					 0, 0, WIDTH, HEIGHT, true);
> > > @@ -442,13 +573,13 @@ static void test(data_t *data, uint32_t
> > > tiling, bool test_ccs)
> > >  	scratch_buf_copy(data,
> > >  			 &dst, 0, 0, WIDTH, HEIGHT,
> > >  			 &ref, 0, 0);
> > > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > > +	for (int i = 0; i < num_src; i++)
> > >  		scratch_buf_copy(data,
> > >  				 &src[i].buf, WIDTH/4, HEIGHT/4,
> > > WIDTH/2-2, HEIGHT/2-2,
> > >  				 &ref, src[i].x, src[i].y);
> > >  
> > >  	if (opt_dump_png) {
> > > -		for (int i = 0; i < ARRAY_SIZE(src); i++)
> > > +		for (int i = 0; i < num_src; i++)
> > >  			scratch_buf_write_to_png(data, &src[i].buf,
> > > src[i].filename);
> > >  		scratch_buf_write_to_png(data, &dst,
> > > "destination.png");
> > >  		scratch_buf_write_to_png(data, &ref, "reference.png");
> > > @@ -468,24 +599,24 @@ static void test(data_t *data, uint32_t
> > > tiling, bool test_ccs)
> > >  	 *	 |dst|src|
> > >  	 *	  -------
> > >  	 */
> > > -	if (test_ccs)
> > > +	if (ccs_modifier)
> > >  		data->render_copy(data->batch, NULL,
> > >  				  &dst, 0, 0, WIDTH, HEIGHT,
> > >  				  &ccs, 0, 0);
> > >  
> > > -	for (int i = 0; i < ARRAY_SIZE(src); i++)
> > > +	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,
> > > -				  test_ccs ? &ccs : &dst, src[i].x,
> > > src[i].y);
> > > +				  ccs_modifier ? &ccs : &dst, src[i].x,
> > > src[i].y);
> > >  
> > > -	if (test_ccs)
> > > +	if (ccs_modifier)
> > >  		data->render_copy(data->batch, NULL,
> > >  				  &ccs, 0, 0, WIDTH, HEIGHT,
> > >  				  &dst, 0, 0);
> > >  
> > >  	if (opt_dump_png){
> > >  		scratch_buf_write_to_png(data, &dst, "result.png");
> > > -		if (test_ccs) {
> > > +		if (ccs_modifier) {
> > >  			scratch_buf_write_to_png(data, &ccs,
> > > "compressed.png");
> > >  			scratch_buf_aux_write_to_png(data, &ccs,
> > > "compressed-aux.png");
> > >  		}
> > > @@ -505,7 +636,7 @@ static void test(data_t *data, uint32_t tiling,
> > > bool test_ccs)
> > >  		scratch_buf_check(data, &dst, &ref, WIDTH - 10, HEIGHT
> > > - 10);
> > >  	}
> > >  
> > > -	if (test_ccs)
> > > +	if (ccs_modifier)
> > >  		scratch_buf_aux_check(data, &ccs);
> > >  }
> > >  
> > > @@ -546,18 +677,31 @@ int main(int argc, char **argv)
> > >  	}
> > >  
> > >  	igt_subtest("linear")
> > > -		test(&data, I915_TILING_NONE, false);
> > > +		test(&data, I915_TILING_NONE, 0);
> > >  	igt_subtest("x-tiled")
> > > -		test(&data, I915_TILING_X, false);
> > > +		test(&data, I915_TILING_X, 0);
> > >  	igt_subtest("y-tiled")
> > > -		test(&data, I915_TILING_Y, false);
> > > +		test(&data, I915_TILING_Y, 0);
> > > +	igt_subtest("yf-tiled")
> > > +		test(&data, I915_TILING_Yf, 0);
> > >  
> > >  	igt_subtest("y-tiled-ccs-to-linear")
> > > -		test(&data, I915_TILING_NONE, true);
> > > +		test(&data, I915_TILING_NONE, I915_TILING_Y);
> > >  	igt_subtest("y-tiled-ccs-to-x-tiled")
> > > -		test(&data, I915_TILING_X, true);
> > > +		test(&data, I915_TILING_X, I915_TILING_Y);
> > >  	igt_subtest("y-tiled-ccs-to-y-tiled")
> > > -		test(&data, I915_TILING_Y, true);
> > > +		test(&data, I915_TILING_Y, I915_TILING_Y);
> > > +	igt_subtest("y-tiled-ccs-to-yf-tiled")
> > > +		test(&data, I915_TILING_Yf, I915_TILING_Y);
> > > +
> > > +	igt_subtest("yf-tiled-ccs-to-linear")
> > > +		test(&data, I915_TILING_NONE, I915_TILING_Yf);
> > > +	igt_subtest("yf-tiled-ccs-to-x-tiled")
> > > +		test(&data, I915_TILING_X, I915_TILING_Yf);
> > > +	igt_subtest("yf-tiled-ccs-to-y-tiled")
> > > +		test(&data, I915_TILING_Y, I915_TILING_Yf);
> > > +	igt_subtest("yf-tiled-ccs-to-yf-tiled")
> > > +		test(&data, I915_TILING_Yf, I915_TILING_Yf);
> > >  
> > >  	igt_fixture {
> > >  		intel_batchbuffer_free(data.batch);
> > > -- 
> > > 2.17.1
> > > 
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] [PATCH i-g-t v3 3/7] tests/gem_render_copy: Test Yf tiling
  2019-03-07  1:33   ` [igt-dev] [PATCH i-g-t v2 " Dhinakaran Pandiyan
@ 2019-03-09  3:36     ` Dhinakaran Pandiyan
  0 siblings, 0 replies; 23+ messages in thread
From: Dhinakaran Pandiyan @ 2019-03-09  3:36 UTC (permalink / raw)
  To: igt-dev; +Cc: Dhinakaran Pandiyan

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Let's test Yf tiling now that rendercopy can handle it.

v2: From DK
 Set bpp for Yf buffer and rebase.

v3: From DK
 More documentation, fewer unexplained constants (Kasia)

v4: From DK
 Rewrite Yf tiling algorithm to be more descriptive

Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
Cc: Katarzyna Dec <katarzyna.dec@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 tests/i915/gem_render_copy.c | 278 ++++++++++++++++++++++++++++-------
 1 file changed, 223 insertions(+), 55 deletions(-)

diff --git a/tests/i915/gem_render_copy.c b/tests/i915/gem_render_copy.c
index 0cd4e50f..8d62a0f4 100644
--- a/tests/i915/gem_render_copy.c
+++ b/tests/i915/gem_render_copy.c
@@ -72,11 +72,104 @@ static const char *make_filename(const char *filename)
 	return buf;
 }
 
-static void *linear_copy(data_t *data, struct igt_buf *buf)
+static void *yf_ptr(void *ptr,
+		    unsigned int x, unsigned int y,
+		    unsigned int stride, unsigned int cpp)
 {
-	void *map, *linear;
+	const int tile_size = 4 * 1024;
+	const int tile_width = 128;
+	int row_size = (stride / tile_width) * tile_size;
 
-	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
+	x *= cpp; /* convert to Byte offset */
+
+
+	/*
+	 * Within a 4k Yf tile, the byte swizzling pattern is
+	 * msb......lsb
+	 * xyxyxyyyxxxx
+	 * The tiles themselves are laid out in row major order.
+	 */
+	return ptr +
+		((x & 0xf) * 1) + /* 4x1 pixels(32bpp) = 16B */
+		((y & 0x3) * 16) + /* 4x4 pixels = 64B */
+		(((y & 0x4) >> 2) * 64) + /* 1x2 64B blocks */
+		(((x & 0x10) >> 4) * 128) + /* 2x2 64B blocks = 256B block */
+		(((y & 0x8) >> 3) * 256) + /* 2x1 256B blocks */
+		(((x & 0x20) >> 5) * 512) + /* 2x2 256B blocks */
+		(((y & 0x10) >> 4) * 1024) + /* 4x2 256 blocks */
+		(((x & 0x40) >> 6) * 2048) + /* 4x4 256B blocks = 4k tile */
+		(((x & ~0x7f) >> 7) * tile_size) + /* row of tiles */
+		(((y & ~0x1f) >> 5) * row_size);
+}
+
+static void copy_linear_to_yf(data_t *data, struct igt_buf *buf,
+			      const uint32_t *linear)
+{
+	int height = igt_buf_height(buf);
+	int width = igt_buf_width(buf);
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
+	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
+			    buf->bo->size, PROT_READ | PROT_WRITE);
+
+	for (int y = 0; y < height; y++) {
+		for (int x = 0; x < width; x++) {
+			uint32_t *ptr = yf_ptr(map, x, y,
+					       buf->stride, buf->bpp / 8);
+
+			*ptr = linear[y * width + x];
+		}
+	}
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_yf_to_linear(data_t *data, struct igt_buf *buf,
+			      uint32_t *linear)
+{
+	int height = igt_buf_height(buf);
+	int width = igt_buf_width(buf);
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_CPU, 0);
+	map = gem_mmap__cpu(data->drm_fd, buf->bo->handle, 0,
+			    buf->bo->size, PROT_READ);
+
+	for (int y = 0; y < height; y++) {
+		for (int x = 0; x < width; x++) {
+			uint32_t *ptr = yf_ptr(map, x, y,
+					       buf->stride, buf->bpp / 8);
+
+			linear[y * width + x] = *ptr;
+		}
+	}
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_linear_to_gtt(data_t *data, struct igt_buf *buf,
+			       const uint32_t *linear)
+{
+	void *map;
+
+	gem_set_domain(data->drm_fd, buf->bo->handle,
+		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+
+	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
+			    buf->bo->size, PROT_READ | PROT_WRITE);
+
+	memcpy(map, linear, buf->bo->size);
+
+	munmap(map, buf->bo->size);
+}
+
+static void copy_gtt_to_linear(data_t *data, struct igt_buf *buf,
+			       uint32_t *linear)
+{
+	void *map;
 
 	gem_set_domain(data->drm_fd, buf->bo->handle,
 		       I915_GEM_DOMAIN_GTT, 0);
@@ -87,6 +180,19 @@ static void *linear_copy(data_t *data, struct igt_buf *buf)
 	igt_memcpy_from_wc(linear, map, buf->bo->size);
 
 	munmap(map, buf->bo->size);
+}
+
+static void *linear_copy(data_t *data, struct igt_buf *buf)
+{
+	void *linear;
+
+	/* 16B alignment allows to potentially make use of SSE4 for copying */
+	igt_assert_eq(posix_memalign(&linear, 16, buf->bo->size), 0);
+
+	if (buf->tiling == I915_TILING_Yf)
+		copy_yf_to_linear(data, buf, linear);
+	else
+		copy_gtt_to_linear(data, buf, linear);
 
 	return linear;
 }
@@ -173,7 +279,7 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
 	cairo_surface_t *surface;
 	cairo_pattern_t *pat;
 	cairo_t *cr;
-	void *map, *linear;
+	void *linear;
 
 	linear = linear_copy(data, buf);
 
@@ -216,15 +322,10 @@ static void scratch_buf_draw_pattern(data_t *data, struct igt_buf *buf,
 
 	cairo_surface_destroy(surface);
 
-	gem_set_domain(data->drm_fd, buf->bo->handle,
-		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
-
-	map = gem_mmap__gtt(data->drm_fd, buf->bo->handle,
-			    buf->bo->size, PROT_READ | PROT_WRITE);
-
-	memcpy(map, linear, buf->bo->size);
-
-	munmap(map, buf->bo->size);
+	if (buf->tiling == I915_TILING_Yf)
+		copy_linear_to_yf(data, buf, linear);
+	else
+		copy_linear_to_gtt(data, buf, linear);
 
 	free(linear);
 }
@@ -236,36 +337,62 @@ scratch_buf_copy(data_t *data,
 {
 	int width = igt_buf_width(dst);
 	int height  = igt_buf_height(dst);
-	uint32_t *linear_dst, *linear_src;
+	uint32_t *linear_dst;
 
 	igt_assert_eq(igt_buf_width(dst), igt_buf_width(src));
 	igt_assert_eq(igt_buf_height(dst), igt_buf_height(src));
 	igt_assert_eq(dst->bo->size, src->bo->size);
+	igt_assert_eq(dst->bpp, src->bpp);
+
+	w = min(w, width - sx);
+	w = min(w, width - dx);
+
+	h = min(h, height - sy);
+	h = min(h, height - dy);
 
 	gem_set_domain(data->drm_fd, dst->bo->handle,
 		       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
-	gem_set_domain(data->drm_fd, src->bo->handle,
-		       I915_GEM_DOMAIN_GTT, 0);
-
 	linear_dst = gem_mmap__gtt(data->drm_fd, dst->bo->handle,
 				   dst->bo->size, PROT_WRITE);
-	linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
-				   src->bo->size, PROT_READ);
 
-	w = min(w, width - sx);
-	w = min(w, width - dx);
+	if (src->tiling == I915_TILING_Yf) {
+		void *map;
 
-	h = min(h, height - sy);
-	h = min(h, height - dy);
+		gem_set_domain(data->drm_fd, src->bo->handle,
+			       I915_GEM_DOMAIN_CPU, 0);
+		map = gem_mmap__cpu(data->drm_fd, src->bo->handle, 0,
+				    src->bo->size, PROT_READ);
+
+		for (int y = 0; y < h; y++) {
+			for (int x = 0; x < w; x++) {
+				const uint32_t *ptr = yf_ptr(map, sx+x, sy+y,
+							     src->stride,
+							     src->bpp / 8);
 
-	for (int y = 0; y < h; y++) {
-		igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
-				   &linear_src[(sy+y) * width + sx],
-				   w * 4);
+				linear_dst[(dy+y) * width + dx+x] = *ptr;
+			}
+		}
+
+		munmap(map, src->bo->size);
+	} else {
+		uint32_t *linear_src;
+
+		gem_set_domain(data->drm_fd, src->bo->handle,
+			       I915_GEM_DOMAIN_GTT, 0);
+
+		linear_src = gem_mmap__gtt(data->drm_fd, src->bo->handle,
+					   src->bo->size, PROT_READ);
+
+		for (int y = 0; y < h; y++) {
+			igt_memcpy_from_wc(&linear_dst[(dy+y) * width + dx],
+					   &linear_src[(sy+y) * width + sx],
+					   w * (src->bpp / 8));
+		}
+
+		munmap(linear_src, src->bo->size);
 	}
 
 	munmap(linear_dst, dst->bo->size);
-	munmap(linear_src, src->bo->size);
 }
 
 static void scratch_buf_init(data_t *data, struct igt_buf *buf,
@@ -274,6 +401,7 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 {
 	uint32_t tiling = req_tiling;
 	unsigned long pitch;
+	int bpp = 32;
 
 	memset(buf, 0, sizeof(*buf));
 
@@ -282,12 +410,13 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 		int size;
 
 		igt_require(intel_gen(data->devid) >= 9);
-		igt_assert_eq(tiling, I915_TILING_Y);
+		igt_assert(tiling == I915_TILING_Y ||
+			   tiling == I915_TILING_Yf);
 
-		buf->stride = ALIGN(width * 4, 128);
+		buf->stride = ALIGN(width * (bpp / 8), 128);
 		buf->size = buf->stride * height;
 		buf->tiling = tiling;
-		buf->bpp = 32;
+		buf->bpp = bpp;
 
 		aux_width = scratch_buf_aux_width(buf);
 		aux_height = scratch_buf_aux_height(buf);
@@ -299,18 +428,31 @@ static void scratch_buf_init(data_t *data, struct igt_buf *buf,
 
 		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
 
-		drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
-		igt_assert_eq(tiling, req_tiling);
+		if (tiling == I915_TILING_Y) {
+			drm_intel_bo_set_tiling(buf->bo, &tiling, buf->stride);
+			igt_assert_eq(tiling, req_tiling);
+		}
+	} else if (req_tiling == I915_TILING_Yf) {
+		int size;
+
+		buf->stride = ALIGN(width * (bpp / 8), 128);
+		buf->size = buf->stride * height;
+		buf->tiling = tiling;
+		buf->bpp = bpp;
+
+		size = buf->stride * ALIGN(height, 32);
+
+		buf->bo = drm_intel_bo_alloc(data->bufmgr, "", size, 4096);
 	} else {
 		buf->bo = drm_intel_bo_alloc_tiled(data->bufmgr, "",
-						   width, height, 4,
+						   width, height, bpp / 8,
 						   &tiling, &pitch, 0);
 		igt_assert_eq(tiling, req_tiling);
 
 		buf->stride = pitch;
 		buf->tiling = tiling;
 		buf->size = pitch * height;
-		buf->bpp = 32;
+		buf->bpp = bpp;
 	}
 
 	igt_assert(igt_buf_width(buf) == width);
@@ -396,7 +538,7 @@ static void scratch_buf_aux_check(data_t *data,
 		     "Aux surface indicates that nothing was compressed\n");
 }
 
-static void test(data_t *data, uint32_t tiling, bool test_ccs)
+static void test(data_t *data, uint32_t tiling, uint64_t ccs_modifier)
 {
 	struct igt_buf dst, ccs, ref;
 	struct {
@@ -404,7 +546,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 		const char *filename;
 		uint32_t tiling;
 		int x, y;
-	} src[3] = {
+	} src[] = {
 		{
 			.filename = "source-linear.png",
 			.tiling = I915_TILING_NONE,
@@ -420,18 +562,31 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 			.tiling = I915_TILING_Y,
 			.x = WIDTH/2+1, .y = 1,
 		},
+		{
+			.filename = "source-yf-tiled.png",
+			.tiling = I915_TILING_Yf,
+			.x = 1, .y = 1,
+		},
 	};
 
 	int opt_dump_aub = igt_aub_dump_enabled();
+	int num_src = ARRAY_SIZE(src);
+
+	/* no Yf before gen9 */
+	if (intel_gen(data->devid) < 9)
+		num_src--;
+
+	if (tiling == I915_TILING_Yf || ccs_modifier)
+		igt_require(intel_gen(data->devid) >= 9);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_init(data, &src[i].buf, WIDTH, HEIGHT, src[i].tiling, false);
 	scratch_buf_init(data, &dst, WIDTH, HEIGHT, tiling, false);
-	if (test_ccs)
-		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, I915_TILING_Y, true);
+	if (ccs_modifier)
+		scratch_buf_init(data, &ccs, WIDTH, HEIGHT, ccs_modifier, true);
 	scratch_buf_init(data, &ref, WIDTH, HEIGHT, I915_TILING_NONE, false);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_draw_pattern(data, &src[i].buf,
 					 0, 0, WIDTH, HEIGHT,
 					 0, 0, WIDTH, HEIGHT, true);
@@ -442,13 +597,13 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 	scratch_buf_copy(data,
 			 &dst, 0, 0, WIDTH, HEIGHT,
 			 &ref, 0, 0);
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	for (int i = 0; i < num_src; i++)
 		scratch_buf_copy(data,
 				 &src[i].buf, WIDTH/4, HEIGHT/4, WIDTH/2-2, HEIGHT/2-2,
 				 &ref, src[i].x, src[i].y);
 
 	if (opt_dump_png) {
-		for (int i = 0; i < ARRAY_SIZE(src); i++)
+		for (int i = 0; i < num_src; i++)
 			scratch_buf_write_to_png(data, &src[i].buf, src[i].filename);
 		scratch_buf_write_to_png(data, &dst, "destination.png");
 		scratch_buf_write_to_png(data, &ref, "reference.png");
@@ -468,24 +623,24 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 	 *	 |dst|src|
 	 *	  -------
 	 */
-	if (test_ccs)
+	if (ccs_modifier)
 		data->render_copy(data->batch, NULL,
 				  &dst, 0, 0, WIDTH, HEIGHT,
 				  &ccs, 0, 0);
 
-	for (int i = 0; i < ARRAY_SIZE(src); i++)
+	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,
-				  test_ccs ? &ccs : &dst, src[i].x, src[i].y);
+				  ccs_modifier ? &ccs : &dst, src[i].x, src[i].y);
 
-	if (test_ccs)
+	if (ccs_modifier)
 		data->render_copy(data->batch, NULL,
 				  &ccs, 0, 0, WIDTH, HEIGHT,
 				  &dst, 0, 0);
 
 	if (opt_dump_png){
 		scratch_buf_write_to_png(data, &dst, "result.png");
-		if (test_ccs) {
+		if (ccs_modifier) {
 			scratch_buf_write_to_png(data, &ccs, "compressed.png");
 			scratch_buf_aux_write_to_png(data, &ccs, "compressed-aux.png");
 		}
@@ -505,7 +660,7 @@ static void test(data_t *data, uint32_t tiling, bool test_ccs)
 		scratch_buf_check(data, &dst, &ref, WIDTH - 10, HEIGHT - 10);
 	}
 
-	if (test_ccs)
+	if (ccs_modifier)
 		scratch_buf_aux_check(data, &ccs);
 }
 
@@ -546,18 +701,31 @@ int main(int argc, char **argv)
 	}
 
 	igt_subtest("linear")
-		test(&data, I915_TILING_NONE, false);
+		test(&data, I915_TILING_NONE, 0);
 	igt_subtest("x-tiled")
-		test(&data, I915_TILING_X, false);
+		test(&data, I915_TILING_X, 0);
 	igt_subtest("y-tiled")
-		test(&data, I915_TILING_Y, false);
+		test(&data, I915_TILING_Y, 0);
+	igt_subtest("yf-tiled")
+		test(&data, I915_TILING_Yf, 0);
 
 	igt_subtest("y-tiled-ccs-to-linear")
-		test(&data, I915_TILING_NONE, true);
+		test(&data, I915_TILING_NONE, I915_TILING_Y);
 	igt_subtest("y-tiled-ccs-to-x-tiled")
-		test(&data, I915_TILING_X, true);
+		test(&data, I915_TILING_X, I915_TILING_Y);
 	igt_subtest("y-tiled-ccs-to-y-tiled")
-		test(&data, I915_TILING_Y, true);
+		test(&data, I915_TILING_Y, I915_TILING_Y);
+	igt_subtest("y-tiled-ccs-to-yf-tiled")
+		test(&data, I915_TILING_Yf, I915_TILING_Y);
+
+	igt_subtest("yf-tiled-ccs-to-linear")
+		test(&data, I915_TILING_NONE, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-x-tiled")
+		test(&data, I915_TILING_X, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-y-tiled")
+		test(&data, I915_TILING_Y, I915_TILING_Yf);
+	igt_subtest("yf-tiled-ccs-to-yf-tiled")
+		test(&data, I915_TILING_Yf, I915_TILING_Yf);
 
 	igt_fixture {
 		intel_batchbuffer_free(data.batch);
-- 
2.17.1

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

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3)
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (10 preceding siblings ...)
  2019-03-07  3:03 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2019-03-09  4:18 ` Patchwork
  2019-03-09  9:25 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  2019-03-12 10:13 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev4) Patchwork
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-09  4:18 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3)
URL   : https://patchwork.freedesktop.org/series/57553/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5729 -> IGTPW_2583
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/57553/revisions/3/mbox/

Known issues
------------

  Here are the changes found in IGTPW_2583 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@amdgpu/amd_basic@query-info:
    - fi-bsw-kefka:       NOTRUN -> SKIP [fdo#109271] +56

  * igt@amdgpu/amd_basic@semaphore:
    - fi-kbl-7500u:       NOTRUN -> SKIP [fdo#109271] +28

  * igt@gem_exec_basic@gtt-bsd2:
    - fi-byt-clapper:     NOTRUN -> SKIP [fdo#109271] +57

  * igt@gem_exec_basic@readonly-bsd1:
    - fi-snb-2520m:       NOTRUN -> SKIP [fdo#109271] +57

  * igt@i915_pm_rpm@basic-rte:
    - fi-bsw-kefka:       NOTRUN -> FAIL [fdo#108800]

  * igt@kms_addfb_basic@addfb25-y-tiled-small:
    - fi-byt-n2820:       NOTRUN -> SKIP [fdo#109271] +56

  * igt@kms_busy@basic-flip-a:
    - fi-bsw-n3050:       NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +1

  * igt@kms_busy@basic-flip-b:
    - fi-gdg-551:         PASS -> FAIL [fdo#103182]

  * igt@kms_busy@basic-flip-c:
    - fi-blb-e6850:       NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
    - fi-byt-clapper:     NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
    - fi-bsw-kefka:       NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
    - fi-snb-2520m:       NOTRUN -> SKIP [fdo#109271] / [fdo#109278]
    - fi-byt-n2820:       NOTRUN -> SKIP [fdo#109271] / [fdo#109278]

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-kbl-7500u:       NOTRUN -> DMESG-WARN [fdo#102505] / [fdo#103558] / [fdo#105079] / [fdo#105602]

  * igt@kms_chamelium@hdmi-crc-fast:
    - fi-bsw-n3050:       NOTRUN -> SKIP [fdo#109271] +62

  * igt@kms_chamelium@hdmi-edid-read:
    - fi-hsw-peppy:       NOTRUN -> SKIP [fdo#109271] +46

  * igt@kms_frontbuffer_tracking@basic:
    - fi-icl-u3:          PASS -> FAIL [fdo#103167]
    - fi-hsw-peppy:       NOTRUN -> DMESG-FAIL [fdo#102614] / [fdo#107814]
    - fi-byt-clapper:     NOTRUN -> FAIL [fdo#103167]

  * igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
    - fi-blb-e6850:       NOTRUN -> SKIP [fdo#109271] +20

  * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b-frame-sequence:
    - fi-byt-clapper:     NOTRUN -> FAIL [fdo#103191] / [fdo#107362]

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
    - fi-blb-e6850:       NOTRUN -> INCOMPLETE [fdo#107718]

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s4-devices:
    - fi-blb-e6850:       INCOMPLETE [fdo#107718] -> PASS

  * igt@i915_selftest@live_execlists:
    - fi-apl-guc:         INCOMPLETE [fdo#103927] / [fdo#109720] -> PASS

  * igt@kms_busy@basic-flip-a:
    - fi-gdg-551:         FAIL [fdo#103182] -> PASS

  * igt@kms_chamelium@dp-crc-fast:
    - fi-kbl-7500u:       DMESG-WARN [fdo#103841] -> PASS

  
  [fdo#102505]: https://bugs.freedesktop.org/show_bug.cgi?id=102505
  [fdo#102614]: https://bugs.freedesktop.org/show_bug.cgi?id=102614
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182
  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#103558]: https://bugs.freedesktop.org/show_bug.cgi?id=103558
  [fdo#103841]: https://bugs.freedesktop.org/show_bug.cgi?id=103841
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#105079]: https://bugs.freedesktop.org/show_bug.cgi?id=105079
  [fdo#105602]: https://bugs.freedesktop.org/show_bug.cgi?id=105602
  [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362
  [fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
  [fdo#107814]: https://bugs.freedesktop.org/show_bug.cgi?id=107814
  [fdo#108800]: https://bugs.freedesktop.org/show_bug.cgi?id=108800
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109720]: https://bugs.freedesktop.org/show_bug.cgi?id=109720


Participating hosts (40 -> 42)
------------------------------

  Additional (6): fi-bsw-n3050 fi-hsw-peppy fi-snb-2520m fi-bsw-kefka fi-byt-n2820 fi-byt-clapper 
  Missing    (4): fi-bsw-cyan fi-ilk-m540 fi-icl-u2 fi-bdw-samus 


Build changes
-------------

    * IGT: IGT_4878 -> IGTPW_2583

  CI_DRM_5729: b50390674ed3eff49d1926a86acfee68b5565093 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2583: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2583/
  IGT_4878: 478615b1edba88559386ba80ccbf0f035f3360a9 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@gem_render_copy@yf-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-linear
+igt@gem_render_copy@yf-tiled-ccs-to-x-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled
+igt@gem_render_copy@yf-tiled-ccs-to-y-tiled
+igt@gem_render_copy@y-tiled-ccs-to-yf-tiled

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2583/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3)
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (11 preceding siblings ...)
  2019-03-09  4:18 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3) Patchwork
@ 2019-03-09  9:25 ` Patchwork
  2019-03-12 10:13 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev4) Patchwork
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-09  9:25 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3)
URL   : https://patchwork.freedesktop.org/series/57553/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5729_full -> IGTPW_2583_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/57553/revisions/3/mbox/

New tests
---------

  New tests have been introduced between CI_DRM_5729_full and IGTPW_2583_full:

### New IGT tests (6) ###

  * igt@gem_render_copy@y-tiled-ccs-to-yf-tiled:
    - Statuses : 3 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.26] s

  * igt@gem_render_copy@yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.26] s

  * igt@gem_render_copy@yf-tiled-ccs-to-linear:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-x-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.24] s

  * igt@gem_render_copy@yf-tiled-ccs-to-y-tiled:
    - Statuses : 3 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.25] s

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled:
    - Statuses : 3 pass(s) 2 skip(s)
    - Exec time: [0.0, 0.26] s

  

Known issues
------------

  Here are the changes found in IGTPW_2583_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gen3_render_tiledy_blits:
    - shard-kbl:          NOTRUN -> SKIP [fdo#109271] +26

  * igt@i915_pm_rpm@gem-execbuf-stress-extra-wait:
    - shard-snb:          NOTRUN -> SKIP [fdo#109271] +66

  * igt@kms_atomic_transition@3x-modeset-transitions:
    - shard-snb:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +5

  * igt@kms_busy@extended-modeset-hang-newfb-render-c:
    - shard-glk:          PASS -> DMESG-WARN [fdo#107956]
    - shard-hsw:          PASS -> DMESG-WARN [fdo#107956] +1
    - shard-kbl:          PASS -> DMESG-WARN [fdo#107956] +1

  * igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-c:
    - shard-glk:          NOTRUN -> DMESG-WARN [fdo#107956]

  * igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-a:
    - shard-hsw:          NOTRUN -> DMESG-WARN [fdo#107956]

  * igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
    - shard-glk:          PASS -> FAIL [fdo#108145] +1

  * igt@kms_color@pipe-a-degamma:
    - shard-hsw:          NOTRUN -> SKIP [fdo#109271] +8

  * igt@kms_cursor_crc@cursor-256x256-random:
    - shard-glk:          NOTRUN -> FAIL [fdo#103232]

  * igt@kms_cursor_crc@cursor-256x85-random:
    - shard-apl:          PASS -> FAIL [fdo#103232] +6

  * igt@kms_cursor_crc@cursor-64x21-sliding:
    - shard-kbl:          PASS -> FAIL [fdo#103232]

  * igt@kms_cursor_crc@cursor-64x64-suspend:
    - shard-apl:          PASS -> FAIL [fdo#103191] / [fdo#103232]

  * igt@kms_cursor_crc@cursor-alpha-opaque:
    - shard-apl:          PASS -> FAIL [fdo#109350]

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-hsw:          PASS -> INCOMPLETE [fdo#103540]

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
    - shard-kbl:          PASS -> FAIL [fdo#103167]

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-apl:          PASS -> FAIL [fdo#103167] +1

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
    - shard-glk:          PASS -> FAIL [fdo#103167] +4

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-indfb-fliptrack:
    - shard-glk:          NOTRUN -> SKIP [fdo#109271] +37

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes:
    - shard-kbl:          PASS -> INCOMPLETE [fdo#103665]

  * igt@kms_plane@plane-position-covered-pipe-b-planes:
    - shard-kbl:          PASS -> FAIL [fdo#103166]
    - shard-apl:          PASS -> FAIL [fdo#103166]

  * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
    - shard-kbl:          NOTRUN -> FAIL [fdo#108145] / [fdo#108590]

  * igt@kms_plane_alpha_blend@pipe-c-alpha-opaque-fb:
    - shard-kbl:          PASS -> FAIL [fdo#108145]
    - shard-apl:          PASS -> FAIL [fdo#108145]

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
    - shard-glk:          PASS -> FAIL [fdo#103166]

  * igt@kms_plane_scaling@pipe-b-scaler-with-clipping-clamping:
    - shard-glk:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +3

  * igt@kms_rotation_crc@multiplane-rotation-cropping-top:
    - shard-kbl:          PASS -> FAIL [fdo#109016]

  * igt@kms_setmode@basic:
    - shard-glk:          PASS -> FAIL [fdo#99912]

  * igt@kms_universal_plane@disable-primary-vs-flip-pipe-d:
    - shard-kbl:          NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +4

  * igt@kms_vblank@pipe-c-ts-continuation-modeset-hang:
    - shard-apl:          PASS -> FAIL [fdo#104894]

  
#### Possible fixes ####

  * igt@gem_eio@context-create:
    - shard-glk:          FAIL -> PASS

  * igt@i915_pm_rps@reset:
    - shard-glk:          FAIL [fdo#102250] -> PASS

  * igt@i915_suspend@forcewake:
    - shard-kbl:          INCOMPLETE [fdo#103665] -> PASS

  * igt@kms_busy@extended-modeset-hang-newfb-render-a:
    - shard-hsw:          DMESG-WARN [fdo#107956] -> PASS
    - shard-kbl:          DMESG-WARN [fdo#107956] -> PASS

  * igt@kms_busy@extended-modeset-hang-newfb-render-b:
    - shard-snb:          DMESG-WARN [fdo#107956] -> PASS +1

  * igt@kms_ccs@pipe-a-crc-sprite-planes-basic:
    - shard-apl:          FAIL [fdo#107725] / [fdo#108145] -> PASS
    - shard-glk:          FAIL [fdo#108145] -> PASS

  * igt@kms_color@pipe-a-ctm-max:
    - shard-apl:          FAIL [fdo#108147] -> PASS

  * igt@kms_color@pipe-a-degamma:
    - shard-apl:          FAIL [fdo#104782] / [fdo#108145] -> PASS

  * igt@kms_cursor_crc@cursor-128x128-random:
    - shard-apl:          FAIL [fdo#103232] -> PASS +4

  * igt@kms_cursor_crc@cursor-256x256-random:
    - shard-kbl:          FAIL [fdo#103232] -> PASS

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-hsw:          INCOMPLETE [fdo#103540] -> PASS

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-apl:          FAIL [fdo#103167] -> PASS +5

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff:
    - shard-glk:          FAIL [fdo#103167] -> PASS +6
    - shard-kbl:          FAIL [fdo#103167] -> PASS +1

  * igt@kms_plane@pixel-format-pipe-b-planes-source-clamping:
    - shard-apl:          FAIL [fdo#108948] -> PASS

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
    - shard-kbl:          FAIL [fdo#103166] -> PASS

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-none:
    - shard-glk:          FAIL [fdo#103166] -> PASS +2
    - shard-apl:          FAIL [fdo#103166] -> PASS +3

  * igt@kms_setmode@basic:
    - shard-apl:          FAIL [fdo#99912] -> PASS

  * igt@kms_vblank@pipe-b-ts-continuation-suspend:
    - shard-kbl:          FAIL [fdo#104894] -> PASS

  * igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend:
    - shard-apl:          FAIL [fdo#104894] -> PASS +1

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#102250]: https://bugs.freedesktop.org/show_bug.cgi?id=102250
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782
  [fdo#104894]: https://bugs.freedesktop.org/show_bug.cgi?id=104894
  [fdo#107725]: https://bugs.freedesktop.org/show_bug.cgi?id=107725
  [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108147]: https://bugs.freedesktop.org/show_bug.cgi?id=108147
  [fdo#108590]: https://bugs.freedesktop.org/show_bug.cgi?id=108590
  [fdo#108948]: https://bugs.freedesktop.org/show_bug.cgi?id=108948
  [fdo#109016]: https://bugs.freedesktop.org/show_bug.cgi?id=109016
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109350]: https://bugs.freedesktop.org/show_bug.cgi?id=109350
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (7 -> 5)
------------------------------

  Missing    (2): shard-skl shard-iclb 


Build changes
-------------

    * IGT: IGT_4878 -> IGTPW_2583
    * Piglit: piglit_4509 -> None

  CI_DRM_5729: b50390674ed3eff49d1926a86acfee68b5565093 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2583: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2583/
  IGT_4878: 478615b1edba88559386ba80ccbf0f035f3360a9 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2583/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev4)
  2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
                   ` (12 preceding siblings ...)
  2019-03-09  9:25 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2019-03-12 10:13 ` Patchwork
  13 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2019-03-12 10:13 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev4)
URL   : https://patchwork.freedesktop.org/series/57553/
State : failure

== Summary ==

Applying: lib/rendercopy: Copy gen8 surface state definition to gen-9 header
Using index info to reconstruct a base tree...
M	lib/gen8_render.h
M	lib/gen9_render.h
M	lib/rendercopy_gen9.c
Falling back to patching base and 3-way merge...
Auto-merging lib/rendercopy_gen9.c
Auto-merging lib/gen9_render.h
CONFLICT (content): Merge conflict in lib/gen9_render.h
Patch failed at 0001 lib/rendercopy: Copy gen8 surface state definition to gen-9 header
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

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

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2019-03-12 10:13 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-05  1:47 [igt-dev] [PATCH i-g-t 1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Dhinakaran Pandiyan
2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 2/7] lib/rendercopy: Add support for Yf/Ys tiling to gen9 rendercopy Dhinakaran Pandiyan
2019-03-05 10:14   ` Katarzyna Dec
2019-03-07  1:39     ` Pandiyan, Dhinakaran
2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 3/7] tests/gem_render_copy: Test Yf tiling Dhinakaran Pandiyan
2019-03-05 14:26   ` Katarzyna Dec
2019-03-07  0:58     ` Dhinakaran Pandiyan
2019-03-08  9:59       ` Katarzyna Dec
2019-03-07  1:33   ` [igt-dev] [PATCH i-g-t v2 " Dhinakaran Pandiyan
2019-03-09  3:36     ` [igt-dev] [PATCH i-g-t v3 " Dhinakaran Pandiyan
2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 4/7] lib/igt_fb: Use rendercopy for rendering into compressed buffers Dhinakaran Pandiyan
2019-03-06 22:42   ` Clinton Taylor
2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 5/7] lib/igt_fb: s/tiling/modifier/ where appropriate Dhinakaran Pandiyan
2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 6/7] lib/igt_fb: Function to create a bo for passed in igt_fb Dhinakaran Pandiyan
2019-03-05  1:47 ` [igt-dev] [PATCH i-g-t 7/7] tests/kms_ccs: Generate compressed surfaces with rendercopy Dhinakaran Pandiyan
2019-03-05  2:47 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header Patchwork
2019-03-05  8:43 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-03-05 10:12 ` [igt-dev] [PATCH i-g-t 1/7] " Katarzyna Dec
2019-03-07  2:07 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev2) Patchwork
2019-03-07  3:03 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-03-09  4:18 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev3) Patchwork
2019-03-09  9:25 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-03-12 10:13 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,1/7] lib/rendercopy: Copy gen8 surface state definition to gen-9 header (rev4) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.