From d8e83756f0d5b435f3dd491beb663efec4cb55e9 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 5 Feb 2025 19:24:37 +0100 Subject: [PATCH] [dxvk] Add config option to toggle tiler optimizations --- dxvk.conf | 10 ++++++++++ src/dxvk/dxvk_device.cpp | 4 +++- src/dxvk/dxvk_options.cpp | 1 + src/dxvk/dxvk_options.h | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/dxvk.conf b/dxvk.conf index 54f2ac0ab03..006ffbda13f 100644 --- a/dxvk.conf +++ b/dxvk.conf @@ -207,6 +207,16 @@ # dxvk.tearFree = Auto +# Controls tiler optimizations. Enabling these will alter the behaviour of +# submission heuristics and enables some non-default behaviour in DXVK. +# This option is only intended to be changed for performance testing and +# debugging purposes. +# +# Supported values: Auto, True, False + +# dxvk.tilerMode = Auto + + # Assume that command lists created from deferred contexts are only used # once. This is extremely common and may improve performance while reducing # the amount of memory wasted if games keep their command list objects alive diff --git a/src/dxvk/dxvk_device.cpp b/src/dxvk/dxvk_device.cpp index 5ab0e2c006b..874d7b94474 100644 --- a/src/dxvk/dxvk_device.cpp +++ b/src/dxvk/dxvk_device.cpp @@ -434,7 +434,9 @@ namespace dxvk { hints.renderPassClearFormatBug = m_adapter->matchesDriver( VK_DRIVER_ID_NVIDIA_PROPRIETARY, Version(), Version(560, 28, 3)); // On tilers we need to respect render passes some more - hints.preferRenderPassOps = m_adapter->matchesDriver(VK_DRIVER_ID_MESA_TURNIP); + bool tilerMode = m_adapter->matchesDriver(VK_DRIVER_ID_MESA_TURNIP); + applyTristate(tilerMode, m_options.tilerMode); + hints.preferRenderPassOps = tilerMode; return hints; } diff --git a/src/dxvk/dxvk_options.cpp b/src/dxvk/dxvk_options.cpp index 8fb901f31de..d2d455c337f 100644 --- a/src/dxvk/dxvk_options.cpp +++ b/src/dxvk/dxvk_options.cpp @@ -19,6 +19,7 @@ namespace dxvk { zeroMappedMemory = config.getOption ("dxvk.zeroMappedMemory", false); allowFse = config.getOption ("dxvk.allowFse", false); deviceFilter = config.getOption("dxvk.deviceFilter", ""); + tilerMode = config.getOption("dxvk.tilerMode", Tristate::Auto); } } diff --git a/src/dxvk/dxvk_options.h b/src/dxvk/dxvk_options.h index 36f92037778..5351ac68b49 100644 --- a/src/dxvk/dxvk_options.h +++ b/src/dxvk/dxvk_options.h @@ -58,6 +58,9 @@ namespace dxvk { /// Allows full-screen exclusive mode on Windows bool allowFse = false; + /// Whether to enable tiler optimizations + Tristate tilerMode = Tristate::Auto; + // Device name std::string deviceFilter; };