mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-03 21:21:23 +00:00
Handle access control on var declarations instead of via [[access]] decorations. This change does the minimal work to migrate the WGSL parser over to the new syntax. Additional changes will be needed to correctly generate defaulted access qualifiers, as well as validating access usage. The [[access]] decorations are still supported by the WGSL parser, with new deprecated warnings, but not for aliases. Example: var x : [[access(x)]] alias_to_struct; Making this work is far more effort than I want to dedicate to backwards compatibility, and I do not beleive any real-world usage will be doing this. Still TODO: * Adding access control as the optional, third parameter to ptr<>. * Calculating default accesses for the various storage types. * Validating usage of variables against the different accesses. Bug: tint:846 Change-Id: If8ca82e5d16ec319ecd01f9a2cafffd930963bde Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53088 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: James Price <jrprice@google.com> Reviewed-by: David Neto <dneto@google.com> Kokoro: Kokoro <noreply+kokoro@google.com>
82 lines
2.8 KiB
C++
82 lines
2.8 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_BINDING_REMAPPER_H_
|
|
#define SRC_TRANSFORM_BINDING_REMAPPER_H_
|
|
|
|
#include <unordered_map>
|
|
|
|
#include "src/ast/access.h"
|
|
#include "src/sem/binding_point.h"
|
|
#include "src/transform/transform.h"
|
|
|
|
namespace tint {
|
|
namespace transform {
|
|
|
|
/// BindingPoint is an alias to sem::BindingPoint
|
|
using BindingPoint = sem::BindingPoint;
|
|
|
|
/// BindingRemapper is a transform used to remap resource binding points and
|
|
/// access controls.
|
|
class BindingRemapper : public Transform {
|
|
public:
|
|
/// BindingPoints is a map of old binding point to new binding point
|
|
using BindingPoints = std::unordered_map<BindingPoint, BindingPoint>;
|
|
|
|
/// AccessControls is a map of old binding point to new access control
|
|
using AccessControls = std::unordered_map<BindingPoint, ast::Access>;
|
|
|
|
/// Remappings is consumed by the BindingRemapper transform.
|
|
/// Data holds information about shader usage and constant buffer offsets.
|
|
struct Remappings : public Castable<Data, transform::Data> {
|
|
/// Constructor
|
|
/// @param bp a map of new binding points
|
|
/// @param ac a map of new access controls
|
|
/// @param may_collide If true, then validation will be disabled for
|
|
/// binding point collisions generated by this transform
|
|
Remappings(BindingPoints bp, AccessControls ac, bool may_collide = true);
|
|
|
|
/// Copy constructor
|
|
Remappings(const Remappings&);
|
|
|
|
/// Destructor
|
|
~Remappings() override;
|
|
|
|
/// A map of old binding point to new binding point
|
|
BindingPoints const binding_points;
|
|
|
|
/// A map of old binding point to new access controls
|
|
AccessControls const access_controls;
|
|
|
|
/// If true, then validation will be disabled for binding point collisions
|
|
/// generated by this transform
|
|
bool const allow_collisions;
|
|
};
|
|
|
|
/// Constructor
|
|
BindingRemapper();
|
|
~BindingRemapper() override;
|
|
|
|
/// Runs the transform on `program`, returning the transformation result.
|
|
/// @param program the source program to transform
|
|
/// @param data optional extra transform-specific input data
|
|
/// @returns the transformation result
|
|
Output Run(const Program* program, const DataMap& data = {}) override;
|
|
};
|
|
|
|
} // namespace transform
|
|
} // namespace tint
|
|
|
|
#endif // SRC_TRANSFORM_BINDING_REMAPPER_H_
|