summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend/ir/attribute.cpp
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-01-09 03:30:07 -0300
committerGravatar ameerj2021-07-22 21:51:21 -0400
commit2d48a7b4d0666ad16d03a22d85712617a0849046 (patch)
treedd1069afca86f66e77e3438da77421a43adf5091 /src/shader_recompiler/frontend/ir/attribute.cpp
parentthread_worker: Fix compile time error (diff)
downloadyuzu-2d48a7b4d0666ad16d03a22d85712617a0849046.tar.gz
yuzu-2d48a7b4d0666ad16d03a22d85712617a0849046.tar.xz
yuzu-2d48a7b4d0666ad16d03a22d85712617a0849046.zip
shader: Initial recompiler work
Diffstat (limited to 'src/shader_recompiler/frontend/ir/attribute.cpp')
-rw-r--r--src/shader_recompiler/frontend/ir/attribute.cpp447
1 files changed, 447 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/attribute.cpp b/src/shader_recompiler/frontend/ir/attribute.cpp
new file mode 100644
index 000000000..2fb7d576f
--- /dev/null
+++ b/src/shader_recompiler/frontend/ir/attribute.cpp
@@ -0,0 +1,447 @@
1// Copyright 2021 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <fmt/format.h>
6
7#include "shader_recompiler/exception.h"
8#include "shader_recompiler/frontend/ir/attribute.h"
9
10namespace Shader::IR {
11
12bool IsGeneric(Attribute attribute) noexcept {
13 return attribute >= Attribute::Generic0X && attribute <= Attribute::Generic31X;
14}
15
16int GenericAttributeIndex(Attribute attribute) {
17 if (!IsGeneric(attribute)) {
18 throw InvalidArgument("Attribute is not generic {}", attribute);
19 }
20 return (static_cast<int>(attribute) - static_cast<int>(Attribute::Generic0X)) / 4;
21}
22
23std::string NameOf(Attribute attribute) {
24 switch (attribute) {
25 case Attribute::PrimitiveId:
26 return "PrimitiveId";
27 case Attribute::Layer:
28 return "Layer";
29 case Attribute::ViewportIndex:
30 return "ViewportIndex";
31 case Attribute::PointSize:
32 return "PointSize";
33 case Attribute::PositionX:
34 return "Position.X";
35 case Attribute::PositionY:
36 return "Position.Y";
37 case Attribute::PositionZ:
38 return "Position.Z";
39 case Attribute::PositionW:
40 return "Position.W";
41 case Attribute::Generic0X:
42 return "Generic[0].X";
43 case Attribute::Generic0Y:
44 return "Generic[0].Y";
45 case Attribute::Generic0Z:
46 return "Generic[0].Z";
47 case Attribute::Generic0W:
48 return "Generic[0].W";
49 case Attribute::Generic1X:
50 return "Generic[1].X";
51 case Attribute::Generic1Y:
52 return "Generic[1].Y";
53 case Attribute::Generic1Z:
54 return "Generic[1].Z";
55 case Attribute::Generic1W:
56 return "Generic[1].W";
57 case Attribute::Generic2X:
58 return "Generic[2].X";
59 case Attribute::Generic2Y:
60 return "Generic[2].Y";
61 case Attribute::Generic2Z:
62 return "Generic[2].Z";
63 case Attribute::Generic2W:
64 return "Generic[2].W";
65 case Attribute::Generic3X:
66 return "Generic[3].X";
67 case Attribute::Generic3Y:
68 return "Generic[3].Y";
69 case Attribute::Generic3Z:
70 return "Generic[3].Z";
71 case Attribute::Generic3W:
72 return "Generic[3].W";
73 case Attribute::Generic4X:
74 return "Generic[4].X";
75 case Attribute::Generic4Y:
76 return "Generic[4].Y";
77 case Attribute::Generic4Z:
78 return "Generic[4].Z";
79 case Attribute::Generic4W:
80 return "Generic[4].W";
81 case Attribute::Generic5X:
82 return "Generic[5].X";
83 case Attribute::Generic5Y:
84 return "Generic[5].Y";
85 case Attribute::Generic5Z:
86 return "Generic[5].Z";
87 case Attribute::Generic5W:
88 return "Generic[5].W";
89 case Attribute::Generic6X:
90 return "Generic[6].X";
91 case Attribute::Generic6Y:
92 return "Generic[6].Y";
93 case Attribute::Generic6Z:
94 return "Generic[6].Z";
95 case Attribute::Generic6W:
96 return "Generic[6].W";
97 case Attribute::Generic7X:
98 return "Generic[7].X";
99 case Attribute::Generic7Y:
100 return "Generic[7].Y";
101 case Attribute::Generic7Z:
102 return "Generic[7].Z";
103 case Attribute::Generic7W:
104 return "Generic[7].W";
105 case Attribute::Generic8X:
106 return "Generic[8].X";
107 case Attribute::Generic8Y:
108 return "Generic[8].Y";
109 case Attribute::Generic8Z:
110 return "Generic[8].Z";
111 case Attribute::Generic8W:
112 return "Generic[8].W";
113 case Attribute::Generic9X:
114 return "Generic[9].X";
115 case Attribute::Generic9Y:
116 return "Generic[9].Y";
117 case Attribute::Generic9Z:
118 return "Generic[9].Z";
119 case Attribute::Generic9W:
120 return "Generic[9].W";
121 case Attribute::Generic10X:
122 return "Generic[10].X";
123 case Attribute::Generic10Y:
124 return "Generic[10].Y";
125 case Attribute::Generic10Z:
126 return "Generic[10].Z";
127 case Attribute::Generic10W:
128 return "Generic[10].W";
129 case Attribute::Generic11X:
130 return "Generic[11].X";
131 case Attribute::Generic11Y:
132 return "Generic[11].Y";
133 case Attribute::Generic11Z:
134 return "Generic[11].Z";
135 case Attribute::Generic11W:
136 return "Generic[11].W";
137 case Attribute::Generic12X:
138 return "Generic[12].X";
139 case Attribute::Generic12Y:
140 return "Generic[12].Y";
141 case Attribute::Generic12Z:
142 return "Generic[12].Z";
143 case Attribute::Generic12W:
144 return "Generic[12].W";
145 case Attribute::Generic13X:
146 return "Generic[13].X";
147 case Attribute::Generic13Y:
148 return "Generic[13].Y";
149 case Attribute::Generic13Z:
150 return "Generic[13].Z";
151 case Attribute::Generic13W:
152 return "Generic[13].W";
153 case Attribute::Generic14X:
154 return "Generic[14].X";
155 case Attribute::Generic14Y:
156 return "Generic[14].Y";
157 case Attribute::Generic14Z:
158 return "Generic[14].Z";
159 case Attribute::Generic14W:
160 return "Generic[14].W";
161 case Attribute::Generic15X:
162 return "Generic[15].X";
163 case Attribute::Generic15Y:
164 return "Generic[15].Y";
165 case Attribute::Generic15Z:
166 return "Generic[15].Z";
167 case Attribute::Generic15W:
168 return "Generic[15].W";
169 case Attribute::Generic16X:
170 return "Generic[16].X";
171 case Attribute::Generic16Y:
172 return "Generic[16].Y";
173 case Attribute::Generic16Z:
174 return "Generic[16].Z";
175 case Attribute::Generic16W:
176 return "Generic[16].W";
177 case Attribute::Generic17X:
178 return "Generic[17].X";
179 case Attribute::Generic17Y:
180 return "Generic[17].Y";
181 case Attribute::Generic17Z:
182 return "Generic[17].Z";
183 case Attribute::Generic17W:
184 return "Generic[17].W";
185 case Attribute::Generic18X:
186 return "Generic[18].X";
187 case Attribute::Generic18Y:
188 return "Generic[18].Y";
189 case Attribute::Generic18Z:
190 return "Generic[18].Z";
191 case Attribute::Generic18W:
192 return "Generic[18].W";
193 case Attribute::Generic19X:
194 return "Generic[19].X";
195 case Attribute::Generic19Y:
196 return "Generic[19].Y";
197 case Attribute::Generic19Z:
198 return "Generic[19].Z";
199 case Attribute::Generic19W:
200 return "Generic[19].W";
201 case Attribute::Generic20X:
202 return "Generic[20].X";
203 case Attribute::Generic20Y:
204 return "Generic[20].Y";
205 case Attribute::Generic20Z:
206 return "Generic[20].Z";
207 case Attribute::Generic20W:
208 return "Generic[20].W";
209 case Attribute::Generic21X:
210 return "Generic[21].X";
211 case Attribute::Generic21Y:
212 return "Generic[21].Y";
213 case Attribute::Generic21Z:
214 return "Generic[21].Z";
215 case Attribute::Generic21W:
216 return "Generic[21].W";
217 case Attribute::Generic22X:
218 return "Generic[22].X";
219 case Attribute::Generic22Y:
220 return "Generic[22].Y";
221 case Attribute::Generic22Z:
222 return "Generic[22].Z";
223 case Attribute::Generic22W:
224 return "Generic[22].W";
225 case Attribute::Generic23X:
226 return "Generic[23].X";
227 case Attribute::Generic23Y:
228 return "Generic[23].Y";
229 case Attribute::Generic23Z:
230 return "Generic[23].Z";
231 case Attribute::Generic23W:
232 return "Generic[23].W";
233 case Attribute::Generic24X:
234 return "Generic[24].X";
235 case Attribute::Generic24Y:
236 return "Generic[24].Y";
237 case Attribute::Generic24Z:
238 return "Generic[24].Z";
239 case Attribute::Generic24W:
240 return "Generic[24].W";
241 case Attribute::Generic25X:
242 return "Generic[25].X";
243 case Attribute::Generic25Y:
244 return "Generic[25].Y";
245 case Attribute::Generic25Z:
246 return "Generic[25].Z";
247 case Attribute::Generic25W:
248 return "Generic[25].W";
249 case Attribute::Generic26X:
250 return "Generic[26].X";
251 case Attribute::Generic26Y:
252 return "Generic[26].Y";
253 case Attribute::Generic26Z:
254 return "Generic[26].Z";
255 case Attribute::Generic26W:
256 return "Generic[26].W";
257 case Attribute::Generic27X:
258 return "Generic[27].X";
259 case Attribute::Generic27Y:
260 return "Generic[27].Y";
261 case Attribute::Generic27Z:
262 return "Generic[27].Z";
263 case Attribute::Generic27W:
264 return "Generic[27].W";
265 case Attribute::Generic28X:
266 return "Generic[28].X";
267 case Attribute::Generic28Y:
268 return "Generic[28].Y";
269 case Attribute::Generic28Z:
270 return "Generic[28].Z";
271 case Attribute::Generic28W:
272 return "Generic[28].W";
273 case Attribute::Generic29X:
274 return "Generic[29].X";
275 case Attribute::Generic29Y:
276 return "Generic[29].Y";
277 case Attribute::Generic29Z:
278 return "Generic[29].Z";
279 case Attribute::Generic29W:
280 return "Generic[29].W";
281 case Attribute::Generic30X:
282 return "Generic[30].X";
283 case Attribute::Generic30Y:
284 return "Generic[30].Y";
285 case Attribute::Generic30Z:
286 return "Generic[30].Z";
287 case Attribute::Generic30W:
288 return "Generic[30].W";
289 case Attribute::Generic31X:
290 return "Generic[31].X";
291 case Attribute::Generic31Y:
292 return "Generic[31].Y";
293 case Attribute::Generic31Z:
294 return "Generic[31].Z";
295 case Attribute::Generic31W:
296 return "Generic[31].W";
297 case Attribute::ColorFrontDiffuseR:
298 return "ColorFrontDiffuse.R";
299 case Attribute::ColorFrontDiffuseG:
300 return "ColorFrontDiffuse.G";
301 case Attribute::ColorFrontDiffuseB:
302 return "ColorFrontDiffuse.B";
303 case Attribute::ColorFrontDiffuseA:
304 return "ColorFrontDiffuse.A";
305 case Attribute::ColorFrontSpecularR:
306 return "ColorFrontSpecular.R";
307 case Attribute::ColorFrontSpecularG:
308 return "ColorFrontSpecular.G";
309 case Attribute::ColorFrontSpecularB:
310 return "ColorFrontSpecular.B";
311 case Attribute::ColorFrontSpecularA:
312 return "ColorFrontSpecular.A";
313 case Attribute::ColorBackDiffuseR:
314 return "ColorBackDiffuse.R";
315 case Attribute::ColorBackDiffuseG:
316 return "ColorBackDiffuse.G";
317 case Attribute::ColorBackDiffuseB:
318 return "ColorBackDiffuse.B";
319 case Attribute::ColorBackDiffuseA:
320 return "ColorBackDiffuse.A";
321 case Attribute::ColorBackSpecularR:
322 return "ColorBackSpecular.R";
323 case Attribute::ColorBackSpecularG:
324 return "ColorBackSpecular.G";
325 case Attribute::ColorBackSpecularB:
326 return "ColorBackSpecular.B";
327 case Attribute::ColorBackSpecularA:
328 return "ColorBackSpecular.A";
329 case Attribute::ClipDistance0:
330 return "ClipDistance[0]";
331 case Attribute::ClipDistance1:
332 return "ClipDistance[1]";
333 case Attribute::ClipDistance2:
334 return "ClipDistance[2]";
335 case Attribute::ClipDistance3:
336 return "ClipDistance[3]";
337 case Attribute::ClipDistance4:
338 return "ClipDistance[4]";
339 case Attribute::ClipDistance5:
340 return "ClipDistance[5]";
341 case Attribute::ClipDistance6:
342 return "ClipDistance[6]";
343 case Attribute::ClipDistance7:
344 return "ClipDistance[7]";
345 case Attribute::PointSpriteS:
346 return "PointSprite.S";
347 case Attribute::PointSpriteT:
348 return "PointSprite.T";
349 case Attribute::FogCoordinate:
350 return "FogCoordinate";
351 case Attribute::TessellationEvaluationPointU:
352 return "TessellationEvaluationPoint.U";
353 case Attribute::TessellationEvaluationPointV:
354 return "TessellationEvaluationPoint.V";
355 case Attribute::InstanceId:
356 return "InstanceId";
357 case Attribute::VertexId:
358 return "VertexId";
359 case Attribute::FixedFncTexture0S:
360 return "FixedFncTexture[0].S";
361 case Attribute::FixedFncTexture0T:
362 return "FixedFncTexture[0].T";
363 case Attribute::FixedFncTexture0R:
364 return "FixedFncTexture[0].R";
365 case Attribute::FixedFncTexture0Q:
366 return "FixedFncTexture[0].Q";
367 case Attribute::FixedFncTexture1S:
368 return "FixedFncTexture[1].S";
369 case Attribute::FixedFncTexture1T:
370 return "FixedFncTexture[1].T";
371 case Attribute::FixedFncTexture1R:
372 return "FixedFncTexture[1].R";
373 case Attribute::FixedFncTexture1Q:
374 return "FixedFncTexture[1].Q";
375 case Attribute::FixedFncTexture2S:
376 return "FixedFncTexture[2].S";
377 case Attribute::FixedFncTexture2T:
378 return "FixedFncTexture[2].T";
379 case Attribute::FixedFncTexture2R:
380 return "FixedFncTexture[2].R";
381 case Attribute::FixedFncTexture2Q:
382 return "FixedFncTexture[2].Q";
383 case Attribute::FixedFncTexture3S:
384 return "FixedFncTexture[3].S";
385 case Attribute::FixedFncTexture3T:
386 return "FixedFncTexture[3].T";
387 case Attribute::FixedFncTexture3R:
388 return "FixedFncTexture[3].R";
389 case Attribute::FixedFncTexture3Q:
390 return "FixedFncTexture[3].Q";
391 case Attribute::FixedFncTexture4S:
392 return "FixedFncTexture[4].S";
393 case Attribute::FixedFncTexture4T:
394 return "FixedFncTexture[4].T";
395 case Attribute::FixedFncTexture4R:
396 return "FixedFncTexture[4].R";
397 case Attribute::FixedFncTexture4Q:
398 return "FixedFncTexture[4].Q";
399 case Attribute::FixedFncTexture5S:
400 return "FixedFncTexture[5].S";
401 case Attribute::FixedFncTexture5T:
402 return "FixedFncTexture[5].T";
403 case Attribute::FixedFncTexture5R:
404 return "FixedFncTexture[5].R";
405 case Attribute::FixedFncTexture5Q:
406 return "FixedFncTexture[5].Q";
407 case Attribute::FixedFncTexture6S:
408 return "FixedFncTexture[6].S";
409 case Attribute::FixedFncTexture6T:
410 return "FixedFncTexture[6].T";
411 case Attribute::FixedFncTexture6R:
412 return "FixedFncTexture[6].R";
413 case Attribute::FixedFncTexture6Q:
414 return "FixedFncTexture[6].Q";
415 case Attribute::FixedFncTexture7S:
416 return "FixedFncTexture[7].S";
417 case Attribute::FixedFncTexture7T:
418 return "FixedFncTexture[7].T";
419 case Attribute::FixedFncTexture7R:
420 return "FixedFncTexture[7].R";
421 case Attribute::FixedFncTexture7Q:
422 return "FixedFncTexture[7].Q";
423 case Attribute::FixedFncTexture8S:
424 return "FixedFncTexture[8].S";
425 case Attribute::FixedFncTexture8T:
426 return "FixedFncTexture[8].T";
427 case Attribute::FixedFncTexture8R:
428 return "FixedFncTexture[8].R";
429 case Attribute::FixedFncTexture8Q:
430 return "FixedFncTexture[8].Q";
431 case Attribute::FixedFncTexture9S:
432 return "FixedFncTexture[9].S";
433 case Attribute::FixedFncTexture9T:
434 return "FixedFncTexture[9].T";
435 case Attribute::FixedFncTexture9R:
436 return "FixedFncTexture[9].R";
437 case Attribute::FixedFncTexture9Q:
438 return "FixedFncTexture[9].Q";
439 case Attribute::ViewportMask:
440 return "ViewportMask";
441 case Attribute::FrontFace:
442 return "FrontFace";
443 }
444 return fmt::format("<reserved attribute {}>", static_cast<int>(attribute));
445}
446
447} // namespace Shader::IR \ No newline at end of file