diff --git a/framework/core/command_pool.h b/framework/core/command_pool.h index c072cc52a..962058675 100644 --- a/framework/core/command_pool.h +++ b/framework/core/command_pool.h @@ -68,7 +68,7 @@ class CommandPool : private vkb::core::CommandPoolBase uint32_t queue_family_index, vkb::rendering::RenderFrame *render_frame = nullptr, size_t thread_index = 0, - vkb::CommandBufferResetMode reset_mode = vkb::CommandBufferResetMode::ResetPool); + vkb::CommandBufferResetMode reset_mode = vkb::CommandBufferResetMode::ResetIndividually); CommandPool(CommandPool const &) = delete; CommandPool(CommandPool &&other) = default; CommandPool &operator=(CommandPool const &) = delete; diff --git a/samples/performance/multi_draw_indirect/multi_draw_indirect.cpp b/samples/performance/multi_draw_indirect/multi_draw_indirect.cpp index 147401e94..77989aa42 100644 --- a/samples/performance/multi_draw_indirect/multi_draw_indirect.cpp +++ b/samples/performance/multi_draw_indirect/multi_draw_indirect.cpp @@ -198,13 +198,13 @@ void MultiDrawIndirect::on_update_ui_overlay(vkb::Drawer &drawer) assert(!!indirect_call_buffer && !!cpu_staging_buffer && indirect_call_buffer->get_size() == cpu_staging_buffer->get_size()); assert(cpu_commands.size() * sizeof(cpu_commands[0]) == cpu_staging_buffer->get_size()); - auto cmd = get_device().get_command_pool().request_command_buffer(); - cmd->begin(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); - cmd->copy_buffer(*indirect_call_buffer, *cpu_staging_buffer, cpu_staging_buffer->get_size()); - cmd->end(); + ui_overlay_command_buffer->reset(vkb::CommandBufferResetMode::ResetIndividually); + ui_overlay_command_buffer->begin(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); + ui_overlay_command_buffer->copy_buffer(*indirect_call_buffer, *cpu_staging_buffer, cpu_staging_buffer->get_size()); + ui_overlay_command_buffer->end(); auto &queue = get_device().get_queue_by_flags(VK_QUEUE_COMPUTE_BIT, 0); - queue.submit(*cmd, get_device().get_fence_pool().request_fence()); + queue.submit(*ui_overlay_command_buffer, get_device().get_fence_pool().request_fence()); get_device().get_fence_pool().wait(); memcpy(cpu_commands.data(), cpu_staging_buffer->get_data(), cpu_staging_buffer->get_size()); @@ -278,6 +278,8 @@ bool MultiDrawIndirect::prepare(const vkb::ApplicationOptions &options) } } + ui_overlay_command_buffer = get_device().get_command_pool().request_command_buffer(); + create_samplers(); load_scene(); initialize_resources(); diff --git a/samples/performance/multi_draw_indirect/multi_draw_indirect.h b/samples/performance/multi_draw_indirect/multi_draw_indirect.h index 2639d482c..4ed143167 100644 --- a/samples/performance/multi_draw_indirect/multi_draw_indirect.h +++ b/samples/performance/multi_draw_indirect/multi_draw_indirect.h @@ -128,6 +128,8 @@ class MultiDrawIndirect : public ApiVulkanSample const vkb::Queue *compute_queue{nullptr}; std::vector queue_families; + std::shared_ptr ui_overlay_command_buffer; + // CPU Draw Calls void cpu_cull(); std::vector cpu_commands;