mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-06 14:43:31 +00:00
This change adds an override for Transform::ShouldRun() for many of the transforms that can trivially detect whether running would be a no-op or not. Most programs do not require all the transforms to be run, and by skipping those that are not needed, significant performance wins can be had. This change also removes Transform::Requires() and Program::HasTransformApplied(). This makes little sense now that transforms can be skipped, and the usefulness of this information has been severely reduced since the introduction of transforms that need to be run more than once. Instread, just document on the transform class what the expectations are. Issue: tint:1383 Change-Id: I1a6f27cc4ba61ca1475a4ba912c465db619f76c7 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/77121 Reviewed-by: Antonio Maiorano <amaiorano@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
59 lines
2.0 KiB
C++
59 lines
2.0 KiB
C++
// Copyright 2021 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_LOCALIZE_STRUCT_ARRAY_ASSIGNMENT_H_
|
|
#define SRC_TRANSFORM_LOCALIZE_STRUCT_ARRAY_ASSIGNMENT_H_
|
|
|
|
#include "src/transform/transform.h"
|
|
|
|
namespace tint {
|
|
namespace transform {
|
|
|
|
/// This transforms replaces assignment to dynamically-indexed fixed-size arrays
|
|
/// in structs on shader-local variables with code that copies the arrays to a
|
|
/// temporary local variable, assigns to the local variable, and copies the
|
|
/// array back. This is to work around FXC's compilation failure for these cases
|
|
/// (see crbug.com/tint/1206).
|
|
///
|
|
/// @note Depends on the following transforms to have been run first:
|
|
/// * SimplifyPointers
|
|
class LocalizeStructArrayAssignment
|
|
: public Castable<LocalizeStructArrayAssignment, Transform> {
|
|
public:
|
|
/// Constructor
|
|
LocalizeStructArrayAssignment();
|
|
|
|
/// Destructor
|
|
~LocalizeStructArrayAssignment() 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;
|
|
|
|
private:
|
|
class State;
|
|
};
|
|
|
|
} // namespace transform
|
|
} // namespace tint
|
|
|
|
#endif // SRC_TRANSFORM_LOCALIZE_STRUCT_ARRAY_ASSIGNMENT_H_
|