================ @@ -271,15 +237,29 @@ static void reportErrors(Module &M, DXILResourceMap &DRM, if (auto RSD = getRootSignature(RSBI, MMI)) { - llvm::hlsl::rootsig::RootSignatureBindingValidation Validation = - initRSBindingValidation(*RSD, tripleToVisibility(MMI.ShaderProfile)); - - reportUnboundRegisters(M, Validation, ResourceClass::CBuffer, - DRM.cbuffers()); - reportUnboundRegisters(M, Validation, ResourceClass::UAV, DRM.uavs()); - reportUnboundRegisters(M, Validation, ResourceClass::Sampler, - DRM.samplers()); - reportUnboundRegisters(M, Validation, ResourceClass::SRV, DRM.srvs()); + hlsl::BindingInfoBuilder Builder; + dxbc::ShaderVisibility Visibility = tripleToVisibility(MMI.ShaderProfile); + trackRootSigDescBinding(Builder, *RSD, Visibility); + + bool HasOverlap; + hlsl::BindingInfo Info = Builder.calculateBindingInfo(HasOverlap); + + for (const auto &ResList : + {std::make_pair(ResourceClass::SRV, DRM.srvs()), + std::make_pair(ResourceClass::UAV, DRM.uavs()), + std::make_pair(ResourceClass::CBuffer, DRM.cbuffers()), + std::make_pair(ResourceClass::Sampler, DRM.samplers())}) { + for (auto Res : ResList.second) { + llvm::dxil::ResourceInfo::ResourceBinding ResBinding = Res.getBinding(); + llvm::hlsl::BindingInfo::BindingRange ResRange( + ResBinding.LowerBound, ResBinding.LowerBound + ResBinding.Size); + + auto IsBound = Info.isBound(ResList.first, ResBinding.Space, ResRange); + if (!IsBound) { + reportRegNotBound(M, ResList.first, ResBinding); + } ---------------- inbelic wrote:
nit: ```suggestion if (!Info.isBound(ResList.first, ResBinding.Space, ResRange) reportRegNotBound(M, ResList.first, ResBinding); ``` https://github.com/llvm/llvm-project/pull/146785 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits