mirror of
https://github.com/AxioDL/boo.git
synced 2025-12-19 18:05:26 +00:00
More Vulkan fixes
This commit is contained in:
@@ -702,6 +702,7 @@ struct VulkanPool : IGraphicsBufferPool
|
||||
{
|
||||
VkDeviceMemory m_bufMem = VK_NULL_HANDLE;
|
||||
std::unique_ptr<class VulkanGraphicsBufferD> m_buffer;
|
||||
bool m_dead = false;
|
||||
Buffer(VkDeviceMemory mem, class VulkanGraphicsBufferD* buf)
|
||||
: m_bufMem(mem), m_buffer(buf) {}
|
||||
};
|
||||
@@ -714,6 +715,21 @@ struct VulkanPool : IGraphicsBufferPool
|
||||
if (buf.second.m_bufMem)
|
||||
vk::FreeMemory(m_ctx->m_dev, buf.second.m_bufMem, nullptr);
|
||||
}
|
||||
|
||||
void clearDeadBuffers()
|
||||
{
|
||||
for (auto it = m_DBufs.begin() ; it != m_DBufs.end() ;)
|
||||
{
|
||||
if (it->second.m_dead)
|
||||
{
|
||||
if (it->second.m_bufMem)
|
||||
vk::FreeMemory(m_ctx->m_dev, it->second.m_bufMem, nullptr);
|
||||
it = m_DBufs.erase(it);
|
||||
continue;
|
||||
}
|
||||
++it;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static const VkBufferUsageFlagBits USE_TABLE[] =
|
||||
@@ -3264,7 +3280,9 @@ IGraphicsBufferD* VulkanDataFactory::newPoolBuffer(IGraphicsBufferPool* p, Buffe
|
||||
void VulkanDataFactory::deletePoolBuffer(IGraphicsBufferPool* p, IGraphicsBufferD* buf)
|
||||
{
|
||||
VulkanPool* pool = static_cast<VulkanPool*>(p);
|
||||
pool->m_DBufs.erase(static_cast<VulkanGraphicsBufferD*>(buf));
|
||||
auto search = pool->m_DBufs.find(static_cast<VulkanGraphicsBufferD*>(buf));
|
||||
if (search != pool->m_DBufs.end())
|
||||
search->second.m_dead = true;
|
||||
}
|
||||
|
||||
GraphicsBufferPoolToken VulkanDataFactory::newBufferPool()
|
||||
@@ -3357,6 +3375,10 @@ void VulkanCommandQueue::execute()
|
||||
delete p;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
(*it)->clearDeadBuffers();
|
||||
}
|
||||
++it;
|
||||
}
|
||||
datalk.unlock();
|
||||
|
||||
Reference in New Issue
Block a user