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_;