aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/Methods.cs
diff options
context:
space:
mode:
authormageven <62494521+mageven@users.noreply.github.com>2020-04-17 06:46:49 +0530
committerGitHub <noreply@github.com>2020-04-17 11:16:49 +1000
commit4960ab85f81f48553b7217261f4181e31d812a10 (patch)
tree765970f8b028fa965abef43bda308964deaff32d /Ryujinx.Graphics.Gpu/Engine/Methods.cs
parent0a7c6caedffd59011077b49cd6493c7a841a66f5 (diff)
Implement Depth Clamping (#1120)
* Implement Depth Clamping and add misc enums * Fix formatting
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/Methods.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Engine/Methods.cs23
1 files changed, 20 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
index 50913801..b7f4e1d9 100644
--- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
@@ -127,6 +127,11 @@ namespace Ryujinx.Graphics.Gpu.Engine
UpdateScissorState(state);
}
+ if (state.QueryModified(MethodOffset.ViewVolumeClipControl))
+ {
+ UpdateDepthClampState(state);
+ }
+
if (state.QueryModified(MethodOffset.DepthTestEnable,
MethodOffset.DepthWriteEnable,
MethodOffset.DepthTestFunc))
@@ -134,7 +139,9 @@ namespace Ryujinx.Graphics.Gpu.Engine
UpdateDepthTestState(state);
}
- if (state.QueryModified(MethodOffset.DepthMode, MethodOffset.ViewportTransform, MethodOffset.ViewportExtents))
+ if (state.QueryModified(MethodOffset.DepthMode,
+ MethodOffset.ViewportTransform,
+ MethodOffset.ViewportExtents))
{
UpdateViewportTransform(state);
}
@@ -363,6 +370,17 @@ namespace Ryujinx.Graphics.Gpu.Engine
}
/// <summary>
+ /// Updates host depth clamp state based on current GPU state.
+ /// </summary>
+ /// <param name="state">Current GPU state</param>
+ private void UpdateDepthClampState(GpuState state)
+ {
+ ViewVolumeClipControl clip = state.Get<ViewVolumeClipControl>(MethodOffset.ViewVolumeClipControl);
+ _context.Renderer.Pipeline.SetDepthClamp((clip & ViewVolumeClipControl.DepthClampNear) != 0,
+ (clip & ViewVolumeClipControl.DepthClampFar) != 0);
+ }
+
+ /// <summary>
/// Updates host depth test state based on current GPU state.
/// </summary>
/// <param name="state">Current GPU state</param>
@@ -384,8 +402,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
_context.Renderer.Pipeline.SetDepthMode(depthMode);
- bool flipY = (state.Get<int>(MethodOffset.YControl) & 1) != 0;
-
+ bool flipY = (state.Get<YControl>(MethodOffset.YControl) & YControl.NegateY) != 0;
float yFlip = flipY ? -1 : 1;
Viewport[] viewports = new Viewport[Constants.TotalViewports];