[PATCH i-g-t] RFC: tests/kms_plane_lowres: Refactor test to handle tiling formats dynamically

Jeevan B jeevan.b at intel.com
Wed May 14 08:59:49 UTC 2025


This commit introduces functions to dynamically query the supported basic and
full tiling modes from the kernel (`igt_get_basic_tiling_mode()` and
`igt_get_full_tiling_mode()`). The goal is to eliminate hardcoding of tiling modes,
ensuring that the test environment reflects the actual supported configurations
for the platform.

By using this approach, we:
- Reduce the number of dynamic test cases, as only the supported tiling modes
  are tested.
- Avoid unnecessary noise in test results by ensuring only relevant tiling
  configurations are included.
- Improve test accuracy and reliability by directly aligning with the kernel's
  reported capabilities.

WIP:
- Added basic tiling mode query function.
- Added full tiling mode query function.
- Introduced helper function for tiling modifier string conversion.
- Defined enums for basic and full tiling modes.

Signed-off-by: Jeevan B <jeevan.b at intel.com>
---
 lib/igt_kms.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h | 40 +++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f3bc481f2..99b14bed5 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -7442,3 +7442,73 @@ int igt_backlight_write(int value, const char *fname, igt_backlight_context_t *c
 
 	return 0;
 }
+
+int igt_get_basic_tiling_mode(int fd, uint64_t *modifiers,
+			      enum igt_tiling_mode *basic_tiling)
+{
+/*
+     * Step 1: Define a local array of known basic tiling modes
+     *         Map each basic tiling to its corresponding I915_TILING_* value
+     */
+
+    /*
+     * Step 2: Loop over each tiling mode supported using the kms_flip_tiling logic
+     *
+     *         For each tiling:
+     *         - Create a small test buffer
+     *         - Attempt to set the tiling mode
+     *         - If ioctl succeeds, store the tiling mode in basic_tiling[]
+     *         - Store a default/zero modifier (optional)
+     */
+
+    /*
+     * Step 3: Return the number of tiling modes successfully supported
+     */
+return 0;
+}
+int igt_get_full_tiling_mode(int fd, uint64_t *modifiers,
+			     enum igt_tiling_mode *basic_tiling,
+			     enum igt_format_modifier *all_tiling)
+{
+/*
+     * Step 1: Define a static list of known Intel format modifiers
+     *         Use enum values from IGT_FMT_MOD_* defined in igt_kms.h
+     */
+
+    /*
+     * Step 2: For each modifier:
+     *         - Try to create an fb with that modifier
+     *         - If the fb is successfully created:
+     *             - Add the modifier to all_tiling[]
+     */
+
+    /*
+     * Step 3: Return the number of supported modifiers detected
+     */
+return 0;
+}
+
+const char *igt_modifier_str(uint64_t modifier)
+{
+	switch (modifier) {
+		case IGT_FMT_MOD_X_TILED: return "X_TILED";
+		case IGT_FMT_MOD_Y_TILED: return "Y_TILED";
+		case IGT_FMT_MOD_Yf_TILED: return "Yf_TILED";
+		case IGT_FMT_MOD_Y_TILED_CCS: return "Y_TILED_CCS";
+		case IGT_FMT_MOD_Yf_TILED_CCS: return "Yf_TILED_CCS";
+		case IGT_FMT_MOD_Y_TILED_GEN12_RC_CCS: return "GEN12_RC_CCS";
+		case IGT_FMT_MOD_Y_TILED_GEN12_MC_CCS: return "GEN12_MC_CCS";
+		case IGT_FMT_MOD_Y_TILED_GEN12_RC_CCS_CC: return "GEN12_RC_CCS_CC";
+		case IGT_FMT_MOD_4_TILED: return "4_TILED";
+		case IGT_FMT_MOD_4_TILED_DG2_RC_CCS: return "DG2_RC_CCS";
+		case IGT_FMT_MOD_4_TILED_DG2_MC_CCS: return "DG2_MC_CCS";
+		case IGT_FMT_MOD_4_TILED_DG2_RC_CCS_CC: return "DG2_RC_CCS_CC";
+		case IGT_FMT_MOD_4_TILED_MTL_RC_CCS: return "MTL_RC_CCS";
+		case IGT_FMT_MOD_4_TILED_MTL_MC_CCS: return "MTL_MC_CCS";
+		case IGT_FMT_MOD_4_TILED_MTL_RC_CCS_CC: return "MTL_RC_CCS_CC";
+		case IGT_FMT_MOD_4_TILED_LNL_CCS: return "LNL_CCS";
+		case IGT_FMT_MOD_4_TILED_BMG_CCS: return "BMG_CCS";
+
+		default: return "UNKNOWN";
+	}
+}
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 0381c82ad..f03de1e3d 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -168,6 +168,36 @@ enum igt_atomic_crtc_properties {
        IGT_NUM_CRTC_PROPS
 };
 
