@@ -20,7 +20,9 @@ namespace rootsig {
2020
2121bool verifyRootFlag (uint32_t Flags) { return (Flags & ~0xfff ) == 0 ; }
2222
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+ }
2426
2527bool verifyRegisterValue (uint32_t RegisterValue) {
2628 return RegisterValue != ~0U ;
@@ -111,6 +113,25 @@ bool verifyDescriptorRangeFlag(uint32_t Version, dxil::ResourceClass Type,
111113 return (Flags & ~Mask) == FlagT::None;
112114}
113115
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+
114135bool verifyNumDescriptors (uint32_t NumDescriptors) {
115136 return NumDescriptors > 0 ;
116137}
0 commit comments