radv: add radv_disable_dcc_stores and enable for Indiana Jones: The Great Circle

Likely a game bug but can't be 100% sure because the game uses RT by
default and renderdoc still doesn't have support for it.

Cc: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32528>
This commit is contained in:
Samuel Pitoiset 2024-12-06 16:25:18 +01:00 committed by Marge Bot
parent 1798809985
commit e3d1f27b31
5 changed files with 12 additions and 0 deletions

View file

@ -295,6 +295,10 @@ radv_use_dcc_for_image_early(struct radv_device *device, struct radv_image *imag
if (instance->drirc.disable_dcc_mips && pCreateInfo->mipLevels > 1)
return false;
/* Force disable DCC for stores to workaround game bugs. */
if (instance->drirc.disable_dcc_stores && (pCreateInfo->usage & VK_IMAGE_USAGE_STORAGE_BIT))
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;

View file

@ -174,6 +174,7 @@ static const driOptionDescription radv_dri_options[] = {
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_DCC_STORES(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)
@ -282,6 +283,7 @@ radv_init_dri_options(struct radv_instance *instance)
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");
instance->drirc.disable_dcc_stores = driQueryOptionb(&instance->drirc.options, "radv_disable_dcc_stores");
}
static const struct vk_instance_extension_table radv_instance_extensions_supported = {

View file

@ -72,6 +72,7 @@ struct radv_instance {
bool vk_require_etc2;
bool vk_require_astc;
bool disable_dcc_mips;
bool disable_dcc_stores;
char *app_layer;
uint8_t override_graphics_shader_version;
uint8_t override_compute_shader_version;

View file

@ -111,6 +111,7 @@ Application bugs worked around in this file:
<application name="Indiana Jones: The Great Circle" application_name_match="TheGreatCircle">
<option name="radv_zero_vram" value="true" />
<option name="radv_legacy_sparse_binding" value="true" />
<option name="radv_disable_dcc_stores" value="true" />
</application>
<application name="DOOM (2016)" application_name_match="DOOM$">

View file

@ -696,6 +696,10 @@
DRI_CONF_OPT_B(radv_disable_dcc_mips, def, \
"Disable DCC for color images with mips")
#define DRI_CONF_RADV_DISABLE_DCC_STORES(def) \
DRI_CONF_OPT_B(radv_disable_dcc_stores, def, \
"Disable DCC for color storage images")
#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")