Skip to content

Commit f9d16d2

Browse files
committed
creating toDescriptorRange and change verifyDescriptorRangeFlag signature
1 parent 182c817 commit f9d16d2

File tree

3 files changed

+30
-30
lines changed

3 files changed

+30
-30
lines changed

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,21 @@ bool SemaHLSL::handleRootSignatureElements(
12411241
<< /*version minor*/ VersionEnum;
12421242
};
12431243

1244+
auto toDescriptorRangeType = [](llvm::dxil::ResourceClass Type) {
1245+
switch (Type) {
1246+
case llvm::dxil::ResourceClass::SRV:
1247+
return llvm::dxbc::DescriptorRangeType::SRV;
1248+
case llvm::dxil::ResourceClass::UAV:
1249+
return llvm::dxbc::DescriptorRangeType::UAV;
1250+
case llvm::dxil::ResourceClass::CBuffer:
1251+
return llvm::dxbc::DescriptorRangeType::CBV;
1252+
case llvm::dxil::ResourceClass::Sampler:
1253+
return llvm::dxbc::DescriptorRangeType::Sampler;
1254+
}
1255+
1256+
llvm_unreachable("Unhandled Resource Class");
1257+
};
1258+
12441259
// Iterate through the elements and do basic validations
12451260
for (const hlsl::RootSignatureElement &RootSigElem : Elements) {
12461261
SourceLocation Loc = RootSigElem.getLocation();
@@ -1282,34 +1297,9 @@ bool SemaHLSL::handleRootSignatureElements(
12821297
// value
12831298
ReportError(Loc, 1, 0xfffffffe);
12841299
}
1285-
switch (Clause->Type) {
1286-
1287-
case llvm::dxil::ResourceClass::SRV:
1288-
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
1289-
Version, llvm::dxbc::DescriptorRangeType::SRV,
1290-
llvm::to_underlying(Clause->Flags)))
1291-
ReportFlagError(Loc);
1292-
break;
1293-
case llvm::dxil::ResourceClass::UAV:
1294-
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
1295-
Version, llvm::dxbc::DescriptorRangeType::UAV,
1296-
llvm::to_underlying(Clause->Flags)))
1297-
ReportFlagError(Loc);
1298-
break;
1299-
case llvm::dxil::ResourceClass::CBuffer:
1300-
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
1301-
Version, llvm::dxbc::DescriptorRangeType::CBV,
1302-
llvm::to_underlying(Clause->Flags)))
1303-
ReportFlagError(Loc);
1304-
break;
1305-
case llvm::dxil::ResourceClass::Sampler:
1306-
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
1307-
Version, llvm::dxbc::DescriptorRangeType::Sampler,
1308-
llvm::to_underlying(Clause->Flags)))
1309-
ReportFlagError(Loc);
1310-
break;
1311-
break;
1312-
}
1300+
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
1301+
Version, toDescriptorRangeType(Clause->Type), Clause->Flags))
1302+
ReportFlagError(Loc);
13131303
}
13141304
}
13151305

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ LLVM_ABI bool verifyRegisterValue(uint32_t RegisterValue);
3030
LLVM_ABI bool verifyRegisterSpace(uint32_t RegisterSpace);
3131
LLVM_ABI bool verifyRootDescriptorFlag(uint32_t Version, uint32_t FlagsVal);
3232
LLVM_ABI bool verifyRangeType(uint32_t Type);
33+
LLVM_ABI bool verifyDescriptorRangeFlag(uint32_t Version,
34+
dxbc::DescriptorRangeType Type,
35+
dxbc::DescriptorRangeFlags FlagsVal);
3336
LLVM_ABI bool verifyDescriptorRangeFlag(uint32_t Version,
3437
dxbc::DescriptorRangeType Type,
3538
uint32_t FlagsVal);

llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ bool verifyRangeType(uint32_t Type) {
6464
}
6565

6666
bool verifyDescriptorRangeFlag(uint32_t Version, dxbc::DescriptorRangeType Type,
67-
uint32_t FlagsVal) {
67+
dxbc::DescriptorRangeFlags Flags) {
6868
using FlagT = dxbc::DescriptorRangeFlags;
69-
FlagT Flags = FlagT(FlagsVal);
7069

7170
const bool IsSampler = (Type == dxbc::DescriptorRangeType::Sampler);
7271

@@ -124,6 +123,14 @@ bool verifyDescriptorRangeFlag(uint32_t Version, dxbc::DescriptorRangeType Type,
124123
return (Flags & ~Mask) == FlagT::None;
125124
}
126125

126+
// This is included to avoid including BinaryFormat/DXContainer to make the
127+
// flags conversion, since this might cause compilation times to increase.
128+
bool verifyDescriptorRangeFlag(uint32_t Version, dxbc::DescriptorRangeType Type,
129+
uint32_t Flags) {
130+
return verifyDescriptorRangeFlag(Version, Type,
131+
dxbc::DescriptorRangeFlags(Flags));
132+
}
133+
127134
bool verifyNumDescriptors(uint32_t NumDescriptors) {
128135
return NumDescriptors > 0;
129136
}

0 commit comments

Comments
 (0)