diff options
| author | riperiperi <rhy3756547@hotmail.com> | 2020-07-10 18:23:15 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-10 14:23:15 -0300 |
| commit | f224769c493e80ab2bd9a674be697461749e0b94 (patch) | |
| tree | 7cf61d4b96a0ceaf87d7877be63a5b2abc2543df /Ryujinx.Graphics.OpenGL | |
| parent | 189c0c9c726b3a700272831cd5cf10b2fc817cc2 (diff) | |
Implement Logical Operation registers and functionality (#1380)
* Implement Logical Operation registers and functionality.
* Address Feedback 1
Diffstat (limited to 'Ryujinx.Graphics.OpenGL')
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/EnumConversion.cs | 43 | ||||
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/Pipeline.cs | 14 |
2 files changed, 57 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.OpenGL/EnumConversion.cs b/Ryujinx.Graphics.OpenGL/EnumConversion.cs index aebe54fa..a4bd39cc 100644 --- a/Ryujinx.Graphics.OpenGL/EnumConversion.cs +++ b/Ryujinx.Graphics.OpenGL/EnumConversion.cs @@ -443,5 +443,48 @@ namespace Ryujinx.Graphics.OpenGL return NvViewportSwizzle.ViewportSwizzlePositiveXNv; } + + public static All Convert(this LogicalOp op) + { + switch (op) + { + case LogicalOp.Clear: + return All.Clear; + case LogicalOp.And: + return All.And; + case LogicalOp.AndReverse: + return All.AndReverse; + case LogicalOp.Copy: + return All.Copy; + case LogicalOp.AndInverted: + return All.AndInverted; + case LogicalOp.Noop: + return All.Noop; + case LogicalOp.Xor: + return All.Xor; + case LogicalOp.Or: + return All.Or; + case LogicalOp.Nor: + return All.Nor; + case LogicalOp.Equiv: + return All.Equiv; + case LogicalOp.Invert: + return All.Invert; + case LogicalOp.OrReverse: + return All.OrReverse; + case LogicalOp.CopyInverted: + return All.CopyInverted; + case LogicalOp.OrInverted: + return All.OrInverted; + case LogicalOp.Nand: + return All.Nand; + case LogicalOp.Set: + return All.Set; + } + + Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(LogicalOp)} enum value: {op}."); + + return All.Never; + } } } diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs index 62e5394e..9623c826 100644 --- a/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -547,6 +547,20 @@ namespace Ryujinx.Graphics.OpenGL GL.Enable(IndexedEnableCap.Blend, index); } + public void SetLogicOpState(bool enable, LogicalOp op) + { + if (enable) + { + GL.Enable(EnableCap.ColorLogicOp); + + GL.LogicOp((LogicOp)op.Convert()); + } + else + { + GL.Disable(EnableCap.ColorLogicOp); + } + } + public void SetDepthBias(PolygonModeMask enables, float factor, float units, float clamp) { if ((enables & PolygonModeMask.Point) != 0) |
