Enable Integer Range Analysis behind a toggle on Vulkan, Metal and GLES
This patch enables Integer Range Analysis on Vulkan, Metal and OpenGL
ES backends behind a toggle.
Bug: 348701956
Change-Id: I8d5ba5a0eb506ea2485f52155cf54f452fb5b80f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/243237
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/native/metal/ShaderModuleMTL.mm b/src/dawn/native/metal/ShaderModuleMTL.mm
index 0a4b961..8365b48 100644
--- a/src/dawn/native/metal/ShaderModuleMTL.mm
+++ b/src/dawn/native/metal/ShaderModuleMTL.mm
@@ -299,6 +299,8 @@
req.tintOptions.disable_polyfill_integer_div_mod =
device->IsToggleEnabled(Toggle::DisablePolyfillsOnIntegerDivisonAndModulo);
req.tintOptions.vertex_pulling_config = std::move(vertexPullingTransformConfig);
+ req.tintOptions.enable_integer_range_analysis =
+ device->IsToggleEnabled(Toggle::EnableIntegerRangeAnalysisInRobustness);
req.limits = LimitsForCompilationRequest::Create(device->GetLimits().v1);
req.adapterSupportedLimits =
diff --git a/src/dawn/native/opengl/ShaderModuleGL.cpp b/src/dawn/native/opengl/ShaderModuleGL.cpp
index eccfa0f..62cacee 100644
--- a/src/dawn/native/opengl/ShaderModuleGL.cpp
+++ b/src/dawn/native/opengl/ShaderModuleGL.cpp
@@ -568,6 +568,9 @@
req.tintOptions.disable_polyfill_integer_div_mod =
GetDevice()->IsToggleEnabled(Toggle::DisablePolyfillsOnIntegerDivisonAndModulo);
+ req.tintOptions.enable_integer_range_analysis =
+ GetDevice()->IsToggleEnabled(Toggle::EnableIntegerRangeAnalysisInRobustness);
+
CacheResult<GLSLCompilation> compilationResult;
DAWN_TRY_LOAD_OR_RUN(
compilationResult, GetDevice(), std::move(req), GLSLCompilation::FromValidatedBlob,
diff --git a/src/dawn/native/vulkan/ShaderModuleVk.cpp b/src/dawn/native/vulkan/ShaderModuleVk.cpp
index 78a0bcf..51a1424 100644
--- a/src/dawn/native/vulkan/ShaderModuleVk.cpp
+++ b/src/dawn/native/vulkan/ShaderModuleVk.cpp
@@ -301,6 +301,9 @@
offsetStartBytes, offsetStartBytes + kImmediateConstantElementByteSize};
}
+ req.tintOptions.enable_integer_range_analysis =
+ GetDevice()->IsToggleEnabled(Toggle::EnableIntegerRangeAnalysisInRobustness);
+
req.limits = LimitsForCompilationRequest::Create(GetDevice()->GetLimits().v1);
req.adapterSupportedLimits =
LimitsForCompilationRequest::Create(GetDevice()->GetAdapter()->GetLimits().v1);
diff --git a/src/dawn/tests/perf_tests/ShaderRobustnessPerf.cpp b/src/dawn/tests/perf_tests/ShaderRobustnessPerf.cpp
index 495bb0a..5e19fbc 100644
--- a/src/dawn/tests/perf_tests/ShaderRobustnessPerf.cpp
+++ b/src/dawn/tests/perf_tests/ShaderRobustnessPerf.cpp
@@ -598,9 +598,12 @@
ShaderRobustnessPerf,
{D3D12Backend({"use_tint_ir"}), D3D12Backend({"disable_robustness", "use_tint_ir"}, {}),
D3D12Backend({"enable_integer_range_analysis_in_robustness", "use_tint_ir"}, {}),
- MetalBackend(), MetalBackend({"disable_robustness"}, {}), OpenGLBackend(),
- OpenGLBackend({"disable_robustness"}, {}), VulkanBackend(),
- VulkanBackend({"disable_robustness"}, {})},
+ MetalBackend(), MetalBackend({"disable_robustness"}, {}),
+ MetalBackend({"enable_integer_range_analysis_in_robustness"}, {}), OpenGLBackend(),
+ OpenGLBackend({"disable_robustness"}, {}),
+ OpenGLBackend({"enable_integer_range_analysis_in_robustness"}, {}), VulkanBackend(),
+ VulkanBackend({"disable_robustness"}, {}),
+ VulkanBackend({"enable_integer_range_analysis_in_robustness"}, {})},
{MatMulMethod::MatMulFloatOneDimSharedArray, MatMulMethod::MatMulFloatTwoDimSharedArray,
MatMulMethod::MatMulVec4OneDimSharedArray, MatMulMethod::MatMulVec4TwoDimSharedArray},
{ElemType::F32, ElemType::F16},
diff --git a/src/tint/lang/glsl/writer/common/options.h b/src/tint/lang/glsl/writer/common/options.h
index 20392e3..72dac3e 100644
--- a/src/tint/lang/glsl/writer/common/options.h
+++ b/src/tint/lang/glsl/writer/common/options.h
@@ -271,6 +271,9 @@
/// Set to `true` to disable software robustness that prevents out-of-bounds accesses.
bool disable_robustness = false;
+ /// Set to `true` to enable integer range analysis in robustness transform.
+ bool enable_integer_range_analysis = false;
+
/// Set to `true` to disable workgroup memory zero initialization
bool disable_workgroup_init = false;
@@ -302,6 +305,7 @@
TINT_REFLECT(Options,
strip_all_names,
disable_robustness,
+ enable_integer_range_analysis,
disable_workgroup_init,
disable_polyfill_integer_div_mod,
use_array_length_from_uniform,
diff --git a/src/tint/lang/glsl/writer/raise/raise.cc b/src/tint/lang/glsl/writer/raise/raise.cc
index 23c25cd..69e3f0b 100644
--- a/src/tint/lang/glsl/writer/raise/raise.cc
+++ b/src/tint/lang/glsl/writer/raise/raise.cc
@@ -75,6 +75,7 @@
// Must come before TextureBuiltinsFromUniform as it may add `textureNumLevels` calls.
if (!options.disable_robustness) {
core::ir::transform::RobustnessConfig config{};
+ config.use_integer_range_analysis = options.enable_integer_range_analysis;
RUN_TRANSFORM(core::ir::transform::Robustness, module, config);
RUN_TRANSFORM(core::ir::transform::PreventInfiniteLoops, module);
diff --git a/src/tint/lang/msl/writer/common/options.h b/src/tint/lang/msl/writer/common/options.h
index 415948c..899e2d2 100644
--- a/src/tint/lang/msl/writer/common/options.h
+++ b/src/tint/lang/msl/writer/common/options.h
@@ -147,6 +147,9 @@
/// Set to `true` to disable software robustness that prevents out-of-bounds accesses.
bool disable_robustness = false;
+ /// Set to `true` to enable integer range analysis in robustness transform.
+ bool enable_integer_range_analysis = false;
+
/// Set to `true` to disable workgroup memory zero initialization
bool disable_workgroup_init = false;
@@ -189,6 +192,7 @@
remapped_entry_point_name,
strip_all_names,
disable_robustness,
+ enable_integer_range_analysis,
disable_workgroup_init,
disable_demote_to_helper,
emit_vertex_point_size,
diff --git a/src/tint/lang/msl/writer/raise/raise.cc b/src/tint/lang/msl/writer/raise/raise.cc
index 5732bb1..7ddee7d 100644
--- a/src/tint/lang/msl/writer/raise/raise.cc
+++ b/src/tint/lang/msl/writer/raise/raise.cc
@@ -117,6 +117,7 @@
if (!options.disable_robustness) {
core::ir::transform::RobustnessConfig config{};
+ config.use_integer_range_analysis = options.enable_integer_range_analysis;
RUN_TRANSFORM(core::ir::transform::Robustness, module, config);
}
diff --git a/src/tint/lang/spirv/writer/common/options.h b/src/tint/lang/spirv/writer/common/options.h
index 9bee479..efd1ead 100644
--- a/src/tint/lang/spirv/writer/common/options.h
+++ b/src/tint/lang/spirv/writer/common/options.h
@@ -159,6 +159,9 @@
/// Set to `true` to disable software robustness that prevents out-of-bounds accesses.
bool disable_robustness = false;
+ /// Set to `true` to enable integer range analysis in robustness transform.
+ bool enable_integer_range_analysis = false;
+
/// Set to `true` to skip robustness transform on textures.
bool disable_image_robustness = false;
@@ -211,6 +214,7 @@
statically_paired_texture_binding_points,
strip_all_names,
disable_robustness,
+ enable_integer_range_analysis,
disable_image_robustness,
disable_runtime_sized_array_index_clamping,
disable_workgroup_init,
diff --git a/src/tint/lang/spirv/writer/raise/raise.cc b/src/tint/lang/spirv/writer/raise/raise.cc
index a9e33cf..d6cc4ad 100644
--- a/src/tint/lang/spirv/writer/raise/raise.cc
+++ b/src/tint/lang/spirv/writer/raise/raise.cc
@@ -127,6 +127,7 @@
}
config.disable_runtime_sized_array_index_clamping =
options.disable_runtime_sized_array_index_clamping;
+ config.use_integer_range_analysis = options.enable_integer_range_analysis;
RUN_TRANSFORM(core::ir::transform::Robustness, module, config);
}