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

◆ submit_async()

FenceID MayaFlux::Portal::Graphics::ShaderFoundry::submit_async ( CommandBufferID  cmd_id)

Submit command buffer asynchronously, returning a fence.

Parameters
cmd_idCommand buffer ID to submit
Returns
Fence ID to wait on later

Definition at line 1096 of file ShaderFoundry.cpp.

1097{
1098 auto cmd_it = m_command_buffers.find(cmd_id);
1099 if (cmd_it == m_command_buffers.end() || !cmd_it->second.is_active) {
1100 return INVALID_FENCE;
1101 }
1102
1103 cmd_it->second.cmd.end();
1104
1105 FenceID fence_id = m_next_fence_id++;
1106
1107 vk::FenceCreateInfo fence_info;
1108 FenceState& fence_state = m_fences[fence_id];
1109 fence_state.fence = get_device().createFence(fence_info);
1110 fence_state.signaled = false;
1111 fence_state.cmd_id = cmd_id;
1112
1113 vk::SubmitInfo submit_info;
1114 submit_info.commandBufferCount = 1;
1115 submit_info.pCommandBuffers = &cmd_it->second.cmd;
1116
1117 vk::Queue queue;
1118 switch (cmd_it->second.type) {
1120 queue = m_graphics_queue;
1121 break;
1123 queue = m_compute_queue;
1124 break;
1126 queue = m_transfer_queue;
1127 break;
1128 }
1129
1130 if (queue.submit(1, &submit_info, fence_state.fence) != vk::Result::eSuccess) {
1132 "Failed to submit command buffer");
1133 return INVALID_FENCE;
1134 }
1135
1136 cmd_it->second.is_active = false;
1137
1138 return fence_id;
1139}
#define MF_ERROR(comp, ctx,...)
vk::Device get_device() const
Get logical device handle.
std::unordered_map< FenceID, FenceState > m_fences
std::unordered_map< CommandBufferID, CommandBufferState > m_command_buffers
@ ShaderCompilation
Shader compilation tasks (Portal::Graphics::ShaderCompiler)
@ Portal
High-level user-facing API layer.
constexpr FenceID INVALID_FENCE

References MayaFlux::Portal::Graphics::ShaderFoundry::FenceState::cmd_id, COMPUTE, MayaFlux::Portal::Graphics::ShaderFoundry::FenceState::fence, get_device(), GRAPHICS, MayaFlux::Portal::Graphics::INVALID_FENCE, m_command_buffers, m_compute_queue, m_fences, m_graphics_queue, m_next_fence_id, m_transfer_queue, MF_ERROR, MayaFlux::Journal::Portal, MayaFlux::Journal::ShaderCompilation, MayaFlux::Portal::Graphics::ShaderFoundry::FenceState::signaled, and TRANSFER.

+ Here is the call graph for this function: