[llvm-branch-commits] [llvm] [DirectX] Adding missing descriptor table validations (PR #153276)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Aug 25 18:02:47 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>(
----------------
joaosaffran wrote:
Found a bug, fixed it, added test
https://github.com/llvm/llvm-project/pull/153276
More information about the llvm-branch-commits
mailing list