+/* Basic tiling format modifiers */
+enum igt_basic_tiling_mode {
+    IGT_TILING_NONE = 0,
+    IGT_TILING_X    = 1,
+    IGT_TILING_Y    = 2,
+    IGT_TILING_Yf   = 3,
+    IGT_TILING_4    = 4,
+};
+
+/* Full tiling format modifiers */
+enum igt_full_tiling_mode {
+    IGT_FMT_MOD_X_TILED                 = I915_FORMAT_MOD_X_TILED,
+    IGT_FMT_MOD_Y_TILED                 = I915_FORMAT_MOD_Y_TILED,
+    IGT_FMT_MOD_Yf_TILED                = I915_FORMAT_MOD_Yf_TILED,
+    IGT_FMT_MOD_Y_TILED_CCS             = I915_FORMAT_MOD_Y_TILED_CCS,
+    IGT_FMT_MOD_Yf_TILED_CCS            = I915_FORMAT_MOD_Yf_TILED_CCS,
+    IGT_FMT_MOD_Y_TILED_GEN12_RC_CCS    = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS,
+    IGT_FMT_MOD_Y_TILED_GEN12_MC_CCS    = I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS,
+    IGT_FMT_MOD_Y_TILED_GEN12_RC_CCS_CC = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC,
+    IGT_FMT_MOD_4_TILED                 = I915_FORMAT_MOD_4_TILED,
+    IGT_FMT_MOD_4_TILED_DG2_RC_CCS      = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS,
+    IGT_FMT_MOD_4_TILED_DG2_MC_CCS      = I915_FORMAT_MOD_4_TILED_DG2_MC_CCS,
+    IGT_FMT_MOD_4_TILED_DG2_RC_CCS_CC   = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC,
+    IGT_FMT_MOD_4_TILED_MTL_RC_CCS      = I915_FORMAT_MOD_4_TILED_MTL_RC_CCS,
+    IGT_FMT_MOD_4_TILED_MTL_MC_CCS      = I915_FORMAT_MOD_4_TILED_MTL_MC_CCS,
+    IGT_FMT_MOD_4_TILED_MTL_RC_CCS_CC   = I915_FORMAT_MOD_4_TILED_MTL_RC_CCS_CC,
+    IGT_FMT_MOD_4_TILED_LNL_CCS         = I915_FORMAT_MOD_4_TILED_LNL_CCS,
+    IGT_FMT_MOD_4_TILED_BMG_CCS         = I915_FORMAT_MOD_4_TILED_BMG_CCS,
+};
+
 /**
  * igt_crtc_prop_names
  *
@@ -1280,4 +1310,14 @@ void igt_set_link_params(int drm_fd, igt_output_t *output,
 int igt_backlight_read(int *result, const char *fname, igt_backlight_context_t *context);
 int igt_backlight_write(int value, const char *fname, igt_backlight_context_t *context);
 
+/* Queries */
+int igt_get_basic_tiling_mode(int fd, uint64_t *modifiers,
+			      enum igt_tiling_mode *basic_tiling);
+int igt_get_full_tiling_mode(int fd, uint64_t *modifiers,
+			     enum igt_tiling_mode *basic_tiling,
+			     enum igt_format_modifier *all_tiling);
+
+/* Helpers */
+const char *igt_modifier_str(uint64_t modifier);
+
 #endif /* __IGT_KMS_H__ */
-- 
2.25.1



More information about the igt-dev mailing list