[clang] [llvm] [DirectX] Validate registers are bound to root signature (PR #146785)
Finn Plummer via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 5 09:14:50 PDT 2025
================
@@ -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
More information about the llvm-commits
mailing list