diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs index 32fd8b73d..78912bcc5 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 4b93dd45f..16dad5c10 100644 --- a/Ryujinx.Graphics.Gpu/State/GpuState.cs +++ b/Ryujinx.Graphics.Gpu/State/GpuState.cs @@ -210,6 +210,17 @@ namespace Ryujinx.Graphics.Gpu.State _registers[(int)offset].Callback = callback; } + /// + /// Clear all registered callbacks. + /// + public void ClearCallbacks() + { + for (int index = 0; index < _registers.Length; index++) + { + _registers[index].Callback = null; + } + } + /// /// Checks if a given register has been modified since the last call to this method. ///