mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 14:00:16 +01:00
radv: enable zero VRAM for all VKD3D (DX12->VK) games
To fix rendering issues with Metro Exodus, RE2 and 3 and probably
more titles. It seems the default behaviour of DX12 anyways.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3064
Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5262>
(cherry picked from commit d3c937c0e4)
This commit is contained in:
parent
a7a9df28a9
commit
549e247aeb
2 changed files with 40 additions and 39 deletions
|
|
@ -1705,7 +1705,7 @@
|
|||
"description": "radv: enable zero VRAM for all VKD3D (DX12->VK) games",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -598,48 +598,49 @@ radv_handle_per_app_options(struct radv_instance *instance,
|
|||
const VkApplicationInfo *info)
|
||||
{
|
||||
const char *name = info ? info->pApplicationName : NULL;
|
||||
const char *engine_name = info ? info->pEngineName : NULL;
|
||||
|
||||
if (!name)
|
||||
return;
|
||||
if (name) {
|
||||
if (!strcmp(name, "DOOM_VFR")) {
|
||||
/* Work around a Doom VFR game bug */
|
||||
instance->debug_flags |= RADV_DEBUG_NO_DYNAMIC_BOUNDS;
|
||||
} else if (!strcmp(name, "MonsterHunterWorld.exe")) {
|
||||
/* Workaround for a WaW hazard when LLVM moves/merges
|
||||
* load/store memory operations.
|
||||
* See https://reviews.llvm.org/D61313
|
||||
*/
|
||||
if (LLVM_VERSION_MAJOR < 9)
|
||||
instance->debug_flags |= RADV_DEBUG_NO_LOAD_STORE_OPT;
|
||||
} else if (!strcmp(name, "Wolfenstein: Youngblood")) {
|
||||
if (!(instance->debug_flags & RADV_DEBUG_NO_SHADER_BALLOT) &&
|
||||
!(instance->perftest_flags & RADV_PERFTEST_ACO)) {
|
||||
/* Force enable VK_AMD_shader_ballot because it looks
|
||||
* safe and it gives a nice boost (+20% on Vega 56 at
|
||||
* this time). It also prevents corruption on LLVM.
|
||||
*/
|
||||
instance->perftest_flags |= RADV_PERFTEST_SHADER_BALLOT;
|
||||
}
|
||||
} else if (!strcmp(name, "Fledge")) {
|
||||
/*
|
||||
* Zero VRAM for "The Surge 2"
|
||||
*
|
||||
* This avoid a hang when when rendering any level. Likely
|
||||
* uninitialized data in an indirect draw.
|
||||
*/
|
||||
instance->debug_flags |= RADV_DEBUG_ZERO_VRAM;
|
||||
} else if (!strcmp(name, "DOOMEternal")) {
|
||||
/* Zero VRAM for Doom Eternal to fix rendering issues. */
|
||||
instance->debug_flags |= RADV_DEBUG_ZERO_VRAM;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp(name, "Talos - Linux - 32bit") ||
|
||||
!strcmp(name, "Talos - Linux - 64bit")) {
|
||||
if (!(instance->debug_flags & RADV_DEBUG_NO_SISCHED)) {
|
||||
/* Force enable LLVM sisched for Talos because it looks
|
||||
* safe and it gives few more FPS.
|
||||
if (engine_name) {
|
||||
if (!strcmp(engine_name, "vkd3d")) {
|
||||
/* Zero VRAM for all VKD3D (DX12->VK) games to fix
|
||||
* rendering issues.
|
||||
*/
|
||||
instance->perftest_flags |= RADV_PERFTEST_SISCHED;
|
||||
instance->debug_flags |= RADV_DEBUG_ZERO_VRAM;
|
||||
}
|
||||
} else if (!strcmp(name, "DOOM_VFR")) {
|
||||
/* Work around a Doom VFR game bug */
|
||||
instance->debug_flags |= RADV_DEBUG_NO_DYNAMIC_BOUNDS;
|
||||
} else if (!strcmp(name, "MonsterHunterWorld.exe")) {
|
||||
/* Workaround for a WaW hazard when LLVM moves/merges
|
||||
* load/store memory operations.
|
||||
* See https://reviews.llvm.org/D61313
|
||||
*/
|
||||
if (LLVM_VERSION_MAJOR < 9)
|
||||
instance->debug_flags |= RADV_DEBUG_NO_LOAD_STORE_OPT;
|
||||
} else if (!strcmp(name, "Wolfenstein: Youngblood")) {
|
||||
if (!(instance->debug_flags & RADV_DEBUG_NO_SHADER_BALLOT) &&
|
||||
!(instance->perftest_flags & RADV_PERFTEST_ACO)) {
|
||||
/* Force enable VK_AMD_shader_ballot because it looks
|
||||
* safe and it gives a nice boost (+20% on Vega 56 at
|
||||
* this time). It also prevents corruption on LLVM.
|
||||
*/
|
||||
instance->perftest_flags |= RADV_PERFTEST_SHADER_BALLOT;
|
||||
}
|
||||
} else if (!strcmp(name, "Fledge")) {
|
||||
/*
|
||||
* Zero VRAM for "The Surge 2"
|
||||
*
|
||||
* This avoid a hang when when rendering any level. Likely
|
||||
* uninitialized data in an indirect draw.
|
||||
*/
|
||||
instance->debug_flags |= RADV_DEBUG_ZERO_VRAM;
|
||||
} else if (!strcmp(name, "DOOMEternal")) {
|
||||
/* Zero VRAM for Doom Eternal to fix rendering issues. */
|
||||
instance->debug_flags |= RADV_DEBUG_ZERO_VRAM;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue