More Vulkan fixes

This commit is contained in:
Jack Andersen
2017-02-15 18:47:31 -10:00
parent 3197142d1f
commit 71593afe50
3 changed files with 50 additions and 12 deletions

View File

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