From 5819a69302c9e28d46f646d456613c14d026da16 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 5 Apr 2019 20:24:08 +0200 Subject: [PATCH] [d3d11] Add option to enable constant buffer range checks --- src/d3d11/d3d11_options.cpp | 5 +++-- src/d3d11/d3d11_options.h | 5 +++++ src/dxbc/dxbc_options.cpp | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/d3d11/d3d11_options.cpp b/src/d3d11/d3d11_options.cpp index ebcdd5ad..21a33a11 100644 --- a/src/d3d11/d3d11_options.cpp +++ b/src/d3d11/d3d11_options.cpp @@ -7,8 +7,9 @@ namespace dxvk { D3D11Options::D3D11Options(const Config& config) { this->allowMapFlagNoWait = config.getOption("d3d11.allowMapFlagNoWait", false); this->dcSingleUseMode = config.getOption("d3d11.dcSingleUseMode", true); - this->strictDivision = config.getOption("d3d11.strictDivision", false); - this->zeroInitWorkgroupMemory = config.getOption("d3d11.zeroInitWorkgroupMemory", false); + this->strictDivision = config.getOption("d3d11.strictDivision", false); + this->constantBufferRangeCheck = config.getOption("d3d11.constantBufferRangeCheck", false); + this->zeroInitWorkgroupMemory = config.getOption("d3d11.zeroInitWorkgroupMemory", false); this->relaxedBarriers = config.getOption("d3d11.relaxedBarriers", false); this->maxTessFactor = config.getOption("d3d11.maxTessFactor", 0); this->samplerAnisotropy = config.getOption("d3d11.samplerAnisotropy", -1); diff --git a/src/d3d11/d3d11_options.h b/src/d3d11/d3d11_options.h index 4b738de8..c87d5a05 100644 --- a/src/d3d11/d3d11_options.h +++ b/src/d3d11/d3d11_options.h @@ -30,6 +30,11 @@ namespace dxvk { /// games may expect correct behaviour. bool strictDivision; + /// Enables out-of-bounds access check for constant + /// buffers. Workaround for a few broken games that + /// access random data inside their shaders. + bool constantBufferRangeCheck; + /// Zero-initialize workgroup memory /// /// Workargound for games that don't initialize diff --git a/src/dxbc/dxbc_options.cpp b/src/dxbc/dxbc_options.cpp index cce13915..94aceb59 100644 --- a/src/dxbc/dxbc_options.cpp +++ b/src/dxbc/dxbc_options.cpp @@ -28,8 +28,9 @@ namespace dxvk { useSdivForBufferIndex = adapter->matchesDriver(DxvkGpuVendor::Nvidia, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0); - strictDivision = options.strictDivision; - zeroInitWorkgroupMemory = options.zeroInitWorkgroupMemory; + strictDivision = options.strictDivision; + constantBufferRangeCheck = options.constantBufferRangeCheck; + zeroInitWorkgroupMemory = options.zeroInitWorkgroupMemory; // Disable early discard on RADV due to GPU hangs // Disable early discard on Nvidia because it may hurt performance