diff options
author | Mary <me@thog.eu> | 2021-06-09 00:50:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-09 00:50:18 +0200 |
commit | 60cf3dfebc6bc573fb90a1b9645bca43da3d65f6 (patch) | |
tree | efefc404f8770751a240afb5e024536171df59ce | |
parent | 02e2e561ac136473d4d259d872dc5e211c6a3e67 (diff) |
Do not clear gpu subchannel state on BindChannel (#2348)
This fixes a regression caused by #980, that was causing a crash on New
Super Lucky's Tale.
As always, this need feedback on possible regression on any games.
Fix #2343.
-rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs | 2 | ||||
-rw-r--r-- | Ryujinx.Graphics.Gpu/State/GpuState.cs | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs index 32fd8b73..78912bcc 100644 --- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs +++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs @@ -140,7 +140,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo { if ((MethodOffset)meth.Method == MethodOffset.BindChannel) { - _subChannels[meth.SubChannel] = new GpuState(); + _subChannels[meth.SubChannel].ClearCallbacks(); _context.Methods.RegisterCallbacks(_subChannels[meth.SubChannel]); } diff --git a/Ryujinx.Graphics.Gpu/State/GpuState.cs b/Ryujinx.Graphics.Gpu/State/GpuState.cs index 4b93dd45..16dad5c1 100644 --- a/Ryujinx.Graphics.Gpu/State/GpuState.cs +++ b/Ryujinx.Graphics.Gpu/State/GpuState.cs @@ -211,6 +211,17 @@ namespace Ryujinx.Graphics.Gpu.State } /// <summary> + /// Clear all registered callbacks. + /// </summary> + public void ClearCallbacks() + { + for (int index = 0; index < _registers.Length; index++) + { + _registers[index].Callback = null; + } + } + + /// <summary> /// Checks if a given register has been modified since the last call to this method. /// </summary> /// <param name="offset">Register offset</param> |