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