Skip to content

Commit 8d017fa

Browse files
committed
adding test to check flags
1 parent 6187125 commit 8d017fa

File tree

4 files changed

+11
-9
lines changed

4 files changed

+11
-9
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ LLVM_ABI bool verifyRangeType(uint32_t Type);
3333
LLVM_ABI bool verifyDescriptorRangeFlag(uint32_t Version,
3434
dxil::ResourceClass Type,
3535
dxbc::DescriptorRangeFlags FlagsVal);
36-
LLVM_ABI bool verifyStaticSamplerFlags(uint32_t Version,
37-
dxbc::StaticSamplerFlags Flags);
36+
LLVM_ABI bool verifyStaticSamplerFlags(uint32_t Version, uint32_t FlagsNumber);
3837
LLVM_ABI bool verifyNumDescriptors(uint32_t NumDescriptors);
3938
LLVM_ABI bool verifyMipLODBias(float MipLODBias);
4039
LLVM_ABI bool verifyMaxAnisotropy(uint32_t MaxAnisotropy);

llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -663,8 +663,7 @@ Error MetadataParser::validateRootSignature(
663663
make_error<RootSignatureValidationError<uint32_t>>(
664664
"RegisterSpace", Sampler.RegisterSpace));
665665

666-
if (!hlsl::rootsig::verifyStaticSamplerFlags(
667-
RSD.Version, dxbc::StaticSamplerFlags(Sampler.Flags)))
666+
if (!hlsl::rootsig::verifyStaticSamplerFlags(RSD.Version, Sampler.Flags))
668667
DeferredErrs =
669668
joinErrors(std::move(DeferredErrs),
670669
make_error<RootSignatureValidationError<uint32_t>>(

llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,13 @@ bool verifyDescriptorRangeFlag(uint32_t Version, dxil::ResourceClass Type,
113113
return (Flags & ~Mask) == FlagT::None;
114114
}
115115

116-
bool verifyStaticSamplerFlags(uint32_t Version,
117-
dxbc::StaticSamplerFlags Flags) {
116+
bool verifyStaticSamplerFlags(uint32_t Version, uint32_t FlagsNumber) {
117+
uint32_t LargestValue = llvm::to_underlying(
118+
dxbc::StaticSamplerFlags::LLVM_BITMASK_LARGEST_ENUMERATOR);
119+
if (FlagsNumber >= NextPowerOf2(LargestValue))
120+
return false;
118121

122+
dxbc::StaticSamplerFlags Flags = dxbc::StaticSamplerFlags(FlagsNumber);
119123
if (Version <= 2)
120124
return Flags == dxbc::StaticSamplerFlags::None;
121125

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
target triple = "dxil-unknown-shadermodel6.0-compute"
55

6-
; CHECK: error: Invalid value for ShaderVisibility: 666
6+
; CHECK: error: Invalid value for Static Sampler Flag: 4
77
; CHECK-NOT: Root Signature Definitions
88

99
define void @main() #0 {
@@ -14,6 +14,6 @@ attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }
1414

1515

1616
!dx.rootsignatures = !{!2} ; list of function/root signature pairs
17-
!2 = !{ ptr @main, !3, i32 2 } ; function, root signature
17+
!2 = !{ ptr @main, !3, i32 3 } ; function, root signature
1818
!3 = !{ !5 } ; list of root signature elements
19-
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 666 }
19+
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 4 }

0 commit comments

Comments
 (0)