MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType > Class Template Reference

Type-parameterised shell over GpuDispatchCore. More...

#include <GpuExecutionContext.hpp>

+ Inheritance diagram for MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType >:
+ Collaboration diagram for MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType >:

Public Types

using input_type = Datum< InputType >
 
using output_type = Datum< OutputType >
 

Public Member Functions

virtual output_type execute (const input_type &input, const ExecutionContext &ctx)
 Dispatch to GPU and reconstruct a typed output Datum.
 
 GpuExecutionContext (const GpuExecutionContext &)=delete
 
 GpuExecutionContext (GpuComputeConfig config)
 
 GpuExecutionContext (GpuExecutionContext &&)=delete
 
GpuExecutionContextoperator= (const GpuExecutionContext &)=delete
 
GpuExecutionContextoperator= (GpuExecutionContext &&)=delete
 
 ~GpuExecutionContext () override=default
 
- Public Member Functions inherited from MayaFlux::Yantra::GpuDispatchCore
const std::string & dispatch_key () const
 The key used for this context's GpuResourceManager unit.
 
void download_binding (size_t index, void *dest, size_t byte_size)
 Read back a specific binding into a caller-provided destination.
 
void download_shared (uint32_t set, size_t binding_index, void *dest, size_t byte_size)
 
bool ensure_gpu_ready ()
 Ensure GPU resources are initialised.
 
void ensure_shared_buffer (uint32_t set, size_t binding_index, size_t element_count, GpuBufferBinding::ElementType element_type, Portal::Graphics::BufferUsageHint usage_hint=Portal::Graphics::BufferUsageHint::COMPUTE_STORAGE)
 
std::shared_ptr< Core::VKImageget_output_image (size_t binding_index) const
 Return the image registered at an IMAGE_STORAGE output binding.
 
 GpuDispatchCore (const GpuDispatchCore &)=delete
 
 GpuDispatchCore (GpuComputeConfig config)
 
 GpuDispatchCore (GpuDispatchCore &&)=delete
 
bool is_gpu_ready () const
 Query GPU readiness without attempting initialisation.
 
GpuDispatchCoreoperator= (const GpuDispatchCore &)=delete
 
GpuDispatchCoreoperator= (GpuDispatchCore &&)=delete
 
template<typename T >
void set_binding_data (size_t index, const std::vector< T > &data)
 
template<typename T >
void set_binding_data (size_t index, std::span< const T > data)
 Pre-stage typed data for a specific binding slot, bypassing the default channel-flattening path in prepare_gpu_inputs.
 
void set_output_size (size_t index, size_t byte_size)
 Declare the byte capacity of an output binding independently of input data.
 
template<typename T >
void set_push_constants (const T &data)
 Typed convenience wrapper for set_push_constants(const void*, size_t).
 
void set_push_constants (const void *data, size_t bytes)
 Set push constant data from a raw byte pointer.
 
Portal::Graphics::HazardResource shared_buffer_hazard (const GpuBufferBinding &spec) const
 
void stage_image_at (size_t binding_index, std::shared_ptr< Core::VKImage > image, GpuBufferBinding::ElementType kind, vk::Sampler sampler=nullptr)
 Register a VKImage at an explicit binding index.
 
void swap_shader (GpuComputeConfig config)
 Switch which shader subsequent dispatch_core calls target.
 
void upload_shared_raw (uint32_t set, size_t binding_index, const uint8_t *data, size_t byte_size)
 
virtual ~GpuDispatchCore ()=default
 

Protected Member Functions

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 > >, DataStructureInfoextract_inputs (const input_type &input)
 Extract channel data and structure metadata from the input Datum.
 
- Protected Member Functions inherited from MayaFlux::Yantra::GpuDispatchCore
virtual std::array< uint32_t, 3 > calculate_dispatch_size (size_t total_elements, const DataStructureInfo &structure_info) const
 Calculate workgroup dispatch counts from structure dimensions.
 
virtual std::vector< GpuBufferBindingdeclare_buffer_bindings () const
 Declare the storage buffers the shader expects.
 
GpuChannelResult dispatch_core (const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
 Full single-pass dispatch.
 
Portal::Graphics::FenceID dispatch_core_async (const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
 Non-blocking variant of dispatch_core.
 
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 a fixed pass_count.
 
void dispatch_core_dependency (const std::vector< DependencyStage > &stages)
 Multi-pipeline dependency dispatch.
 
size_t find_first_output_index () const
 
void flatten_channels_to_staging (const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
 Flatten planar double channels into m_staging_floats.
 
void flatten_native_variants_to_staging (const std::vector< Kakshya::DataVariant > &variants, const DataStructureInfo &structure_info)
 Flatten native-typed DataVariant channels into m_native_staging_bytes without any conversion.
 
const GpuComputeConfiggpu_config () const
 
size_t largest_binding_data_element_count () const
 
size_t last_effective_element_count () const
 Effective element count used by the last dispatch_core or dispatch_core_async call.
 
virtual void on_before_gpu_dispatch (const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
 Called immediately before dispatch.
 
virtual void prepare_gpu_inputs (const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
 Marshal channel data into GPU input buffers.
 
void readback_aux (GpuChannelResult &result)
 Read back all OUTPUT bindings that have explicit size overrides into the aux map of a GpuChannelResult.
 
std::vector< float > readback_primary (size_t float_count)
 Read back the primary output buffer into a float vector.
 
void stage_native_bytes (size_t binding_index, const void *data, size_t byte_size)
 Stage a flat native-typed byte buffer for FLOAT32 bindings, bypassing the double-to-float cast in flatten_channels_to_staging.
 
void stage_passthrough (size_t binding_index, const void *data, size_t byte_size)
 Stage raw bytes for a PASSTHROUGH binding before dispatch.
 

Additional Inherited Members

- Protected Attributes inherited from MayaFlux::Yantra::GpuDispatchCore
std::vector< std::vector< uint8_t > > m_binding_data
 
std::vector< GpuBufferBindingm_bindings
 
std::vector< ImageBindingm_image_bindings
 
std::vector< size_t > m_output_size_overrides
 
std::vector< std::vector< uint8_t > > m_passthrough_bytes
 
std::vector< uint8_t > m_push_constants
 
GpuResourceManager m_resources
 
std::set< std::pair< uint32_t, size_t > > m_shared_bindings
 
std::vector< float > m_staging_floats
 

Detailed Description

template<ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
class MayaFlux::Yantra::GpuExecutionContext< InputType, OutputType >

Type-parameterised shell over GpuDispatchCore.

Handles the two type-aware boundary steps:

  1. Extracting input data for dispatch_core — overridable via extract_inputs().
  2. Reconstructing a Datum<OutputType> — overridable via collect_gpu_outputs().

All resource management, buffer staging, dispatch orchestration, and virtual override points live in GpuDispatchCore and are compiled once in GpuDispatchCore.cpp.

Subclasses override GpuDispatchCore virtuals (declare_buffer_bindings, on_before_gpu_dispatch, prepare_gpu_inputs, calculate_dispatch_size) directly; Subclasses that do not operate on numeric channels (e.g. image-only shaders) override extract_inputs() to return empty channels and override collect_gpu_outputs() to pull from get_output_image() instead of the float readback.

Template Parameters
InputTypeComputeData type accepted.
OutputTypeComputeData type produced.

Definition at line 32 of file GpuExecutionContext.hpp.


The documentation for this class was generated from the following file: