[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:
Philip Rebohle 2020-04-27 09:12:41 +02:00 committed by Philip Rebohle
parent ca59d8e74b
commit 2a25e3f899
2 changed files with 20 additions and 20 deletions

View File

@ -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();

View File

@ -1162,7 +1162,7 @@ namespace dxvk {
void updateFramebuffer();
void updateIndexBufferBinding();
bool updateIndexBufferBinding();
void updateVertexBufferBindings();
void updateTransformFeedbackBuffers();