[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