[d3d11] Use bindVertexBufferRange whenever possible

This commit is contained in:
Philip Rebohle 2022-08-07 15:50:13 +02:00
parent 97f0d1dfb8
commit a74f8da7b7
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 36 additions and 7 deletions

View File

@ -1198,19 +1198,19 @@ namespace dxvk {
for (uint32_t i = 0; i < NumBuffers; i++) {
auto newBuffer = static_cast<D3D11Buffer*>(ppVertexBuffers[i]);
bool needsUpdate = m_state.ia.vertexBuffers[StartSlot + i].buffer != newBuffer;
if (needsUpdate)
if (m_state.ia.vertexBuffers[StartSlot + i].buffer != newBuffer) {
m_state.ia.vertexBuffers[StartSlot + i].buffer = newBuffer;
needsUpdate |= m_state.ia.vertexBuffers[StartSlot + i].offset != pOffsets[i]
|| m_state.ia.vertexBuffers[StartSlot + i].stride != pStrides[i];
if (needsUpdate) {
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]);
} else if (m_state.ia.vertexBuffers[StartSlot + i].offset != pOffsets[i]
|| m_state.ia.vertexBuffers[StartSlot + i].stride != pStrides[i]) {
m_state.ia.vertexBuffers[StartSlot + i].offset = pOffsets[i];
m_state.ia.vertexBuffers[StartSlot + i].stride = pStrides[i];
BindVertexBufferRange(StartSlot + i, newBuffer, pOffsets[i], pStrides[i]);
}
}
@ -3213,6 +3213,29 @@ namespace dxvk {
}
template<typename ContextType>
void D3D11CommonContext<ContextType>::BindVertexBufferRange(
UINT Slot,
D3D11Buffer* pBuffer,
UINT Offset,
UINT Stride) {
if (pBuffer) {
VkDeviceSize offset = Offset;
VkDeviceSize length = pBuffer->GetRemainingSize(Offset);
EmitCs([
cSlotId = Slot,
cBufferOffset = offset,
cBufferLength = length,
cStride = Stride
] (DxvkContext* ctx) mutable {
ctx->bindVertexBufferRange(cSlotId,
cBufferOffset, cBufferLength, cStride);
});
}
}
template<typename ContextType>
void D3D11CommonContext<ContextType>::BindIndexBuffer(
D3D11Buffer* pBuffer,

View File

@ -819,6 +819,12 @@ namespace dxvk {
UINT Offset,
UINT Stride);
void BindVertexBufferRange(
UINT Slot,
D3D11Buffer* pBuffer,
UINT Offset,
UINT Stride);
void BindIndexBuffer(
D3D11Buffer* pBuffer,
UINT Offset,