diff --git a/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs b/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs index 9e888f50..13b332f4 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs @@ -253,14 +253,19 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Indicates that any storage buffer use is unaligned. /// /// The new value - public void SetHasUnalignedStorageBuffer(bool value) + /// True if the unaligned state changed, false otherwise + public bool SetHasUnalignedStorageBuffer(bool value) { if (value != _graphics.HasUnalignedStorageBuffer) { _graphics.HasUnalignedStorageBuffer = value; Signal(); + + return true; } + + return false; } /// diff --git a/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs index b611f4e7..572f7fb0 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs @@ -304,14 +304,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void CommitBindings() { - var buffers = _channel.BufferManager; - var hasUnaligned = buffers.HasUnalignedStorageBuffers; - UpdateStorageBuffers(); - if (!_channel.TextureManager.CommitGraphicsBindings(_shaderSpecState) || (buffers.HasUnalignedStorageBuffers != hasUnaligned)) + bool unalignedChanged = _currentSpecState.SetHasUnalignedStorageBuffer(_channel.BufferManager.HasUnalignedStorageBuffers); + + if (!_channel.TextureManager.CommitGraphicsBindings(_shaderSpecState) || unalignedChanged) { - _currentSpecState.SetHasUnalignedStorageBuffer(buffers.HasUnalignedStorageBuffers); // Shader must be reloaded. _vtgWritesRtLayer should not change. UpdateShaderState(); }