[igt-dev] [PATCH i-g-t 1/2] tests/kms_chamelium: Don't use CCS modifiers in random plane setup

Arkadiusz Hiler arkadiusz.hiler at intel.com
Thu Mar 12 09:51:36 UTC 2020


The randomized setup happens for overlay planes only and the
randomization of each value is completely independent, whereas every CCS
plane needs to come paired with a main surface that is setup correctly:

  Each CCS tile matches a 1024x512 pixel area of the main surface.
  To match certain aspects of the 3D hardware the CCS is
  considered to be made up of normal 128Bx32 Y tiles, Thus
  the CCS pitch must be specified in multiples of 128 bytes.

Let's not use CCS modifiers on the surfaces for the random tests - it
would complicate the code too much to create valid configurations.
A dedicated test for CCS would be much better.

Cc: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
Cc: Kunal Joshi <kunal1.joshi at intel.com>
Fixes: https://gitlab.freedesktop.org/drm/intel/issues/1404
Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler at intel.com>
---
 lib/igt_fb.c          | 12 ++++++------
 lib/igt_fb.h          |  2 ++
 tests/kms_chamelium.c |  1 +
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 0c4fdc5d..27d6e1d9 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -493,7 +493,7 @@ static bool is_gen12_ccs_modifier(uint64_t modifier)
 		modifier == I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC;
 }
 
-static bool is_ccs_modifier(uint64_t modifier)
+bool igt_is_ccs_modifier(uint64_t modifier)
 {
 	return is_gen12_ccs_modifier(modifier) ||
 		modifier == I915_FORMAT_MOD_Y_TILED_CCS ||
@@ -502,7 +502,7 @@ static bool is_ccs_modifier(uint64_t modifier)
 
 static bool is_ccs_plane(const struct igt_fb *fb, int plane)
 {
-	if (!is_ccs_modifier(fb->modifier))
+	if (!igt_is_ccs_modifier(fb->modifier))
 		return false;
 
 	return plane >= fb->num_planes / 2;
@@ -604,7 +604,7 @@ static int fb_num_planes(const struct igt_fb *fb)
 {
 	int num_planes = lookup_drm_format(fb->drm_format)->num_planes;
 
-	if (is_ccs_modifier(fb->modifier))
+	if (igt_is_ccs_modifier(fb->modifier))
 		num_planes *= 2;
 
 	if (fb->modifier == I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC)
@@ -1995,7 +1995,7 @@ static bool blitter_ok(const struct igt_fb *fb)
 	if (!is_i915_device(fb->fd))
 		return false;
 
-	if (is_ccs_modifier(fb->modifier))
+	if (igt_is_ccs_modifier(fb->modifier))
 		return false;
 
 	for (int i = 0; i < fb->num_planes; i++) {
@@ -2030,7 +2030,7 @@ static bool use_enginecopy(const struct igt_fb *fb)
 		return false;
 
 	return fb->modifier == I915_FORMAT_MOD_Yf_TILED ||
-	       is_ccs_modifier(fb->modifier) ||
+	       igt_is_ccs_modifier(fb->modifier) ||
 	       !gem_has_mappable_ggtt(fb->fd);
 }
 
@@ -2095,7 +2095,7 @@ static void init_buf(struct fb_blit_upload *blit,
 	if (buf->format_is_yuv_semiplanar)
 		buf->yuv_semiplanar_bpp = yuv_semiplanar_bpp(fb->drm_format);
 
-	if (is_ccs_modifier(fb->modifier)) {
+	if (igt_is_ccs_modifier(fb->modifier)) {
 		igt_assert_eq(fb->strides[0] & 127, 0);
 
 		if (is_gen12_ccs_modifier(fb->modifier))
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index 587f7a44..d049f40c 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -207,5 +207,7 @@ int igt_format_plane_bpp(uint32_t drm_format, int plane);
 void igt_format_array_fill(uint32_t **formats_array, unsigned int *count,
 			   bool allow_yuv);
 
+bool igt_is_ccs_modifier(uint64_t modifier);
+
 #endif /* __IGT_FB_H__ */
 
diff --git a/tests/kms_chamelium.c b/tests/kms_chamelium.c
index 2acac1e4..8046ac65 100644
--- a/tests/kms_chamelium.c
+++ b/tests/kms_chamelium.c
@@ -2079,6 +2079,7 @@ static void randomize_plane_setup(data_t *data, igt_plane_t *plane,
 	/* First pass to count the supported formats. */
 	for (i = 0; i < plane->format_mod_count; i++)
 		if (igt_fb_supported_format(plane->formats[i]) &&
+		    !igt_is_ccs_modifier(plane->modifiers[i]) &&
 		    (allow_yuv || !igt_format_is_yuv(plane->formats[i])))
 			idx[count++] = i;
 
-- 
2.24.1



More information about the igt-dev mailing list