[msl] Add benchmark for IR backend Bug: 42251016 Change-Id: Ib9499bc176e11461aff219277b883e632abfa8a8 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/204536 Reviewed-by: dan sinclair <dsinclair@chromium.org> Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/msl/writer/BUILD.bazel b/src/tint/lang/msl/writer/BUILD.bazel index adf42fa..a4c0c47 100644 --- a/src/tint/lang/msl/writer/BUILD.bazel +++ b/src/tint/lang/msl/writer/BUILD.bazel
@@ -144,9 +144,11 @@ "//src/tint/api/common", "//src/tint/lang/core", "//src/tint/lang/core/constant", + "//src/tint/lang/core/ir", "//src/tint/lang/core/type", "//src/tint/lang/wgsl", "//src/tint/lang/wgsl/ast", + "//src/tint/lang/wgsl/common", "//src/tint/lang/wgsl/features", "//src/tint/lang/wgsl/helpers", "//src/tint/lang/wgsl/program", @@ -176,6 +178,7 @@ }) + select({ ":tint_build_wgsl_reader": [ "//src/tint/cmd/bench:bench", + "//src/tint/lang/wgsl/reader", ], "//conditions:default": [], }),
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake index 40cde20..093da65 100644 --- a/src/tint/lang/msl/writer/BUILD.cmake +++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -166,9 +166,11 @@ tint_api_common tint_lang_core tint_lang_core_constant + tint_lang_core_ir tint_lang_core_type tint_lang_wgsl tint_lang_wgsl_ast + tint_lang_wgsl_common tint_lang_wgsl_features tint_lang_wgsl_helpers tint_lang_wgsl_program @@ -204,6 +206,7 @@ if(TINT_BUILD_WGSL_READER) tint_target_add_dependencies(tint_lang_msl_writer_bench bench tint_cmd_bench_bench + tint_lang_wgsl_reader ) endif(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/msl/writer/BUILD.gn b/src/tint/lang/msl/writer/BUILD.gn index d5b2bfa..c051e96 100644 --- a/src/tint/lang/msl/writer/BUILD.gn +++ b/src/tint/lang/msl/writer/BUILD.gn
@@ -149,9 +149,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/type", "${tint_src_dir}/lang/wgsl", "${tint_src_dir}/lang/wgsl/ast", + "${tint_src_dir}/lang/wgsl/common", "${tint_src_dir}/lang/wgsl/features", "${tint_src_dir}/lang/wgsl/helpers", "${tint_src_dir}/lang/wgsl/program", @@ -180,7 +182,10 @@ } if (tint_build_wgsl_reader) { - deps += [ "${tint_src_dir}/cmd/bench:bench" ] + deps += [ + "${tint_src_dir}/cmd/bench:bench", + "${tint_src_dir}/lang/wgsl/reader", + ] } } }
diff --git a/src/tint/lang/msl/writer/writer_bench.cc b/src/tint/lang/msl/writer/writer_bench.cc index 000f26e..a48524f 100644 --- a/src/tint/lang/msl/writer/writer_bench.cc +++ b/src/tint/lang/msl/writer/writer_bench.cc
@@ -32,11 +32,61 @@ #include "src/tint/lang/msl/writer/writer.h" #include "src/tint/lang/wgsl/ast/module.h" #include "src/tint/lang/wgsl/helpers/flatten_bindings.h" +#include "src/tint/lang/wgsl/reader/reader.h" #include "src/tint/lang/wgsl/sem/variable.h" namespace tint::msl::writer { namespace { +void GenerateMSL(benchmark::State& state, std::string input_name) { + auto res = bench::GetWgslProgram(input_name); + if (res != Success) { + state.SkipWithError(res.Failure().reason.Str()); + return; + } + + // Remap resource numbers to a flat namespace. + const tint::Program* program = &res->program; + auto flattened = tint::wgsl::FlattenBindings(res->program); + if (flattened) { + program = &*flattened; + } + + tint::msl::writer::Options gen_options = {}; + gen_options.array_length_from_uniform.ubo_binding = 30; + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 0}, + 0); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 1}, + 1); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 2}, + 2); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 3}, + 3); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 4}, + 4); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 5}, + 5); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 6}, + 6); + gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 7}, + 7); + gen_options.bindings = tint::msl::writer::GenerateBindings(*program); + + for (auto _ : state) { + // Convert the AST program to an IR module. + auto ir = tint::wgsl::reader::ProgramToLoweredIR(*program); + if (ir != Success) { + state.SkipWithError(ir.Failure().reason.Str()); + return; + } + + auto gen_res = Generate(ir.Get(), gen_options); + if (gen_res != Success) { + state.SkipWithError(gen_res.Failure().reason.Str()); + } + } +} + void GenerateMSL_AST(benchmark::State& state, std::string input_name) { auto res = bench::GetWgslProgram(input_name); if (res != Success) { @@ -79,6 +129,7 @@ } } +TINT_BENCHMARK_PROGRAMS(GenerateMSL); TINT_BENCHMARK_PROGRAMS(GenerateMSL_AST); } // namespace