1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-15 07:29:17 +01:00

[d3d11] Introduce option to disable float controls

And disable for SotTR since it introduces rendering issues.
This commit is contained in:
Philip Rebohle 2021-01-28 20:32:38 +01:00
parent 8de9dc9378
commit 307f43ff1e
4 changed files with 16 additions and 9 deletions

View File

@ -15,6 +15,7 @@ namespace dxvk {
this->maxTessFactor = config.getOption<int32_t>("d3d11.maxTessFactor", 0); this->maxTessFactor = config.getOption<int32_t>("d3d11.maxTessFactor", 0);
this->samplerAnisotropy = config.getOption<int32_t>("d3d11.samplerAnisotropy", -1); this->samplerAnisotropy = config.getOption<int32_t>("d3d11.samplerAnisotropy", -1);
this->invariantPosition = config.getOption<bool>("d3d11.invariantPosition", true); this->invariantPosition = config.getOption<bool>("d3d11.invariantPosition", true);
this->floatControls = config.getOption<bool>("d3d11.floatControls", true);
this->deferSurfaceCreation = config.getOption<bool>("dxgi.deferSurfaceCreation", false); this->deferSurfaceCreation = config.getOption<bool>("dxgi.deferSurfaceCreation", false);
this->numBackBuffers = config.getOption<int32_t>("dxgi.numBackBuffers", 0); this->numBackBuffers = config.getOption<int32_t>("dxgi.numBackBuffers", 0);
this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0); this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0);

View File

@ -64,6 +64,9 @@ namespace dxvk {
/// Declare vertex positions in shaders as invariant /// Declare vertex positions in shaders as invariant
bool invariantPosition; bool invariantPosition;
/// Enable float control bits
bool floatControls;
/// Back buffer count for the Vulkan swap chain. /// Back buffer count for the Vulkan swap chain.
/// Overrides DXGI_SWAP_CHAIN_DESC::BufferCount. /// Overrides DXGI_SWAP_CHAIN_DESC::BufferCount.
int32_t numBackBuffers; int32_t numBackBuffers;

View File

@ -59,6 +59,7 @@ namespace dxvk {
applyTristate(useSubgroupOpsForEarlyDiscard, device->config().useEarlyDiscard); applyTristate(useSubgroupOpsForEarlyDiscard, device->config().useEarlyDiscard);
// Figure out float control flags to match D3D11 rules // Figure out float control flags to match D3D11 rules
if (options.floatControls) {
if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32) if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32)
floatControl.set(DxbcFloatControlFlag::PreserveNan32); floatControl.set(DxbcFloatControlFlag::PreserveNan32);
if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat64) if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat64)
@ -70,6 +71,7 @@ namespace dxvk {
if (devInfo.khrShaderFloatControls.shaderDenormPreserveFloat64) if (devInfo.khrShaderFloatControls.shaderDenormPreserveFloat64)
floatControl.set(DxbcFloatControlFlag::DenormPreserve64); floatControl.set(DxbcFloatControlFlag::DenormPreserve64);
} }
}
if (!devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32 if (!devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32
|| adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_MESA_RADV_KHR, 0, VK_MAKE_VERSION(20, 3, 0))) || adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_MESA_RADV_KHR, 0, VK_MAKE_VERSION(20, 3, 0)))

View File

@ -200,6 +200,7 @@ namespace dxvk {
* position breaks character rendering on NV */ * position breaks character rendering on NV */
{ R"(\\SOTTR\.exe$)", {{ { R"(\\SOTTR\.exe$)", {{
{ "d3d11.invariantPosition", "False" }, { "d3d11.invariantPosition", "False" },
{ "d3d11.floatControls", "False" },
}} }, }} },
/**********************************************/ /**********************************************/