================ @@ -280,18 +280,22 @@ void CGHLSLRuntime::annotateHLSLResource(const VarDecl *D, GlobalVariable *GV) { const auto *RD = Ty->getAsCXXRecordDecl(); if (!RD) return; - const auto *HLSLResAttr = RD->getAttr<HLSLResourceAttr>(); - const auto *HLSLResClassAttr = RD->getAttr<HLSLResourceClassAttr>(); - if (!HLSLResAttr || !HLSLResClassAttr) - return; + // the resource related attributes are on the handle member + // inside the record decl + for (auto *FD : RD->fields()) { + const auto *HLSLResAttr = FD->getAttr<HLSLResourceAttr>(); + const auto *HLSLResClassAttr = FD->getAttr<HLSLResourceClassAttr>(); + if (!HLSLResAttr || !HLSLResClassAttr) + continue; - llvm::hlsl::ResourceClass RC = HLSLResClassAttr->getResourceClass(); - llvm::hlsl::ResourceKind RK = HLSLResAttr->getResourceKind(); - bool IsROV = HLSLResAttr->getIsROV(); - llvm::hlsl::ElementType ET = calculateElementType(CGM.getContext(), Ty); + llvm::hlsl::ResourceClass RC = HLSLResClassAttr->getResourceClass(); + llvm::hlsl::ResourceKind RK = HLSLResAttr->getResourceKind(); + bool IsROV = HLSLResAttr->getIsROV(); + llvm::hlsl::ElementType ET = calculateElementType(CGM.getContext(), Ty); - BufferResBinding Binding(D->getAttr<HLSLResourceBindingAttr>()); - addBufferResourceAnnotation(GV, RC, RK, IsROV, ET, Binding); + BufferResBinding Binding(D->getAttr<HLSLResourceBindingAttr>()); + addBufferResourceAnnotation(GV, RC, RK, IsROV, ET, Binding); ---------------- damyanp wrote:
What if there are >1 fields in the struct that have the resource / resource class attributes on it? Is it ok to add multiple bindings in that case? https://github.com/llvm/llvm-project/pull/101433 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits