lots of updates
This commit is contained in:
@@ -26,6 +26,7 @@ public:
|
||||
virtual void Reset() override;
|
||||
virtual void Submit( int iFrameIndex ) override;
|
||||
virtual void Render() override;
|
||||
void FreeWithCommands();
|
||||
private:
|
||||
void SortDependencies();
|
||||
void TryBarrier( int iCurrent, int iCurrentBuffer );
|
||||
@@ -40,9 +41,23 @@ private:
|
||||
|
||||
VkDevice m_hDevice;
|
||||
IVkCommandBufferManager *m_pMgr;
|
||||
VkCommandPool m_hPool;
|
||||
VkCommandPool m_hPool = NULL;
|
||||
};
|
||||
|
||||
void CVkCommandBuffer::FreeWithCommands()
|
||||
{
|
||||
if (m_hPool)
|
||||
{
|
||||
for ( auto &c: m_commands)
|
||||
{
|
||||
delete c;
|
||||
};
|
||||
vkFreeCommandBuffers(m_hDevice, m_hPool, m_hBuffers.GetSize(), m_hBuffers.GetData());
|
||||
vkDestroyCommandPool(m_hDevice, m_hPool, NULL);
|
||||
m_hPool = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void CVkCommandBuffer::SetVulkanHandlers( VkDevice hDevice, IVkCommandBufferManager *pManager )
|
||||
{
|
||||
m_hDevice = hDevice;
|
||||
@@ -54,6 +69,8 @@ void CVkCommandBuffer::Reset()
|
||||
VkCommandBufferAllocateInfo commandBufferAllocInfo = {};
|
||||
VkCommandPoolCreateInfo stCreateInfo = {};
|
||||
|
||||
FreeWithCommands();
|
||||
|
||||
stCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
stCreateInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
|
||||
vkCreateCommandPool(m_hDevice, &stCreateInfo, NULL, &m_hPool);
|
||||
@@ -343,6 +360,7 @@ public:
|
||||
virtual IVkCommandBuffer *CreateCommandBuffer() override;
|
||||
virtual CVkCommand *CreateCommand( const char *szName ) override;
|
||||
virtual CUtlVector<VkCommandBuffer> &GetVulkanCommands() override;
|
||||
virtual void FreeCommandBufferWithCommands(IVkCommandBuffer* pCommandBuffer) override;
|
||||
virtual void RenderingFinished() override;
|
||||
private:
|
||||
|
||||
@@ -399,6 +417,12 @@ CUtlVector<VkCommandBuffer> &CVkCommandBufferManager::GetVulkanCommands()
|
||||
{
|
||||
return m_commands;
|
||||
}
|
||||
void CVkCommandBufferManager::FreeCommandBufferWithCommands(IVkCommandBuffer* pCommandBuffer)
|
||||
{
|
||||
CVkCommandBuffer *pVkBuffer = (CVkCommandBuffer*)pCommandBuffer;
|
||||
pVkBuffer->FreeWithCommands();
|
||||
delete pVkBuffer;
|
||||
};
|
||||
|
||||
void CVkCommandBufferManager::RenderingFinished()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user