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