summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-09-28 23:04:02 +1000
committerStenzek <stenzek@gmail.com>2016-10-01 02:40:03 +1000
commit5f66cf5ed737186add9f1d93231cfa82636bb9fb (patch)
treefdd060d4a8813e5afdd25f0f18c28917bbd2cd17 /Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp
parentbac8c2d44147395e31c4d5a2247be1b449139272 (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.cpp9
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);