mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2025-06-28 23:20:46 -07:00
Implement Logical Operation registers and functionality (#1380)
* Implement Logical Operation registers and functionality. * Address Feedback 1
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user