summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2020-05-29 20:26:00 +0200
committerDylan Baker <dylan.c.baker@intel.com>2020-06-09 11:02:04 -0700
commit549e247aeb3f55507dcf21207c00172ea461787a (patch)
tree61eaff5e3fa1f50b17e782f3901905b6c3b2c48d
parenta7a9df28a9029bf4ce835dbbc57b80535d44011f (diff)
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 d3c937c0e4d1dd05072d9a7169532517ef7d0c7f)
-rw-r--r--.pick_status.json2
-rw-r--r--src/amd/vulkan/radv_device.c79
2 files changed, 41 insertions, 40 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 44d00837709..7cbf41dfeae 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -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
},
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 5682ff2c908..1d50e48c2da 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -598,48 +598,49 @@ radv_handle_per_app_options(struct radv_instance *instance,
const VkApplicationInfo *info)
{
const char *name = info ? info->pApplicationName : NULL;
-
- if (!name)
- return;
-
- 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.
+ const char *engine_name = info ? info->pEngineName : NULL;
+
+ 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
*/
- instance->perftest_flags |= RADV_PERFTEST_SISCHED;
- }
- } 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.
+ 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->perftest_flags |= RADV_PERFTEST_SHADER_BALLOT;
+ 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 (engine_name) {
+ if (!strcmp(engine_name, "vkd3d")) {
+ /* Zero VRAM for all VKD3D (DX12->VK) games to fix
+ * rendering issues.
+ */
+ instance->debug_flags |= RADV_DEBUG_ZERO_VRAM;
}
- } 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;
}
}