================
@@ -1272,6 +1280,49 @@ std::optional<LValue>
CGHLSLRuntime::emitResourceArraySubscriptExpr(
return CGF.MakeAddrLValue(TmpVar, ResultTy, AlignmentSource::Decl);
}
+// If RHSExpr is a global resource array, initialize all of its resources and
+// set them into LHS. Returns false if no copy has been performed and the
+// array copy should be handled by Clang codegen.
+bool CGHLSLRuntime::emitResourceArrayCopy(LValue &LHS, Expr *RHSExpr,
+ CodeGenFunction &CGF) {
+ QualType ResultTy = RHSExpr->getType();
+ assert((ResultTy->isHLSLResourceRecordArray()) && "expected resource array");
+
+ // Let Clang codegen handle local and static resource array copies.
+ const VarDecl *ArrayDecl = dyn_cast_or_null<VarDecl>(getArrayDecl(RHSExpr));
+ if (!ArrayDecl || !ArrayDecl->hasGlobalStorage() ||
+ ArrayDecl->getStorageClass() == SC_Static)
+ return false;
+
+ // Find binding info for the resource array. For implicit binding
+ // the HLSLResourceBindingAttr should have been added by SemaHLSL.
+ ResourceBindingAttrs Binding(ArrayDecl);
+ assert((Binding.hasBinding()) &&
----------------
bogner wrote:
```suggestion
assert(Binding.hasBinding() &&
```
https://github.com/llvm/llvm-project/pull/166880
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits