================ @@ -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? + continue; + } + + // Samplers, UAVs, and SRVs are VarDecl types + assert(isa<VarDecl>(D) && "D is expected to be VarDecl or HLSLBufferDecl"); + const VarDecl *VD = cast<VarDecl>(D); + + // Register binding directly on global resource class variable + if (const HLSLAttributedResourceType *AttrResType = + FindHandleTypeOnResource(VD)) { + // FIXME: if array, calculate the binding size from the array dimensions + // (or unbounded for unsized array) + assert(RBA->getResourceField() == nullptr); + continue; ---------------- hekota wrote:
Outdated - ResourceField has been removed. 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