diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Constants.cs | 5 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/Methods.cs | 19 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/State/MethodOffset.cs | 1 |
3 files changed, 25 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Gpu/Constants.cs b/Ryujinx.Graphics.Gpu/Constants.cs index 3175ebd2..1ae90273 100644 --- a/Ryujinx.Graphics.Gpu/Constants.cs +++ b/Ryujinx.Graphics.Gpu/Constants.cs @@ -54,5 +54,10 @@ namespace Ryujinx.Graphics.Gpu /// Maximum number of viewports. /// </summary> public const int TotalViewports = 16; + + /// <summary> + /// Maximum size of gl_ClipDistance array in shaders. + /// </summary> + public const int TotalClipDistances = 8; } }
\ No newline at end of file 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> diff --git a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs index 077b09c2..b39ff9b5 100644 --- a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs +++ b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs @@ -66,6 +66,7 @@ namespace Ryujinx.Graphics.Gpu.State YControl = 0x4eb, FirstVertex = 0x50d, FirstInstance = 0x50e, + ClipDistanceEnable = 0x544, PointSize = 0x546, ResetCounter = 0x54c, RtDepthStencilEnable = 0x54e, |
