diff options
Diffstat (limited to '')
| -rw-r--r-- | src/shader_recompiler/frontend/ir/attribute.cpp | 447 |
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 | |||
| 10 | namespace Shader::IR { | ||
| 11 | |||
| 12 | bool IsGeneric(Attribute attribute) noexcept { | ||
| 13 | return attribute >= Attribute::Generic0X && attribute <= Attribute::Generic31X; | ||
| 14 | } | ||
| 15 | |||
| 16 | int 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 | |||
| 23 | std::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 | ||