diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 8670dea74c2..8746675a8cc 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -291,6 +291,10 @@ radv_use_dcc_for_image_early(struct radv_device *device, struct radv_image *imag return false; } + /* Force disable DCC for mips to workaround game bugs. */ + if (instance->drirc.disable_dcc_mips && pCreateInfo->mipLevels > 1) + return false; + /* DCC MSAA can't work on GFX10.3 and earlier without FMASK. */ if (pCreateInfo->samples > 1 && pdev->info.gfx_level < GFX11 && (instance->debug_flags & RADV_DEBUG_NO_FMASK)) return false; diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c index d7d09b4e1a5..884c7347e44 100644 --- a/src/amd/vulkan/radv_instance.c +++ b/src/amd/vulkan/radv_instance.c @@ -154,6 +154,7 @@ static const driOptionDescription radv_dri_options[] = { DRI_CONF_RADV_SPLIT_FMA(false) DRI_CONF_RADV_DISABLE_TC_COMPAT_HTILE_GENERAL(false) DRI_CONF_RADV_DISABLE_DCC(false) + DRI_CONF_RADV_DISABLE_DCC_MIPS(false) DRI_CONF_RADV_DISABLE_ANISO_SINGLE_LEVEL(false) DRI_CONF_RADV_DISABLE_TRUNC_COORD(false) DRI_CONF_RADV_DISABLE_SINKING_LOAD_INPUT_FS(false) @@ -264,6 +265,8 @@ radv_init_dri_options(struct radv_instance *instance) instance->drirc.vk_require_etc2 = driQueryOptionb(&instance->drirc.options, "vk_require_etc2"); instance->drirc.vk_require_astc = driQueryOptionb(&instance->drirc.options, "vk_require_astc"); + + instance->drirc.disable_dcc_mips = driQueryOptionb(&instance->drirc.options, "radv_disable_dcc_mips"); } static const struct vk_instance_extension_table radv_instance_extensions_supported = { diff --git a/src/amd/vulkan/radv_instance.h b/src/amd/vulkan/radv_instance.h index f43b211444d..876461b642b 100644 --- a/src/amd/vulkan/radv_instance.h +++ b/src/amd/vulkan/radv_instance.h @@ -71,6 +71,7 @@ struct radv_instance { bool report_llvm9_version_string; bool vk_require_etc2; bool vk_require_astc; + bool disable_dcc_mips; char *app_layer; uint8_t override_graphics_shader_version; uint8_t override_compute_shader_version; diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf index 371f9c8a7ca..5bf2bedc960 100644 --- a/src/util/00-radv-defaults.conf +++ b/src/util/00-radv-defaults.conf @@ -132,6 +132,9 @@ Application bugs worked around in this file: diff --git a/src/util/driconf.h b/src/util/driconf.h index 2160f7b33de..769d2dfd7d5 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -692,6 +692,10 @@ DRI_CONF_OPT_B(radv_disable_dcc, def, \ "Disable DCC for color images") +#define DRI_CONF_RADV_DISABLE_DCC_MIPS(def) \ + DRI_CONF_OPT_B(radv_disable_dcc_mips, def, \ + "Disable DCC for color images with mips") + #define DRI_CONF_RADV_DISABLE_ANISO_SINGLE_LEVEL(def) \ DRI_CONF_OPT_B(radv_disable_aniso_single_level, def, \ "Disable anisotropic filtering for single level images")