From b0d9ec8a8202039b21fb799707c8d26f37c4fbfd Mon Sep 17 00:00:00 2001 From: gdkchan Date: Fri, 3 Jul 2020 19:30:41 -0300 Subject: [PATCH] Fix compute restore of previous shader state (#1352) --- Ryujinx.Graphics.Gpu/Engine/Compute.cs | 2 +- Ryujinx.Graphics.Gpu/Engine/Methods.cs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Ryujinx.Graphics.Gpu/Engine/Compute.cs b/Ryujinx.Graphics.Gpu/Engine/Compute.cs index 9f0034eb1..4d18f4d3f 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Compute.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Compute.cs @@ -163,7 +163,7 @@ namespace Ryujinx.Graphics.Gpu.Engine qmd.CtaRasterHeight, qmd.CtaRasterDepth); - UpdateShaderState(state); + _forceShaderUpdate = true; } } } \ No newline at end of file diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs index 5957bb624..fc933131f 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs @@ -38,6 +38,8 @@ namespace Ryujinx.Graphics.Gpu.Engine private bool _isAnyVbInstanced; private bool _vsUsesInstanceId; + private bool _forceShaderUpdate; + /// /// Creates a new instance of the GPU methods class. /// @@ -121,8 +123,10 @@ namespace Ryujinx.Graphics.Gpu.Engine // Shaders must be the first one to be updated if modified, because // some of the other state depends on information from the currently // bound shaders. - if (state.QueryModified(MethodOffset.ShaderBaseAddress, MethodOffset.ShaderState)) + if (state.QueryModified(MethodOffset.ShaderBaseAddress, MethodOffset.ShaderState) || _forceShaderUpdate) { + _forceShaderUpdate = false; + UpdateShaderState(state); }