aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2025-11-13 13:22:02 +0100
committercrueter <crueter@eden-emu.dev>2025-11-13 13:22:02 +0100
commit9a046190c77905c278b2ec7e9c299d15cbb855bb (patch)
tree9161c26bdd0a551473940474b85bd60908a15b8e /src
parentcfbef5c487005077224f0c5d26317680243cadfc (diff)
[shader_recompiler] macro-ify flow_test and attribute (#2900)
Of course - macros my beloved :) Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2900 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src')
-rw-r--r--src/shader_recompiler/CMakeLists.txt2
-rw-r--r--src/shader_recompiler/frontend/ir/attribute.cpp459
-rw-r--r--src/shader_recompiler/frontend/ir/attribute.h464
-rw-r--r--src/shader_recompiler/frontend/ir/flow_test.cpp82
-rw-r--r--src/shader_recompiler/frontend/ir/flow_test.h82
5 files changed, 293 insertions, 796 deletions
diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt
index 4f19e00ee4..c385951318 100644
--- a/src/shader_recompiler/CMakeLists.txt
+++ b/src/shader_recompiler/CMakeLists.txt
@@ -81,14 +81,12 @@ add_library(shader_recompiler STATIC
environment.h
exception.h
frontend/ir/abstract_syntax_list.h
- frontend/ir/attribute.cpp
frontend/ir/attribute.h
frontend/ir/basic_block.cpp
frontend/ir/basic_block.h
frontend/ir/breadth_first_search.h
frontend/ir/condition.cpp
frontend/ir/condition.h
- frontend/ir/flow_test.cpp
frontend/ir/flow_test.h
frontend/ir/ir_emitter.cpp
frontend/ir/ir_emitter.h
diff --git a/src/shader_recompiler/frontend/ir/attribute.cpp b/src/shader_recompiler/frontend/ir/attribute.cpp
deleted file mode 100644
index 97f253602d..0000000000
--- a/src/shader_recompiler/frontend/ir/attribute.cpp
+++ /dev/null
@@ -1,459 +0,0 @@
-// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include <fmt/ranges.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";
- case Attribute::BaseInstance:
- return "BaseInstance";
- case Attribute::BaseVertex:
- return "BaseVertex";
- case Attribute::DrawID:
- return "DrawID";
- }
- return fmt::format("<reserved attribute {}>", static_cast<int>(attribute));
-}
-
-} // namespace Shader::IR
diff --git a/src/shader_recompiler/frontend/ir/attribute.h b/src/shader_recompiler/frontend/ir/attribute.h
index 7a06713803..943c8d673f 100644
--- a/src/shader_recompiler/frontend/ir/attribute.h
+++ b/src/shader_recompiler/frontend/ir/attribute.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -6,240 +9,261 @@
#include <fmt/ranges.h>
#include "common/common_types.h"
+#include "shader_recompiler/exception.h"
namespace Shader::IR {
enum class Attribute : u64 {
- PrimitiveId = 24,
- Layer = 25,
- ViewportIndex = 26,
- PointSize = 27,
- PositionX = 28,
- PositionY = 29,
- PositionZ = 30,
- PositionW = 31,
- Generic0X = 32,
- Generic0Y = 33,
- Generic0Z = 34,
- Generic0W = 35,
- Generic1X = 36,
- Generic1Y = 37,
- Generic1Z = 38,
- Generic1W = 39,
- Generic2X = 40,
- Generic2Y = 41,
- Generic2Z = 42,
- Generic2W = 43,
- Generic3X = 44,
- Generic3Y = 45,
- Generic3Z = 46,
- Generic3W = 47,
- Generic4X = 48,
- Generic4Y = 49,
- Generic4Z = 50,
- Generic4W = 51,
- Generic5X = 52,
- Generic5Y = 53,
- Generic5Z = 54,
- Generic5W = 55,
- Generic6X = 56,
- Generic6Y = 57,
- Generic6Z = 58,
- Generic6W = 59,
- Generic7X = 60,
- Generic7Y = 61,
- Generic7Z = 62,
- Generic7W = 63,
- Generic8X = 64,
- Generic8Y = 65,
- Generic8Z = 66,
- Generic8W = 67,
- Generic9X = 68,
- Generic9Y = 69,
- Generic9Z = 70,
- Generic9W = 71,
- Generic10X = 72,
- Generic10Y = 73,
- Generic10Z = 74,
- Generic10W = 75,
- Generic11X = 76,
- Generic11Y = 77,
- Generic11Z = 78,
- Generic11W = 79,
- Generic12X = 80,
- Generic12Y = 81,
- Generic12Z = 82,
- Generic12W = 83,
- Generic13X = 84,
- Generic13Y = 85,
- Generic13Z = 86,
- Generic13W = 87,
- Generic14X = 88,
- Generic14Y = 89,
- Generic14Z = 90,
- Generic14W = 91,
- Generic15X = 92,
- Generic15Y = 93,
- Generic15Z = 94,
- Generic15W = 95,
- Generic16X = 96,
- Generic16Y = 97,
- Generic16Z = 98,
- Generic16W = 99,
- Generic17X = 100,
- Generic17Y = 101,
- Generic17Z = 102,
- Generic17W = 103,
- Generic18X = 104,
- Generic18Y = 105,
- Generic18Z = 106,
- Generic18W = 107,
- Generic19X = 108,
- Generic19Y = 109,
- Generic19Z = 110,
- Generic19W = 111,
- Generic20X = 112,
- Generic20Y = 113,
- Generic20Z = 114,
- Generic20W = 115,
- Generic21X = 116,
- Generic21Y = 117,
- Generic21Z = 118,
- Generic21W = 119,
- Generic22X = 120,
- Generic22Y = 121,
- Generic22Z = 122,
- Generic22W = 123,
- Generic23X = 124,
- Generic23Y = 125,
- Generic23Z = 126,
- Generic23W = 127,
- Generic24X = 128,
- Generic24Y = 129,
- Generic24Z = 130,
- Generic24W = 131,
- Generic25X = 132,
- Generic25Y = 133,
- Generic25Z = 134,
- Generic25W = 135,
- Generic26X = 136,
- Generic26Y = 137,
- Generic26Z = 138,
- Generic26W = 139,
- Generic27X = 140,
- Generic27Y = 141,
- Generic27Z = 142,
- Generic27W = 143,
- Generic28X = 144,
- Generic28Y = 145,
- Generic28Z = 146,
- Generic28W = 147,
- Generic29X = 148,
- Generic29Y = 149,
- Generic29Z = 150,
- Generic29W = 151,
- Generic30X = 152,
- Generic30Y = 153,
- Generic30Z = 154,
- Generic30W = 155,
- Generic31X = 156,
- Generic31Y = 157,
- Generic31Z = 158,
- Generic31W = 159,
- ColorFrontDiffuseR = 160,
- ColorFrontDiffuseG = 161,
- ColorFrontDiffuseB = 162,
- ColorFrontDiffuseA = 163,
- ColorFrontSpecularR = 164,
- ColorFrontSpecularG = 165,
- ColorFrontSpecularB = 166,
- ColorFrontSpecularA = 167,
- ColorBackDiffuseR = 168,
- ColorBackDiffuseG = 169,
- ColorBackDiffuseB = 170,
- ColorBackDiffuseA = 171,
- ColorBackSpecularR = 172,
- ColorBackSpecularG = 173,
- ColorBackSpecularB = 174,
- ColorBackSpecularA = 175,
- ClipDistance0 = 176,
- ClipDistance1 = 177,
- ClipDistance2 = 178,
- ClipDistance3 = 179,
- ClipDistance4 = 180,
- ClipDistance5 = 181,
- ClipDistance6 = 182,
- ClipDistance7 = 183,
- PointSpriteS = 184,
- PointSpriteT = 185,
- FogCoordinate = 186,
- TessellationEvaluationPointU = 188,
- TessellationEvaluationPointV = 189,
- InstanceId = 190,
- VertexId = 191,
- FixedFncTexture0S = 192,
- FixedFncTexture0T = 193,
- FixedFncTexture0R = 194,
- FixedFncTexture0Q = 195,
- FixedFncTexture1S = 196,
- FixedFncTexture1T = 197,
- FixedFncTexture1R = 198,
- FixedFncTexture1Q = 199,
- FixedFncTexture2S = 200,
- FixedFncTexture2T = 201,
- FixedFncTexture2R = 202,
- FixedFncTexture2Q = 203,
- FixedFncTexture3S = 204,
- FixedFncTexture3T = 205,
- FixedFncTexture3R = 206,
- FixedFncTexture3Q = 207,
- FixedFncTexture4S = 208,
- FixedFncTexture4T = 209,
- FixedFncTexture4R = 210,
- FixedFncTexture4Q = 211,
- FixedFncTexture5S = 212,
- FixedFncTexture5T = 213,
- FixedFncTexture5R = 214,
- FixedFncTexture5Q = 215,
- FixedFncTexture6S = 216,
- FixedFncTexture6T = 217,
- FixedFncTexture6R = 218,
- FixedFncTexture6Q = 219,
- FixedFncTexture7S = 220,
- FixedFncTexture7T = 221,
- FixedFncTexture7R = 222,
- FixedFncTexture7Q = 223,
- FixedFncTexture8S = 224,
- FixedFncTexture8T = 225,
- FixedFncTexture8R = 226,
- FixedFncTexture8Q = 227,
- FixedFncTexture9S = 228,
- FixedFncTexture9T = 229,
- FixedFncTexture9R = 230,
- FixedFncTexture9Q = 231,
- ViewportMask = 232,
- FrontFace = 255,
-
- // Implementation attributes
- BaseInstance = 256,
- BaseVertex = 257,
- DrawID = 258,
+#define SRIR_ATTRIBUTE_LIST \
+ SRIR_ATTRIBUTE_ELEM(PrimitiveId, 24) \
+ SRIR_ATTRIBUTE_ELEM(Layer, 25) \
+ SRIR_ATTRIBUTE_ELEM(ViewportIndex, 26) \
+ SRIR_ATTRIBUTE_ELEM(PointSize, 27) \
+ SRIR_ATTRIBUTE_ELEM(PositionX, 28) \
+ SRIR_ATTRIBUTE_ELEM(PositionY, 29) \
+ SRIR_ATTRIBUTE_ELEM(PositionZ, 30) \
+ SRIR_ATTRIBUTE_ELEM(PositionW, 31) \
+ SRIR_ATTRIBUTE_ELEM(Generic0X, 32) \
+ SRIR_ATTRIBUTE_ELEM(Generic0Y, 33) \
+ SRIR_ATTRIBUTE_ELEM(Generic0Z, 34) \
+ SRIR_ATTRIBUTE_ELEM(Generic0W, 35) \
+ SRIR_ATTRIBUTE_ELEM(Generic1X, 36) \
+ SRIR_ATTRIBUTE_ELEM(Generic1Y, 37) \
+ SRIR_ATTRIBUTE_ELEM(Generic1Z, 38) \
+ SRIR_ATTRIBUTE_ELEM(Generic1W, 39) \
+ SRIR_ATTRIBUTE_ELEM(Generic2X, 40) \
+ SRIR_ATTRIBUTE_ELEM(Generic2Y, 41) \
+ SRIR_ATTRIBUTE_ELEM(Generic2Z, 42) \
+ SRIR_ATTRIBUTE_ELEM(Generic2W, 43) \
+ SRIR_ATTRIBUTE_ELEM(Generic3X, 44) \
+ SRIR_ATTRIBUTE_ELEM(Generic3Y, 45) \
+ SRIR_ATTRIBUTE_ELEM(Generic3Z, 46) \
+ SRIR_ATTRIBUTE_ELEM(Generic3W, 47) \
+ SRIR_ATTRIBUTE_ELEM(Generic4X, 48) \
+ SRIR_ATTRIBUTE_ELEM(Generic4Y, 49) \
+ SRIR_ATTRIBUTE_ELEM(Generic4Z, 50) \
+ SRIR_ATTRIBUTE_ELEM(Generic4W, 51) \
+ SRIR_ATTRIBUTE_ELEM(Generic5X, 52) \
+ SRIR_ATTRIBUTE_ELEM(Generic5Y, 53) \
+ SRIR_ATTRIBUTE_ELEM(Generic5Z, 54) \
+ SRIR_ATTRIBUTE_ELEM(Generic5W, 55) \
+ SRIR_ATTRIBUTE_ELEM(Generic6X, 56) \
+ SRIR_ATTRIBUTE_ELEM(Generic6Y, 57) \
+ SRIR_ATTRIBUTE_ELEM(Generic6Z, 58) \
+ SRIR_ATTRIBUTE_ELEM(Generic6W, 59) \
+ SRIR_ATTRIBUTE_ELEM(Generic7X, 60) \
+ SRIR_ATTRIBUTE_ELEM(Generic7Y, 61) \
+ SRIR_ATTRIBUTE_ELEM(Generic7Z, 62) \
+ SRIR_ATTRIBUTE_ELEM(Generic7W, 63) \
+ SRIR_ATTRIBUTE_ELEM(Generic8X, 64) \
+ SRIR_ATTRIBUTE_ELEM(Generic8Y, 65) \
+ SRIR_ATTRIBUTE_ELEM(Generic8Z, 66) \
+ SRIR_ATTRIBUTE_ELEM(Generic8W, 67) \
+ SRIR_ATTRIBUTE_ELEM(Generic9X, 68) \
+ SRIR_ATTRIBUTE_ELEM(Generic9Y, 69) \
+ SRIR_ATTRIBUTE_ELEM(Generic9Z, 70) \
+ SRIR_ATTRIBUTE_ELEM(Generic9W, 71) \
+ SRIR_ATTRIBUTE_ELEM(Generic10X, 72) \
+ SRIR_ATTRIBUTE_ELEM(Generic10Y, 73) \
+ SRIR_ATTRIBUTE_ELEM(Generic10Z, 74) \
+ SRIR_ATTRIBUTE_ELEM(Generic10W, 75) \
+ SRIR_ATTRIBUTE_ELEM(Generic11X, 76) \
+ SRIR_ATTRIBUTE_ELEM(Generic11Y, 77) \
+ SRIR_ATTRIBUTE_ELEM(Generic11Z, 78) \
+ SRIR_ATTRIBUTE_ELEM(Generic11W, 79) \
+ SRIR_ATTRIBUTE_ELEM(Generic12X, 80) \
+ SRIR_ATTRIBUTE_ELEM(Generic12Y, 81) \
+ SRIR_ATTRIBUTE_ELEM(Generic12Z, 82) \
+ SRIR_ATTRIBUTE_ELEM(Generic12W, 83) \
+ SRIR_ATTRIBUTE_ELEM(Generic13X, 84) \
+ SRIR_ATTRIBUTE_ELEM(Generic13Y, 85) \
+ SRIR_ATTRIBUTE_ELEM(Generic13Z, 86) \
+ SRIR_ATTRIBUTE_ELEM(Generic13W, 87) \
+ SRIR_ATTRIBUTE_ELEM(Generic14X, 88) \
+ SRIR_ATTRIBUTE_ELEM(Generic14Y, 89) \
+ SRIR_ATTRIBUTE_ELEM(Generic14Z, 90) \
+ SRIR_ATTRIBUTE_ELEM(Generic14W, 91) \
+ SRIR_ATTRIBUTE_ELEM(Generic15X, 92) \
+ SRIR_ATTRIBUTE_ELEM(Generic15Y, 93) \
+ SRIR_ATTRIBUTE_ELEM(Generic15Z, 94) \
+ SRIR_ATTRIBUTE_ELEM(Generic15W, 95) \
+ SRIR_ATTRIBUTE_ELEM(Generic16X, 96) \
+ SRIR_ATTRIBUTE_ELEM(Generic16Y, 97) \
+ SRIR_ATTRIBUTE_ELEM(Generic16Z, 98) \
+ SRIR_ATTRIBUTE_ELEM(Generic16W, 99) \
+ SRIR_ATTRIBUTE_ELEM(Generic17X, 100) \
+ SRIR_ATTRIBUTE_ELEM(Generic17Y, 101) \
+ SRIR_ATTRIBUTE_ELEM(Generic17Z, 102) \
+ SRIR_ATTRIBUTE_ELEM(Generic17W, 103) \
+ SRIR_ATTRIBUTE_ELEM(Generic18X, 104) \
+ SRIR_ATTRIBUTE_ELEM(Generic18Y, 105) \
+ SRIR_ATTRIBUTE_ELEM(Generic18Z, 106) \
+ SRIR_ATTRIBUTE_ELEM(Generic18W, 107) \
+ SRIR_ATTRIBUTE_ELEM(Generic19X, 108) \
+ SRIR_ATTRIBUTE_ELEM(Generic19Y, 109) \
+ SRIR_ATTRIBUTE_ELEM(Generic19Z, 110) \
+ SRIR_ATTRIBUTE_ELEM(Generic19W, 111) \
+ SRIR_ATTRIBUTE_ELEM(Generic20X, 112) \
+ SRIR_ATTRIBUTE_ELEM(Generic20Y, 113) \
+ SRIR_ATTRIBUTE_ELEM(Generic20Z, 114) \
+ SRIR_ATTRIBUTE_ELEM(Generic20W, 115) \
+ SRIR_ATTRIBUTE_ELEM(Generic21X, 116) \
+ SRIR_ATTRIBUTE_ELEM(Generic21Y, 117) \
+ SRIR_ATTRIBUTE_ELEM(Generic21Z, 118) \
+ SRIR_ATTRIBUTE_ELEM(Generic21W, 119) \
+ SRIR_ATTRIBUTE_ELEM(Generic22X, 120) \
+ SRIR_ATTRIBUTE_ELEM(Generic22Y, 121) \
+ SRIR_ATTRIBUTE_ELEM(Generic22Z, 122) \
+ SRIR_ATTRIBUTE_ELEM(Generic22W, 123) \
+ SRIR_ATTRIBUTE_ELEM(Generic23X, 124) \
+ SRIR_ATTRIBUTE_ELEM(Generic23Y, 125) \
+ SRIR_ATTRIBUTE_ELEM(Generic23Z, 126) \
+ SRIR_ATTRIBUTE_ELEM(Generic23W, 127) \
+ SRIR_ATTRIBUTE_ELEM(Generic24X, 128) \
+ SRIR_ATTRIBUTE_ELEM(Generic24Y, 129) \
+ SRIR_ATTRIBUTE_ELEM(Generic24Z, 130) \
+ SRIR_ATTRIBUTE_ELEM(Generic24W, 131) \
+ SRIR_ATTRIBUTE_ELEM(Generic25X, 132) \
+ SRIR_ATTRIBUTE_ELEM(Generic25Y, 133) \
+ SRIR_ATTRIBUTE_ELEM(Generic25Z, 134) \
+ SRIR_ATTRIBUTE_ELEM(Generic25W, 135) \
+ SRIR_ATTRIBUTE_ELEM(Generic26X, 136) \
+ SRIR_ATTRIBUTE_ELEM(Generic26Y, 137) \
+ SRIR_ATTRIBUTE_ELEM(Generic26Z, 138) \
+ SRIR_ATTRIBUTE_ELEM(Generic26W, 139) \
+ SRIR_ATTRIBUTE_ELEM(Generic27X, 140) \
+ SRIR_ATTRIBUTE_ELEM(Generic27Y, 141) \
+ SRIR_ATTRIBUTE_ELEM(Generic27Z, 142) \
+ SRIR_ATTRIBUTE_ELEM(Generic27W, 143) \
+ SRIR_ATTRIBUTE_ELEM(Generic28X, 144) \
+ SRIR_ATTRIBUTE_ELEM(Generic28Y, 145) \
+ SRIR_ATTRIBUTE_ELEM(Generic28Z, 146) \
+ SRIR_ATTRIBUTE_ELEM(Generic28W, 147) \
+ SRIR_ATTRIBUTE_ELEM(Generic29X, 148) \
+ SRIR_ATTRIBUTE_ELEM(Generic29Y, 149) \
+ SRIR_ATTRIBUTE_ELEM(Generic29Z, 150) \
+ SRIR_ATTRIBUTE_ELEM(Generic29W, 151) \
+ SRIR_ATTRIBUTE_ELEM(Generic30X, 152) \
+ SRIR_ATTRIBUTE_ELEM(Generic30Y, 153) \
+ SRIR_ATTRIBUTE_ELEM(Generic30Z, 154) \
+ SRIR_ATTRIBUTE_ELEM(Generic30W, 155) \
+ SRIR_ATTRIBUTE_ELEM(Generic31X, 156) \
+ SRIR_ATTRIBUTE_ELEM(Generic31Y, 157) \
+ SRIR_ATTRIBUTE_ELEM(Generic31Z, 158) \
+ SRIR_ATTRIBUTE_ELEM(Generic31W, 159) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontDiffuseR, 160) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontDiffuseG, 161) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontDiffuseB, 162) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontDiffuseA, 163) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontSpecularR, 164) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontSpecularG, 165) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontSpecularB, 166) \
+ SRIR_ATTRIBUTE_ELEM(ColorFrontSpecularA, 167) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackDiffuseR, 168) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackDiffuseG, 169) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackDiffuseB, 170) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackDiffuseA, 171) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackSpecularR, 172) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackSpecularG, 173) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackSpecularB, 174) \
+ SRIR_ATTRIBUTE_ELEM(ColorBackSpecularA, 175) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance0, 176) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance1, 177) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance2, 178) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance3, 179) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance4, 180) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance5, 181) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance6, 182) \
+ SRIR_ATTRIBUTE_ELEM(ClipDistance7, 183) \
+ SRIR_ATTRIBUTE_ELEM(PointSpriteS, 184) \
+ SRIR_ATTRIBUTE_ELEM(PointSpriteT, 185) \
+ SRIR_ATTRIBUTE_ELEM(FogCoordinate, 186) \
+ SRIR_ATTRIBUTE_ELEM(TessellationEvaluationPointU, 188) \
+ SRIR_ATTRIBUTE_ELEM(TessellationEvaluationPointV, 189) \
+ SRIR_ATTRIBUTE_ELEM(InstanceId, 190) \
+ SRIR_ATTRIBUTE_ELEM(VertexId, 191) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture0S, 192) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture0T, 193) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture0R, 194) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture0Q, 195) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture1S, 196) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture1T, 197) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture1R, 198) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture1Q, 199) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture2S, 200) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture2T, 201) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture2R, 202) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture2Q, 203) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture3S, 204) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture3T, 205) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture3R, 206) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture3Q, 207) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture4S, 208) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture4T, 209) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture4R, 210) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture4Q, 211) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture5S, 212) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture5T, 213) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture5R, 214) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture5Q, 215) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture6S, 216) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture6T, 217) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture6R, 218) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture6Q, 219) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture7S, 220) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture7T, 221) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture7R, 222) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture7Q, 223) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture8S, 224) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture8T, 225) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture8R, 226) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture8Q, 227) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture9S, 228) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture9T, 229) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture9R, 230) \
+ SRIR_ATTRIBUTE_ELEM(FixedFncTexture9Q, 231) \
+ SRIR_ATTRIBUTE_ELEM(ViewportMask, 232) \
+ SRIR_ATTRIBUTE_ELEM(FrontFace, 255) \
+ /* Implementation attributes */ \
+ SRIR_ATTRIBUTE_ELEM(BaseInstance, 256) \
+ SRIR_ATTRIBUTE_ELEM(BaseVertex, 257) \
+ SRIR_ATTRIBUTE_ELEM(DrawID, 258)
+#define SRIR_ATTRIBUTE_ELEM(n, v) n = v,
+ SRIR_ATTRIBUTE_LIST
+#undef SRIR_ATTRIBUTE_ELEM
};
constexpr size_t NUM_GENERICS = 32;
-
constexpr size_t NUM_FIXEDFNCTEXTURE = 10;
-[[nodiscard]] bool IsGeneric(Attribute attribute) noexcept;
+[[nodiscard]] inline bool IsGeneric(Attribute attribute) noexcept {
+ return attribute >= Attribute::Generic0X && attribute <= Attribute::Generic31X;
+}
-[[nodiscard]] u32 GenericAttributeIndex(Attribute attribute);
+[[nodiscard]] inline u32 GenericAttributeIndex(Attribute attribute) {
+ if (!IsGeneric(attribute))
+ throw InvalidArgument("Attribute is not generic {}", attribute);
+ return (u32(attribute) - u32(Attribute::Generic0X)) / 4u;
+}
-[[nodiscard]] u32 GenericAttributeElement(Attribute attribute);
+[[nodiscard]] inline u32 GenericAttributeElement(Attribute attribute) {
+ if (!IsGeneric(attribute))
+ throw InvalidArgument("Attribute is not generic {}", attribute);
+ return u32(attribute) % 4;
+}
-[[nodiscard]] std::string NameOf(Attribute attribute);
+[[nodiscard]] inline std::string NameOf(Attribute attribute) {
+ switch (attribute) {
+#define SRIR_ATTRIBUTE_ELEM(n, v) case Attribute::n: return #n;
+ SRIR_ATTRIBUTE_LIST
+#undef SRIR_ATTRIBUTE_ELEM
+ default:
+ return fmt::format("<reserved attribute {}>", int(attribute));
+ }
+}
[[nodiscard]] constexpr IR::Attribute operator+(IR::Attribute attribute, size_t value) noexcept {
- return static_cast<IR::Attribute>(static_cast<size_t>(attribute) + value);
+ return IR::Attribute(size_t(attribute) + value);
}
} // namespace Shader::IR
diff --git a/src/shader_recompiler/frontend/ir/flow_test.cpp b/src/shader_recompiler/frontend/ir/flow_test.cpp
deleted file mode 100644
index c2dbe2690f..0000000000
--- a/src/shader_recompiler/frontend/ir/flow_test.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include <string>
-
-#include <fmt/ranges.h>
-
-#include "shader_recompiler/frontend/ir/flow_test.h"
-
-namespace Shader::IR {
-
-std::string NameOf(FlowTest flow_test) {
- switch (flow_test) {
- case FlowTest::F:
- return "F";
- case FlowTest::LT:
- return "LT";
- case FlowTest::EQ:
- return "EQ";
- case FlowTest::LE:
- return "LE";
- case FlowTest::GT:
- return "GT";
- case FlowTest::NE:
- return "NE";
- case FlowTest::GE:
- return "GE";
- case FlowTest::NUM:
- return "NUM";
- case FlowTest::NaN:
- return "NAN";
- case FlowTest::LTU:
- return "LTU";
- case FlowTest::EQU:
- return "EQU";
- case FlowTest::LEU:
- return "LEU";
- case FlowTest::GTU:
- return "GTU";
- case FlowTest::NEU:
- return "NEU";
- case FlowTest::GEU:
- return "GEU";
- case FlowTest::T:
- return "T";
- case FlowTest::OFF:
- return "OFF";
- case FlowTest::LO:
- return "LO";
- case FlowTest::SFF:
- return "SFF";
- case FlowTest::LS:
- return "LS";
- case FlowTest::HI:
- return "HI";
- case FlowTest::SFT:
- return "SFT";
- case FlowTest::HS:
- return "HS";
- case FlowTest::OFT:
- return "OFT";
- case FlowTest::CSM_TA:
- return "CSM_TA";
- case FlowTest::CSM_TR:
- return "CSM_TR";
- case FlowTest::CSM_MX:
- return "CSM_MX";
- case FlowTest::FCSM_TA:
- return "FCSM_TA";
- case FlowTest::FCSM_TR:
- return "FCSM_TR";
- case FlowTest::FCSM_MX:
- return "FCSM_MX";
- case FlowTest::RLE:
- return "RLE";
- case FlowTest::RGT:
- return "RGT";
- }
- return fmt::format("<invalid flow test {}>", static_cast<int>(flow_test));
-}
-
-} // namespace Shader::IR
diff --git a/src/shader_recompiler/frontend/ir/flow_test.h b/src/shader_recompiler/frontend/ir/flow_test.h
index 014ae6b659..0bb9666538 100644
--- a/src/shader_recompiler/frontend/ir/flow_test.h
+++ b/src/shader_recompiler/frontend/ir/flow_test.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -7,45 +10,58 @@
#include <fmt/ranges.h>
#include "common/common_types.h"
+#include "shader_recompiler/exception.h"
namespace Shader::IR {
enum class FlowTest : u64 {
- F,
- LT,
- EQ,
- LE,
- GT,
- NE,
- GE,
- NUM,
- NaN,
- LTU,
- EQU,
- LEU,
- GTU,
- NEU,
- GEU,
- T,
- OFF,
- LO,
- SFF,
- LS,
- HI,
- SFT,
- HS,
- OFT,
- CSM_TA,
- CSM_TR,
- CSM_MX,
- FCSM_TA,
- FCSM_TR,
- FCSM_MX,
- RLE,
- RGT,
+#define SRIR_FLOW_TEST_LIST \
+ SRIR_FLOW_TEST_ELEM(F) \
+ SRIR_FLOW_TEST_ELEM(LT) \
+ SRIR_FLOW_TEST_ELEM(EQ) \
+ SRIR_FLOW_TEST_ELEM(LE) \
+ SRIR_FLOW_TEST_ELEM(GT) \
+ SRIR_FLOW_TEST_ELEM(NE) \
+ SRIR_FLOW_TEST_ELEM(GE) \
+ SRIR_FLOW_TEST_ELEM(NUM) \
+ SRIR_FLOW_TEST_ELEM(NaN) \
+ SRIR_FLOW_TEST_ELEM(LTU) \
+ SRIR_FLOW_TEST_ELEM(EQU) \
+ SRIR_FLOW_TEST_ELEM(LEU) \
+ SRIR_FLOW_TEST_ELEM(GTU) \
+ SRIR_FLOW_TEST_ELEM(NEU) \
+ SRIR_FLOW_TEST_ELEM(GEU) \
+ SRIR_FLOW_TEST_ELEM(T) \
+ SRIR_FLOW_TEST_ELEM(OFF) \
+ SRIR_FLOW_TEST_ELEM(LO) \
+ SRIR_FLOW_TEST_ELEM(SFF) \
+ SRIR_FLOW_TEST_ELEM(LS) \
+ SRIR_FLOW_TEST_ELEM(HI) \
+ SRIR_FLOW_TEST_ELEM(SFT) \
+ SRIR_FLOW_TEST_ELEM(HS) \
+ SRIR_FLOW_TEST_ELEM(OFT) \
+ SRIR_FLOW_TEST_ELEM(CSM_TA) \
+ SRIR_FLOW_TEST_ELEM(CSM_TR) \
+ SRIR_FLOW_TEST_ELEM(CSM_MX) \
+ SRIR_FLOW_TEST_ELEM(FCSM_TA) \
+ SRIR_FLOW_TEST_ELEM(FCSM_TR) \
+ SRIR_FLOW_TEST_ELEM(FCSM_MX) \
+ SRIR_FLOW_TEST_ELEM(RLE) \
+ SRIR_FLOW_TEST_ELEM(RGT)
+#define SRIR_FLOW_TEST_ELEM(n) n,
+ SRIR_FLOW_TEST_LIST
+#undef SRIR_FLOW_TEST_ELEM
};
-[[nodiscard]] std::string NameOf(FlowTest flow_test);
+[[nodiscard]] inline std::string NameOf(FlowTest flow_test) {
+ switch (flow_test) {
+#define SRIR_FLOW_TEST_ELEM(n) case FlowTest::n: return #n;
+ SRIR_FLOW_TEST_LIST
+#undef SRIR_FLOW_TEST_ELEM
+ default:
+ return fmt::format("<invalid flow test {}>", int(flow_test));
+ }
+}
} // namespace Shader::IR