Skip to content

Commit 23bea27

Browse files
committed
addressing comment from bogner
1 parent d7c09c4 commit 23bea27

File tree

6 files changed

+56
-33
lines changed

6 files changed

+56
-33
lines changed

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,8 +1289,8 @@ bool SemaHLSL::handleRootSignatureElements(
12891289
VerifyRegister(Loc, Descriptor->Reg.Number);
12901290
VerifySpace(Loc, Descriptor->Space);
12911291

1292-
if (!llvm::hlsl::rootsig::verifyRootDescriptorFlag(
1293-
Version, llvm::to_underlying(Descriptor->Flags)))
1292+
if (!llvm::hlsl::rootsig::verifyRootDescriptorFlag(Version,
1293+
Descriptor->Flags))
12941294
ReportFlagError(Loc);
12951295
} else if (const auto *Constants =
12961296
std::get_if<llvm::hlsl::rootsig::RootConstants>(&Elem)) {
@@ -1322,8 +1322,8 @@ bool SemaHLSL::handleRootSignatureElements(
13221322
ReportError(Loc, 1, 0xfffffffe);
13231323
}
13241324

1325-
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
1326-
Version, Clause->Type, llvm::to_underlying(Clause->Flags)))
1325+
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(Version, Clause->Type,
1326+
Clause->Flags))
13271327
ReportFlagError(Loc);
13281328
}
13291329
}

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@ enum class StaticBorderColor : uint32_t {
248248

249249
bool isValidBorderColor(uint32_t V);
250250

251+
bool isValidRootDesciptorFlags(uint32_t V);
252+
253+
bool isValidDescriptorRangeFlags(uint32_t V);
254+
255+
bool isValidStaticSamplerFlags(uint32_t V);
256+
251257
LLVM_ABI ArrayRef<EnumEntry<StaticBorderColor>> getStaticBorderColors();
252258

253259
LLVM_ABI PartType parsePartType(StringRef S);

llvm/include/llvm/Frontend/HLSL/RootSignatureValidations.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ LLVM_ABI bool verifyRootFlag(uint32_t Flags);
2828
LLVM_ABI bool verifyVersion(uint32_t Version);
2929
LLVM_ABI bool verifyRegisterValue(uint32_t RegisterValue);
3030
LLVM_ABI bool verifyRegisterSpace(uint32_t RegisterSpace);
31-
LLVM_ABI bool verifyRootDescriptorFlag(uint32_t Version, uint32_t FlagsVal);
31+
LLVM_ABI bool verifyRootDescriptorFlag(uint32_t Version,
32+
dxbc::RootDescriptorFlags Flags);
3233
LLVM_ABI bool verifyRangeType(uint32_t Type);
3334
LLVM_ABI bool verifyDescriptorRangeFlag(uint32_t Version,
3435
dxil::ResourceClass Type,
35-
uint32_t FlagsVal);
36-
LLVM_ABI bool verifyStaticSamplerFlags(uint32_t Version, uint32_t FlagsNumber);
36+
dxbc::DescriptorRangeFlags Flags);
37+
LLVM_ABI bool verifyStaticSamplerFlags(uint32_t Version,
38+
dxbc::StaticSamplerFlags Flags);
3739
LLVM_ABI bool verifyNumDescriptors(uint32_t NumDescriptors);
3840
LLVM_ABI bool verifyMipLODBias(float MipLODBias);
3941
LLVM_ABI bool verifyMaxAnisotropy(uint32_t MaxAnisotropy);

llvm/lib/BinaryFormat/DXContainer.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,27 @@ bool llvm::dxbc::isValidBorderColor(uint32_t V) {
8282
return false;
8383
}
8484

85+
bool llvm::dxbc::isValidRootDesciptorFlags(uint32_t V) {
86+
using FlagT = dxbc::RootDescriptorFlags;
87+
uint32_t LargestValue =
88+
llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
89+
return V < NextPowerOf2(LargestValue);
90+
}
91+
92+
bool llvm::dxbc::isValidDescriptorRangeFlags(uint32_t V) {
93+
using FlagT = dxbc::DescriptorRangeFlags;
94+
uint32_t LargestValue =
95+
llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
96+
return V < NextPowerOf2(LargestValue);
97+
}
98+
99+
bool llvm::dxbc::isValidStaticSamplerFlags(uint32_t V) {
100+
using FlagT = dxbc::StaticSamplerFlags;
101+
uint32_t LargestValue =
102+
llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
103+
return V < NextPowerOf2(LargestValue);
104+
}
105+
85106
dxbc::PartType dxbc::parsePartType(StringRef S) {
86107
#define CONTAINER_PART(PartName) .Case(#PartName, PartType::PartName)
87108
return StringSwitch<dxbc::PartType>(S)

llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -651,8 +651,11 @@ Error MetadataParser::validateRootSignature(
651651
"RegisterSpace", Descriptor.RegisterSpace));
652652

