================
@@ -3640,6 +3654,24 @@ void SemaHLSL::ActOnVariableDeclarator(VarDecl *VD) {
// process explicit bindings
processExplicitBindingsOnDecl(VD);
+
+ if (VD->getType()->isHLSLResourceRecordArray()) {
+ // If the resource array does not have an explicit binding attribute,
+ // create an implicit one. It will be used to transfer implicit binding
+ // order_ID to codegen.
+ if (!VD->hasAttr<HLSLVkBindingAttr>()) {
+ HLSLResourceBindingAttr *RBA = VD->getAttr<HLSLResourceBindingAttr>();
+ if (!RBA || !RBA->hasRegisterSlot()) {
+ uint32_t OrderID = getNextImplicitBindingOrderID();
+ if (RBA)
----------------
hekota wrote:
Actually no. The condition `!RBA || !RBA->hasRegisterSlot()` is true when we
either don't have `RBA`, or when we have an `RBA` but without a register slot.
In both cases we need to assign implicit binding, but in case that we don't
have an `RBA` we need to create one.
https://github.com/llvm/llvm-project/pull/152452
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits