mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-04 10:29:15 +01:00
[d3d11] Use bindVertexBufferRange whenever possible
This commit is contained in:
parent
97f0d1dfb8
commit
a74f8da7b7
@ -1198,19 +1198,19 @@ namespace dxvk {
|
|||||||
|
|
||||||
for (uint32_t i = 0; i < NumBuffers; i++) {
|
for (uint32_t i = 0; i < NumBuffers; i++) {
|
||||||
auto newBuffer = static_cast<D3D11Buffer*>(ppVertexBuffers[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;
|
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].offset = pOffsets[i];
|
||||||
m_state.ia.vertexBuffers[StartSlot + i].stride = pStrides[i];
|
m_state.ia.vertexBuffers[StartSlot + i].stride = pStrides[i];
|
||||||
|
|
||||||
BindVertexBuffer(StartSlot + i, newBuffer, pOffsets[i], 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>
|
template<typename ContextType>
|
||||||
void D3D11CommonContext<ContextType>::BindIndexBuffer(
|
void D3D11CommonContext<ContextType>::BindIndexBuffer(
|
||||||
D3D11Buffer* pBuffer,
|
D3D11Buffer* pBuffer,
|
||||||
|
@ -819,6 +819,12 @@ namespace dxvk {
|
|||||||
UINT Offset,
|
UINT Offset,
|
||||||
UINT Stride);
|
UINT Stride);
|
||||||
|
|
||||||
|
void BindVertexBufferRange(
|
||||||
|
UINT Slot,
|
||||||
|
D3D11Buffer* pBuffer,
|
||||||
|
UINT Offset,
|
||||||
|
UINT Stride);
|
||||||
|
|
||||||
void BindIndexBuffer(
|
void BindIndexBuffer(
|
||||||
D3D11Buffer* pBuffer,
|
D3D11Buffer* pBuffer,
|
||||||
UINT Offset,
|
UINT Offset,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user