653653
if (RSD.Version > 1) {
654-
if (!hlsl::rootsig::verifyRootDescriptorFlag(RSD.Version,
655-
Descriptor.Flags))
654+
bool IsValidFlag =
655+
dxbc::isValidRootDesciptorFlags(Descriptor.Flags) &&
656+
hlsl::rootsig::verifyRootDescriptorFlag(
657+
RSD.Version, dxbc::RootDescriptorFlags(Descriptor.Flags));
658+
if (!IsValidFlag)
656659
DeferredErrs =
657660
joinErrors(std::move(DeferredErrs),
658661
make_error<RootSignatureValidationError<uint32_t>>(
@@ -676,8 +679,11 @@ Error MetadataParser::validateRootSignature(
676679
make_error<RootSignatureValidationError<uint32_t>>(
677680
"NumDescriptors", Range.NumDescriptors));
678681

679-
if (!hlsl::rootsig::verifyDescriptorRangeFlag(
680-
RSD.Version, Range.RangeType, Range.Flags))
682+
bool IsValidFlag = dxbc::isValidDescriptorRangeFlags(Range.Flags) &&
683+
hlsl::rootsig::verifyDescriptorRangeFlag(
684+
RSD.Version, Range.RangeType,
685+
dxbc::DescriptorRangeFlags(Range.Flags));
686+
if (!IsValidFlag)
681687
DeferredErrs =
682688
joinErrors(std::move(DeferredErrs),
683689
make_error<RootSignatureValidationError<uint32_t>>(
@@ -730,8 +736,11 @@ Error MetadataParser::validateRootSignature(
730736
joinErrors(std::move(DeferredErrs),
731737
make_error<RootSignatureValidationError<uint32_t>>(
732738
"RegisterSpace", Sampler.RegisterSpace));
733-
734-
if (!hlsl::rootsig::verifyStaticSamplerFlags(RSD.Version, Sampler.Flags))
739+
bool IsValidFlag =
740+
dxbc::isValidStaticSamplerFlags(Sampler.Flags) &&
741+
hlsl::rootsig::verifyStaticSamplerFlags(
742+
RSD.Version, dxbc::StaticSamplerFlags(Sampler.Flags));
743+
if (!IsValidFlag)
735744
DeferredErrs =
736745
joinErrors(std::move(DeferredErrs),
737746
make_error<RootSignatureValidationError<uint32_t>>(

llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,9 @@ bool verifyRegisterSpace(uint32_t RegisterSpace) {
3434
return !(RegisterSpace >= 0xFFFFFFF0);
3535
}
3636

37-
bool verifyRootDescriptorFlag(uint32_t Version, uint32_t FlagsVal) {
37+
bool verifyRootDescriptorFlag(uint32_t Version,
38+
dxbc::RootDescriptorFlags FlagsVal) {
3839
using FlagT = dxbc::RootDescriptorFlags;
39-
uint32_t LargestValue =
40-
llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
41-
if (FlagsVal >= NextPowerOf2(LargestValue))
42-
return false;
43-
4440
FlagT Flags = FlagT(FlagsVal);
4541
if (Version == 1)
4642
return Flags == FlagT::DataVolatile;
@@ -59,14 +55,8 @@ bool verifyRootDescriptorFlag(uint32_t Version, uint32_t FlagsVal) {
5955
}
6056

6157
bool verifyDescriptorRangeFlag(uint32_t Version, dxil::ResourceClass Type,
62-
uint32_t FlagsVal) {
58+
dxbc::DescriptorRangeFlags Flags) {
6359
using FlagT = dxbc::DescriptorRangeFlags;
64-
uint32_t LargestValue =
65-
llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
66-
if (FlagsVal >= NextPowerOf2(LargestValue))
67-
return false;
68-
69-
FlagT Flags = FlagT(FlagsVal);
7060
const bool IsSampler = (Type == dxil::ResourceClass::Sampler);
7161

7262
if (Version == 1) {
@@ -123,13 +113,8 @@ bool verifyDescriptorRangeFlag(uint32_t Version, dxil::ResourceClass Type,
123113
return (Flags & ~Mask) == FlagT::None;
124114
}
125115

126-
bool verifyStaticSamplerFlags(uint32_t Version, uint32_t FlagsNumber) {
127-
uint32_t LargestValue = llvm::to_underlying(
128-
dxbc::StaticSamplerFlags::LLVM_BITMASK_LARGEST_ENUMERATOR);
129-
if (FlagsNumber >= NextPowerOf2(LargestValue))
130-
return false;
131-
132-
dxbc::StaticSamplerFlags Flags = dxbc::StaticSamplerFlags(FlagsNumber);
116+
bool verifyStaticSamplerFlags(uint32_t Version,
117+
dxbc::StaticSamplerFlags Flags) {
133118
if (Version <= 2)
134119
return Flags == dxbc::StaticSamplerFlags::None;
135120

0 commit comments

Comments
 (0)