diff --git a/src/intel/dev/intel_debug.c b/src/intel/dev/intel_debug.c index 6fc7b3d1f9d..380c1c703a9 100644 --- a/src/intel/dev/intel_debug.c +++ b/src/intel/dev/intel_debug.c @@ -88,6 +88,7 @@ static const struct debug_control_bitset debug_control[] = { OPT1("do32", DEBUG_DO32), OPT1("norbc", DEBUG_NO_CCS), OPT1("noccs", DEBUG_NO_CCS), + OPT1("noccs-modifier", DEBUG_NO_CCS_MODIFIER), OPT1("nohiz", DEBUG_NO_HIZ), OPT1("color", DEBUG_COLOR), OPT1("reemit", DEBUG_REEMIT), diff --git a/src/intel/dev/intel_debug.h b/src/intel/dev/intel_debug.h index 695f53ae2ca..a6da7287a44 100644 --- a/src/intel/dev/intel_debug.h +++ b/src/intel/dev/intel_debug.h @@ -67,6 +67,7 @@ enum intel_debug_flag { DEBUG_L3, DEBUG_NO_CCS, DEBUG_NO_HIZ, + DEBUG_NO_CCS_MODIFIER, DEBUG_COLOR, DEBUG_REEMIT, DEBUG_SOFT64, diff --git a/src/intel/isl/isl_drm.c b/src/intel/isl/isl_drm.c index 36ead0da8b6..80e4feb286c 100644 --- a/src/intel/isl/isl_drm.c +++ b/src/intel/isl/isl_drm.c @@ -212,6 +212,18 @@ isl_drm_modifier_get_score(const struct intel_device_info *devinfo, if (mod_str != NULL) { return modifier == strtoul(mod_str, NULL, 0); } + + const struct isl_drm_modifier_info *mod_info = + isl_drm_modifier_get_info(modifier); + if (mod_info != NULL) { + if (mod_info->supports_render_compression && + (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_CCS_MODIFIER))) + return 0; + + if (mod_info->supports_clear_color && INTEL_DEBUG(DEBUG_NO_FAST_CLEAR)) + return 0; + } + /* FINISHME: Add gfx12 modifiers */ switch (modifier) { default: @@ -233,25 +245,16 @@ isl_drm_modifier_get_score(const struct intel_device_info *devinfo, if (devinfo->ver <= 8 || devinfo->ver >= 12) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS)) - return 0; - return 4; case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS: if (devinfo->verx10 != 120) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS)) - return 0; - return 4; case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC: if (devinfo->verx10 != 120) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_FAST_CLEAR)) - return 0; - return 5; case I915_FORMAT_MOD_4_TILED: /* Gfx12.5 introduces Tile4. */ @@ -263,49 +266,31 @@ isl_drm_modifier_get_score(const struct intel_device_info *devinfo, if (!intel_device_info_is_dg2(devinfo)) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS)) - return 0; - return 4; case I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC: if (!intel_device_info_is_dg2(devinfo)) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_FAST_CLEAR)) - return 0; - return 5; case I915_FORMAT_MOD_4_TILED_MTL_RC_CCS: if (!intel_device_info_is_mtl_or_arl(devinfo)) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS)) - return 0; - return 4; case I915_FORMAT_MOD_4_TILED_MTL_RC_CCS_CC: if (!intel_device_info_is_mtl_or_arl(devinfo)) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_FAST_CLEAR)) - return 0; - return 5; case I915_FORMAT_MOD_4_TILED_LNL_CCS: if (devinfo->ver < 20 || devinfo->has_local_mem) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS)) - return 0; - return 4; case I915_FORMAT_MOD_4_TILED_BMG_CCS: if (devinfo->ver < 20 || !devinfo->has_local_mem) return 0; - if (INTEL_DEBUG(DEBUG_NO_CCS)) - return 0; - return 4; } }