|
|
@@ -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.
|
|
|
/// </summary>
|
|
|
- public void CommitGraphicsBindings()
|
|
|
+ /// <param name="indexed">True if the index buffer is in use</param>
|
|
|
+ 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;
|
|
|
+
|
|
|
+ if (_indexBuffer.Address != 0)
|
|
|
+ {
|
|
|
+ BufferRange buffer = bufferCache.GetBufferRange(_indexBuffer.Address, _indexBuffer.Size);
|
|
|
|
|
|
- _context.Renderer.Pipeline.SetIndexBuffer(buffer, _indexBuffer.Type);
|
|
|
+ _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;
|