Always run `SubstituteOverrides`
This Cl moves `SubstituteOverrides` from being optional based on either
options being provided or the `--transform` flag to always being called.
A `--disable-substitute-overrides` flag is added in order to skip
running `SubstituteOverrides` if needed.
Bug: 378726537
Change-Id: I06000dc7f7b42cb81cf762b147cd4f5a98c1685b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/217260
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/cmd/tint/main.cc b/src/tint/cmd/tint/main.cc
index cc66710..b94b18a 100644
--- a/src/tint/cmd/tint/main.cc
+++ b/src/tint/cmd/tint/main.cc
@@ -381,7 +381,6 @@
options.Add<StringOption>("transform", R"(Runs transforms, name list is comma separated
Available transforms:
first_index_offset
- substitute_override
)",
ShortName{"t"});
TINT_DEFER({
@@ -644,14 +643,9 @@
return true;
}
-[[maybe_unused]] tint::Result<tint::Program> ProcessASTTransforms(
- Options& options,
- tint::inspector::Inspector& inspector,
- tint::Program& program) {
- tint::ast::transform::Manager transform_manager;
- tint::ast::transform::DataMap transform_inputs;
-
- // Renaming must always come first
+[[maybe_unused]] void AddRenamer(Options& options,
+ tint::ast::transform::Manager& transform_manager,
+ tint::ast::transform::DataMap& transform_inputs) {
switch (options.format) {
case Format::kMsl: {
if (!options.rename_all) {
@@ -691,49 +685,66 @@
case Format::kUnknown:
break;
}
+}
- // If overrides are provided, add the SubstituteOverride transform.
- if (!options.overrides.IsEmpty()) {
- options.transforms.Push("substitute_override");
+[[maybe_unused]] tint::Result<tint::SuccessType> AddSubstituteOverrides(
+ Options& options,
+ tint::inspector::Inspector& inspector,
+ tint::ast::transform::Manager& transform_manager,
+ tint::ast::transform::DataMap& transform_inputs) {
+ auto override_names = inspector.GetNamedOverrideIds();
+
+ std::unordered_map<tint::OverrideId, double> values;
+ values.reserve(options.overrides.Count());
+ for (auto& override : options.overrides) {
+ const auto& override_name = override.key.Value();
+ const auto& override_value = override.value;
+ if (override_name.empty()) {
+ return tint::Failure("empty override name");
+ }
+
+ auto num = tint::strconv::ParseNumber<decltype(tint::OverrideId::value)>(override_name);
+ if (num == tint::Success) {
+ tint::OverrideId id{num.Get()};
+ values.emplace(id, override_value);
+ continue;
+ }
+
+ auto it = override_names.find(override_name);
+ if (it == override_names.end()) {
+ return tint::Failure("unknown override '" + override_name + "'");
+ }
+ values.emplace(it->second, override_value);
+ }
+
+ tint::ast::transform::SubstituteOverride::Config cfg;
+ cfg.map = std::move(values);
+
+ transform_inputs.Add<tint::ast::transform::SubstituteOverride::Config>(cfg);
+ transform_manager.Add<tint::ast::transform::SubstituteOverride>();
+
+ return tint::Success;
+}
+
+[[maybe_unused]] tint::Result<tint::Program> ProcessASTTransforms(
+ Options& options,
+ tint::inspector::Inspector& inspector,
+ tint::Program& program) {
+ tint::ast::transform::Manager transform_manager;
+ tint::ast::transform::DataMap transform_inputs;
+
+ // Renaming must always come first
+ AddRenamer(options, transform_manager, transform_inputs);
+
+ auto res = AddSubstituteOverrides(options, inspector, transform_manager, transform_inputs);
+ if (res != tint::Success) {
+ return res.Failure();
}
for (const auto& name : options.transforms) {
if (name == "first_index_offset") {
transform_inputs.Add<tint::ast::transform::FirstIndexOffset::BindingPoint>(0, 0);
transform_manager.Add<tint::ast::transform::FirstIndexOffset>();
- } else if (name == "substitute_override") {
- auto override_names = inspector.GetNamedOverrideIds();
-
- std::unordered_map<tint::OverrideId, double> values;
- values.reserve(options.overrides.Count());
- for (auto& override : options.overrides) {
- const auto& override_name = override.key.Value();
- const auto& override_value = override.value;
- if (override_name.empty()) {
- return tint::Failure("empty override name");
- }
-
- auto num =
- tint::strconv::ParseNumber<decltype(tint::OverrideId::value)>(override_name);
- if (num == tint::Success) {
- tint::OverrideId id{num.Get()};
- values.emplace(id, override_value);
- continue;
- }
-
- auto it = override_names.find(override_name);
- if (it == override_names.end()) {
- return tint::Failure("unknown override '" + override_name + "'");
- }
- values.emplace(it->second, override_value);
- }
-
- tint::ast::transform::SubstituteOverride::Config cfg;
- cfg.map = std::move(values);
-
- transform_inputs.Add<tint::ast::transform::SubstituteOverride::Config>(cfg);
- transform_manager.Add<tint::ast::transform::SubstituteOverride>();
-
} else {
return tint::Failure("Unknown transform: " + name);
}
diff --git a/test/tint/bug/tint/1660.wgsl b/test/tint/bug/tint/1660.wgsl
index f06d17a..5fa2f54 100644
--- a/test/tint/bug/tint/1660.wgsl
+++ b/test/tint/bug/tint/1660.wgsl
@@ -1,5 +1,3 @@
-// flags: --transform substitute_override
-
override size = 2;
var<workgroup> a : array<f32, size>;
diff --git a/test/tint/bug/tint/1697.wgsl b/test/tint/bug/tint/1697.wgsl
index 05c9cf6..0db51f5 100644
--- a/test/tint/bug/tint/1697.wgsl
+++ b/test/tint/bug/tint/1697.wgsl
@@ -1,5 +1,3 @@
-// flags: --transform substitute_override
-
override O = 0; // Try switching to 'const'
fn f() {
diff --git a/test/tint/bug/tint/1764.wgsl b/test/tint/bug/tint/1764.wgsl
index 1448fbd..048618b 100644
--- a/test/tint/bug/tint/1764.wgsl
+++ b/test/tint/bug/tint/1764.wgsl
@@ -1,5 +1,3 @@
-// flags: --transform substitute_override
-
override O = 123;
alias A = array<i32, O*2>;
diff --git a/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl b/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl
index 971debb..8942333 100644
--- a/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl
+++ b/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl
@@ -1,9 +1,6 @@
-// flags: --transform substitute_override
-
@id(0) override x_dim = 2;
@compute
@workgroup_size(1 + 2, x_dim, clamp((1 - 2) + 4, 0, 5))
fn main() {
}
-
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm
index 2f5df01..4495762 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm
index dc7fac6..a4b993f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm
@@ -1,4 +1,3 @@
-; flags: --transform substitute_override
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm
index c2cc3577..ae487d5 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm
index 04b2f5d..c955a79 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm
index 7970680..c687c93 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm
index 4f300c7..1f56e04 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm
index f7803c5..2ab2c75 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm
index 902b5d7..096d33f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm
index a046d7d..5ffad5d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm
index 4c82be3..839812e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm
; SPIR-V
; Version: 1.0
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm
index 61d100d..0c89e6b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm
+++ b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm
@@ -1,5 +1,3 @@
-; flags: --transform substitute_override
-;
; Test: SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm
; SPIR-V
; Version: 1.0