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

◆ execute()

template<ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
virtual output_type MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType >::execute ( const input_type input,
const ExecutionContext ctx 
)
inlinevirtual

Dispatch to GPU and reconstruct a typed output Datum.

Routes to dispatch_core_chained for CHAINED mode; all other modes use dispatch_core. Both paths are defined in GpuDispatchCore.cpp.

Parameters
inputInput Datum to process.
ctxExecutionContext; CHAINED mode requires ChainedParams, CHAINED_INDIRECT requires ChainedIndirectParams, DEPENDENCY requires DependencyParams in parameters.
Exceptions
std::runtime_errorIf GPU initialisation fails.

Reimplemented in MayaFlux::Yantra::ShaderExecutionContext< InputType, OutputType >, and MayaFlux::Yantra::TextureExecutionContext.

Definition at line 60 of file GpuExecutionContext.hpp.

61 {
62 if (ctx.mode == ExecutionMode::DEPENDENCY) {
63 const auto& dependency_params = safe_variant_get_or_throw<DependencyParams>(ctx.parameters,
64 "GpuExecutionContext: DEPENDENCY mode requires DependencyParams");
65 dispatch_core_dependency(dependency_params.stages);
66 return output_type {};
67 }
68
69 if (!ensure_gpu_ready()) {
70 error<std::runtime_error>(
73 std::source_location::current(),
74 "GpuExecutionContext: GPU initialisation failed");
75 }
76
77 auto [ch_copies, structure_info] = extract_inputs(input);
78
79 GpuChannelResult raw;
80 switch (ctx.mode) {
82 raw = dispatch_core_chained(ch_copies, structure_info, ctx);
83 break;
85 raw = dispatch_core_chained_indirect(ch_copies, structure_info, ctx);
86 break;
87 default:
88 raw = dispatch_core(ch_copies, structure_info);
89 break;
90 }
91
92 return collect_gpu_outputs(raw, ch_copies, structure_info);
93 }
Core::GlobalInputConfig input
Definition Config.cpp:38
GpuChannelResult dispatch_core(const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
Full single-pass dispatch.
bool ensure_gpu_ready()
Ensure GPU resources are initialised.
void dispatch_core_dependency(const std::vector< DependencyStage > &stages)
Multi-pipeline dependency dispatch.
GpuChannelResult dispatch_core_chained(const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info, const ExecutionContext &ctx)
Multi-pass (chained) dispatch.
GpuChannelResult dispatch_core_chained_indirect(const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info, const ExecutionContext &ctx)
Multi-pass dispatch where a GPU-resident indirect buffer gates each pass's workgroup count instead of...
virtual output_type collect_gpu_outputs(const GpuChannelResult &raw, const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
Reconstruct Datum<OutputType> from a GpuChannelResult.
virtual std::pair< std::vector< std::vector< double > >, DataStructureInfo > extract_inputs(const input_type &input)
Extract channel data and structure metadata from the input Datum.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Yantra
DSP algorithms, computational units, matrix operations, Grammar.
@ CHAINED
Part of a sequential chain.
@ DEPENDENCY
Part of dependency graph.
@ CHAINED_INDIRECT
Chained dispatch where a GPU-written indirect buffer gates each pass's workgroup count.

References MayaFlux::Journal::BufferProcessing, MayaFlux::Yantra::CHAINED, MayaFlux::Yantra::CHAINED_INDIRECT, MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType >::collect_gpu_outputs(), MayaFlux::Yantra::DEPENDENCY, MayaFlux::Yantra::GpuDispatchCore::dispatch_core(), MayaFlux::Yantra::GpuDispatchCore::dispatch_core_chained(), MayaFlux::Yantra::GpuDispatchCore::dispatch_core_chained_indirect(), MayaFlux::Yantra::GpuDispatchCore::dispatch_core_dependency(), MayaFlux::Yantra::GpuDispatchCore::ensure_gpu_ready(), MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType >::extract_inputs(), input, MayaFlux::Yantra::ExecutionContext::mode, MayaFlux::Yantra::ExecutionContext::parameters, and MayaFlux::Journal::Yantra.

Referenced by MayaFlux::Yantra::ShaderExecutionContext< InputType, OutputType >::execute().

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