Remove `ast::VariableBindingPoint` in favour of `sem::BindingPoint`.
This CL removes `VariableBindingPoint`. The `Variable` object has a
`has_binding_point` method added which returns true if there is
_both_ a `Group` and `Binding` attribute. Code has all been updated
to use the `sem::BindingPoint` which is populated during the resolve.
Bug: tint:1633
Change-Id: I79a0da662be61d5fb1c1b61342ab239cc4c66809
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/100240
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index a7367dc..fca1515 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -136,15 +136,15 @@
// Helper for writing " : register(RX, spaceY)", where R is the register, X is
// the binding point binding value, and Y is the binding point group value.
struct RegisterAndSpace {
- RegisterAndSpace(char r, ast::VariableBindingPoint bp) : reg(r), binding_point(bp) {}
+ RegisterAndSpace(char r, sem::BindingPoint bp) : reg(r), binding_point(bp) {}
const char reg;
- ast::VariableBindingPoint const binding_point;
+ sem::BindingPoint const binding_point;
};
std::ostream& operator<<(std::ostream& s, const RegisterAndSpace& rs) {
- s << " : register(" << rs.reg << rs.binding_point.binding->value << ", space"
- << rs.binding_point.group->value << ")";
+ s << " : register(" << rs.reg << rs.binding_point.binding << ", space" << rs.binding_point.group
+ << ")";
return s;
}
@@ -2861,7 +2861,7 @@
}
bool GeneratorImpl::EmitUniformVariable(const ast::Var* var, const sem::Variable* sem) {
- auto binding_point = var->BindingPoint();
+ auto binding_point = sem->As<sem::GlobalVariable>()->BindingPoint();
auto* type = sem->Type()->UnwrapRef();
auto name = builder_.Symbols().NameFor(var->symbol);
line() << "cbuffer cbuffer_" << name << RegisterAndSpace('b', binding_point) << " {";
@@ -2888,7 +2888,9 @@
return false;
}
- out << RegisterAndSpace(sem->Access() == ast::Access::kRead ? 't' : 'u', var->BindingPoint())
+ auto* global_sem = sem->As<sem::GlobalVariable>();
+ out << RegisterAndSpace(sem->Access() == ast::Access::kRead ? 't' : 'u',
+ global_sem->BindingPoint())
<< ";";
return true;
@@ -2916,9 +2918,8 @@
}
if (register_space) {
- auto bp = var->BindingPoint();
- out << " : register(" << register_space << bp.binding->value << ", space" << bp.group->value
- << ")";
+ auto bp = sem->As<sem::GlobalVariable>()->BindingPoint();
+ out << " : register(" << register_space << bp.binding << ", space" << bp.group << ")";
}
out << ";";