diff options
| author | shuffle2 <godisgovernment@gmail.com> | 2016-10-04 01:47:59 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-10-04 01:47:59 -0700 |
| commit | ea33405febf183058bb30a22f4f627fed4bb8e17 (patch) | |
| tree | 6222aceb31b2d6d922a8b3e45331b42fa1abba2d /Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp | |
| parent | 037f0a1803c274ce7e9f97ff9b7baed2955b9004 (diff) | |
| parent | 28e5fa8d261cd486e9339a66d91b4713e83d9a14 (diff) | |
Merge pull request #4270 from stenzek/vulkan-defer-fix
Vulkan: Miscellaneous minor fixes
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp b/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp index 537c21c514..202c3f6777 100644 --- a/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp @@ -73,7 +73,7 @@ void CommandBufferManager::DestroyCommandPool() if (m_command_pool) { vkDestroyCommandPool(g_vulkan_context->GetDevice(), m_command_pool, nullptr); - m_command_pool = nullptr; + m_command_pool = VK_NULL_HANDLE; } } @@ -141,8 +141,8 @@ void CommandBufferManager::DestroyCommandBuffers() for (FrameResources& resources : m_frame_resources) { - for (const auto& it : resources.cleanup_resources) - it.destroy_callback(device, it.object); + for (auto& it : resources.cleanup_resources) + it(); resources.cleanup_resources.clear(); if (resources.fence != VK_NULL_HANDLE) @@ -385,8 +385,8 @@ void CommandBufferManager::OnCommandBufferExecuted(size_t index) iter.second.second(resources.fence); // Clean up all objects pending destruction on this command buffer - for (const auto& it : resources.cleanup_resources) - it.destroy_callback(g_vulkan_context->GetDevice(), it.object); + for (auto& it : resources.cleanup_resources) + it(); resources.cleanup_resources.clear(); } @@ -446,6 +446,48 @@ void CommandBufferManager::ExecuteCommandBuffer(bool submit_off_thread, bool wai WaitForFence(pending_fence); } +void CommandBufferManager::DeferBufferDestruction(VkBuffer object) +{ + FrameResources& resources = m_frame_resources[m_current_frame]; + resources.cleanup_resources.push_back( + [object]() { vkDestroyBuffer(g_vulkan_context->GetDevice(), object, nullptr); }); +} + +void CommandBufferManager::DeferBufferViewDestruction(VkBufferView object) +{ + FrameResources& resources = m_frame_resources[m_current_frame]; + resources.cleanup_resources.push_back( + [object]() { vkDestroyBufferView(g_vulkan_context->GetDevice(), object, nullptr); }); +} + +void CommandBufferManager::DeferDeviceMemoryDestruction(VkDeviceMemory object) +{ + FrameResources& resources = m_frame_resources[m_current_frame]; + resources.cleanup_resources.push_back( + [object]() { vkFreeMemory(g_vulkan_context->GetDevice(), object, nullptr); }); +} + +void CommandBufferManager::DeferFramebufferDestruction(VkFramebuffer object) +{ + FrameResources& resources = m_frame_resources[m_current_frame]; + resources.cleanup_resources.push_back( + [object]() { vkDestroyFramebuffer(g_vulkan_context->GetDevice(), object, nullptr); }); +} + +void CommandBufferManager::DeferImageDestruction(VkImage object) +{ + FrameResources& resources = m_frame_resources[m_current_frame]; + resources.cleanup_resources.push_back( + [object]() { vkDestroyImage(g_vulkan_context->GetDevice(), object, nullptr); }); +} + +void CommandBufferManager::DeferImageViewDestruction(VkImageView object) +{ + FrameResources& resources = m_frame_resources[m_current_frame]; + resources.cleanup_resources.push_back( + [object]() { vkDestroyImageView(g_vulkan_context->GetDevice(), object, nullptr); }); +} + void CommandBufferManager::AddFencePointCallback( const void* key, const CommandBufferQueuedCallback& queued_callback, const CommandBufferExecutedCallback& executed_callback) |
