diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader/CodeGen/Glsl/Varying.cs')
-rw-r--r-- | Ryujinx.Graphics.Shader/CodeGen/Glsl/Varying.cs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Varying.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Varying.cs new file mode 100644 index 00000000..b9b2afb4 --- /dev/null +++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Varying.cs @@ -0,0 +1,69 @@ +using Ryujinx.Graphics.Shader.Translation; + +namespace Ryujinx.Graphics.Shader.CodeGen.Glsl +{ + public static class Varying + { + public static string GetName(int offset) + { + offset <<= 2; + + if (offset >= AttributeConsts.UserAttributeBase && + offset < AttributeConsts.UserAttributeEnd) + { + offset -= AttributeConsts.UserAttributeBase; + + string name = $"{ DefaultNames.OAttributePrefix}{(offset >> 4)}"; + + name += "_" + "xyzw"[(offset >> 2) & 3]; + + return name; + } + + switch (offset) + { + case AttributeConsts.PositionX: + case AttributeConsts.PositionY: + case AttributeConsts.PositionZ: + case AttributeConsts.PositionW: + return "gl_Position"; + case AttributeConsts.PointSize: + return "gl_PointSize"; + case AttributeConsts.ClipDistance0: + return "gl_ClipDistance[0]"; + case AttributeConsts.ClipDistance1: + return "gl_ClipDistance[1]"; + case AttributeConsts.ClipDistance2: + return "gl_ClipDistance[2]"; + case AttributeConsts.ClipDistance3: + return "gl_ClipDistance[3]"; + case AttributeConsts.ClipDistance4: + return "gl_ClipDistance[4]"; + case AttributeConsts.ClipDistance5: + return "gl_ClipDistance[5]"; + case AttributeConsts.ClipDistance6: + return "gl_ClipDistance[6]"; + case AttributeConsts.ClipDistance7: + return "gl_ClipDistance[7]"; + case AttributeConsts.VertexId: + return "gl_VertexID"; + } + + return null; + } + + public static int GetSize(int offset) + { + switch (offset << 2) + { + case AttributeConsts.PositionX: + case AttributeConsts.PositionY: + case AttributeConsts.PositionZ: + case AttributeConsts.PositionW: + return 4; + } + + return 1; + } + } +}
\ No newline at end of file |