diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/Methods.cs')
-rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/Methods.cs | 19 |
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> |