Move clear values from VertexEndGl to ClearBuffers

This commit is contained in:
ReinUsesLisp 2018-08-09 14:03:50 -03:00
parent b3972745d5
commit 81f6120dfb
6 changed files with 31 additions and 21 deletions

View file

@ -28,11 +28,9 @@
public GalCullFace CullFace;
public bool DepthTestEnabled;
public float DepthClear;
public GalComparisonOp DepthFunc;
public bool StencilTestEnabled;
public int StencilClear;
public GalComparisonOp StencilBackFuncFunc;
public int StencilBackFuncRef;

View file

@ -7,7 +7,11 @@ namespace Ryujinx.Graphics.Gal
void LockCaches();
void UnlockCaches();
void ClearBuffers(GalClearBufferFlags Flags);
void ClearBuffers(
GalClearBufferFlags Flags,
float Red, float Green, float Blue, float Alpha,
float Depth,
int Stencil);
bool IsVboCached(long Key, long DataSize);

View file

@ -67,11 +67,9 @@ namespace Ryujinx.Graphics.Gal.OpenGL
CullFace = GalCullFace.Back,
DepthTestEnabled = false,
DepthClear = 1f,
DepthFunc = GalComparisonOp.Less,
StencilTestEnabled = false,
StencilClear = 0,
StencilBackFuncFunc = GalComparisonOp.Always,
StencilBackFuncRef = 0,
@ -142,11 +140,6 @@ namespace Ryujinx.Graphics.Gal.OpenGL
Enable(EnableCap.DepthTest, S.DepthTestEnabled);
}
if (S.DepthClear != O.DepthClear)
{
GL.ClearDepth(S.DepthClear);
}
if (S.DepthTestEnabled)
{
if (S.DepthFunc != O.DepthFunc)
@ -160,11 +153,6 @@ namespace Ryujinx.Graphics.Gal.OpenGL
Enable(EnableCap.StencilTest, S.StencilTestEnabled);
}
if (S.StencilClear != O.StencilClear)
{
GL.ClearStencil(S.StencilClear);
}
if (S.StencilTestEnabled)
{
if (S.StencilBackFuncFunc != O.StencilBackFuncFunc ||

View file

@ -43,7 +43,11 @@ namespace Ryujinx.Graphics.Gal.OpenGL
IboCache.Unlock();
}
public void ClearBuffers(GalClearBufferFlags Flags)
public void ClearBuffers(
GalClearBufferFlags Flags,
float Red, float Green, float Blue, float Alpha,
float Depth,
int Stencil)
{
ClearBufferMask Mask = ClearBufferMask.ColorBufferBit;
@ -63,6 +67,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
Mask |= ClearBufferMask.StencilBufferBit;
}
GL.ClearColor(Red, Green, Blue, Alpha);
GL.ClearDepth(Depth);
GL.ClearStencil(Stencil);
GL.Clear(Mask);
GL.ColorMask(true, true, true, true);

View file

@ -131,9 +131,22 @@ namespace Ryujinx.HLE.Gpu.Engines
GalClearBufferFlags Flags = (GalClearBufferFlags)(Arg0 & 0x3f);
float Red = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 0);
float Green = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 1);
float Blue = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 2);
float Alpha = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 3);
float Depth = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);
int Stencil = ReadRegister(NvGpuEngine3dReg.ClearStencil);
SetFrameBuffer(Vmm, FbIndex);
Gpu.Renderer.Rasterizer.ClearBuffers(Flags);
Gpu.Renderer.Rasterizer.ClearBuffers(
Flags,
Red, Green, Blue, Alpha,
Depth,
Stencil);
}
private void SetFrameBuffer(NvGpuVmm Vmm, int FbIndex)
@ -287,8 +300,6 @@ namespace Ryujinx.HLE.Gpu.Engines
{
State.DepthTestEnabled = (ReadRegister(NvGpuEngine3dReg.DepthTestEnable) & 1) != 0;
State.DepthClear = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);
if (State.DepthTestEnabled)
{
State.DepthFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.DepthTestFunction);
@ -298,8 +309,6 @@ namespace Ryujinx.HLE.Gpu.Engines
private void SetStencil(GalPipelineState State)
{
State.StencilTestEnabled = (ReadRegister(NvGpuEngine3dReg.StencilEnable) & 1) != 0;
State.StencilClear = ReadRegister(NvGpuEngine3dReg.ClearStencil);
if (State.StencilTestEnabled)
{

View file

@ -16,6 +16,7 @@ namespace Ryujinx.HLE.Gpu.Engines
ViewportNVert = 0x301,
VertexArrayFirst = 0x35d,
VertexArrayCount = 0x35e,
ClearNColor = 0x360,
ClearDepth = 0x364,
ClearStencil = 0x368,
StencilBackFuncRef = 0x3d5,