Skip to content

Commit 72ca44b

Browse files
author
joaosaffran
committed
address coments
1 parent 440566c commit 72ca44b

File tree

2 files changed

+50
-52
lines changed

2 files changed

+50
-52
lines changed

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 49 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ static bool verifyRegisterValue(uint32_t RegisterValue) {
323323
// This Range is reserverved, therefore invalid, according to the spec
324324
// https://github.com/llvm/wg-hlsl/blob/main/proposals/0002-root-signature-in-clang.md#all-the-values-should-be-legal
325325
static bool verifyRegisterSpace(uint32_t RegisterSpace) {
326-
return !(RegisterSpace >= 0xFFFFFFF0 && RegisterSpace < 0xFFFFFFFF);
326+
return !(RegisterSpace >= 0xFFFFFFF0 && RegisterSpace <= 0xFFFFFFFF);
327327
}
328328

329329
static bool verifyDescriptorFlag(uint32_t Flags) { return (Flags & ~0xE) == 0; }
@@ -340,63 +340,61 @@ static bool verifyRangeType(uint32_t Type) {
340340
return false;
341341
}
342342

343+
template <typename... FlagTypes>
344+
static bool isFlagSet(uint32_t Flags, FlagTypes... FlagsToCheck) {
345+
return ((Flags & llvm::to_underlying(FlagsToCheck)) | ...) == Flags;
346+
}
347+
343348
static bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
344349
uint32_t Flags) {
345-
if (Version == 1 &&
346-
Type == llvm::to_underlying(dxbc::DescriptorRangeType::Sampler))
347-
return Flags == 0;
348-
349-
if (Version == 2 &&
350-
Type == llvm::to_underlying(dxbc::DescriptorRangeType::Sampler)) {
351-
switch (Flags) {
352-
case 0:
353-
case llvm::to_underlying(dxbc::DescriptorRangeFlag::DATA_VOLATILE):
354-
case llvm::to_underlying(
355-
dxbc::DescriptorRangeFlag::
356-
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS):
357-
return true;
358-
}
359-
return false;
360-
}
350+
bool IsSampler =
351+
(Type == llvm::to_underlying(dxbc::DescriptorRangeType::Sampler));
361352

362-
if (Version == 1 &&
363-
Type != llvm::to_underlying(dxbc::DescriptorRangeType::Sampler))
353+
if (Version == 1) {
354+
if (IsSampler) {
355+
return Flags == 0;
356+
}
364357
return Flags ==
365358
llvm::to_underlying(dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE);
359+
}
366360

367-
if (Version == 2 &&
368-
Type != llvm::to_underlying(dxbc::DescriptorRangeType::Sampler)) {
369-
switch (Flags) {
370-
case 0:
371-
case llvm::to_underlying(dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE):
372-
case llvm::to_underlying(dxbc::DescriptorRangeFlag::DATA_VOLATILE):
373-
case llvm::to_underlying(dxbc::DescriptorRangeFlag::DATA_STATIC):
374-
case llvm::to_underlying(
375-
dxbc::DescriptorRangeFlag::DATA_STATIC_WHILE_SET_AT_EXECUTE):
376-
case llvm::to_underlying(
377-
dxbc::DescriptorRangeFlag::
378-
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS):
379-
case llvm::to_underlying(dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE) |
380-
llvm::to_underlying(dxbc::DescriptorRangeFlag::DATA_VOLATILE):
381-
case llvm::to_underlying(dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE) |
382-
llvm::to_underlying(
383-
dxbc::DescriptorRangeFlag::DATA_STATIC_WHILE_SET_AT_EXECUTE):
384-
case llvm::to_underlying(
385-
dxbc::DescriptorRangeFlag::
386-
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) |
387-
llvm::to_underlying(dxbc::DescriptorRangeFlag::DATA_VOLATILE):
388-
case llvm::to_underlying(
389-
dxbc::DescriptorRangeFlag::
390-
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) |
391-
llvm::to_underlying(dxbc::DescriptorRangeFlag::DATA_STATIC):
392-
case llvm::to_underlying(
393-
dxbc::DescriptorRangeFlag::
394-
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) |
395-
llvm::to_underlying(
396-
dxbc::DescriptorRangeFlag::DATA_STATIC_WHILE_SET_AT_EXECUTE):
397-
return true;
361+
if (Version == 2) {
362+
if (IsSampler) {
363+
return Flags == 0 ||
364+
isFlagSet(Flags, dxbc::DescriptorRangeFlag::DATA_VOLATILE) ||
365+
isFlagSet(Flags,
366+
dxbc::DescriptorRangeFlag::
367+
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS);
398368
}
399-
return false;
369+
// Valid flag combinations for non-sampler Version 2
370+
return Flags == 0 ||
371+
isFlagSet(Flags, dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE) ||
372+
isFlagSet(Flags, dxbc::DescriptorRangeFlag::DATA_VOLATILE) ||
373+
isFlagSet(Flags, dxbc::DescriptorRangeFlag::DATA_STATIC) ||
374+
isFlagSet(
375+
Flags,
376+
dxbc::DescriptorRangeFlag::DATA_STATIC_WHILE_SET_AT_EXECUTE) ||
377+
isFlagSet(Flags,
378+
dxbc::DescriptorRangeFlag::
379+
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) ||
380+
isFlagSet(Flags, dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE,
381+
dxbc::DescriptorRangeFlag::DATA_VOLATILE) ||
382+
isFlagSet(
383+
Flags, dxbc::DescriptorRangeFlag::DESCRIPTORS_VOLATILE,
384+
dxbc::DescriptorRangeFlag::DATA_STATIC_WHILE_SET_AT_EXECUTE) ||
385+
isFlagSet(Flags,
386+
dxbc::DescriptorRangeFlag::
387+
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS,
388+
dxbc::DescriptorRangeFlag::DATA_VOLATILE) ||
389+
isFlagSet(Flags,
390+
dxbc::DescriptorRangeFlag::
391+
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS,
392+
dxbc::DescriptorRangeFlag::DATA_STATIC) ||
393+
isFlagSet(
394+
Flags,
395+
dxbc::DescriptorRangeFlag::
396+
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS,
397+
dxbc::DescriptorRangeFlag::DATA_STATIC_WHILE_SET_AT_EXECUTE);
400398
}
401399
return false;
402400
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }
1616
!2 = !{ ptr @main, !3 } ; function, root signature
1717
!3 = !{ !5 } ; list of root signature elements
1818
!5 = !{ !"DescriptorTable", i32 0, !6, !7 }
19-
!6 = !{ !"SRV", i32 0, i32 0, i32 -1, i32 -1, i32 22 }
19+
!6 = !{ !"SRV", i32 0, i32 1, i32 0, i32 -1, i32 22 }
2020
!7 = !{ !"UAV", i32 5, i32 1, i32 10, i32 5, i32 2 }

0 commit comments

Comments
 (0)