From 76fdec30ebef505d23c9d71df00ceb95947ee761 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 21 Oct 2018 19:56:39 -0300 Subject: [PATCH] Add depth range support on the GPU --- Ryujinx.Graphics/Gal/GalPipelineState.cs | 2 ++ Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs | 8 ++++++++ Ryujinx.Graphics/NvGpuEngine3d.cs | 3 +++ Ryujinx.Graphics/NvGpuEngine3dReg.cs | 2 ++ 4 files changed, 15 insertions(+) diff --git a/Ryujinx.Graphics/Gal/GalPipelineState.cs b/Ryujinx.Graphics/Gal/GalPipelineState.cs index 56b0fbde33..17f52dd6c4 100644 --- a/Ryujinx.Graphics/Gal/GalPipelineState.cs +++ b/Ryujinx.Graphics/Gal/GalPipelineState.cs @@ -43,6 +43,8 @@ public bool DepthTestEnabled; public bool DepthWriteEnabled; public GalComparisonOp DepthFunc; + public float DepthRangeNear; + public float DepthRangeFar; public bool StencilTestEnabled; public bool StencilTwoSideEnabled; diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs index 00699641fd..170a83c325 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs @@ -100,6 +100,8 @@ namespace Ryujinx.Graphics.Gal.OpenGL DepthTestEnabled = false, DepthWriteEnabled = true, DepthFunc = GalComparisonOp.Less, + DepthRangeNear = 0, + DepthRangeFar = 1, StencilTestEnabled = false, @@ -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) { Enable(EnableCap.StencilTest, New.StencilTestEnabled); diff --git a/Ryujinx.Graphics/NvGpuEngine3d.cs b/Ryujinx.Graphics/NvGpuEngine3d.cs index fd15d0b6a2..e8ded8898b 100644 --- a/Ryujinx.Graphics/NvGpuEngine3d.cs +++ b/Ryujinx.Graphics/NvGpuEngine3d.cs @@ -371,6 +371,9 @@ namespace Ryujinx.Graphics { State.DepthFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.DepthTestFunction); } + + State.DepthRangeNear = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNNear); + State.DepthRangeFar = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNFar); } private void SetStencil(GalPipelineState State) diff --git a/Ryujinx.Graphics/NvGpuEngine3dReg.cs b/Ryujinx.Graphics/NvGpuEngine3dReg.cs index ef74e4f675..6ea2265423 100644 --- a/Ryujinx.Graphics/NvGpuEngine3dReg.cs +++ b/Ryujinx.Graphics/NvGpuEngine3dReg.cs @@ -15,6 +15,8 @@ namespace Ryujinx.Graphics ViewportNTranslateZ = 0x285, ViewportNHoriz = 0x300, ViewportNVert = 0x301, + DepthRangeNNear = 0x302, + DepthRangeNFar = 0x303, VertexArrayFirst = 0x35d, VertexArrayCount = 0x35e, ClearNColor = 0x360,