Add depth range support on the GPU (#472)

* Add depth range support on the GPU

* Address PR feedback
This commit is contained in:
gdkchan 2018-10-23 16:04:08 -03:00 committed by GitHub
parent e674b37710
commit 044b84b078
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 20 deletions

View file

@ -43,6 +43,8 @@
public bool DepthTestEnabled; public bool DepthTestEnabled;
public bool DepthWriteEnabled; public bool DepthWriteEnabled;
public GalComparisonOp DepthFunc; public GalComparisonOp DepthFunc;
public float DepthRangeNear;
public float DepthRangeFar;
public bool StencilTestEnabled; public bool StencilTestEnabled;
public bool StencilTwoSideEnabled; public bool StencilTwoSideEnabled;

View file

@ -95,44 +95,46 @@ namespace Ryujinx.Graphics.Gal.OpenGL
FrontFace = GalFrontFace.CCW, FrontFace = GalFrontFace.CCW,
CullFaceEnabled = false, CullFaceEnabled = false,
CullFace = GalCullFace.Back, CullFace = GalCullFace.Back,
DepthTestEnabled = false, DepthTestEnabled = false,
DepthWriteEnabled = true, DepthWriteEnabled = true,
DepthFunc = GalComparisonOp.Less, DepthFunc = GalComparisonOp.Less,
DepthRangeNear = 0,
DepthRangeFar = 1,
StencilTestEnabled = false, StencilTestEnabled = false,
StencilBackFuncFunc = GalComparisonOp.Always, StencilBackFuncFunc = GalComparisonOp.Always,
StencilBackFuncRef = 0, StencilBackFuncRef = 0,
StencilBackFuncMask = UInt32.MaxValue, StencilBackFuncMask = UInt32.MaxValue,
StencilBackOpFail = GalStencilOp.Keep, StencilBackOpFail = GalStencilOp.Keep,
StencilBackOpZFail = GalStencilOp.Keep, StencilBackOpZFail = GalStencilOp.Keep,
StencilBackOpZPass = GalStencilOp.Keep, StencilBackOpZPass = GalStencilOp.Keep,
StencilBackMask = UInt32.MaxValue, StencilBackMask = UInt32.MaxValue,
StencilFrontFuncFunc = GalComparisonOp.Always, StencilFrontFuncFunc = GalComparisonOp.Always,
StencilFrontFuncRef = 0, StencilFrontFuncRef = 0,
StencilFrontFuncMask = UInt32.MaxValue, StencilFrontFuncMask = UInt32.MaxValue,
StencilFrontOpFail = GalStencilOp.Keep, StencilFrontOpFail = GalStencilOp.Keep,
StencilFrontOpZFail = GalStencilOp.Keep, StencilFrontOpZFail = GalStencilOp.Keep,
StencilFrontOpZPass = GalStencilOp.Keep, StencilFrontOpZPass = GalStencilOp.Keep,
StencilFrontMask = UInt32.MaxValue, StencilFrontMask = UInt32.MaxValue,
BlendEnabled = false, BlendEnabled = false,
BlendSeparateAlpha = false, BlendSeparateAlpha = false,
BlendEquationRgb = 0, BlendEquationRgb = 0,
BlendFuncSrcRgb = GalBlendFactor.One, BlendFuncSrcRgb = GalBlendFactor.One,
BlendFuncDstRgb = GalBlendFactor.Zero, BlendFuncDstRgb = GalBlendFactor.Zero,
BlendEquationAlpha = 0, BlendEquationAlpha = 0,
BlendFuncSrcAlpha = GalBlendFactor.One, BlendFuncSrcAlpha = GalBlendFactor.One,
BlendFuncDstAlpha = GalBlendFactor.Zero, BlendFuncDstAlpha = GalBlendFactor.Zero,
ColorMask = ColorMaskRgba.Default, ColorMask = ColorMaskRgba.Default,
PrimitiveRestartEnabled = false, PrimitiveRestartEnabled = false,
PrimitiveRestartIndex = 0 PrimitiveRestartIndex = 0
}; };
for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++) for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
@ -195,6 +197,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
} }
} }
if (New.DepthRangeNear != Old.DepthRangeNear ||
New.DepthRangeFar != Old.DepthRangeFar)
{
GL.DepthRange(New.DepthRangeNear, New.DepthRangeFar);
}
if (New.StencilTestEnabled != Old.StencilTestEnabled) if (New.StencilTestEnabled != Old.StencilTestEnabled)
{ {
Enable(EnableCap.StencilTest, New.StencilTestEnabled); Enable(EnableCap.StencilTest, New.StencilTestEnabled);

View file

@ -371,6 +371,9 @@ namespace Ryujinx.Graphics
{ {
State.DepthFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.DepthTestFunction); State.DepthFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.DepthTestFunction);
} }
State.DepthRangeNear = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNNear);
State.DepthRangeFar = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNFar);
} }
private void SetStencil(GalPipelineState State) private void SetStencil(GalPipelineState State)

View file

@ -15,6 +15,8 @@ namespace Ryujinx.Graphics
ViewportNTranslateZ = 0x285, ViewportNTranslateZ = 0x285,
ViewportNHoriz = 0x300, ViewportNHoriz = 0x300,
ViewportNVert = 0x301, ViewportNVert = 0x301,
DepthRangeNNear = 0x302,
DepthRangeNFar = 0x303,
VertexArrayFirst = 0x35d, VertexArrayFirst = 0x35d,
VertexArrayCount = 0x35e, VertexArrayCount = 0x35e,
ClearNColor = 0x360, ClearNColor = 0x360,