transform: Minor changes to cleanup Dawn usage.
Move transform::Transform::Output to transform::Output.
There's no need for this to be an nested class, it stutters, and it also
prevents Dawn from forward declaring it.
Add move assignment operator to DataMap.
Change-Id: Ibe1af03abc1a872790d20ee6ec8cf18a511ea0b4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/47772
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ben Clayton <bclayton@chromium.org>
diff --git a/src/transform/binding_remapper.cc b/src/transform/binding_remapper.cc
index aed0b0a..8cc1f9c 100644
--- a/src/transform/binding_remapper.cc
+++ b/src/transform/binding_remapper.cc
@@ -34,8 +34,7 @@
BindingRemapper::BindingRemapper() = default;
BindingRemapper::~BindingRemapper() = default;
-Transform::Output BindingRemapper::Run(const Program* in,
- const DataMap& datamap) {
+Output BindingRemapper::Run(const Program* in, const DataMap& datamap) {
ProgramBuilder out;
auto* remappings = datamap.Get<Remappings>();
if (!remappings) {
diff --git a/src/transform/bound_array_accessors.cc b/src/transform/bound_array_accessors.cc
index 0ba5a49..3f6416b 100644
--- a/src/transform/bound_array_accessors.cc
+++ b/src/transform/bound_array_accessors.cc
@@ -26,7 +26,7 @@
BoundArrayAccessors::BoundArrayAccessors() = default;
BoundArrayAccessors::~BoundArrayAccessors() = default;
-Transform::Output BoundArrayAccessors::Run(const Program* in, const DataMap&) {
+Output BoundArrayAccessors::Run(const Program* in, const DataMap&) {
ProgramBuilder out;
CloneContext ctx(&out, in);
diff --git a/src/transform/calculate_array_length.cc b/src/transform/calculate_array_length.cc
index 7d92631..3d37e86 100644
--- a/src/transform/calculate_array_length.cc
+++ b/src/transform/calculate_array_length.cc
@@ -68,7 +68,7 @@
CalculateArrayLength::CalculateArrayLength() = default;
CalculateArrayLength::~CalculateArrayLength() = default;
-Transform::Output CalculateArrayLength::Run(const Program* in, const DataMap&) {
+Output CalculateArrayLength::Run(const Program* in, const DataMap&) {
ProgramBuilder out;
CloneContext ctx(&out, in);
diff --git a/src/transform/canonicalize_entry_point_io.cc b/src/transform/canonicalize_entry_point_io.cc
index 22bab4a..622b6b2 100644
--- a/src/transform/canonicalize_entry_point_io.cc
+++ b/src/transform/canonicalize_entry_point_io.cc
@@ -58,8 +58,7 @@
} // namespace
-Transform::Output CanonicalizeEntryPointIO::Run(const Program* in,
- const DataMap&) {
+Output CanonicalizeEntryPointIO::Run(const Program* in, const DataMap&) {
ProgramBuilder out;
CloneContext ctx(&out, in);
diff --git a/src/transform/decompose_storage_access.cc b/src/transform/decompose_storage_access.cc
index 92ebe5f..d154514 100644
--- a/src/transform/decompose_storage_access.cc
+++ b/src/transform/decompose_storage_access.cc
@@ -609,8 +609,7 @@
DecomposeStorageAccess::DecomposeStorageAccess() = default;
DecomposeStorageAccess::~DecomposeStorageAccess() = default;
-Transform::Output DecomposeStorageAccess::Run(const Program* in,
- const DataMap&) {
+Output DecomposeStorageAccess::Run(const Program* in, const DataMap&) {
ProgramBuilder out;
CloneContext ctx(&out, in);
diff --git a/src/transform/emit_vertex_point_size.cc b/src/transform/emit_vertex_point_size.cc
index c4e0464..676d400 100644
--- a/src/transform/emit_vertex_point_size.cc
+++ b/src/transform/emit_vertex_point_size.cc
@@ -25,7 +25,7 @@
EmitVertexPointSize::EmitVertexPointSize() = default;
EmitVertexPointSize::~EmitVertexPointSize() = default;
-Transform::Output EmitVertexPointSize::Run(const Program* in, const DataMap&) {
+Output EmitVertexPointSize::Run(const Program* in, const DataMap&) {
if (!in->AST().Functions().HasStage(ast::PipelineStage::kVertex)) {
// If the module doesn't have any vertex stages, then there's nothing to do.
return Output(Program(in->Clone()));
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index a1adf66..7a96995 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -60,8 +60,7 @@
FirstIndexOffset::~FirstIndexOffset() = default;
-Transform::Output FirstIndexOffset::Run(const Program* in,
- const DataMap& data) {
+Output FirstIndexOffset::Run(const Program* in, const DataMap& data) {
// Get the uniform buffer binding point
uint32_t ub_binding = binding_;
uint32_t ub_group = group_;
diff --git a/src/transform/hlsl.cc b/src/transform/hlsl.cc
index 3b4bb80..5a5b6db 100644
--- a/src/transform/hlsl.cc
+++ b/src/transform/hlsl.cc
@@ -33,7 +33,7 @@
Hlsl::Hlsl() = default;
Hlsl::~Hlsl() = default;
-Transform::Output Hlsl::Run(const Program* in, const DataMap& data) {
+Output Hlsl::Run(const Program* in, const DataMap& data) {
Manager manager;
manager.Add<CanonicalizeEntryPointIO>();
manager.Add<DecomposeStorageAccess>();
diff --git a/src/transform/manager.cc b/src/transform/manager.cc
index ef6f79e..10e3f58 100644
--- a/src/transform/manager.cc
+++ b/src/transform/manager.cc
@@ -20,7 +20,7 @@
Manager::Manager() = default;
Manager::~Manager() = default;
-Transform::Output Manager::Run(const Program* program, const DataMap& data) {
+Output Manager::Run(const Program* program, const DataMap& data) {
Output out;
if (!transforms_.empty()) {
for (auto& transform : transforms_) {
diff --git a/src/transform/msl.cc b/src/transform/msl.cc
index 5f01358..c1033fa 100644
--- a/src/transform/msl.cc
+++ b/src/transform/msl.cc
@@ -25,7 +25,7 @@
Msl::Msl() = default;
Msl::~Msl() = default;
-Transform::Output Msl::Run(const Program* in, const DataMap& data) {
+Output Msl::Run(const Program* in, const DataMap& data) {
Manager manager;
manager.Add<CanonicalizeEntryPointIO>();
auto out = manager.Run(in, data);
diff --git a/src/transform/renamer.cc b/src/transform/renamer.cc
index 07f773d..9ed4743 100644
--- a/src/transform/renamer.cc
+++ b/src/transform/renamer.cc
@@ -846,7 +846,7 @@
Renamer::~Renamer() = default;
-Transform::Output Renamer::Run(const Program* in, const DataMap&) {
+Output Renamer::Run(const Program* in, const DataMap&) {
ProgramBuilder out;
CloneContext ctx(&out, in);
diff --git a/src/transform/spirv.cc b/src/transform/spirv.cc
index 2d651e1..1faad8f 100644
--- a/src/transform/spirv.cc
+++ b/src/transform/spirv.cc
@@ -31,7 +31,7 @@
Spirv::Spirv() = default;
Spirv::~Spirv() = default;
-Transform::Output Spirv::Run(const Program* in, const DataMap&) {
+Output Spirv::Run(const Program* in, const DataMap&) {
ProgramBuilder out;
CloneContext ctx(&out, in);
HandleEntryPointIOTypes(ctx);
diff --git a/src/transform/test_helper.h b/src/transform/test_helper.h
index 52f3a77..dcd11b0 100644
--- a/src/transform/test_helper.h
+++ b/src/transform/test_helper.h
@@ -38,10 +38,9 @@
/// @param transforms the list of transforms to apply
/// @param data the optional DataMap to pass to Transform::Run()
/// @return the transformed output
- Transform::Output Run(
- std::string in,
- std::vector<std::unique_ptr<transform::Transform>> transforms,
- const DataMap& data = {}) {
+ Output Run(std::string in,
+ std::vector<std::unique_ptr<transform::Transform>> transforms,
+ const DataMap& data = {}) {
auto file = std::make_unique<Source::File>("test", in);
auto program = reader::wgsl::Parse(file.get());
@@ -49,7 +48,7 @@
files_.emplace_back(std::move(file));
if (!program.IsValid()) {
- return Transform::Output(std::move(program));
+ return Output(std::move(program));
}
Manager manager;
@@ -65,9 +64,9 @@
/// @param in the input WGSL source
/// @param data the optional DataMap to pass to Transform::Run()
/// @return the transformed output
- Transform::Output Run(std::string in,
- std::unique_ptr<transform::Transform> transform,
- const DataMap& data = {}) {
+ Output Run(std::string in,
+ std::unique_ptr<transform::Transform> transform,
+ const DataMap& data = {}) {
std::vector<std::unique_ptr<transform::Transform>> transforms;
transforms.emplace_back(std::move(transform));
return Run(std::move(in), std::move(transforms), data);
@@ -79,14 +78,14 @@
/// @param data the optional DataMap to pass to Transform::Run()
/// @return the transformed output
template <typename TRANSFORM>
- Transform::Output Run(std::string in, const DataMap& data = {}) {
+ Output Run(std::string in, const DataMap& data = {}) {
return Run(std::move(in), std::make_unique<TRANSFORM>(), data);
}
/// @param output the output of the transform
/// @returns the output program as a WGSL string, or an error string if the
/// program is not valid.
- std::string str(const Transform::Output& output) {
+ std::string str(const Output& output) {
diag::Formatter::Style style;
style.print_newline_at_end = false;
diff --git a/src/transform/transform.cc b/src/transform/transform.cc
index a9c3816..503e5a5 100644
--- a/src/transform/transform.cc
+++ b/src/transform/transform.cc
@@ -31,9 +31,10 @@
DataMap::DataMap() = default;
DataMap::DataMap(DataMap&&) = default;
DataMap::~DataMap() = default;
+DataMap& DataMap::operator=(DataMap&&) = default;
-Transform::Output::Output() = default;
-Transform::Output::Output(Program&& p) : program(std::move(p)) {}
+Output::Output() = default;
+Output::Output(Program&& p) : program(std::move(p)) {}
Transform::Transform() = default;
Transform::~Transform() = default;
diff --git a/src/transform/transform.h b/src/transform/transform.h
index 21e9f10..533f0f8 100644
--- a/src/transform/transform.h
+++ b/src/transform/transform.h
@@ -62,6 +62,11 @@
/// Destructor
~DataMap();
+ /// Move assignment operator
+ /// @param rhs the DataMap to move into this DataMap
+ /// @return this DataMap
+ DataMap& operator=(DataMap&& rhs);
+
/// Adds the data into DataMap keyed by the ClassID of type T.
/// @param data the data to add to the DataMap
template <typename T>
@@ -114,39 +119,42 @@
std::unordered_map<const TypeInfo*, std::unique_ptr<Data>> map_;
};
+/// The return type of Run()
+class Output {
+ public:
+ /// Constructor
+ Output();
+
+ /// Constructor
+ /// @param program the program to move into this Output
+ explicit Output(Program&& program);
+
+ /// Constructor
+ /// @param program_ the program to move into this Output
+ /// @param data_ a variadic list of additional data unique_ptrs produced by
+ /// the transform
+ template <typename... DATA>
+ Output(Program&& program_, DATA... data_)
+ : program(std::move(program_)), data(std::forward<DATA>(data_)...) {}
+
+ /// The transformed program. May be empty on error.
+ Program program;
+
+ /// Extra output generated by the transforms.
+ DataMap data;
+};
+
/// Interface for Program transforms
class Transform {
public:
+ /// [DEPRECATED]: Use transform::Output
+ using Output = transform::Output;
+
/// Constructor
Transform();
/// Destructor
virtual ~Transform();
- /// The return type of Run()
- class Output {
- public:
- /// Constructor
- Output();
-
- /// Constructor
- /// @param program the program to move into this Output
- explicit Output(Program&& program);
-
- /// Constructor
- /// @param program_ the program to move into this Output
- /// @param data_ a variadic list of additional data unique_ptrs produced by
- /// the transform
- template <typename... DATA>
- Output(Program&& program_, DATA... data_)
- : program(std::move(program_)), data(std::forward<DATA>(data_)...) {}
-
- /// The transformed program. May be empty on error.
- Program program;
-
- /// Extra output generated by the transforms.
- DataMap data;
- };
-
/// Runs the transform on `program`, returning the transformation result.
/// @param program the source program to transform
/// @param data optional extra transform-specific input data
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index af4f00b..3657ea5 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -390,7 +390,7 @@
VertexPulling::~VertexPulling() = default;
-Transform::Output VertexPulling::Run(const Program* in, const DataMap& data) {
+Output VertexPulling::Run(const Program* in, const DataMap& data) {
ProgramBuilder out;
auto cfg = cfg_;