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

◆ execute_dispatch()

void MayaFlux::Buffers::ShaderProcessor::execute_dispatch ( const std::shared_ptr< VKBuffer > &  buffer)
private

Definition at line 513 of file ShaderProcessor.cpp.

514{
517 "Cannot dispatch without pipeline and descriptors");
518 return;
519 }
520
521 auto& foundry = Portal::Graphics::get_shader_foundry();
522 auto& compute_press = Portal::Graphics::get_compute_press();
523
524 auto cmd_id = foundry.begin_commands(Portal::Graphics::ShaderFoundry::CommandBufferType::COMPUTE);
525
526 m_last_command_buffer = cmd_id;
528
529 compute_press.bind_pipeline(cmd_id, m_pipeline_id);
530
531 compute_press.bind_descriptor_sets(cmd_id, m_pipeline_id, m_descriptor_set_ids);
532
533 if (!m_push_constant_data.empty()) {
534 compute_press.push_constants(
535 cmd_id,
538 m_push_constant_data.size());
539 }
540
541 on_before_dispatch(cmd_id, buffer);
542
543 auto dispatch_size = calculate_dispatch_size(buffer);
544 compute_press.dispatch(cmd_id, dispatch_size[0], dispatch_size[1], dispatch_size[2]);
545
546 on_after_dispatch(cmd_id, buffer);
547
548 foundry.buffer_barrier(
549 cmd_id,
550 buffer->get_buffer(),
551 vk::AccessFlagBits::eShaderWrite,
552 vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eTransferRead,
553 vk::PipelineStageFlagBits::eComputeShader,
554 vk::PipelineStageFlagBits::eComputeShader | vk::PipelineStageFlagBits::eTransfer);
555
556 foundry.submit_and_wait(cmd_id);
557}
#define MF_ERROR(comp, ctx,...)
Portal::Graphics::CommandBufferID m_last_command_buffer
virtual void on_before_dispatch(Portal::Graphics::CommandBufferID cmd_id, const std::shared_ptr< VKBuffer > &buffer)
Called before each dispatch.
std::vector< uint8_t > m_push_constant_data
Portal::Graphics::ComputePipelineID m_pipeline_id
virtual std::array< uint32_t, 3 > calculate_dispatch_size(const std::shared_ptr< VKBuffer > &buffer)
Calculate dispatch size from buffer.
std::shared_ptr< VKBuffer > m_last_processed_buffer
virtual void on_after_dispatch(Portal::Graphics::CommandBufferID cmd_id, const std::shared_ptr< VKBuffer > &buffer)
Called after each dispatch.
std::vector< Portal::Graphics::DescriptorSetID > m_descriptor_set_ids
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
MAYAFLUX_API ShaderFoundry & get_shader_foundry()
Get the global shader compiler instance.
constexpr ComputePipelineID INVALID_COMPUTE_PIPELINE
MAYAFLUX_API ComputePress & get_compute_press()

References MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, calculate_dispatch_size(), MayaFlux::Portal::Graphics::ShaderFoundry::COMPUTE, MayaFlux::Portal::Graphics::get_compute_press(), MayaFlux::Portal::Graphics::get_shader_foundry(), MayaFlux::Portal::Graphics::INVALID_COMPUTE_PIPELINE, m_descriptor_set_ids, m_last_command_buffer, m_last_processed_buffer, m_pipeline_id, m_push_constant_data, MF_ERROR, on_after_dispatch(), and on_before_dispatch().

Referenced by processing_function().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: