GalPipelineState.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. namespace Ryujinx.Graphics.Gal
  2. {
  3. public struct ColorMaskState
  4. {
  5. private static readonly ColorMaskState DefaultBackingField = new ColorMaskState()
  6. {
  7. Red = true,
  8. Green = true,
  9. Blue = true,
  10. Alpha = true
  11. };
  12. public static ColorMaskState Default => DefaultBackingField;
  13. public bool Red;
  14. public bool Green;
  15. public bool Blue;
  16. public bool Alpha;
  17. }
  18. public struct BlendState
  19. {
  20. private static readonly BlendState DefaultBackingField = new BlendState()
  21. {
  22. Enabled = false,
  23. SeparateAlpha = false,
  24. EquationRgb = GalBlendEquation.FuncAdd,
  25. FuncSrcRgb = GalBlendFactor.One,
  26. FuncDstRgb = GalBlendFactor.Zero,
  27. EquationAlpha = GalBlendEquation.FuncAdd,
  28. FuncSrcAlpha = GalBlendFactor.One,
  29. FuncDstAlpha = GalBlendFactor.Zero
  30. };
  31. public static BlendState Default => DefaultBackingField;
  32. public bool Enabled;
  33. public bool SeparateAlpha;
  34. public GalBlendEquation EquationRgb;
  35. public GalBlendFactor FuncSrcRgb;
  36. public GalBlendFactor FuncDstRgb;
  37. public GalBlendEquation EquationAlpha;
  38. public GalBlendFactor FuncSrcAlpha;
  39. public GalBlendFactor FuncDstAlpha;
  40. }
  41. public class GalPipelineState
  42. {
  43. public const int Stages = 5;
  44. public const int ConstBuffersPerStage = 18;
  45. public const int RenderTargetsCount = 8;
  46. public long[][] ConstBufferKeys;
  47. public GalVertexBinding[] VertexBindings;
  48. public bool FramebufferSrgb;
  49. public float FlipX;
  50. public float FlipY;
  51. public int Instance;
  52. public GalFrontFace FrontFace;
  53. public bool CullFaceEnabled;
  54. public GalCullFace CullFace;
  55. public bool DepthTestEnabled;
  56. public bool DepthWriteEnabled;
  57. public GalComparisonOp DepthFunc;
  58. public float DepthRangeNear;
  59. public float DepthRangeFar;
  60. public bool StencilTestEnabled;
  61. public bool StencilTwoSideEnabled;
  62. public GalComparisonOp StencilBackFuncFunc;
  63. public int StencilBackFuncRef;
  64. public uint StencilBackFuncMask;
  65. public GalStencilOp StencilBackOpFail;
  66. public GalStencilOp StencilBackOpZFail;
  67. public GalStencilOp StencilBackOpZPass;
  68. public uint StencilBackMask;
  69. public GalComparisonOp StencilFrontFuncFunc;
  70. public int StencilFrontFuncRef;
  71. public uint StencilFrontFuncMask;
  72. public GalStencilOp StencilFrontOpFail;
  73. public GalStencilOp StencilFrontOpZFail;
  74. public GalStencilOp StencilFrontOpZPass;
  75. public uint StencilFrontMask;
  76. public int ScissorTestCount;
  77. public bool[] ScissorTestEnabled;
  78. public int[] ScissorTestX;
  79. public int[] ScissorTestY;
  80. public int[] ScissorTestWidth;
  81. public int[] ScissorTestHeight;
  82. public bool BlendIndependent;
  83. public BlendState[] Blends;
  84. public bool ColorMaskCommon;
  85. public ColorMaskState[] ColorMasks;
  86. public bool PrimitiveRestartEnabled;
  87. public uint PrimitiveRestartIndex;
  88. public GalPipelineState()
  89. {
  90. ConstBufferKeys = new long[Stages][];
  91. for (int stage = 0; stage < Stages; stage++)
  92. {
  93. ConstBufferKeys[stage] = new long[ConstBuffersPerStage];
  94. }
  95. Blends = new BlendState[RenderTargetsCount];
  96. ScissorTestEnabled = new bool[RenderTargetsCount];
  97. ScissorTestY = new int[RenderTargetsCount];
  98. ScissorTestX = new int[RenderTargetsCount];
  99. ScissorTestWidth = new int[RenderTargetsCount];
  100. ScissorTestHeight = new int[RenderTargetsCount];
  101. ColorMasks = new ColorMaskState[RenderTargetsCount];
  102. }
  103. }
  104. }