[tint] Fix writer benchmarks for multiple entry points
All of the backends now run SingleEntryPoint and need to be
passed the entry point name.
Bug: 445456830
Change-Id: I8315b3db2208c41b1dbe25d1986d097f9b3055a5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/265014
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Auto-Submit: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/bench/glsl/BUILD.bazel b/src/tint/cmd/bench/glsl/BUILD.bazel
index a22b758..a4046e4 100644
--- a/src/tint/cmd/bench/glsl/BUILD.bazel
+++ b/src/tint/cmd/bench/glsl/BUILD.bazel
@@ -47,7 +47,6 @@
"//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/bench/glsl/BUILD.cmake b/src/tint/cmd/bench/glsl/BUILD.cmake
index 76ae468..b11d498 100644
--- a/src/tint/cmd/bench/glsl/BUILD.cmake
+++ b/src/tint/cmd/bench/glsl/BUILD.cmake
@@ -49,7 +49,6 @@
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/bench/glsl/BUILD.gn b/src/tint/cmd/bench/glsl/BUILD.gn
index 5d713ec..18fc2de 100644
--- a/src/tint/cmd/bench/glsl/BUILD.gn
+++ b/src/tint/cmd/bench/glsl/BUILD.gn
@@ -53,7 +53,6 @@
"${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/bench/glsl/writer_bench.cc b/src/tint/cmd/bench/glsl/writer_bench.cc
index 67ff588..179f614 100644
--- a/src/tint/cmd/bench/glsl/writer_bench.cc
+++ b/src/tint/cmd/bench/glsl/writer_bench.cc
@@ -26,7 +26,6 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "src/tint/cmd/bench/bench.h"
-#include "src/tint/lang/core/ir/transform/single_entry_point.h"
#include "src/tint/lang/glsl/writer/helpers/generate_bindings.h"
#include "src/tint/lang/glsl/writer/writer.h"
#include "src/tint/lang/wgsl/ast/identifier.h"
@@ -61,6 +60,7 @@
}
tint::glsl::writer::Options gen_options = {};
+ gen_options.entry_point_name = name;
{
auto data = tint::glsl::writer::GenerateBindings(ir.Get(), name);
gen_options.bindings = std::move(data.bindings);
@@ -68,13 +68,6 @@
std::move(data.texture_builtins_from_uniform);
}
- // Run single entry point to strip the program down to a single entry point.
- auto single_result = core::ir::transform::SingleEntryPoint(ir.Get(), name);
- if (single_result != Success) {
- state.SkipWithError(ir.Failure().reason);
- return;
- }
-
// Generate GLSL.
auto gen_res = Generate(ir.Get(), gen_options);
if (gen_res != Success) {
diff --git a/src/tint/cmd/bench/hlsl/writer_bench.cc b/src/tint/cmd/bench/hlsl/writer_bench.cc
index 663323d..f710229 100644
--- a/src/tint/cmd/bench/hlsl/writer_bench.cc
+++ b/src/tint/cmd/bench/hlsl/writer_bench.cc
@@ -52,16 +52,17 @@
}
for (auto _ : state) {
- // Convert the AST program to an IR module.
- auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
- if (ir != Success) {
- state.SkipWithError(ir.Failure().reason);
- return;
- }
-
for (auto& name : names) {
+ // Convert the AST program to an IR module.
+ auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
+ if (ir != Success) {
+ state.SkipWithError(ir.Failure().reason);
+ return;
+ }
+
Options gen_options;
gen_options.bindings = GenerateBindings(ir.Get(), name, false, false);
+ gen_options.entry_point_name = name;
auto gen_res = Generate(ir.Get(), gen_options);
if (gen_res != Success) {
state.SkipWithError(gen_res.Failure().reason);
diff --git a/src/tint/cmd/bench/msl/writer_bench.cc b/src/tint/cmd/bench/msl/writer_bench.cc
index 1595656..72926e3 100644
--- a/src/tint/cmd/bench/msl/writer_bench.cc
+++ b/src/tint/cmd/bench/msl/writer_bench.cc
@@ -81,6 +81,7 @@
return;
}
gen_options.bindings = tint::GenerateBindings(ir.Get(), name, true, true);
+ gen_options.entry_point_name = name;
auto gen_res = Generate(ir.Get(), gen_options);
if (gen_res != Success) {
diff --git a/src/tint/cmd/bench/spirv/writer_bench.cc b/src/tint/cmd/bench/spirv/writer_bench.cc
index 2a76a71..4c67b30 100644
--- a/src/tint/cmd/bench/spirv/writer_bench.cc
+++ b/src/tint/cmd/bench/spirv/writer_bench.cc
@@ -29,6 +29,8 @@
#include "src/tint/cmd/bench/bench.h"
#include "src/tint/lang/spirv/writer/writer.h"
+#include "src/tint/lang/wgsl/ast/identifier.h"
+#include "src/tint/lang/wgsl/ast/module.h"
#include "src/tint/lang/wgsl/reader/reader.h"
#if TINT_BUILD_IS_MSVC
@@ -48,17 +50,31 @@
state.SkipWithError(res.Failure().reason);
return;
}
- for (auto _ : state) {
- // Convert the AST program to an IR module.
- auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
- if (ir != Success) {
- state.SkipWithError(ir.Failure().reason);
- return;
- }
- auto gen_res = Generate(ir.Get(), {});
- if (gen_res != Success) {
- state.SkipWithError(gen_res.Failure().reason);
+ // Get the list of entry point names.
+ std::vector<std::string> names;
+ for (auto func : res->program.AST().Functions()) {
+ if (func->IsEntryPoint()) {
+ names.push_back(func->name->symbol.Name());
+ }
+ }
+
+ for (auto _ : state) {
+ for (auto& name : names) {
+ // Convert the AST program to an IR module.
+ auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
+ if (ir != Success) {
+ state.SkipWithError(ir.Failure().reason);
+ return;
+ }
+
+ spirv::writer::Options options{
+ .entry_point_name = name,
+ };
+ auto gen_res = Generate(ir.Get(), options);
+ if (gen_res != Success) {
+ state.SkipWithError(gen_res.Failure().reason);
+ }
}
}
}
diff --git a/src/tint/cmd/bench/validator_bench.cc b/src/tint/cmd/bench/validator_bench.cc
index f51eb45..b99a0f1 100644
--- a/src/tint/cmd/bench/validator_bench.cc
+++ b/src/tint/cmd/bench/validator_bench.cc
@@ -57,7 +57,9 @@
}
for (auto _ : state) {
- auto val_res = Validate(ir.Get(), {});
+ auto val_res = Validate(ir.Get(), Capabilities{
+ Capability::kAllowMultipleEntryPoints,
+ });
if (val_res != Success) {
state.SkipWithError(val_res.Failure().reason);
}