diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index f436f3b3..d3424509 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -52,6 +52,7 @@ namespace dxvk { Rc DxvkContext::endRecording() { this->spillRenderPass(); + this->trackDrawBuffer(DxvkBufferSlice(), VK_NULL_HANDLE); m_queries.trackQueryPools(m_cmd); @@ -946,6 +947,8 @@ namespace dxvk { descriptor.buffer.buffer, descriptor.buffer.offset, count, stride); + + this->trackDrawBuffer(buffer, descriptor.buffer.buffer); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -984,6 +987,8 @@ namespace dxvk { descriptor.buffer.buffer, descriptor.buffer.offset, count, stride); + + this->trackDrawBuffer(buffer, descriptor.buffer.buffer); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -2833,5 +2838,17 @@ namespace dxvk { } } } + + + void DxvkContext::trackDrawBuffer( + const DxvkBufferSlice& buffer, + VkBuffer handle) { + if (m_lastIndirectDrawBuffer != handle) { + m_lastIndirectDrawBuffer = handle; + + if (handle != VK_NULL_HANDLE) + m_cmd->trackResource(buffer.resource()); + } + } } \ No newline at end of file diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index a46f3bb5..8c7b4672 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -703,6 +703,8 @@ namespace dxvk { VkDescriptorSet m_gpSet = VK_NULL_HANDLE; VkDescriptorSet m_cpSet = VK_NULL_HANDLE; + + VkBuffer m_lastIndirectDrawBuffer = VK_NULL_HANDLE; std::array m_rc; std::array m_descInfos; @@ -809,6 +811,10 @@ namespace dxvk { void commitComputeInitBarriers(); void commitComputePostBarriers(); + + void trackDrawBuffer( + const DxvkBufferSlice& buffer, + VkBuffer handle); };