| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- // Copyright 2021 yuzu Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #include <fmt/format.h>
- #include "shader_recompiler/exception.h"
- #include "shader_recompiler/frontend/ir/attribute.h"
- namespace Shader::IR {
- bool IsGeneric(Attribute attribute) noexcept {
- return attribute >= Attribute::Generic0X && attribute <= Attribute::Generic31X;
- }
- u32 GenericAttributeIndex(Attribute attribute) {
- if (!IsGeneric(attribute)) {
- throw InvalidArgument("Attribute is not generic {}", attribute);
- }
- return (static_cast<u32>(attribute) - static_cast<u32>(Attribute::Generic0X)) / 4u;
- }
- u32 GenericAttributeElement(Attribute attribute) {
- if (!IsGeneric(attribute)) {
- throw InvalidArgument("Attribute is not generic {}", attribute);
- }
- return static_cast<u32>(attribute) % 4;
- }
- std::string NameOf(Attribute attribute) {
- switch (attribute) {
- case Attribute::PrimitiveId:
- return "PrimitiveId";
- case Attribute::Layer:
- return "Layer";
- case Attribute::ViewportIndex:
- return "ViewportIndex";
- case Attribute::PointSize:
- return "PointSize";
- case Attribute::PositionX:
- return "Position.X";
- case Attribute::PositionY:
- return "Position.Y";
- case Attribute::PositionZ:
- return "Position.Z";
- case Attribute::PositionW:
- return "Position.W";
- case Attribute::Generic0X:
- return "Generic[0].X";
- case Attribute::Generic0Y:
- return "Generic[0].Y";
- case Attribute::Generic0Z:
- return "Generic[0].Z";
- case Attribute::Generic0W:
- return "Generic[0].W";
- case Attribute::Generic1X:
- return "Generic[1].X";
- case Attribute::Generic1Y:
- return "Generic[1].Y";
- case Attribute::Generic1Z:
- return "Generic[1].Z";
- case Attribute::Generic1W:
- return "Generic[1].W";
- case Attribute::Generic2X:
- return "Generic[2].X";
- case Attribute::Generic2Y:
- return "Generic[2].Y";
- case Attribute::Generic2Z:
- return "Generic[2].Z";
- case Attribute::Generic2W:
- return "Generic[2].W";
- case Attribute::Generic3X:
- return "Generic[3].X";
- case Attribute::Generic3Y:
- return "Generic[3].Y";
- case Attribute::Generic3Z:
- return "Generic[3].Z";
- case Attribute::Generic3W:
- return "Generic[3].W";
- case Attribute::Generic4X:
- return "Generic[4].X";
- case Attribute::Generic4Y:
- return "Generic[4].Y";
- case Attribute::Generic4Z:
- return "Generic[4].Z";
- case Attribute::Generic4W:
- return "Generic[4].W";
- case Attribute::Generic5X:
- return "Generic[5].X";
- case Attribute::Generic5Y:
- return "Generic[5].Y";
- case Attribute::Generic5Z:
- return "Generic[5].Z";
- case Attribute::Generic5W:
- return "Generic[5].W";
- case Attribute::Generic6X:
- return "Generic[6].X";
- case Attribute::Generic6Y:
- return "Generic[6].Y";
- case Attribute::Generic6Z:
- return "Generic[6].Z";
- case Attribute::Generic6W:
- return "Generic[6].W";
- case Attribute::Generic7X:
- return "Generic[7].X";
- case Attribute::Generic7Y:
- return "Generic[7].Y";
- case Attribute::Generic7Z:
- return "Generic[7].Z";
- case Attribute::Generic7W:
- return "Generic[7].W";
- case Attribute::Generic8X:
- return "Generic[8].X";
- case Attribute::Generic8Y:
- return "Generic[8].Y";
- case Attribute::Generic8Z:
- return "Generic[8].Z";
- case Attribute::Generic8W:
- return "Generic[8].W";
- case Attribute::Generic9X:
- return "Generic[9].X";
- case Attribute::Generic9Y:
- return "Generic[9].Y";
- case Attribute::Generic9Z:
- return "Generic[9].Z";
- case Attribute::Generic9W:
- return "Generic[9].W";
- case Attribute::Generic10X:
- return "Generic[10].X";
- case Attribute::Generic10Y:
- return "Generic[10].Y";
- case Attribute::Generic10Z:
- return "Generic[10].Z";
- case Attribute::Generic10W:
- return "Generic[10].W";
- case Attribute::Generic11X:
- return "Generic[11].X";
- case Attribute::Generic11Y:
- return "Generic[11].Y";
- case Attribute::Generic11Z:
- return "Generic[11].Z";
- case Attribute::Generic11W:
- return "Generic[11].W";
- case Attribute::Generic12X:
- return "Generic[12].X";
- case Attribute::Generic12Y:
- return "Generic[12].Y";
- case Attribute::Generic12Z:
- return "Generic[12].Z";
- case Attribute::Generic12W:
- return "Generic[12].W";
- case Attribute::Generic13X:
- return "Generic[13].X";
- case Attribute::Generic13Y:
- return "Generic[13].Y";
- case Attribute::Generic13Z:
- return "Generic[13].Z";
- case Attribute::Generic13W:
- return "Generic[13].W";
- case Attribute::Generic14X:
- return "Generic[14].X";
- case Attribute::Generic14Y:
- return "Generic[14].Y";
- case Attribute::Generic14Z:
- return "Generic[14].Z";
- case Attribute::Generic14W:
- return "Generic[14].W";
- case Attribute::Generic15X:
- return "Generic[15].X";
- case Attribute::Generic15Y:
- return "Generic[15].Y";
- case Attribute::Generic15Z:
- return "Generic[15].Z";
- case Attribute::Generic15W:
- return "Generic[15].W";
- case Attribute::Generic16X:
- return "Generic[16].X";
- case Attribute::Generic16Y:
- return "Generic[16].Y";
- case Attribute::Generic16Z:
- return "Generic[16].Z";
- case Attribute::Generic16W:
- return "Generic[16].W";
- case Attribute::Generic17X:
- return "Generic[17].X";
- case Attribute::Generic17Y:
- return "Generic[17].Y";
- case Attribute::Generic17Z:
- return "Generic[17].Z";
- case Attribute::Generic17W:
- return "Generic[17].W";
- case Attribute::Generic18X:
- return "Generic[18].X";
- case Attribute::Generic18Y:
- return "Generic[18].Y";
- case Attribute::Generic18Z:
- return "Generic[18].Z";
- case Attribute::Generic18W:
- return "Generic[18].W";
- case Attribute::Generic19X:
- return "Generic[19].X";
- case Attribute::Generic19Y:
- return "Generic[19].Y";
- case Attribute::Generic19Z:
- return "Generic[19].Z";
- case Attribute::Generic19W:
- return "Generic[19].W";
- case Attribute::Generic20X:
- return "Generic[20].X";
- case Attribute::Generic20Y:
- return "Generic[20].Y";
- case Attribute::Generic20Z:
- return "Generic[20].Z";
- case Attribute::Generic20W:
- return "Generic[20].W";
- case Attribute::Generic21X:
- return "Generic[21].X";
- case Attribute::Generic21Y:
- return "Generic[21].Y";
- case Attribute::Generic21Z:
- return "Generic[21].Z";
- case Attribute::Generic21W:
- return "Generic[21].W";
- case Attribute::Generic22X:
- return "Generic[22].X";
- case Attribute::Generic22Y:
- return "Generic[22].Y";
- case Attribute::Generic22Z:
- return "Generic[22].Z";
- case Attribute::Generic22W:
- return "Generic[22].W";
- case Attribute::Generic23X:
- return "Generic[23].X";
- case Attribute::Generic23Y:
- return "Generic[23].Y";
- case Attribute::Generic23Z:
- return "Generic[23].Z";
- case Attribute::Generic23W:
- return "Generic[23].W";
- case Attribute::Generic24X:
- return "Generic[24].X";
- case Attribute::Generic24Y:
- return "Generic[24].Y";
- case Attribute::Generic24Z:
- return "Generic[24].Z";
- case Attribute::Generic24W:
- return "Generic[24].W";
- case Attribute::Generic25X:
- return "Generic[25].X";
- case Attribute::Generic25Y:
- return "Generic[25].Y";
- case Attribute::Generic25Z:
- return "Generic[25].Z";
- case Attribute::Generic25W:
- return "Generic[25].W";
- case Attribute::Generic26X:
- return "Generic[26].X";
- case Attribute::Generic26Y:
- return "Generic[26].Y";
- case Attribute::Generic26Z:
- return "Generic[26].Z";
- case Attribute::Generic26W:
- return "Generic[26].W";
- case Attribute::Generic27X:
- return "Generic[27].X";
- case Attribute::Generic27Y:
- return "Generic[27].Y";
- case Attribute::Generic27Z:
- return "Generic[27].Z";
- case Attribute::Generic27W:
- return "Generic[27].W";
- case Attribute::Generic28X:
- return "Generic[28].X";
- case Attribute::Generic28Y:
- return "Generic[28].Y";
- case Attribute::Generic28Z:
- return "Generic[28].Z";
- case Attribute::Generic28W:
- return "Generic[28].W";
- case Attribute::Generic29X:
- return "Generic[29].X";
- case Attribute::Generic29Y:
- return "Generic[29].Y";
- case Attribute::Generic29Z:
- return "Generic[29].Z";
- case Attribute::Generic29W:
- return "Generic[29].W";
- case Attribute::Generic30X:
- return "Generic[30].X";
- case Attribute::Generic30Y:
- return "Generic[30].Y";
- case Attribute::Generic30Z:
- return "Generic[30].Z";
- case Attribute::Generic30W:
- return "Generic[30].W";
- case Attribute::Generic31X:
- return "Generic[31].X";
- case Attribute::Generic31Y:
- return "Generic[31].Y";
- case Attribute::Generic31Z:
- return "Generic[31].Z";
- case Attribute::Generic31W:
- return "Generic[31].W";
- case Attribute::ColorFrontDiffuseR:
- return "ColorFrontDiffuse.R";
- case Attribute::ColorFrontDiffuseG:
- return "ColorFrontDiffuse.G";
- case Attribute::ColorFrontDiffuseB:
- return "ColorFrontDiffuse.B";
- case Attribute::ColorFrontDiffuseA:
- return "ColorFrontDiffuse.A";
- case Attribute::ColorFrontSpecularR:
- return "ColorFrontSpecular.R";
- case Attribute::ColorFrontSpecularG:
- return "ColorFrontSpecular.G";
- case Attribute::ColorFrontSpecularB:
- return "ColorFrontSpecular.B";
- case Attribute::ColorFrontSpecularA:
- return "ColorFrontSpecular.A";
- case Attribute::ColorBackDiffuseR:
- return "ColorBackDiffuse.R";
- case Attribute::ColorBackDiffuseG:
- return "ColorBackDiffuse.G";
- case Attribute::ColorBackDiffuseB:
- return "ColorBackDiffuse.B";
- case Attribute::ColorBackDiffuseA:
- return "ColorBackDiffuse.A";
- case Attribute::ColorBackSpecularR:
- return "ColorBackSpecular.R";
- case Attribute::ColorBackSpecularG:
- return "ColorBackSpecular.G";
- case Attribute::ColorBackSpecularB:
- return "ColorBackSpecular.B";
- case Attribute::ColorBackSpecularA:
- return "ColorBackSpecular.A";
- case Attribute::ClipDistance0:
- return "ClipDistance[0]";
- case Attribute::ClipDistance1:
- return "ClipDistance[1]";
- case Attribute::ClipDistance2:
- return "ClipDistance[2]";
- case Attribute::ClipDistance3:
- return "ClipDistance[3]";
- case Attribute::ClipDistance4:
- return "ClipDistance[4]";
- case Attribute::ClipDistance5:
- return "ClipDistance[5]";
- case Attribute::ClipDistance6:
- return "ClipDistance[6]";
- case Attribute::ClipDistance7:
- return "ClipDistance[7]";
- case Attribute::PointSpriteS:
- return "PointSprite.S";
- case Attribute::PointSpriteT:
- return "PointSprite.T";
- case Attribute::FogCoordinate:
- return "FogCoordinate";
- case Attribute::TessellationEvaluationPointU:
- return "TessellationEvaluationPoint.U";
- case Attribute::TessellationEvaluationPointV:
- return "TessellationEvaluationPoint.V";
- case Attribute::InstanceId:
- return "InstanceId";
- case Attribute::VertexId:
- return "VertexId";
- case Attribute::FixedFncTexture0S:
- return "FixedFncTexture[0].S";
- case Attribute::FixedFncTexture0T:
- return "FixedFncTexture[0].T";
- case Attribute::FixedFncTexture0R:
- return "FixedFncTexture[0].R";
- case Attribute::FixedFncTexture0Q:
- return "FixedFncTexture[0].Q";
- case Attribute::FixedFncTexture1S:
- return "FixedFncTexture[1].S";
- case Attribute::FixedFncTexture1T:
- return "FixedFncTexture[1].T";
- case Attribute::FixedFncTexture1R:
- return "FixedFncTexture[1].R";
- case Attribute::FixedFncTexture1Q:
- return "FixedFncTexture[1].Q";
- case Attribute::FixedFncTexture2S:
- return "FixedFncTexture[2].S";
- case Attribute::FixedFncTexture2T:
- return "FixedFncTexture[2].T";
- case Attribute::FixedFncTexture2R:
- return "FixedFncTexture[2].R";
- case Attribute::FixedFncTexture2Q:
- return "FixedFncTexture[2].Q";
- case Attribute::FixedFncTexture3S:
- return "FixedFncTexture[3].S";
- case Attribute::FixedFncTexture3T:
- return "FixedFncTexture[3].T";
- case Attribute::FixedFncTexture3R:
- return "FixedFncTexture[3].R";
- case Attribute::FixedFncTexture3Q:
- return "FixedFncTexture[3].Q";
- case Attribute::FixedFncTexture4S:
- return "FixedFncTexture[4].S";
- case Attribute::FixedFncTexture4T:
- return "FixedFncTexture[4].T";
- case Attribute::FixedFncTexture4R:
- return "FixedFncTexture[4].R";
- case Attribute::FixedFncTexture4Q:
- return "FixedFncTexture[4].Q";
- case Attribute::FixedFncTexture5S:
- return "FixedFncTexture[5].S";
- case Attribute::FixedFncTexture5T:
- return "FixedFncTexture[5].T";
- case Attribute::FixedFncTexture5R:
- return "FixedFncTexture[5].R";
- case Attribute::FixedFncTexture5Q:
- return "FixedFncTexture[5].Q";
- case Attribute::FixedFncTexture6S:
- return "FixedFncTexture[6].S";
- case Attribute::FixedFncTexture6T:
- return "FixedFncTexture[6].T";
- case Attribute::FixedFncTexture6R:
- return "FixedFncTexture[6].R";
- case Attribute::FixedFncTexture6Q:
- return "FixedFncTexture[6].Q";
- case Attribute::FixedFncTexture7S:
- return "FixedFncTexture[7].S";
- case Attribute::FixedFncTexture7T:
- return "FixedFncTexture[7].T";
- case Attribute::FixedFncTexture7R:
- return "FixedFncTexture[7].R";
- case Attribute::FixedFncTexture7Q:
- return "FixedFncTexture[7].Q";
- case Attribute::FixedFncTexture8S:
- return "FixedFncTexture[8].S";
- case Attribute::FixedFncTexture8T:
- return "FixedFncTexture[8].T";
- case Attribute::FixedFncTexture8R:
- return "FixedFncTexture[8].R";
- case Attribute::FixedFncTexture8Q:
- return "FixedFncTexture[8].Q";
- case Attribute::FixedFncTexture9S:
- return "FixedFncTexture[9].S";
- case Attribute::FixedFncTexture9T:
- return "FixedFncTexture[9].T";
- case Attribute::FixedFncTexture9R:
- return "FixedFncTexture[9].R";
- case Attribute::FixedFncTexture9Q:
- return "FixedFncTexture[9].Q";
- case Attribute::ViewportMask:
- return "ViewportMask";
- case Attribute::FrontFace:
- return "FrontFace";
- }
- return fmt::format("<reserved attribute {}>", static_cast<int>(attribute));
- }
- } // namespace Shader::IR
|