diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-04-20 07:33:54 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-20 12:33:54 +0200 |
| commit | 4770cfa920b606b1496ca9348c3dd69b476dbbbf (patch) | |
| tree | 864a33b60a4bf30239e26f720026f4988e72d220 /Ryujinx.Graphics.Gpu/Engine/Methods.cs | |
| parent | 89791ba68dba70999643c5d876e9329b385c6e8a (diff) | |
Only enable clip distance if written to on shader (#2217)
* Only enable clip distance if written to on shader
* Signal InstanceId use through FeatureFlags
* Shader cache version bump
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/Methods.cs')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/Methods.cs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs index 033311b2..ae9bdb0d 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs @@ -39,6 +39,7 @@ namespace Ryujinx.Graphics.Gpu.Engine private bool _isAnyVbInstanced; private bool _vsUsesInstanceId; + private byte _vsClipDistancesWritten; private bool _forceShaderUpdate; @@ -993,7 +994,15 @@ namespace Ryujinx.Graphics.Gpu.Engine ShaderBundle gs = ShaderCache.GetGraphicsShader(state, addresses); - _vsUsesInstanceId = gs.Shaders[0]?.Info.UsesInstanceId ?? false; + byte oldVsClipDistancesWritten = _vsClipDistancesWritten; + + _vsUsesInstanceId = gs.Shaders[0]?.Info.UsesInstanceId ?? false; + _vsClipDistancesWritten = gs.Shaders[0]?.Info.ClipDistancesWritten ?? 0; + + if (oldVsClipDistancesWritten != _vsClipDistancesWritten) + { + UpdateUserClipState(state); + } int storageBufferBindingsCount = 0; int uniformBufferBindingsCount = 0; @@ -1098,7 +1107,7 @@ namespace Ryujinx.Graphics.Gpu.Engine /// <param name="state">Current GPU state</param> private void UpdateUserClipState(GpuState state) { - int clipMask = state.Get<int>(MethodOffset.ClipDistanceEnable); + int clipMask = state.Get<int>(MethodOffset.ClipDistanceEnable) & _vsClipDistancesWritten; for (int i = 0; i < Constants.TotalClipDistances; ++i) { |
