Skip to content

Commit 4108498

Browse files
committed
nfc: prep dxbc::DescriptorRangeFlags
1 parent c4aaa3c commit 4108498

File tree

6 files changed

+58
-45
lines changed

6 files changed

+58
-45
lines changed

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,15 @@ enum class RootDescriptorFlags : uint32_t {
171171

172172
LLVM_ABI ArrayRef<EnumEntry<RootDescriptorFlags>> getRootDescriptorFlags();
173173

174-
#define DESCRIPTOR_RANGE_FLAG(Num, Val) Val = Num,
175-
enum class DescriptorRangeFlag : uint32_t {
174+
#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag) Enum = Num,
175+
enum class DescriptorRangeFlags : uint32_t {
176176
#include "DXContainerConstants.def"
177177

178-
LLVM_MARK_AS_BITMASK_ENUM(DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS)
178+
LLVM_MARK_AS_BITMASK_ENUM(DescriptorsStaticKeepingBufferBoundsChecks)
179179
};
180180

181+
LLVM_ABI ArrayRef<EnumEntry<DescriptorRangeFlags>> getDescriptorRangeFlags();
182+
181183
#define ROOT_PARAMETER(Val, Enum) Enum = Val,
182184
enum class RootParameterType : uint32_t {
183185
#include "DXContainerConstants.def"

llvm/include/llvm/BinaryFormat/DXContainerConstants.def

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,16 @@ ROOT_DESCRIPTOR_FLAG(0x8, DataStatic, DATA_STATIC)
9191
#undef ROOT_DESCRIPTOR_FLAG
9292
#endif // ROOT_DESCRIPTOR_FLAG
9393

94-
// DESCRIPTOR_RANGE_FLAG(bit offset for the flag, name).
94+
// DESCRIPTOR_RANGE_FLAG(flag value, name, flag).
9595
#ifdef DESCRIPTOR_RANGE_FLAG
9696

97-
DESCRIPTOR_RANGE_FLAG(0, NONE)
98-
DESCRIPTOR_RANGE_FLAG(0x1, DESCRIPTORS_VOLATILE)
99-
DESCRIPTOR_RANGE_FLAG(0x2, DATA_VOLATILE)
100-
DESCRIPTOR_RANGE_FLAG(0x4, DATA_STATIC_WHILE_SET_AT_EXECUTE)
101-
DESCRIPTOR_RANGE_FLAG(0x8, DATA_STATIC)
102-
DESCRIPTOR_RANGE_FLAG(0x10000, DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS)
97+
DESCRIPTOR_RANGE_FLAG(0, None, NONE)
98+
DESCRIPTOR_RANGE_FLAG(0x1, DescriptorsVolatile, DESCRIPTORS_VOLATILE)
99+
DESCRIPTOR_RANGE_FLAG(0x2, DataVolatile, DATA_VOLATILE)
100+
DESCRIPTOR_RANGE_FLAG(0x4, DataStaticWhileSetAtExecute, DATA_STATIC_WHILE_SET_AT_EXECUTE)
101+
DESCRIPTOR_RANGE_FLAG(0x8, DataStatic, DATA_STATIC)
102+
DESCRIPTOR_RANGE_FLAG(0x10000, DescriptorsStaticKeepingBufferBoundsChecks, DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS)
103+
103104
#undef DESCRIPTOR_RANGE_FLAG
104105
#endif // DESCRIPTOR_RANGE_FLAG
105106

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ struct DescriptorRangeYaml {
100100

101101
LLVM_ABI uint32_t getEncodedFlags() const;
102102

103-
#define DESCRIPTOR_RANGE_FLAG(Num, Val) bool Val = false;
103+
#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag) bool Enum = false;
104104
#include "llvm/BinaryFormat/DXContainerConstants.def"
105105
};
106106

llvm/lib/BinaryFormat/DXContainer.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,16 @@ ArrayRef<EnumEntry<RootDescriptorFlags>> dxbc::getRootDescriptorFlags() {
7979
return ArrayRef(RootDescriptorFlagNames);
8080
}
8181

82+
static const EnumEntry<DescriptorRangeFlags> DescriptorRangeFlagNames[] = {
83+
#define DESCRIPTOR_RANGE_FLAG(Val, Enum, Flag) \
84+
{#Enum, DescriptorRangeFlags::Enum},
85+
#include "llvm/BinaryFormat/DXContainerConstants.def"
86+
};
87+
88+
ArrayRef<EnumEntry<DescriptorRangeFlags>> dxbc::getDescriptorRangeFlags() {
89+
return ArrayRef(DescriptorRangeFlagNames);
90+
}
91+
8292
#define SHADER_VISIBILITY(Val, Enum) {#Enum, ShaderVisibility::Enum},
8393

8494
static const EnumEntry<ShaderVisibility> ShaderVisibilityValues[] = {

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ readDescriptorRanges(DXContainerYAML::RootParameterHeaderYaml &Header,
6363
NewR.RangeType = R.RangeType;
6464
if constexpr (std::is_same_v<T, dxbc::RTS0::v2::DescriptorRange>) {
6565
// Set all flag fields for v2
66-
#define DESCRIPTOR_RANGE_FLAG(Num, Val) \
67-
NewR.Val = \
68-
(R.Flags & llvm::to_underlying(dxbc::DescriptorRangeFlag::Val)) != 0;
66+
#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag) \
67+
NewR.Enum = \
68+
(R.Flags & llvm::to_underlying(dxbc::DescriptorRangeFlags::Enum)) != 0;
6969
#include "llvm/BinaryFormat/DXContainerConstants.def"
7070
}
7171
TableYaml.Ranges.push_back(NewR);
@@ -205,12 +205,12 @@ uint32_t DXContainerYAML::RootSignatureYamlDesc::getEncodedFlags() {
205205
}
206206

207207
uint32_t DXContainerYAML::DescriptorRangeYaml::getEncodedFlags() const {
208-
uint64_t Flag = 0;
209-
#define DESCRIPTOR_RANGE_FLAG(Num, Val) \
210-
if (Val) \
211-
Flag |= (uint32_t)dxbc::DescriptorRangeFlag::Val;
208+
uint64_t Flags = 0;
209+
#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag) \
210+
if (Enum) \
211+
Flags |= (uint32_t)dxbc::DescriptorRangeFlags::Enum;
212212
#include "llvm/BinaryFormat/DXContainerConstants.def"
213-
return Flag;
213+
return Flags;
214214
}
215215

216216
uint64_t DXContainerYAML::ShaderFeatureFlags::getEncodedFlags() {
@@ -405,7 +405,8 @@ void MappingTraits<llvm::DXContainerYAML::DescriptorRangeYaml>::mapping(
405405
IO.mapRequired("RegisterSpace", R.RegisterSpace);
406406
IO.mapRequired("OffsetInDescriptorsFromTableStart",
407407
R.OffsetInDescriptorsFromTableStart);
408-
#define DESCRIPTOR_RANGE_FLAG(Num, Val) IO.mapOptional(#Val, R.Val, false);
408+
#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag) \
409+
IO.mapOptional(#Flag, R.Enum, false);
409410
#include "llvm/BinaryFormat/DXContainerConstants.def"
410411
}
411412

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ static bool verifyRangeType(uint32_t Type) {
345345

346346
static bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
347347
uint32_t FlagsVal) {
348-
using FlagT = dxbc::DescriptorRangeFlag;
348+
using FlagT = dxbc::DescriptorRangeFlags;
349349
FlagT Flags = FlagT(FlagsVal);
350350

351351
const bool IsSampler =
@@ -355,55 +355,54 @@ static bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
355355
// Since the metadata is unversioned, we expect to explicitly see the values
356356
// that map to the version 1 behaviour here.
357357
if (IsSampler)
358-
return Flags == FlagT::DESCRIPTORS_VOLATILE;
359-
return Flags == (FlagT::DATA_VOLATILE | FlagT::DESCRIPTORS_VOLATILE);
358+
return Flags == FlagT::DescriptorsVolatile;
359+
return Flags == (FlagT::DataVolatile | FlagT::DescriptorsVolatile);
360360
}
361361

362362
// The data-specific flags are mutually exclusive.
363-
FlagT DataFlags = FlagT::DATA_VOLATILE | FlagT::DATA_STATIC |
364-
FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
363+
FlagT DataFlags = FlagT::DataVolatile | FlagT::DataStatic |
364+
FlagT::DataStaticWhileSetAtExecute;
365365

366366
if (popcount(llvm::to_underlying(Flags & DataFlags)) > 1)
367367
return false;
368368

369369
// The descriptor-specific flags are mutually exclusive.
370-
FlagT DescriptorFlags =
371-
FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS |
372-
FlagT::DESCRIPTORS_VOLATILE;
370+
FlagT DescriptorFlags = FlagT::DescriptorsStaticKeepingBufferBoundsChecks |
371+
FlagT::DescriptorsVolatile;
373372
if (popcount(llvm::to_underlying(Flags & DescriptorFlags)) > 1)
374373
return false;
375374

376375
// For volatile descriptors, DATA_STATIC is never valid.
377-
if ((Flags & FlagT::DESCRIPTORS_VOLATILE) == FlagT::DESCRIPTORS_VOLATILE) {
378-
FlagT Mask = FlagT::DESCRIPTORS_VOLATILE;
376+
if ((Flags & FlagT::DescriptorsVolatile) == FlagT::DescriptorsVolatile) {
377+
FlagT Mask = FlagT::DescriptorsVolatile;
379378
if (!IsSampler) {
380-
Mask |= FlagT::DATA_VOLATILE;
381-
Mask |= FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
379+
Mask |= FlagT::DataVolatile;
380+
Mask |= FlagT::DataStaticWhileSetAtExecute;
382381
}
383-
return (Flags & ~Mask) == FlagT::NONE;
382+
return (Flags & ~Mask) == FlagT::None;
384383
}
385384

386385
// For "STATIC_KEEPING_BUFFER_BOUNDS_CHECKS" descriptors,
387386
// the other data-specific flags may all be set.
388-
if ((Flags & FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) ==
389-
FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS) {
390-
FlagT Mask = FlagT::DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS;
387+
if ((Flags & FlagT::DescriptorsStaticKeepingBufferBoundsChecks) ==
388+
FlagT::DescriptorsStaticKeepingBufferBoundsChecks) {
389+
FlagT Mask = FlagT::DescriptorsStaticKeepingBufferBoundsChecks;
391390
if (!IsSampler) {
392-
Mask |= FlagT::DATA_VOLATILE;
393-
Mask |= FlagT::DATA_STATIC;
394-
Mask |= FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
391+
Mask |= FlagT::DataVolatile;
392+
Mask |= FlagT::DataStatic;
393+
Mask |= FlagT::DataStaticWhileSetAtExecute;
395394
}
396-
return (Flags & ~Mask) == FlagT::NONE;
395+
return (Flags & ~Mask) == FlagT::None;
397396
}
398397

399398
// When no descriptor flag is set, any data flag is allowed.
400-
FlagT Mask = FlagT::NONE;
399+
FlagT Mask = FlagT::None;
401400
if (!IsSampler) {
402-
Mask |= FlagT::DATA_VOLATILE;
403-
Mask |= FlagT::DATA_STATIC;
404-
Mask |= FlagT::DATA_STATIC_WHILE_SET_AT_EXECUTE;
401+
Mask |= FlagT::DataVolatile;
402+
Mask |= FlagT::DataStaticWhileSetAtExecute;
403+
Mask |= FlagT::DataStatic;
405404
}
406-
return (Flags & ~Mask) == FlagT::NONE;
405+
return (Flags & ~Mask) == FlagT::None;
407406
}
408407

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

0 commit comments

Comments
 (0)