From f4e9b76515e143851a51f7ade6133b4e17b4f1a5 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 19 Jun 2022 22:58:15 +0200 Subject: [PATCH] [dxvk] Add descriptor pool tracking to command list --- src/dxvk/dxvk_cmdlist.cpp | 5 +++++ src/dxvk/dxvk_cmdlist.h | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/dxvk/dxvk_cmdlist.cpp b/src/dxvk/dxvk_cmdlist.cpp index 09a851bef..169f8b442 100644 --- a/src/dxvk/dxvk_cmdlist.cpp +++ b/src/dxvk/dxvk_cmdlist.cpp @@ -186,6 +186,11 @@ namespace dxvk { // Less important stuff m_signalTracker.reset(); m_statCounters.reset(); + + for (const auto& descriptorPools : m_descriptorPools) + descriptorPools.second->recycleDescriptorPool(descriptorPools.first); + + m_descriptorPools.clear(); } diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 3dedf3f45..231635651 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -200,7 +200,7 @@ namespace dxvk { m_resources.notify(); m_signalTracker.notify(); } - + /** * \brief Resets the command list * @@ -763,6 +763,12 @@ namespace dxvk { m_vkd->device(), queryPool, queryId, 1); } + void trackDescriptorPool( + const Rc& pool, + const Rc& manager) { + m_descriptorPools.push_back({ pool, manager }); + } + private: DxvkDevice* m_device; @@ -789,6 +795,10 @@ namespace dxvk { DxvkBufferTracker m_bufferTracker; DxvkStatCounters m_statCounters; + std::vector, + Rc>> m_descriptorPools; + VkCommandBuffer getCmdBuffer(DxvkCmdBuffer cmdBuffer) const { if (cmdBuffer == DxvkCmdBuffer::ExecBuffer) return m_execBuffer; if (cmdBuffer == DxvkCmdBuffer::InitBuffer) return m_initBuffer;