mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 10:54:16 +01:00
[dxvk] Skip draws if no index buffer is bound
It doesn't make much sense to bind the null buffer here, as we'd just draw the same vertex over and over again.
This commit is contained in:
parent
ca59d8e74b
commit
2a25e3f899
@ -4117,24 +4117,22 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::updateIndexBufferBinding() {
|
||||
m_flags.clr(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||
|
||||
if (m_state.vi.indexBuffer.defined()) {
|
||||
auto bufferInfo = m_state.vi.indexBuffer.getDescriptor();
|
||||
|
||||
m_cmd->cmdBindIndexBuffer(
|
||||
bufferInfo.buffer.buffer,
|
||||
bufferInfo.buffer.offset,
|
||||
m_state.vi.indexType);
|
||||
bool DxvkContext::updateIndexBufferBinding() {
|
||||
if (unlikely(!m_state.vi.indexBuffer.defined()))
|
||||
return false;
|
||||
|
||||
if (m_vbTracked.set(MaxNumVertexBindings))
|
||||
m_cmd->trackResource<DxvkAccess::Read>(m_state.vi.indexBuffer.buffer());
|
||||
} else {
|
||||
m_cmd->cmdBindIndexBuffer(
|
||||
m_common->dummyResources().bufferHandle(),
|
||||
0, VK_INDEX_TYPE_UINT32);
|
||||
}
|
||||
m_flags.clr(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||
auto bufferInfo = m_state.vi.indexBuffer.getDescriptor();
|
||||
|
||||
m_cmd->cmdBindIndexBuffer(
|
||||
bufferInfo.buffer.buffer,
|
||||
bufferInfo.buffer.offset,
|
||||
m_state.vi.indexType);
|
||||
|
||||
if (m_vbTracked.set(MaxNumVertexBindings))
|
||||
m_cmd->trackResource<DxvkAccess::Read>(m_state.vi.indexBuffer.buffer());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -4346,8 +4344,10 @@ namespace dxvk {
|
||||
if (!m_flags.test(DxvkContextFlag::GpRenderPassBound))
|
||||
this->startRenderPass();
|
||||
|
||||
if (m_flags.test(DxvkContextFlag::GpDirtyIndexBuffer) && Indexed)
|
||||
this->updateIndexBufferBinding();
|
||||
if (m_flags.test(DxvkContextFlag::GpDirtyIndexBuffer) && Indexed) {
|
||||
if (unlikely(!this->updateIndexBufferBinding()))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_flags.test(DxvkContextFlag::GpDirtyVertexBuffers))
|
||||
this->updateVertexBufferBindings();
|
||||
|
@ -1162,7 +1162,7 @@ namespace dxvk {
|
||||
|
||||
void updateFramebuffer();
|
||||
|
||||
void updateIndexBufferBinding();
|
||||
bool updateIndexBufferBinding();
|
||||
void updateVertexBufferBindings();
|
||||
|
||||
void updateTransformFeedbackBuffers();
|
||||
|
Loading…
x
Reference in New Issue
Block a user