From 6b5d595b3e3a96c829f07b60935ebaba3376133e Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 26 Feb 2025 22:29:38 +0100 Subject: [PATCH] [d3d11] Add option to force compute shader UAV synchronization --- src/d3d11/d3d11_options.cpp | 1 + src/d3d11/d3d11_options.h | 7 +++++++ src/dxbc/dxbc_options.cpp | 1 + 3 files changed, 9 insertions(+) diff --git a/src/d3d11/d3d11_options.cpp b/src/d3d11/d3d11_options.cpp index b6d4d8045..e2281a3be 100644 --- a/src/d3d11/d3d11_options.cpp +++ b/src/d3d11/d3d11_options.cpp @@ -15,6 +15,7 @@ namespace dxvk { D3D11Options::D3D11Options(const Config& config) { this->zeroInitWorkgroupMemory = config.getOption("d3d11.zeroInitWorkgroupMemory", false); this->forceVolatileTgsmAccess = config.getOption("d3d11.forceVolatileTgsmAccess", false); + this->forceComputeUavBarriers = config.getOption("d3d11.forceComputeUavBarriers", false); this->relaxedBarriers = config.getOption("d3d11.relaxedBarriers", false); this->relaxedGraphicsBarriers = config.getOption("d3d11.relaxedGraphicsBarriers", false); this->maxTessFactor = config.getOption("d3d11.maxTessFactor", 0); diff --git a/src/d3d11/d3d11_options.h b/src/d3d11/d3d11_options.h index ec1dde73b..45405af9c 100644 --- a/src/d3d11/d3d11_options.h +++ b/src/d3d11/d3d11_options.h @@ -26,6 +26,13 @@ namespace dxvk { /// without explicit synchronization. bool forceVolatileTgsmAccess = false; + /// Force UAV synchronization insided compute shaders + /// + /// Workaround for compute shaders that access overlapping + /// memory regions within a UAV without proper workgroup + /// synchroniation. Will have a negative performance impact. + bool forceComputeUavBarriers = false; + /// Use relaxed memory barriers /// /// May improve performance in some games, diff --git a/src/dxbc/dxbc_options.cpp b/src/dxbc/dxbc_options.cpp index 7c269f792..257e822f1 100644 --- a/src/dxbc/dxbc_options.cpp +++ b/src/dxbc/dxbc_options.cpp @@ -35,6 +35,7 @@ namespace dxvk { invariantPosition = options.invariantPosition; zeroInitWorkgroupMemory = options.zeroInitWorkgroupMemory; forceVolatileTgsmAccess = options.forceVolatileTgsmAccess; + forceComputeUavBarriers = options.forceComputeUavBarriers; disableMsaa = options.disableMsaa; forceSampleRateShading = options.forceSampleRateShading; enableSampleShadingInterlock = device->features().extFragmentShaderInterlock.fragmentShaderSampleInterlock;