MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Yantra::TextureExecutionContext Class Reference

GpuExecutionContext specialisation for image-only compute shaders. More...

#include <TextureExecutionContext.hpp>

+ Inheritance diagram for MayaFlux::Yantra::TextureExecutionContext:
+ Collaboration diagram for MayaFlux::Yantra::TextureExecutionContext:

Public Types

using ContainerDatum = Datum< std::shared_ptr< Kakshya::SignalSourceContainer > >
 
- Public Types inherited from MayaFlux::Yantra::GpuExecutionContext< std::shared_ptr< Kakshya::SignalSourceContainer >, std::shared_ptr< Kakshya::SignalSourceContainer > >
using input_type = Datum< InputType >
 
using output_type = Datum< OutputType >
 

Public Member Functions

void stage_input (const Kakshya::TextureContainer &container, size_t binding_index, uint32_t layer=0)
 Stage the input TextureContainer as a VKImage for the given binding.
 
 TextureExecutionContext (GpuShaderConfig config, Portal::Graphics::ImageFormat output_format)
 
- Public Member Functions inherited from MayaFlux::Yantra::GpuExecutionContext< std::shared_ptr< Kakshya::SignalSourceContainer >, std::shared_ptr< Kakshya::SignalSourceContainer > >
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 (GpuExecutionContext &&)=delete
 
 GpuExecutionContext (GpuShaderConfig config)
 
GpuExecutionContextoperator= (const GpuExecutionContext &)=delete
 
GpuExecutionContextoperator= (GpuExecutionContext &&)=delete
 
 ~GpuExecutionContext () override=default
 
- Public Member Functions inherited from MayaFlux::Yantra::GpuDispatchCore
bool ensure_gpu_ready ()
 Ensure GPU resources are initialised.
 
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 (GpuDispatchCore &&)=delete
 
 GpuDispatchCore (GpuShaderConfig config)
 
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.
 
virtual ~GpuDispatchCore ()=default
 

Protected Member Functions

std::array< uint32_t, 3 > calculate_dispatch_size (size_t, const DataStructureInfo &) const override
 Derives dispatch groups from stored image dimensions.
 
ContainerDatum collect_gpu_outputs (const GpuChannelResult &, const std::vector< std::vector< double > > &, const DataStructureInfo &) override
 Wraps the written output image in a TextureContainer.
 
std::pair< std::vector< std::vector< double > >, DataStructureInfoextract_inputs (const ContainerDatum &) override
 Returns empty channels – no numeric extraction for image shaders.
 
void prepare_output_image (uint32_t width, uint32_t height)
 Creates the output storage image and stages it at binding 0.
 
- Protected Member Functions inherited from MayaFlux::Yantra::GpuExecutionContext< std::shared_ptr< Kakshya::SignalSourceContainer >, std::shared_ptr< Kakshya::SignalSourceContainer > >
virtual std::pair< std::vector< std::vector< double > >, DataStructureInfoextract_inputs (const input_type &input)
 Extract double channels and structure metadata from the input Datum.
 
- Protected Member Functions inherited from MayaFlux::Yantra::GpuDispatchCore
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.
 
GpuChannelResult dispatch_core_chained (const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info, const ExecutionContext &ctx)
 Multi-pass (chained) 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.
 
const GpuShaderConfiggpu_config () const
 
size_t largest_binding_data_element_count () const
 
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_image_sampled (size_t binding_index, std::shared_ptr< Core::VKImage > image, vk::Sampler sampler)
 Register a VKImage + sampler for an IMAGE_SAMPLED binding.
 
void stage_image_storage (size_t binding_index, std::shared_ptr< Core::VKImage > image)
 Register a VKImage for an IMAGE_STORAGE binding.
 
void stage_passthrough (size_t binding_index, const void *data, size_t byte_size)
 Stage raw bytes for a PASSTHROUGH binding before dispatch.
 

Private Attributes

uint32_t m_height { 0 }
 
Portal::Graphics::ImageFormat m_output_format
 
uint32_t m_width { 0 }
 

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::vector< float > m_staging_floats
 

Detailed Description

GpuExecutionContext specialisation for image-only compute shaders.

Operates on Datum<shared_ptr<SignalSourceContainer>> where the runtime type is always TextureContainer. Bypasses channel extraction entirely: extract_inputs() returns empty channels and the input TextureContainer is uploaded to a VKImage and staged as an IMAGE_STORAGE or IMAGE_SAMPLED binding before dispatch_core runs.

collect_gpu_outputs() ignores the float readback and instead wraps the output VKImage (registered at binding index 0) in a new TextureContainer via a blocking GPU->CPU download.

calculate_dispatch_size() derives workgroup counts from the image dimensions stored at construction, bypassing the structure-info path which is meaningless for empty channels.

Concrete texture ops subclass TextureOp (not this class directly). They call stage_input() and set_push_constants() inside on_before_gpu_dispatch(), then set_texture_backend() on the owning op.

Definition at line 34 of file TextureExecutionContext.hpp.


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