================ @@ -2228,3 +2242,62 @@ QualType SemaHLSL::getInoutParameterType(QualType Ty) { Ty.addRestrict(); return Ty; } + +// Walks though existing explicit bindings, finds the actual resource class +// decl the binding applies to and sets it to attr->ResourceField. +// Additional processing of resource binding can be added here later on, +// such as preparation for overapping resource detection or implicit binding. +void SemaHLSL::ProcessResourceBindingOnDecl(VarDecl *D) { + if (!D->hasGlobalStorage()) + return; + + for (Attr *A : D->attrs()) { + HLSLResourceBindingAttr *RBA = dyn_cast<HLSLResourceBindingAttr>(A); + if (!RBA) + continue; + + // // Cbuffers and Tbuffers are HLSLBufferDecl types + if (const HLSLBufferDecl *CBufferOrTBuffer = dyn_cast<HLSLBufferDecl>(D)) { + assert(RBA->getRegisterType() == + getRegisterType(CBufferOrTBuffer->isCBuffer() + ? ResourceClass::CBuffer + : ResourceClass::SRV) && + "this should have been handled in DiagnoseLocalRegisterBinding"); + // should we handle HLSLBufferDecl here? ---------------- bob80905 wrote:
I think so? It would definitely make sense if you were to change the additional member type in RBA to a Decl instead of a field decl, since HLSLBufferDecl hopefully inherits from Decl https://github.com/llvm/llvm-project/pull/111203 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits