Automatically run entry point IO canonicalization
Avoids the need for downstream users to manually run this transform.
Change-Id: I0c63e2fd8b6ad49b752ed1757370e386171481cb
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/47440
Commit-Queue: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/include/tint/tint.h b/include/tint/tint.h
index 7b55fe2..d8c5233 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -25,7 +25,6 @@
#include "src/reader/reader.h"
#include "src/transform/binding_remapper.h"
#include "src/transform/bound_array_accessors.h"
-#include "src/transform/canonicalize_entry_point_io.h"
#include "src/transform/emit_vertex_point_size.h"
#include "src/transform/first_index_offset.h"
#include "src/transform/manager.h"
diff --git a/samples/main.cc b/samples/main.cc
index f31d8ad..2f9f7b8 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -701,15 +701,11 @@
#endif // TINT_BUILD_SPV_WRITER
#if TINT_BUILD_MSL_WRITER
case Format::kMsl:
- transform_manager.append(
- std::make_unique<tint::transform::CanonicalizeEntryPointIO>());
transform_manager.append(std::make_unique<tint::transform::Msl>());
break;
#endif // TINT_BUILD_MSL_WRITER
#if TINT_BUILD_HLSL_WRITER
case Format::kHlsl:
- transform_manager.append(
- std::make_unique<tint::transform::CanonicalizeEntryPointIO>());
transform_manager.append(std::make_unique<tint::transform::Hlsl>());
break;
#endif // TINT_BUILD_HLSL_WRITER
diff --git a/src/transform/hlsl.cc b/src/transform/hlsl.cc
index 0fdddc9..d2af505 100644
--- a/src/transform/hlsl.cc
+++ b/src/transform/hlsl.cc
@@ -23,6 +23,7 @@
#include "src/semantic/statement.h"
#include "src/semantic/variable.h"
#include "src/transform/calculate_array_length.h"
+#include "src/transform/canonicalize_entry_point_io.h"
#include "src/transform/decompose_storage_access.h"
#include "src/transform/manager.h"
@@ -34,6 +35,7 @@
Transform::Output Hlsl::Run(const Program* in, const DataMap& data) {
Manager manager;
+ manager.Add<CanonicalizeEntryPointIO>();
manager.Add<DecomposeStorageAccess>();
manager.Add<CalculateArrayLength>();
auto out = manager.Run(in, data);
diff --git a/src/transform/msl.cc b/src/transform/msl.cc
index af4bc44..48cebce 100644
--- a/src/transform/msl.cc
+++ b/src/transform/msl.cc
@@ -17,6 +17,8 @@
#include <utility>
#include "src/program_builder.h"
+#include "src/transform/canonicalize_entry_point_io.h"
+#include "src/transform/manager.h"
namespace tint {
namespace transform {
@@ -262,12 +264,19 @@
Msl::Msl() = default;
Msl::~Msl() = default;
-Transform::Output Msl::Run(const Program* in, const DataMap&) {
- ProgramBuilder out;
- CloneContext ctx(&out, in);
+Transform::Output Msl::Run(const Program* in, const DataMap& data) {
+ Manager manager;
+ manager.Add<CanonicalizeEntryPointIO>();
+ auto out = manager.Run(in, data);
+ if (!out.program.IsValid()) {
+ return out;
+ }
+
+ ProgramBuilder builder;
+ CloneContext ctx(&builder, &out.program);
RenameReservedKeywords(&ctx, kReservedKeywords);
ctx.Clone();
- return Output{Program(std::move(out))};
+ return Output{Program(std::move(builder))};
}
} // namespace transform
diff --git a/src/writer/hlsl/test_helper.h b/src/writer/hlsl/test_helper.h
index 2f5f356..de6611c 100644
--- a/src/writer/hlsl/test_helper.h
+++ b/src/writer/hlsl/test_helper.h
@@ -20,9 +20,7 @@
#include <utility>
#include "gtest/gtest.h"
-#include "src/transform/canonicalize_entry_point_io.h"
#include "src/transform/hlsl.h"
-#include "src/transform/manager.h"
#include "src/writer/hlsl/generator_impl.h"
namespace tint {
@@ -101,11 +99,7 @@
<< formatter.format(program->Diagnostics());
}();
- tint::transform::Manager transform_manager;
- transform_manager.append(
- std::make_unique<tint::transform::CanonicalizeEntryPointIO>());
- transform_manager.append(std::make_unique<tint::transform::Hlsl>());
- auto result = transform_manager.Run(program.get());
+ auto result = transform::Hlsl().Run(program.get());
[&]() {
ASSERT_TRUE(result.program.IsValid())
<< formatter.format(result.program.Diagnostics());
diff --git a/src/writer/msl/test_helper.h b/src/writer/msl/test_helper.h
index a40d2c3..37d5200 100644
--- a/src/writer/msl/test_helper.h
+++ b/src/writer/msl/test_helper.h
@@ -20,8 +20,6 @@
#include "gtest/gtest.h"
#include "src/program_builder.h"
-#include "src/transform/canonicalize_entry_point_io.h"
-#include "src/transform/manager.h"
#include "src/transform/msl.h"
#include "src/writer/msl/generator_impl.h"
@@ -76,11 +74,7 @@
<< diag::Formatter().format(program->Diagnostics());
}();
- tint::transform::Manager transform_manager;
- transform_manager.append(
- std::make_unique<tint::transform::CanonicalizeEntryPointIO>());
- transform_manager.append(std::make_unique<tint::transform::Msl>());
- auto result = transform_manager.Run(program.get());
+ auto result = transform::Msl().Run(program.get());
[&]() {
ASSERT_TRUE(result.program.IsValid())
<< diag::Formatter().format(result.program.Diagnostics());