diff --git a/dxvk.conf b/dxvk.conf index 25d27cb9..2da3e646 100644 --- a/dxvk.conf +++ b/dxvk.conf @@ -150,6 +150,17 @@ # d3d11.zeroWorkgroupMemory = False +# Enables the dedicated transfer queue if available +# +# If enabled, resource uploads will be performed on the +# transfer queue rather than the graphics queue. This +# may improve texture streaming performance. +# +# Supported values: True, False + +# dxvk.enableTransferQueue = True + + # Sets number of pipeline compiler threads. # # Supported values: diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index f5331bce..446964c1 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -98,7 +98,8 @@ namespace dxvk { VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT, VK_QUEUE_TRANSFER_BIT); - if (transferQueue == VK_QUEUE_FAMILY_IGNORED) + if (transferQueue == VK_QUEUE_FAMILY_IGNORED + || !m_instance->options().enableTransferQueue) transferQueue = graphicsQueue; DxvkAdapterQueueIndices queues; diff --git a/src/dxvk/dxvk_options.cpp b/src/dxvk/dxvk_options.cpp index e1da8a48..f18fd70f 100644 --- a/src/dxvk/dxvk_options.cpp +++ b/src/dxvk/dxvk_options.cpp @@ -4,6 +4,7 @@ namespace dxvk { DxvkOptions::DxvkOptions(const Config& config) { enableStateCache = config.getOption ("dxvk.enableStateCache", true); + enableTransferQueue = config.getOption ("dxvk.enableTransferQueue", true); numCompilerThreads = config.getOption ("dxvk.numCompilerThreads", 0); useRawSsbo = config.getOption("dxvk.useRawSsbo", Tristate::Auto); useEarlyDiscard = config.getOption("dxvk.useEarlyDiscard", Tristate::Auto); diff --git a/src/dxvk/dxvk_options.h b/src/dxvk/dxvk_options.h index 79259875..aec003e4 100644 --- a/src/dxvk/dxvk_options.h +++ b/src/dxvk/dxvk_options.h @@ -11,6 +11,9 @@ namespace dxvk { /// Enable state cache bool enableStateCache; + /// Use transfer queue if available + bool enableTransferQueue; + /// Number of compiler threads /// when using the state cache int32_t numCompilerThreads;