aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/Methods.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/Methods.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Engine/Methods.cs19
1 files changed, 19 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
index a517ae05..59678be5 100644
--- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
@@ -125,6 +125,11 @@ namespace Ryujinx.Graphics.Gpu.Engine
UpdateShaderState(state);
}
+ if (state.QueryModified(MethodOffset.ClipDistanceEnable))
+ {
+ UpdateUserClipState(state);
+ }
+
if (state.QueryModified(MethodOffset.RasterizeEnable))
{
UpdateRasterizerState(state);
@@ -903,6 +908,20 @@ namespace Ryujinx.Graphics.Gpu.Engine
}
/// <summary>
+ /// Updates user-defined clipping based on the guest GPU state.
+ /// </summary>
+ /// <param name="state">Current GPU state</param>
+ private void UpdateUserClipState(GpuState state)
+ {
+ int clipMask = state.Get<int>(MethodOffset.ClipDistanceEnable);
+
+ for (int i = 0; i < Constants.TotalClipDistances; ++i)
+ {
+ _context.Renderer.Pipeline.SetUserClipDistance(i, (clipMask & (1 << i)) != 0);
+ }
+ }
+
+ /// <summary>
/// Gets texture target from a sampler type.
/// </summary>
/// <param name="type">Sampler type</param>