@@ -1850,8 +1850,7 @@ void DeclResultIdMapper::createCounterVar(
18501850 assert (declType->isIncompleteArrayType ());
18511851 counterType = spvContext.getRuntimeArrayType (counterType, noArrayStride);
18521852 }
1853- } else if (isResourceDescriptorHeap (decl->getType ()) ||
1854- isSamplerDescriptorHeap (decl->getType ())) {
1853+ } else if (isResourceDescriptorHeap (decl) || isSamplerDescriptorHeap (decl)) {
18551854 counterType = spvContext.getRuntimeArrayType (counterType, noArrayStride);
18561855 }
18571856
@@ -2517,18 +2516,33 @@ bool DeclResultIdMapper::decorateResourceBindings() {
25172516
25182517 spvBuilder.decorateDSetBinding (var.getSpirvInstr (), globalsSetNo,
25192518 globalsBindNo);
2519+ } else if (var.isResourceDescriptorHeap ()) {
2520+ if (!spirvOptions.resourceHeapBinding ) {
2521+ emitError (" -fvk-bind-resource-heap is required when using "
2522+ " -fvk-bind-register" ,
2523+ var.getSourceLocation ());
2524+ return false ;
2525+ }
2526+ } else if (var.isSamplerDescriptorHeap ()) {
2527+ if (!spirvOptions.samplerHeapBinding ) {
2528+ emitError (" -fvk-bind-sampler-heap is required when using "
2529+ " -fvk-bind-register" ,
2530+ var.getSourceLocation ());
2531+ return false ;
2532+ }
25202533 } else {
25212534 emitError (
25222535 " -fvk-bind-register requires register annotations on all resources" ,
25232536 var.getSourceLocation ());
25242537 return false ;
25252538 }
25262539
2540+ BindingSet bindingSet;
2541+ decorateResourceHeapsBindings (bindingSet);
25272542 return true ;
25282543 }
25292544
25302545 BindingSet bindingSet;
2531-
25322546 // If some bindings are reserved for heaps, mark those are used.
25332547 if (spirvOptions.resourceHeapBinding )
25342548 bindingSet.useBinding (spirvOptions.resourceHeapBinding ->binding ,
@@ -2669,8 +2683,8 @@ bool DeclResultIdMapper::decorateResourceBindings() {
26692683
26702684 if (var.getDeclaration ()) {
26712685 const VarDecl *decl = dyn_cast<VarDecl>(var.getDeclaration ());
2672- if (decl && ( isResourceDescriptorHeap (decl-> getType ()) ||
2673- isSamplerDescriptorHeap (decl-> getType () )))
2686+ if (decl &&
2687+ ( isResourceDescriptorHeap (decl) || isSamplerDescriptorHeap (decl)))
26742688 continue ;
26752689 }
26762690
@@ -2755,8 +2769,8 @@ void DeclResultIdMapper::decorateResourceHeapsBindings(BindingSet &bindingSet) {
27552769 if (!decl)
27562770 continue ;
27572771
2758- const bool isResourceHeap = isResourceDescriptorHeap (decl-> getType () );
2759- const bool isSamplerHeap = isSamplerDescriptorHeap (decl-> getType () );
2772+ const bool isResourceHeap = isResourceDescriptorHeap (decl);
2773+ const bool isSamplerHeap = isSamplerDescriptorHeap (decl);
27602774
27612775 assert (!(var.isCounter () && isSamplerHeap));
27622776
@@ -2791,8 +2805,8 @@ void DeclResultIdMapper::decorateResourceHeapsBindings(BindingSet &bindingSet) {
27912805 if (!decl)
27922806 continue ;
27932807
2794- const bool isResourceHeap = isResourceDescriptorHeap (decl-> getType () );
2795- const bool isSamplerHeap = isSamplerDescriptorHeap (decl-> getType () );
2808+ const bool isResourceHeap = isResourceDescriptorHeap (decl);
2809+ const bool isSamplerHeap = isSamplerDescriptorHeap (decl);
27962810 if (!isSamplerHeap && !isResourceHeap)
27972811 continue ;
27982812 const SpirvCodeGenOptions::BindingInfo &info =
0 commit comments