From 58d838b915000373d3e8342b1f1fb73a3a334c91 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 3 Jun 2019 00:18:54 +0200 Subject: [PATCH] [d3d11] Avoid emitting redundant vertex and index buffer updates --- src/d3d11/d3d11_context.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index d10e0eed..d4ce90e1 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -1588,11 +1588,15 @@ namespace dxvk { for (uint32_t i = 0; i < NumBuffers; i++) { auto newBuffer = static_cast(ppVertexBuffers[i]); - m_state.ia.vertexBuffers[StartSlot + i].buffer = newBuffer; - m_state.ia.vertexBuffers[StartSlot + i].offset = pOffsets[i]; - m_state.ia.vertexBuffers[StartSlot + i].stride = pStrides[i]; - - BindVertexBuffer(StartSlot + i, newBuffer, pOffsets[i], pStrides[i]); + if (m_state.ia.vertexBuffers[StartSlot + i].buffer != newBuffer + || m_state.ia.vertexBuffers[StartSlot + i].offset != pOffsets[i] + || m_state.ia.vertexBuffers[StartSlot + i].stride != pStrides[i]) { + m_state.ia.vertexBuffers[StartSlot + i].buffer = newBuffer; + m_state.ia.vertexBuffers[StartSlot + i].offset = pOffsets[i]; + m_state.ia.vertexBuffers[StartSlot + i].stride = pStrides[i]; + + BindVertexBuffer(StartSlot + i, newBuffer, pOffsets[i], pStrides[i]); + } } } @@ -1605,11 +1609,15 @@ namespace dxvk { auto newBuffer = static_cast(pIndexBuffer); - m_state.ia.indexBuffer.buffer = newBuffer; - m_state.ia.indexBuffer.offset = Offset; - m_state.ia.indexBuffer.format = Format; - - BindIndexBuffer(newBuffer, Offset, Format); + if (m_state.ia.indexBuffer.buffer != newBuffer + || m_state.ia.indexBuffer.offset != Offset + || m_state.ia.indexBuffer.format != Format) { + m_state.ia.indexBuffer.buffer = newBuffer; + m_state.ia.indexBuffer.offset = Offset; + m_state.ia.indexBuffer.format = Format; + + BindIndexBuffer(newBuffer, Offset, Format); + } }