mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-18 09:25:25 +00:00
Add ast::Variable::BindingPoint
Use this to simplify a bunch of code in semantic::Function. Change-Id: Ia3f8a270ec576660eab00bcfa4df9a96138bd31e Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/46261 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: James Price <jrprice@google.com>
This commit is contained in:
committed by
Commit Bot service account
parent
af8a8ac3d6
commit
a864f24c6f
@@ -18,6 +18,7 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "src/ast/variable.h"
|
||||
#include "src/semantic/call_target.h"
|
||||
|
||||
namespace tint {
|
||||
@@ -39,16 +40,9 @@ class Variable;
|
||||
/// Function holds the semantic information for function nodes.
|
||||
class Function : public Castable<Function, CallTarget> {
|
||||
public:
|
||||
/// Information about a binding
|
||||
struct BindingInfo {
|
||||
/// The binding decoration
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
/// The group decoration
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
};
|
||||
|
||||
/// A vector of [Variable*, BindingInfo] pairs
|
||||
using VariableBindings = std::vector<std::pair<const Variable*, BindingInfo>>;
|
||||
/// A vector of [Variable*, ast::Variable::BindingPoint] pairs
|
||||
using VariableBindings =
|
||||
std::vector<std::pair<const Variable*, ast::Variable::BindingPoint>>;
|
||||
|
||||
/// Constructor
|
||||
/// @param declaration the ast::Function
|
||||
|
||||
@@ -38,21 +38,6 @@ ParameterList GetParameters(ast::Function* ast) {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
std::tuple<ast::BindingDecoration*, ast::GroupDecoration*> GetBindingAndGroup(
|
||||
const Variable* var) {
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
for (auto* deco : var->Declaration()->decorations()) {
|
||||
if (auto* b = deco->As<ast::BindingDecoration>()) {
|
||||
binding = b;
|
||||
}
|
||||
if (auto* s = deco->As<ast::GroupDecoration>()) {
|
||||
group = s;
|
||||
}
|
||||
}
|
||||
return {binding, group};
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Function::Function(ast::Function* declaration,
|
||||
@@ -92,14 +77,9 @@ Function::VariableBindings Function::ReferencedUniformVariables() const {
|
||||
continue;
|
||||
}
|
||||
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
std::tie(binding, group) = GetBindingAndGroup(var);
|
||||
if (binding == nullptr || group == nullptr) {
|
||||
continue;
|
||||
if (auto binding_point = var->Declaration()->binding_point()) {
|
||||
ret.push_back({var, binding_point});
|
||||
}
|
||||
|
||||
ret.push_back({var, BindingInfo{binding, group}});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -112,14 +92,9 @@ Function::VariableBindings Function::ReferencedStorageBufferVariables() const {
|
||||
continue;
|
||||
}
|
||||
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
std::tie(binding, group) = GetBindingAndGroup(var);
|
||||
if (binding == nullptr || group == nullptr) {
|
||||
continue;
|
||||
if (auto binding_point = var->Declaration()->binding_point()) {
|
||||
ret.push_back({var, binding_point});
|
||||
}
|
||||
|
||||
ret.push_back({var, BindingInfo{binding, group}});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -168,14 +143,9 @@ Function::VariableBindings Function::ReferencedStorageTextureVariables() const {
|
||||
continue;
|
||||
}
|
||||
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
std::tie(binding, group) = GetBindingAndGroup(var);
|
||||
if (binding == nullptr || group == nullptr) {
|
||||
continue;
|
||||
if (auto binding_point = var->Declaration()->binding_point()) {
|
||||
ret.push_back({var, binding_point});
|
||||
}
|
||||
|
||||
ret.push_back({var, BindingInfo{binding, group}});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -191,14 +161,9 @@ Function::VariableBindings Function::ReferencedDepthTextureVariables() const {
|
||||
continue;
|
||||
}
|
||||
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
std::tie(binding, group) = GetBindingAndGroup(var);
|
||||
if (binding == nullptr || group == nullptr) {
|
||||
continue;
|
||||
if (auto binding_point = var->Declaration()->binding_point()) {
|
||||
ret.push_back({var, binding_point});
|
||||
}
|
||||
|
||||
ret.push_back({var, BindingInfo{binding, group}});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -239,14 +204,9 @@ Function::VariableBindings Function::ReferencedSamplerVariablesImpl(
|
||||
continue;
|
||||
}
|
||||
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
std::tie(binding, group) = GetBindingAndGroup(var);
|
||||
if (binding == nullptr || group == nullptr) {
|
||||
continue;
|
||||
if (auto binding_point = var->Declaration()->binding_point()) {
|
||||
ret.push_back({var, binding_point});
|
||||
}
|
||||
|
||||
ret.push_back({var, BindingInfo{binding, group}});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -270,14 +230,9 @@ Function::VariableBindings Function::ReferencedSampledTextureVariablesImpl(
|
||||
continue;
|
||||
}
|
||||
|
||||
ast::BindingDecoration* binding = nullptr;
|
||||
ast::GroupDecoration* group = nullptr;
|
||||
std::tie(binding, group) = GetBindingAndGroup(var);
|
||||
if (binding == nullptr || group == nullptr) {
|
||||
continue;
|
||||
if (auto binding_point = var->Declaration()->binding_point()) {
|
||||
ret.push_back({var, binding_point});
|
||||
}
|
||||
|
||||
ret.push_back({var, BindingInfo{binding, group}});
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user