mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-10-11 12:29:02 +00:00
Remove the old backend specific implementation for overrides. Use tint SubstituteOverride transform to replace overrides with const expressions and use the updated program at pipeline creation time. This CL also adds support for overrides used as workgroup size and related tests. Workgroup size validation now happens in backend code and at compute pipeline creation time. Bug: dawn:1504 Change-Id: I7df1fe9c3e358caa23235eacd6d13ba0b2998aec Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/99821 Commit-Queue: Shrek Shao <shrekshao@google.com> Reviewed-by: Austin Eng <enga@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
// Copyright 2022 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_TINT_TRANSFORM_SUBSTITUTE_OVERRIDE_H_
|
|
#define SRC_TINT_TRANSFORM_SUBSTITUTE_OVERRIDE_H_
|
|
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
#include "tint/override_id.h"
|
|
|
|
#include "src/tint/reflection.h"
|
|
#include "src/tint/transform/transform.h"
|
|
|
|
namespace tint::transform {
|
|
|
|
/// A transform that replaces overrides with the constant values provided.
|
|
///
|
|
/// # Example
|
|
/// ```
|
|
/// override width: f32;
|
|
/// @id(1) override height: i32 = 4;
|
|
/// override depth = 1i;
|
|
/// ```
|
|
///
|
|
/// When transformed with `width` -> 1, `1` -> 22, `depth` -> 42
|
|
///
|
|
/// ```
|
|
/// const width: f32 = 1f;
|
|
/// const height: i32 = 22i;
|
|
/// const depth = 42i;
|
|
/// ```
|
|
///
|
|
/// @see crbug.com/tint/1582
|
|
class SubstituteOverride final : public Castable<SubstituteOverride, Transform> {
|
|
public:
|
|
/// Configuration options for the transform
|
|
struct Config final : public Castable<Config, Data> {
|
|
/// Constructor
|
|
Config();
|
|
|
|
/// Copy constructor
|
|
Config(const Config&);
|
|
|
|
/// Destructor
|
|
~Config() override;
|
|
|
|
/// Assignment operator
|
|
/// @returns this Config
|
|
Config& operator=(const Config&);
|
|
|
|
/// The map of override identifier to the override value.
|
|
/// The value is always a double coming into the transform and will be
|
|
/// converted to the correct type through and initializer.
|
|
std::unordered_map<OverrideId, double> map;
|
|
|
|
/// Reflect the fields of this class so that it can be used by tint::ForeachField()
|
|
TINT_REFLECT(map);
|
|
};
|
|
|
|
/// Constructor
|
|
SubstituteOverride();
|
|
|
|
/// Destructor
|
|
~SubstituteOverride() override;
|
|
|
|
/// @param program the program to inspect
|
|
/// @param data optional extra transform-specific input data
|
|
/// @returns true if this transform should be run for the given program
|
|
bool ShouldRun(const Program* program, const DataMap& data = {}) const override;
|
|
|
|
protected:
|
|
/// Runs the transform using the CloneContext built for transforming a
|
|
/// program. Run() is responsible for calling Clone() on the CloneContext.
|
|
/// @param ctx the CloneContext primed with the input program and
|
|
/// ProgramBuilder
|
|
/// @param inputs optional extra transform-specific input data
|
|
/// @param outputs optional extra transform-specific output data
|
|
void Run(CloneContext& ctx, const DataMap& inputs, DataMap& outputs) const override;
|
|
};
|
|
|
|
} // namespace tint::transform
|
|
|
|
#endif // SRC_TINT_TRANSFORM_SUBSTITUTE_OVERRIDE_H_
|