Add a toggle to disable IEEE strictness
We may be able to default disable strictness with DXC.
This is left for further future investigation.
Bug: tint:976
Change-Id: I78d89d905999cc7b037445ab359d0ed441703994
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/154720
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/Toggles.cpp b/src/dawn/native/Toggles.cpp
index d914fac..2e8a53b 100644
--- a/src/dawn/native/Toggles.cpp
+++ b/src/dawn/native/Toggles.cpp
@@ -458,6 +458,12 @@
{Toggle::UseTintIR,
{"use_tint_ir", "Enable the use of the Tint IR for backend codegen.",
"https://crbug.com/tint/1718", ToggleStage::Device}},
+ {Toggle::D3DDisableIEEEStrictness,
+ {"d3d_disable_ieee_strictness",
+ "Disable IEEE strictness when compiling shaders. It is otherwise enabled by default to "
+ "workaround issues where FXC can miscompile code that depends on special float values (NaN, "
+ "INF, etc).",
+ "https://crbug.com/tint/976", ToggleStage::Device}},
{Toggle::NoWorkaroundSampleMaskBecomesZeroForAllButLastColorTarget,
{"no_workaround_sample_mask_becomes_zero_for_all_but_last_color_target",
"MacOS 12.0+ Intel has a bug where the sample mask is only applied for the last color "
diff --git a/src/dawn/native/Toggles.h b/src/dawn/native/Toggles.h
index 557c50f..0353c03 100644
--- a/src/dawn/native/Toggles.h
+++ b/src/dawn/native/Toggles.h
@@ -106,6 +106,7 @@
D3D12CreateNotZeroedHeap,
D3D12DontUseNotZeroedHeapFlagOnTexturesAsCommitedResources,
UseTintIR,
+ D3DDisableIEEEStrictness,
// Unresolved issues.
NoWorkaroundSampleMaskBecomesZeroForAllButLastColorTarget,
diff --git a/src/dawn/native/d3d11/ComputePipelineD3D11.cpp b/src/dawn/native/d3d11/ComputePipelineD3D11.cpp
index d648d33..30ac5ef 100644
--- a/src/dawn/native/d3d11/ComputePipelineD3D11.cpp
+++ b/src/dawn/native/d3d11/ComputePipelineD3D11.cpp
@@ -50,9 +50,9 @@
// Tint does matrix multiplication expecting row major matrices
compileFlags |= D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
- // FXC can miscompile code that depends on special float values (NaN, INF, etc) when IEEE
- // strictness is not enabled. See crbug.com/tint/976.
- compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ if (!device->IsToggleEnabled(Toggle::D3DDisableIEEEStrictness)) {
+ compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ }
const ProgrammableStage& programmableStage = GetStage(SingleShaderStage::Compute);
diff --git a/src/dawn/native/d3d11/RenderPipelineD3D11.cpp b/src/dawn/native/d3d11/RenderPipelineD3D11.cpp
index c0e4cc6..fea28fe 100644
--- a/src/dawn/native/d3d11/RenderPipelineD3D11.cpp
+++ b/src/dawn/native/d3d11/RenderPipelineD3D11.cpp
@@ -415,9 +415,9 @@
// Tint does matrix multiplication expecting row major matrices
compileFlags |= D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
- // FXC can miscompile code that depends on special float values (NaN, INF, etc) when IEEE
- // strictness is not enabled. See crbug.com/tint/976.
- compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ if (!device->IsToggleEnabled(Toggle::D3DDisableIEEEStrictness)) {
+ compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ }
PerStage<d3d::CompiledShader> compiledShader;
diff --git a/src/dawn/native/d3d12/ComputePipelineD3D12.cpp b/src/dawn/native/d3d12/ComputePipelineD3D12.cpp
index 8dbf5bd..efcaa3e 100644
--- a/src/dawn/native/d3d12/ComputePipelineD3D12.cpp
+++ b/src/dawn/native/d3d12/ComputePipelineD3D12.cpp
@@ -51,9 +51,9 @@
// Tint does matrix multiplication expecting row major matrices
compileFlags |= D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
- // FXC can miscompile code that depends on special float values (NaN, INF, etc) when IEEE
- // strictness is not enabled. See crbug.com/tint/976.
- compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ if (!device->IsToggleEnabled(Toggle::D3DDisableIEEEStrictness)) {
+ compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ }
const ProgrammableStage& computeStage = GetStage(SingleShaderStage::Compute);
ShaderModule* module = ToBackend(computeStage.module.Get());
diff --git a/src/dawn/native/d3d12/RenderPipelineD3D12.cpp b/src/dawn/native/d3d12/RenderPipelineD3D12.cpp
index f67e33f..9485685 100644
--- a/src/dawn/native/d3d12/RenderPipelineD3D12.cpp
+++ b/src/dawn/native/d3d12/RenderPipelineD3D12.cpp
@@ -316,9 +316,9 @@
// Tint does matrix multiplication expecting row major matrices
compileFlags |= D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
- // FXC can miscompile code that depends on special float values (NaN, INF, etc) when IEEE
- // strictness is not enabled. See crbug.com/tint/976.
- compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ if (!device->IsToggleEnabled(Toggle::D3DDisableIEEEStrictness)) {
+ compileFlags |= D3DCOMPILE_IEEE_STRICTNESS;
+ }
D3D12_GRAPHICS_PIPELINE_STATE_DESC descriptorD3D12 = {};