Skip to content

Commit fbf6776

Browse files
committed
refactoring to use existing funcs
1 parent 75d74ed commit fbf6776

File tree

3 files changed

+26
-31
lines changed

3 files changed

+26
-31
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ LLVM_ABI bool verifyMaxAnisotropy(uint32_t MaxAnisotropy);
4141
LLVM_ABI bool verifyComparisonFunc(uint32_t ComparisonFunc);
4242
LLVM_ABI bool verifyBorderColor(uint32_t BorderColor);
4343
LLVM_ABI bool verifyLOD(float LOD);
44-
4544
LLVM_ABI bool verifyBoundOffset(uint32_t Offset);
4645
LLVM_ABI bool verifyNoOverflowedOffset(uint64_t Offset);
4746
LLVM_ABI uint64_t computeRangeBound(uint32_t Offset, uint32_t Size);

llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ extractShaderVisibility(MDNode *Node, unsigned int OpId) {
6868
return make_error<InvalidRSMetadataValue>("ShaderVisibility");
6969
}
7070

71+
static uint64_t updateOngoingOffset(uint64_t CurOfset, uint64_t NumDescriptors,
72+
uint64_t Offset) {
73+
return Offset == ~0U ? CurOfset + NumDescriptors : Offset + NumDescriptors;
74+
}
75+
7176
namespace {
7277

7378
// We use the OverloadVisit with std::visit to ensure the compiler catches if a
@@ -549,32 +554,40 @@ Error validateDescriptorTableRegisterOverflow(mcdxbc::DescriptorTable Table,
549554
uint32_t Location) {
550555
uint64_t Offset = 0;
551556

552-
for (const llvm::mcdxbc::DescriptorRange &Range : Table.Ranges) {
557+
for (const mcdxbc::DescriptorRange &Range : Table.Ranges) {
558+
// Errors for this check should be emitted before this point.
559+
if (Range.NumDescriptors <= 0)
560+
continue;
553561
dxil::ResourceClass RangeType =
554562
static_cast<dxil::ResourceClass>(Range.RangeType);
555563

556-
if (Range.OffsetInDescriptorsFromTableStart != llvm::hlsl::rootsig::DescriptorTableOffsetAppend)
564+
if (Range.OffsetInDescriptorsFromTableStart != DescriptorTableOffsetAppend)
557565
Offset = Range.OffsetInDescriptorsFromTableStart;
558566

559-
uint64_t RangeBound = llvm::hlsl::rootsig::computeRangeBound(
560-
Offset, Range.NumDescriptors);
561-
if (verifyBoundOffset(Offset))
562-
return make_error<DescriptorRangeOverflowError>(
563-
RangeType, Range.BaseShaderRegister,
564-
Range.RegisterSpace);
565-
else if (!verifyNoOverflowedOffset(Offset))
567+
if (!verifyNoOverflowedOffset(Offset))
566568
return make_error<OffsetOverflowError>(RangeType,
567569
Range.BaseShaderRegister,
568570
Range.RegisterSpace);
569571

570-
if (!verifyNoOverflowedOffset(Range.BaseShaderRegister))
572+
const uint64_t RangeBound = llvm::hlsl::rootsig::computeRangeBound(
573+
Range.BaseShaderRegister, Range.NumDescriptors);
574+
575+
if (!verifyNoOverflowedOffset(RangeBound))
571576
return make_error<ShaderRegisterOverflowError>(
572577
RangeType, Range.BaseShaderRegister,
573578
Range.RegisterSpace);
574579

575-
Offset = RangeBound == llvm::hlsl::rootsig::NumDescriptorsUnbounded
576-
? uint32_t(RangeBound)
577-
: uint32_t(RangeBound + 1);
580+
const uint64_t OffsetBound =
581+
llvm::hlsl::rootsig::computeRangeBound(Offset, Range.NumDescriptors);
582+
583+
if (!verifyNoOverflowedOffset(OffsetBound))
584+
return make_error<DescriptorRangeOverflowError>(
585+
RangeType, Range.BaseShaderRegister, Range.RegisterSpace);
586+
587+
// Append to the current offset if DescriptorTableOffsetAppend, otherwise
588+
// calculate the new Offset.
589+
Offset = updateOngoingOffset(Offset, Range.NumDescriptors,
590+
Range.OffsetInDescriptorsFromTableStart);
578591
}
579592

580593
return Error::success();

llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -181,23 +181,6 @@ uint64_t computeRangeBound(uint32_t Offset, uint32_t Size) {
181181

182182
return uint64_t(Offset) + uint64_t(Size) - 1;
183183
}
184-
185-
bool verifyOffsetOverflow(uint64_t Register) { return Register > ~0U; }
186-
187-
bool verifyRegisterOverflow(uint64_t Register, uint32_t NumDescriptors) {
188-
if (NumDescriptors == ~0U)
189-
return false;
190-
191-
uint64_t UpperBound =
192-
(uint64_t)Register + (uint64_t)NumDescriptors - (uint64_t)1U;
193-
return UpperBound > ~0U;
194-
}
195-
196-
uint64_t updateAppendingRegister(uint64_t AppendingRegister,
197-
uint64_t NumDescriptors, uint64_t Offset) {
198-
return Offset == ~0U ? AppendingRegister + NumDescriptors
199-
: Offset + NumDescriptors;
200-
}
201184
} // namespace rootsig
202185
} // namespace hlsl
203186
} // namespace llvm

0 commit comments

Comments
 (0)