[llvm-branch-commits] [llvm] [DirectX] Adding missing descriptor table validations (PR #153276)
Finn Plummer via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Aug 25 15:24:25 PDT 2025
================
@@ -513,6 +515,58 @@ Error MetadataParser::parseRootSignatureElement(mcdxbc::RootSignatureDesc &RSD,
llvm_unreachable("Unhandled RootSignatureElementKind enum.");
}
+Error validateDescriptorTableSamplerMixin(mcdxbc::DescriptorTable Table,
+ uint32_t Location) {
+ bool HasSampler = false;
+ bool HasOtherRangeType = false;
+ dxbc::DescriptorRangeType OtherRangeType;
+
+ for (const dxbc::RTS0::v2::DescriptorRange &Range : Table.Ranges) {
+ dxbc::DescriptorRangeType RangeType =
+ static_cast<dxbc::DescriptorRangeType>(Range.RangeType);
+
+ if (RangeType == dxbc::DescriptorRangeType::Sampler) {
+ HasSampler = true;
+ } else {
+ HasOtherRangeType = true;
+ OtherRangeType = RangeType;
+ }
+ }
+
+ // Samplers cannot be mixed with other resources in a descriptor table.
+ if (HasSampler && HasOtherRangeType)
+ return make_error<TableSamplerMixinError>(OtherRangeType, Location);
+ return Error::success();
+}
+
+Error validateDescriptorTableRegisterOverflow(mcdxbc::DescriptorTable Table,
+ uint32_t Location) {
+ uint64_t AppendingRegister = 0;
+
+ for (const dxbc::RTS0::v2::DescriptorRange &Range : Table.Ranges) {
+ dxbc::DescriptorRangeType RangeType =
+ static_cast<dxbc::DescriptorRangeType>(Range.RangeType);
+
+ if (verifyOffsetOverflow(Range.OffsetInDescriptorsFromTableStart,
+ AppendingRegister))
+ return make_error<TableRegisterOverflowError>(
+ RangeType, Range.BaseShaderRegister, Range.RegisterSpace);
+
+ if (verifyRegisterOverflow(Range.BaseShaderRegister, Range.NumDescriptors))
+ return make_error<TableRegisterOverflowError>(
+ RangeType, Range.BaseShaderRegister, Range.RegisterSpace);
+
+ if (verifyRegisterOverflow(AppendingRegister, Range.NumDescriptors))
+ return make_error<TableRegisterOverflowError>(
----------------
inbelic wrote:
These provide the same error message for the different cases. I think we should be at least on par, if not better than DXC here. [DXC for reference](https://github.com/microsoft/DirectXShaderCompiler/blob/dbcbac93c8f33b623b26c930d969d950a00c0ed8/lib/DxilRootSignature/DxilRootSignatureValidator.cpp#L204).
https://github.com/llvm/llvm-project/pull/153276
More information about the llvm-branch-commits
mailing list