mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +01:00
[d3d11] Introduce option to disable float controls
And disable for SotTR since it introduces rendering issues.
This commit is contained in:
parent
8de9dc9378
commit
307f43ff1e
@ -15,6 +15,7 @@ namespace dxvk {
|
||||
this->maxTessFactor = config.getOption<int32_t>("d3d11.maxTessFactor", 0);
|
||||
this->samplerAnisotropy = config.getOption<int32_t>("d3d11.samplerAnisotropy", -1);
|
||||
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->numBackBuffers = config.getOption<int32_t>("dxgi.numBackBuffers", 0);
|
||||
this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0);
|
||||
|
@ -64,6 +64,9 @@ namespace dxvk {
|
||||
/// Declare vertex positions in shaders as invariant
|
||||
bool invariantPosition;
|
||||
|
||||
/// Enable float control bits
|
||||
bool floatControls;
|
||||
|
||||
/// Back buffer count for the Vulkan swap chain.
|
||||
/// Overrides DXGI_SWAP_CHAIN_DESC::BufferCount.
|
||||
int32_t numBackBuffers;
|
||||
|
@ -59,16 +59,18 @@ namespace dxvk {
|
||||
applyTristate(useSubgroupOpsForEarlyDiscard, device->config().useEarlyDiscard);
|
||||
|
||||
// Figure out float control flags to match D3D11 rules
|
||||
if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32)
|
||||
floatControl.set(DxbcFloatControlFlag::PreserveNan32);
|
||||
if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat64)
|
||||
floatControl.set(DxbcFloatControlFlag::PreserveNan64);
|
||||
if (options.floatControls) {
|
||||
if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32)
|
||||
floatControl.set(DxbcFloatControlFlag::PreserveNan32);
|
||||
if (devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat64)
|
||||
floatControl.set(DxbcFloatControlFlag::PreserveNan64);
|
||||
|
||||
if (devInfo.khrShaderFloatControls.denormBehaviorIndependence != VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE) {
|
||||
if (devInfo.khrShaderFloatControls.shaderDenormFlushToZeroFloat32)
|
||||
floatControl.set(DxbcFloatControlFlag::DenormFlushToZero32);
|
||||
if (devInfo.khrShaderFloatControls.shaderDenormPreserveFloat64)
|
||||
floatControl.set(DxbcFloatControlFlag::DenormPreserve64);
|
||||
if (devInfo.khrShaderFloatControls.denormBehaviorIndependence != VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE) {
|
||||
if (devInfo.khrShaderFloatControls.shaderDenormFlushToZeroFloat32)
|
||||
floatControl.set(DxbcFloatControlFlag::DenormFlushToZero32);
|
||||
if (devInfo.khrShaderFloatControls.shaderDenormPreserveFloat64)
|
||||
floatControl.set(DxbcFloatControlFlag::DenormPreserve64);
|
||||
}
|
||||
}
|
||||
|
||||
if (!devInfo.khrShaderFloatControls.shaderSignedZeroInfNanPreserveFloat32
|
||||
|
@ -200,6 +200,7 @@ namespace dxvk {
|
||||
* position breaks character rendering on NV */
|
||||
{ R"(\\SOTTR\.exe$)", {{
|
||||
{ "d3d11.invariantPosition", "False" },
|
||||
{ "d3d11.floatControls", "False" },
|
||||
}} },
|
||||
|
||||
/**********************************************/
|
||||
|
Loading…
x
Reference in New Issue
Block a user