@@ -20,7 +20,9 @@ namespace rootsig {
20
20
21
21
bool verifyRootFlag (uint32_t Flags) { return (Flags & ~0xfff ) == 0 ; }
22
22
23
- bool verifyVersion (uint32_t Version) { return (Version == 1 || Version == 2 ); }
23
+ bool verifyVersion (uint32_t Version) {
24
+ return (Version == 1 || Version == 2 || Version == 3 );
25
+ }
24
26
25
27
bool verifyRegisterValue (uint32_t RegisterValue) {
26
28
return RegisterValue != ~0U ;
@@ -111,6 +113,25 @@ bool verifyDescriptorRangeFlag(uint32_t Version, dxil::ResourceClass Type,
111
113
return (Flags & ~Mask) == FlagT::None;
112
114
}
113
115
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 ;
121
+
122
+ dxbc::StaticSamplerFlags Flags = dxbc::StaticSamplerFlags (FlagsNumber);
123
+ if (Version <= 2 )
124
+ return Flags == dxbc::StaticSamplerFlags::None;
125
+
126
+ assert (Version == 3 && " Provided invalid root signature version" );
127
+
128
+ dxbc::StaticSamplerFlags Mask =
129
+ dxbc::StaticSamplerFlags::NonNormalizedCoordinates |
130
+ dxbc::StaticSamplerFlags::UintBorderColor |
131
+ dxbc::StaticSamplerFlags::None;
132
+ return (Flags | Mask) == Mask;
133
+ }
134
+
114
135
bool verifyNumDescriptors (uint32_t NumDescriptors) {
115
136
return NumDescriptors > 0 ;
116
137
}
0 commit comments