Skip to content

Commit e8066df

Browse files
author
joaosaffran
committed
address comments
1 parent 91346a7 commit e8066df

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

llvm/include/llvm/BinaryFormat/DXContainerConstants.def

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,11 @@ DESCRIPTOR_RANGE_FLAG(0x10000, DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS)
100100
// DESCRIPTOR_RANGE(value, name).
101101
#ifdef DESCRIPTOR_RANGE
102102

103-
DESCRIPTOR_RANGE(4, ERROR)
104103
DESCRIPTOR_RANGE(0, SRV)
105104
DESCRIPTOR_RANGE(1, UAV)
106105
DESCRIPTOR_RANGE(2, CBV)
107106
DESCRIPTOR_RANGE(3, Sampler)
108-
DESCRIPTOR_RANGE(0, NONE)
107+
DESCRIPTOR_RANGE(4, NONE)
109108
#undef DESCRIPTOR_RANGE
110109
#endif // DESCRIPTOR_RANGE
111110

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ static bool parseDescriptorRange(LLVMContext *Ctx,
197197
.Case("UAV", llvm::to_underlying(dxbc::DescriptorRangeType::UAV))
198198
.Case("Sampler",
199199
llvm::to_underlying(dxbc::DescriptorRangeType::Sampler))
200-
.Default(llvm::to_underlying(dxbc::DescriptorRangeType::ERROR));
200+
.Default(-1u);
201+
202+
if (Range.RangeType == -1u)
203+
return reportError(Ctx, "Invalid Descriptor Range type: " + *ElementText);
201204

202205
if (std::optional<uint32_t> Val = extractMdIntValue(RangeDescriptorNode, 1))
203206
Range.NumDescriptors = *Val;
@@ -349,16 +352,19 @@ static bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
349352
const bool IsSampler =
350353
(Type == llvm::to_underlying(dxbc::DescriptorRangeType::Sampler));
351354

355+
if (Version == 1) {
356+
if (IsSampler)
357+
return Flags == FlagT::NONE;
358+
return Flags == FlagT::DESCRIPTORS_VOLATILE;
359+
}
360+
352361
// The data-specific flags are mutually exclusive.
353362
FlagT DataFlags = FlagT::DATA_VOLATILE | FlagT::DATA_STATIC |
354363
FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
355364

356365
if (popcount(llvm::to_underlying(Flags & DataFlags)) > 1)
357366
return false;
358367

359-
if (popcount(llvm::to_underlying(Flags & DataFlags)) == 1)
360-
return true;
361-
362368
// For volatile descriptors, DATA_STATIC is never valid.
363369
if ((Flags & FlagT::DESCRIPTORS_VOLATILE) == FlagT::DESCRIPTORS_VOLATILE) {
364370
FlagT Mask = FlagT::DESCRIPTORS_VOLATILE;
@@ -369,15 +375,21 @@ static bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
369375
return (Flags & ~Mask) == FlagT::NONE;
370376
}
371377

372-
// For default (static) or "STATIC_KEEPING_BUFFER_BOUNDS_CHECKS" descriptors,
378+
// For "STATIC_KEEPING_BUFFER_BOUNDS_CHECKS" descriptors,
373379
// the other data-specific flags may all be set.
374-
FlagT Mask = FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS;
375-
if (!IsSampler) {
376-
Mask |= FlagT::DATA_VOLATILE;
377-
Mask |= FlagT::DATA_STATIC;
378-
Mask |= FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
380+
if ((Flags & FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) ==
381+
FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) {
382+
FlagT Mask = FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS;
383+
if (!IsSampler) {
384+
Mask |= FlagT::DATA_VOLATILE;
385+
Mask |= FlagT::DATA_STATIC;
386+
Mask |= FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
387+
}
388+
return (Flags & ~Mask) == FlagT::NONE;
379389
}
380-
return (Flags & ~Mask) == FlagT::NONE;
390+
391+
// When no descriptor flag is set, any data flag is allowed.
392+
return (Flags & ~DataFlags) == FlagT::NONE;
381393
}
382394

383395
static bool validate(LLVMContext *Ctx, const mcdxbc::RootSignatureDesc &RSD) {

llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RangeType.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
target triple = "dxil-unknown-shadermodel6.0-compute"
44

5-
; CHECK: error: Invalid value for RangeType: 4
5+
; CHECK: error: Invalid Descriptor Range type: Invalid
66
; CHECK-NOT: Root Signature Definitions
77

88
define void @main() #0 {

0 commit comments

Comments
 (0)