From e95bc3256f3747133b1c71d234e1ce09b225de0f Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 30 Oct 2019 10:57:36 +0100 Subject: [PATCH] [d3d11] Move handling of constantBufferRangeCheck option to D3D11Options --- src/d3d11/d3d11_device.cpp | 2 +- src/d3d11/d3d11_options.cpp | 8 ++++++-- src/d3d11/d3d11_options.h | 4 +++- src/dxbc/dxbc_options.cpp | 4 +--- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index c85130116..7800a5d30 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -38,7 +38,7 @@ namespace dxvk { m_dxvkDevice (pContainer->GetDXVKDevice()), m_dxvkAdapter (m_dxvkDevice->adapter()), m_d3d11Formats (m_dxvkAdapter), - m_d3d11Options (m_dxvkAdapter->instance()->config()), + m_d3d11Options (m_dxvkAdapter->instance()->config(), m_dxvkDevice), m_dxbcOptions (m_dxvkDevice, m_d3d11Options) { m_initializer = new D3D11Initializer(this); m_context = new D3D11ImmediateContext(this, m_dxvkDevice); diff --git a/src/d3d11/d3d11_options.cpp b/src/d3d11/d3d11_options.cpp index 063a2e6b9..88d0018f2 100644 --- a/src/d3d11/d3d11_options.cpp +++ b/src/d3d11/d3d11_options.cpp @@ -4,11 +4,12 @@ namespace dxvk { - D3D11Options::D3D11Options(const Config& config) { + D3D11Options::D3D11Options(const Config& config, const Rc& device) { + const DxvkDeviceInfo& devInfo = device->properties(); + this->allowMapFlagNoWait = config.getOption("d3d11.allowMapFlagNoWait", true); this->dcSingleUseMode = config.getOption("d3d11.dcSingleUseMode", true); 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); @@ -18,6 +19,9 @@ namespace dxvk { this->maxFrameLatency = config.getOption("dxgi.maxFrameLatency", 0); this->syncInterval = config.getOption("dxgi.syncInterval", -1); + this->constantBufferRangeCheck = config.getOption("d3d11.constantBufferRangeCheck", false) + && DxvkGpuVendor(devInfo.core.properties.vendorID) != DxvkGpuVendor::Amd; + bool apitraceAttached = false; #ifndef __WINE__ apitraceAttached = ::GetModuleHandle("dxgitrace.dll") != nullptr; diff --git a/src/d3d11/d3d11_options.h b/src/d3d11/d3d11_options.h index bce2d25e7..55870a137 100644 --- a/src/d3d11/d3d11_options.h +++ b/src/d3d11/d3d11_options.h @@ -4,12 +4,14 @@ #include "../dxgi/dxgi_options.h" +#include "../dxvk/dxvk_device.h" + #include "d3d11_include.h" namespace dxvk { struct D3D11Options { - D3D11Options(const Config& config); + D3D11Options(const Config& config, const Rc& device); /// Handle D3D11_MAP_FLAG_DO_NOT_WAIT properly. /// /// This can offer substantial speedups, but some games diff --git a/src/dxbc/dxbc_options.cpp b/src/dxbc/dxbc_options.cpp index aae391d22..827e507ac 100644 --- a/src/dxbc/dxbc_options.cpp +++ b/src/dxbc/dxbc_options.cpp @@ -39,9 +39,7 @@ namespace dxvk { strictDivision = options.strictDivision; zeroInitWorkgroupMemory = options.zeroInitWorkgroupMemory; - - if (DxvkGpuVendor(devInfo.core.properties.vendorID) != DxvkGpuVendor::Amd) - dynamicIndexedConstantBufferAsSsbo = options.constantBufferRangeCheck; + dynamicIndexedConstantBufferAsSsbo = options.constantBufferRangeCheck; // Disable early discard on RADV (with LLVM) due to GPU hangs // Disable early discard on Nvidia because it may hurt performance