MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ submit_and_wait()

void MayaFlux::Portal::Graphics::ShaderFoundry::submit_and_wait ( CommandBufferID  cmd_id)

Submit command buffer and wait for completion.

Parameters
cmd_idCommand buffer ID to submit

Definition at line 1046 of file ShaderFoundry.cpp.

1047{
1048 auto it = m_command_buffers.find(cmd_id);
1049 if (it == m_command_buffers.end() || !it->second.is_active) {
1050 return;
1051 }
1052
1053 auto& cmd_manager = m_backend->get_command_manager();
1054
1055 it->second.cmd.end();
1056
1057 vk::SubmitInfo submit_info;
1058 submit_info.commandBufferCount = 1;
1059 submit_info.pCommandBuffers = &it->second.cmd;
1060
1061 vk::Queue queue;
1062 switch (it->second.type) {
1064 queue = m_graphics_queue;
1065 break;
1067 queue = m_compute_queue;
1068 break;
1070 queue = m_transfer_queue;
1071 break;
1072 }
1073
1074 if (queue.submit(1, &submit_info, nullptr) != vk::Result::eSuccess) {
1076 "Failed to submit command buffer");
1077 return;
1078 }
1079 queue.waitIdle();
1080
1081 if (it->second.timestamp_pool) {
1082 for (const auto& query : it->second.timestamp_queries) {
1083 m_finished_timestamps.push({ cmd_id, resolve_timestamp(it->second, query.first, false) });
1084 }
1085
1086 get_device().destroyQueryPool(it->second.timestamp_pool);
1087 it->second.timestamp_pool = nullptr;
1088 }
1089
1090 cmd_manager.free_command_buffer(it->second.cmd);
1091
1092 it->second.is_active = false;
1093 m_command_buffers.erase(it);
1094}
#define MF_ERROR(comp, ctx,...)
TimestampResult resolve_timestamp(const CommandBufferState &state, const std::string &label, bool wait)
vk::Device get_device() const
Get logical device handle.
Memory::HistoryBuffer< FinishedTimestamp > m_finished_timestamps
std::unordered_map< CommandBufferID, CommandBufferState > m_command_buffers
std::shared_ptr< Core::VulkanBackend > m_backend
@ ShaderCompilation
Shader compilation tasks (Portal::Graphics::ShaderCompiler)
@ Portal
High-level user-facing API layer.

References COMPUTE, get_device(), GRAPHICS, m_backend, m_command_buffers, m_compute_queue, m_finished_timestamps, m_graphics_queue, m_transfer_queue, MF_ERROR, MayaFlux::Journal::Portal, resolve_timestamp(), MayaFlux::Journal::ShaderCompilation, and TRANSFER.

+ Here is the call graph for this function: