[dawn] Substitute overrides for IR fuzzer Bug: 383725598 Change-Id: Ic674f7a606eaf91853fe99ae218447ff4f525ea0 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/233534 Reviewed-by: Ryan Harrison <rharrison@chromium.org> Commit-Queue: Peter McNeeley <petermcneeley@google.com>
diff --git a/src/tint/cmd/fuzz/ir/BUILD.cmake b/src/tint/cmd/fuzz/ir/BUILD.cmake index b65af42..7f7fd3f 100644 --- a/src/tint/cmd/fuzz/ir/BUILD.cmake +++ b/src/tint/cmd/fuzz/ir/BUILD.cmake
@@ -144,6 +144,7 @@ tint_lang_core tint_lang_core_constant tint_lang_core_ir + tint_lang_core_ir_transform tint_lang_core_type tint_lang_wgsl tint_lang_wgsl_ast
diff --git a/src/tint/cmd/fuzz/ir/BUILD.gn b/src/tint/cmd/fuzz/ir/BUILD.gn index d146d64..be9ecdc 100644 --- a/src/tint/cmd/fuzz/ir/BUILD.gn +++ b/src/tint/cmd/fuzz/ir/BUILD.gn
@@ -51,6 +51,7 @@ "${tint_src_dir}/lang/core", "${tint_src_dir}/lang/core/constant", "${tint_src_dir}/lang/core/ir", + "${tint_src_dir}/lang/core/ir/transform", "${tint_src_dir}/lang/core/type", "${tint_src_dir}/lang/wgsl", "${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/cmd/fuzz/ir/as/BUILD.bazel b/src/tint/cmd/fuzz/ir/as/BUILD.bazel index 83c5aee..f102150 100644 --- a/src/tint/cmd/fuzz/ir/as/BUILD.bazel +++ b/src/tint/cmd/fuzz/ir/as/BUILD.bazel
@@ -48,6 +48,7 @@ "//src/tint/lang/core", "//src/tint/lang/core/constant", "//src/tint/lang/core/ir", + "//src/tint/lang/core/ir/transform", "//src/tint/lang/core/type", "//src/tint/lang/wgsl", "//src/tint/lang/wgsl/ast",
diff --git a/src/tint/cmd/fuzz/ir/as/BUILD.cmake b/src/tint/cmd/fuzz/ir/as/BUILD.cmake index 6acedeb..be465fcff 100644 --- a/src/tint/cmd/fuzz/ir/as/BUILD.cmake +++ b/src/tint/cmd/fuzz/ir/as/BUILD.cmake
@@ -51,6 +51,7 @@ tint_lang_core tint_lang_core_constant tint_lang_core_ir + tint_lang_core_ir_transform tint_lang_core_type tint_lang_wgsl tint_lang_wgsl_ast
diff --git a/src/tint/cmd/fuzz/ir/as/BUILD.gn b/src/tint/cmd/fuzz/ir/as/BUILD.gn index 8307c40..0c269f2 100644 --- a/src/tint/cmd/fuzz/ir/as/BUILD.gn +++ b/src/tint/cmd/fuzz/ir/as/BUILD.gn
@@ -50,6 +50,7 @@ "${tint_src_dir}/lang/core", "${tint_src_dir}/lang/core/constant", "${tint_src_dir}/lang/core/ir", + "${tint_src_dir}/lang/core/ir/transform", "${tint_src_dir}/lang/core/type", "${tint_src_dir}/lang/wgsl", "${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/cmd/fuzz/ir/as/main.cc b/src/tint/cmd/fuzz/ir/as/main.cc index 82dec89..b03c51f 100644 --- a/src/tint/cmd/fuzz/ir/as/main.cc +++ b/src/tint/cmd/fuzz/ir/as/main.cc
@@ -177,17 +177,18 @@ return tint::Failure{"Unsupported enable used in shader"}; } - auto transformed = tint::wgsl::ApplySubstituteOverrides(program); - auto& src = transformed ? transformed.value() : program; - if (!src.IsValid()) { - return tint::Failure{src.Diagnostics().Str()}; - } + auto cfg = tint::wgsl::SubstituteOverridesConfig(program); auto ir = tint::wgsl::reader::ProgramToLoweredIR(src); if (ir != tint::Success) { return ir.Failure(); } + auto substituteOverridesResult = tint::core::ir::transform::SubstituteOverrides(ir.Get(), cfg); + if (substituteOverridesResult != Success) { + return substituteOverridesResult.Failure(); + } + if (auto val = tint::core::ir::Validate(ir.Get()); val != tint::Success) { return val.Failure(); }
diff --git a/src/tint/cmd/fuzz/ir/fuzz.cc b/src/tint/cmd/fuzz/ir/fuzz.cc index 1703665..f3343cd 100644 --- a/src/tint/cmd/fuzz/ir/fuzz.cc +++ b/src/tint/cmd/fuzz/ir/fuzz.cc
@@ -39,6 +39,7 @@ #if TINT_BUILD_WGSL_READER #include "src/tint/cmd/fuzz/wgsl/fuzz.h" +#include "src/tint/lang/core/ir/transform/substitute_overrides.h" #include "src/tint/lang/core/ir/validator.h" #include "src/tint/lang/wgsl/ast/module.h" #include "src/tint/lang/wgsl/helpers/apply_substitute_overrides.h" @@ -74,15 +75,19 @@ if (program.AST().Enables().Any(tint::wgsl::reader::IsUnsupportedByIR)) { return; } - auto transformed = tint::wgsl::ApplySubstituteOverrides(program); - auto& src = transformed ? transformed.value() : program; - if (!src.IsValid()) { - return; - } - auto ir = tint::wgsl::reader::ProgramToLoweredIR(src); + auto cfg = tint::wgsl::SubstituteOverridesConfig(program); + + auto ir = tint::wgsl::reader::ProgramToLoweredIR(program); if (ir != Success) { return; } + + auto substituteOverridesResult = + tint::core::ir::transform::SubstituteOverrides(ir.Get(), cfg); + if (substituteOverridesResult != Success) { + return; + } + if (auto val = core::ir::Validate(ir.Get()); val != Success) { TINT_ICE() << val.Failure(); }
diff --git a/src/tint/lang/wgsl/helpers/BUILD.bazel b/src/tint/lang/wgsl/helpers/BUILD.bazel index 90df8d0..844f2f5 100644 --- a/src/tint/lang/wgsl/helpers/BUILD.bazel +++ b/src/tint/lang/wgsl/helpers/BUILD.bazel
@@ -52,10 +52,11 @@ "//src/tint/api/common", "//src/tint/lang/core", "//src/tint/lang/core/constant", + "//src/tint/lang/core/ir", + "//src/tint/lang/core/ir/transform", "//src/tint/lang/core/type", "//src/tint/lang/wgsl", "//src/tint/lang/wgsl/ast", - "//src/tint/lang/wgsl/ast/transform", "//src/tint/lang/wgsl/features", "//src/tint/lang/wgsl/inspector", "//src/tint/lang/wgsl/program",
diff --git a/src/tint/lang/wgsl/helpers/BUILD.cmake b/src/tint/lang/wgsl/helpers/BUILD.cmake index 414d646..0e91fce 100644 --- a/src/tint/lang/wgsl/helpers/BUILD.cmake +++ b/src/tint/lang/wgsl/helpers/BUILD.cmake
@@ -51,10 +51,11 @@ tint_api_common tint_lang_core tint_lang_core_constant + tint_lang_core_ir + tint_lang_core_ir_transform tint_lang_core_type tint_lang_wgsl tint_lang_wgsl_ast - tint_lang_wgsl_ast_transform tint_lang_wgsl_features tint_lang_wgsl_inspector tint_lang_wgsl_program
diff --git a/src/tint/lang/wgsl/helpers/BUILD.gn b/src/tint/lang/wgsl/helpers/BUILD.gn index f69ca43..2c2e4c0 100644 --- a/src/tint/lang/wgsl/helpers/BUILD.gn +++ b/src/tint/lang/wgsl/helpers/BUILD.gn
@@ -57,10 +57,11 @@ "${tint_src_dir}/api/common", "${tint_src_dir}/lang/core", "${tint_src_dir}/lang/core/constant", + "${tint_src_dir}/lang/core/ir", + "${tint_src_dir}/lang/core/ir/transform", "${tint_src_dir}/lang/core/type", "${tint_src_dir}/lang/wgsl", "${tint_src_dir}/lang/wgsl/ast", - "${tint_src_dir}/lang/wgsl/ast/transform", "${tint_src_dir}/lang/wgsl/features", "${tint_src_dir}/lang/wgsl/inspector", "${tint_src_dir}/lang/wgsl/program",
diff --git a/src/tint/lang/wgsl/helpers/apply_substitute_overrides.cc b/src/tint/lang/wgsl/helpers/apply_substitute_overrides.cc index 18f32ab..eee817d 100644 --- a/src/tint/lang/wgsl/helpers/apply_substitute_overrides.cc +++ b/src/tint/lang/wgsl/helpers/apply_substitute_overrides.cc
@@ -30,15 +30,15 @@ #include <memory> #include <utility> -#include "src/tint/lang/wgsl/ast/transform/manager.h" -#include "src/tint/lang/wgsl/ast/transform/substitute_override.h" +#include "src/tint/lang/core/ir/transform/substitute_overrides.h" #include "src/tint/lang/wgsl/inspector/inspector.h" #include "src/tint/lang/wgsl/program/program.h" namespace tint::wgsl { -std::optional<Program> ApplySubstituteOverrides(const Program& program) { - ast::transform::SubstituteOverride::Config cfg; +tint::core::ir::transform::SubstituteOverridesConfig SubstituteOverridesConfig( + const Program& program) { + tint::core::ir::transform::SubstituteOverridesConfig cfg; inspector::Inspector inspector(program); auto default_values = inspector.GetOverrideDefaultValues(); for (const auto& [override_id, scalar] : default_values) { @@ -49,18 +49,7 @@ } } - if (default_values.empty()) { - return std::nullopt; - } - - ast::transform::DataMap override_data; - override_data.Add<ast::transform::SubstituteOverride::Config>(cfg); - - ast::transform::Manager mgr; - mgr.append(std::make_unique<ast::transform::SubstituteOverride>()); - - ast::transform::DataMap outputs; - return mgr.Run(program, override_data, outputs); + return cfg; } } // namespace tint::wgsl
diff --git a/src/tint/lang/wgsl/helpers/apply_substitute_overrides.h b/src/tint/lang/wgsl/helpers/apply_substitute_overrides.h index a15afa2..20d7ae90 100644 --- a/src/tint/lang/wgsl/helpers/apply_substitute_overrides.h +++ b/src/tint/lang/wgsl/helpers/apply_substitute_overrides.h
@@ -30,6 +30,8 @@ #include <optional> +#include "src/tint/lang/core/ir/transform/substitute_overrides.h" + // Forward declarations namespace tint { class Program; @@ -37,12 +39,11 @@ namespace tint::wgsl { -/// If needed, returns a new program with all `override` declarations substituted with `const` -/// variables. +/// Returns a IR substitute override config which may contain an empty map if there a no overrides /// @param program A valid program -/// @return A new program with `override`s substituted, or std::nullopt if the program has no -/// `override`s. -std::optional<Program> ApplySubstituteOverrides(const Program& program); +/// @return An IR substitute override config +tint::core::ir::transform::SubstituteOverridesConfig SubstituteOverridesConfig( + const Program& program); } // namespace tint::wgsl