tint/sem: Make BindingPoint optional
Reduces hops from sem -> ast, just to know whether the variable has a binding point.
Change-Id: I5620198e6f08b73d5a0171d95874f1a2dae5d93e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/127060
Reviewed-by: James Price <jrprice@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index b37ebdc..8b9bde8 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -3066,7 +3066,7 @@
}
bool GeneratorImpl::EmitUniformVariable(const ast::Var* var, const sem::Variable* sem) {
- auto binding_point = sem->As<sem::GlobalVariable>()->BindingPoint();
+ auto binding_point = *sem->As<sem::GlobalVariable>()->BindingPoint();
auto* type = sem->Type()->UnwrapRef();
auto name = var->name->symbol.Name();
line() << "cbuffer cbuffer_" << name << RegisterAndSpace('b', binding_point) << " {";
@@ -3095,7 +3095,7 @@
auto* global_sem = sem->As<sem::GlobalVariable>();
out << RegisterAndSpace(sem->Access() == builtin::Access::kRead ? 't' : 'u',
- global_sem->BindingPoint())
+ *global_sem->BindingPoint())
<< ";";
return true;
@@ -3124,14 +3124,14 @@
if (register_space) {
auto bp = sem->As<sem::GlobalVariable>()->BindingPoint();
- out << " : register(" << register_space << bp.binding;
+ out << " : register(" << register_space << bp->binding;
// Omit the space if it's 0, as it's the default.
// SM 5.0 doesn't support spaces, so we don't emit them if group is 0 for better
// compatibility.
- if (bp.group == 0) {
+ if (bp->group == 0) {
out << ")";
} else {
- out << ", space" << bp.group << ")";
+ out << ", space" << bp->group << ")";
}
}