diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs
index c0c2d5b301..b08e7f2603 100644
--- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs
+++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs
@@ -331,7 +331,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
UpdateShaderState();
}
- _channel.BufferManager.CommitGraphicsBindings();
+ _channel.BufferManager.CommitGraphicsBindings(_drawState.DrawIndexed);
}
///
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
index 10224a6d48..c656b0f64e 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
@@ -515,24 +515,32 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// Ensures that the graphics engine bindings are visible to the host GPU.
/// Note: this actually performs the binding using the host graphics API.
///
- public void CommitGraphicsBindings()
+ /// True if the index buffer is in use
+ public void CommitGraphicsBindings(bool indexed)
{
var bufferCache = _channel.MemoryManager.Physical.BufferCache;
- if (_indexBufferDirty || _rebind)
+ if (indexed)
{
- _indexBufferDirty = false;
-
- if (_indexBuffer.Address != 0)
+ if (_indexBufferDirty || _rebind)
{
- BufferRange buffer = bufferCache.GetBufferRange(_indexBuffer.Address, _indexBuffer.Size);
+ _indexBufferDirty = false;
- _context.Renderer.Pipeline.SetIndexBuffer(buffer, _indexBuffer.Type);
+ if (_indexBuffer.Address != 0)
+ {
+ BufferRange buffer = bufferCache.GetBufferRange(_indexBuffer.Address, _indexBuffer.Size);
+
+ _context.Renderer.Pipeline.SetIndexBuffer(buffer, _indexBuffer.Type);
+ }
+ }
+ else if (_indexBuffer.Address != 0)
+ {
+ bufferCache.SynchronizeBufferRange(_indexBuffer.Address, _indexBuffer.Size);
}
}
- else if (_indexBuffer.Address != 0)
+ else if (_rebind)
{
- bufferCache.SynchronizeBufferRange(_indexBuffer.Address, _indexBuffer.Size);
+ _indexBufferDirty = true;
}
uint vbEnableMask = _vertexBuffersEnableMask;