79 std::optional<llvm::dxbc::RootFlags> parseRootFlags();
80 std::optional<llvm::hlsl::rootsig::RootConstants> parseRootConstants();
81 std::optional<llvm::hlsl::rootsig::RootDescriptor> parseRootDescriptor();
82 std::optional<llvm::hlsl::rootsig::DescriptorTable> parseDescriptorTable();
83 std::optional<llvm::hlsl::rootsig::DescriptorTableClause>
84 parseDescriptorTableClause();
85 std::optional<llvm::hlsl::rootsig::StaticSampler> parseStaticSampler();
90 struct ParsedConstantParams {
91 std::optional<llvm::hlsl::rootsig::Register> Reg;
92 std::optional<uint32_t> Num32BitConstants;
93 std::optional<uint32_t> Space;
94 std::optional<llvm::dxbc::ShaderVisibility>
Visibility;
96 std::optional<ParsedConstantParams> parseRootConstantParams();
98 struct ParsedRootDescriptorParams {
99 std::optional<llvm::hlsl::rootsig::Register> Reg;
100 std::optional<uint32_t> Space;
101 std::optional<llvm::dxbc::ShaderVisibility>
Visibility;
102 std::optional<llvm::dxbc::RootDescriptorFlags> Flags;
104 std::optional<ParsedRootDescriptorParams>
108 struct ParsedClauseParams {
109 std::optional<llvm::hlsl::rootsig::Register> Reg;
110 std::optional<uint32_t> NumDescriptors;
111 std::optional<uint32_t> Space;
112 std::optional<uint32_t> Offset;
113 std::optional<llvm::dxbc::DescriptorRangeFlags> Flags;
115 std::optional<ParsedClauseParams>
119 struct ParsedStaticSamplerParams {
120 std::optional<llvm::hlsl::rootsig::Register> Reg;
121 std::optional<llvm::dxbc::SamplerFilter> Filter;
122 std::optional<llvm::dxbc::TextureAddressMode> AddressU;
123 std::optional<llvm::dxbc::TextureAddressMode> AddressV;
124 std::optional<llvm::dxbc::TextureAddressMode> AddressW;
125 std::optional<float> MipLODBias;
126 std::optional<uint32_t> MaxAnisotropy;
127 std::optional<llvm::dxbc::ComparisonFunc> CompFunc;
128 std::optional<llvm::dxbc::StaticBorderColor> BorderColor;
129 std::optional<float> MinLOD;
130 std::optional<float> MaxLOD;
131 std::optional<uint32_t> Space;
132 std::optional<llvm::dxbc::ShaderVisibility> Visibility;
133 std::optional<llvm::dxbc::StaticSamplerFlags> Flags;
135 std::optional<ParsedStaticSamplerParams> parseStaticSamplerParams();
138 std::optional<uint32_t> parseUIntParam();
139 std::optional<llvm::hlsl::rootsig::Register> parseRegister();
140 std::optional<float> parseFloatParam();
143 std::optional<llvm::dxbc::ShaderVisibility>
145 std::optional<llvm::dxbc::SamplerFilter>
147 std::optional<llvm::dxbc::TextureAddressMode>
149 std::optional<llvm::dxbc::ComparisonFunc>
151 std::optional<llvm::dxbc::StaticBorderColor>
153 std::optional<llvm::dxbc::RootDescriptorFlags>
155 std::optional<llvm::dxbc::DescriptorRangeFlags>
157 std::optional<llvm::dxbc::StaticSamplerFlags>
162 std::optional<uint32_t> handleUIntLiteral();
165 std::optional<int32_t> handleIntLiteral(
bool Negated);
175 std::optional<float> handleFloatLiteral(
bool Negated);
181 bool verifyZeroFlag();
184 void consumeNextToken() { CurToken = Lexer.consumeToken(); }
188 bool peekExpectedToken(ArrayRef<RootSignatureToken::Kind> AnyExpected);
194 bool consumeExpectedToken(
204 bool tryConsumeExpectedToken(ArrayRef<RootSignatureToken::Kind> Expected);
212 bool skipUntilExpectedToken(ArrayRef<RootSignatureToken::Kind> Expected);
219 bool skipUntilClosedParens(uint32_t NumParens = 1);
225 SourceLocation getTokenLocation(RootSignatureToken
Tok);
228 DiagnosticBuilder reportDiag(
unsigned DiagID) {
229 return getDiags().Report(getTokenLocation(CurToken), DiagID);
233 llvm::dxbc::RootSignatureVersion Version;
234 SmallVector<RootSignatureElement> Elements;
235 StringLiteral *Signature;
236 RootSignatureLexer Lexer;
239 RootSignatureToken CurToken;