diff options
| author | Stenzek <stenzek@gmail.com> | 2016-09-28 23:04:02 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-10-01 02:40:03 +1000 |
| commit | 5f66cf5ed737186add9f1d93231cfa82636bb9fb (patch) | |
| tree | fdd060d4a8813e5afdd25f0f18c28917bbd2cd17 /Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp | |
| parent | bac8c2d44147395e31c4d5a2247be1b449139272 (diff) | |
Vulkan: Only submit init/upload command buffer when it has commands
This way we're not submitting empty buffers when it's unnecessary.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp b/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp index d3d84a3a04..537c21c514 100644 --- a/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp @@ -83,6 +83,7 @@ bool CommandBufferManager::CreateCommandBuffers() for (FrameResources& resources : m_frame_resources) { + resources.init_command_buffer_used = false; resources.needs_fence_wait = false; VkCommandBufferAllocateInfo allocate_info = { @@ -325,6 +326,13 @@ void CommandBufferManager::SubmitCommandBuffer(size_t index, VkSemaphore wait_se 0, nullptr}; + // If the init command buffer did not have any commands recorded, don't submit it. + if (!m_frame_resources[index].init_command_buffer_used) + { + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = &m_frame_resources[index].command_buffers[1]; + } + if (wait_semaphore != VK_NULL_HANDLE) { submit_info.pWaitSemaphores = &wait_semaphore; @@ -407,6 +415,7 @@ void CommandBufferManager::ActivateCommandBuffer() // Reset command buffer to beginning since we can re-use the memory now VkCommandBufferBeginInfo begin_info = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr}; + resources.init_command_buffer_used = false; for (VkCommandBuffer command_buffer : resources.command_buffers) { res = vkResetCommandBuffer(command_buffer, 0); |
