Varying.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Ryujinx.Graphics.Shader.Translation;
  2. namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
  3. {
  4. public static class Varying
  5. {
  6. public static string GetName(int offset)
  7. {
  8. offset <<= 2;
  9. if (offset >= AttributeConsts.UserAttributeBase &&
  10. offset < AttributeConsts.UserAttributeEnd)
  11. {
  12. offset -= AttributeConsts.UserAttributeBase;
  13. string name = $"{ DefaultNames.OAttributePrefix}{(offset >> 4)}";
  14. name += "_" + "xyzw"[(offset >> 2) & 3];
  15. return name;
  16. }
  17. switch (offset)
  18. {
  19. case AttributeConsts.PositionX:
  20. case AttributeConsts.PositionY:
  21. case AttributeConsts.PositionZ:
  22. case AttributeConsts.PositionW:
  23. return "gl_Position";
  24. case AttributeConsts.PointSize:
  25. return "gl_PointSize";
  26. case AttributeConsts.ClipDistance0:
  27. return "gl_ClipDistance[0]";
  28. case AttributeConsts.ClipDistance1:
  29. return "gl_ClipDistance[1]";
  30. case AttributeConsts.ClipDistance2:
  31. return "gl_ClipDistance[2]";
  32. case AttributeConsts.ClipDistance3:
  33. return "gl_ClipDistance[3]";
  34. case AttributeConsts.ClipDistance4:
  35. return "gl_ClipDistance[4]";
  36. case AttributeConsts.ClipDistance5:
  37. return "gl_ClipDistance[5]";
  38. case AttributeConsts.ClipDistance6:
  39. return "gl_ClipDistance[6]";
  40. case AttributeConsts.ClipDistance7:
  41. return "gl_ClipDistance[7]";
  42. case AttributeConsts.VertexId:
  43. return "gl_VertexID";
  44. }
  45. return null;
  46. }
  47. public static int GetSize(int offset)
  48. {
  49. switch (offset << 2)
  50. {
  51. case AttributeConsts.PositionX:
  52. case AttributeConsts.PositionY:
  53. case AttributeConsts.PositionZ:
  54. case AttributeConsts.PositionW:
  55. return 4;
  56. }
  57. return 1;
  58. }
  59. }
  60. }