mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-08-18 01:41:33 +00:00
Use the new CalculateArrayLength and DecomposeStorageAccess transforms to simplify storage buffer patterns before running the HLSL writer. The HLSL writer now handles the InternalDecorations for the internal load, store, and buffer-length intrinsics. GeneratorImpl::EmitStorageBufferAccessor() has now been entirely removed, as all this primitive load / store decomposition performed by DecomposeStorageAccess. TODOs around runtime arrays have been removed, as this is now handled by CalculateArrayLength. Bug: tint:185 Bug: tint:683 Change-Id: Ie25a527e7a22da52778c4477cfc22501de558a41 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/46878 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
65 lines
2.1 KiB
C++
65 lines
2.1 KiB
C++
// Copyright 2020 The Tint Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef SRC_TRANSFORM_MANAGER_H_
|
|
#define SRC_TRANSFORM_MANAGER_H_
|
|
|
|
#include <memory>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include "src/transform/transform.h"
|
|
|
|
namespace tint {
|
|
namespace transform {
|
|
|
|
/// A collection of Transforms that act as a single Transform.
|
|
/// The inner transforms will execute in the appended order.
|
|
/// If any inner transform fails the manager will return immediately and
|
|
/// the error can be retrieved with the Output's diagnostics.
|
|
class Manager : public Transform {
|
|
public:
|
|
/// Constructor
|
|
Manager();
|
|
~Manager() override;
|
|
|
|
/// Add pass to the manager
|
|
/// @param transform the transform to append
|
|
void append(std::unique_ptr<Transform> transform) {
|
|
transforms_.push_back(std::move(transform));
|
|
}
|
|
|
|
/// Add pass to the manager of type `T`, constructed with the provided
|
|
/// arguments.
|
|
/// @param args the arguments to forward to the `T` constructor
|
|
template <typename T, typename... ARGS>
|
|
void Add(ARGS&&... args) {
|
|
transforms_.emplace_back(std::make_unique<T>(std::forward<ARGS>(args)...));
|
|
}
|
|
|
|
/// Runs the transforms on `program`, returning the transformation result.
|
|
/// @param program the source program to transform
|
|
/// @param data optional extra transform-specific input data
|
|
/// @returns the transformed program and diagnostics
|
|
Output Run(const Program* program, const DataMap& data = {}) override;
|
|
|
|
private:
|
|
std::vector<std::unique_ptr<Transform>> transforms_;
|
|
};
|
|
|
|
} // namespace transform
|
|
} // namespace tint
|
|
|
|
#endif // SRC_TRANSFORM_MANAGER_H_
|