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

◆ dispatch_core()

GpuChannelResult MayaFlux::Yantra::GpuDispatchCore::dispatch_core ( const std::vector< std::vector< double > > &  channels,
const DataStructureInfo structure_info 
)
protected

Full single-pass dispatch.

Drives prepare_gpu_inputs, on_before_gpu_dispatch, bind_descriptor, and GpuResourceManager::dispatch.

Parameters
channelsExtracted double channels from the input Datum.
structure_infoDimension/modality metadata from OperationHelper.
Returns
GpuChannelResult containing primary float readback and aux buffers.

Definition at line 229 of file GpuDispatchCore.cpp.

232{
233 on_before_gpu_dispatch(channels, structure_info);
234 prepare_gpu_inputs(channels, structure_info);
235
236 for (size_t i = 0; i < m_bindings.size(); ++i) {
237 const auto et = m_bindings[i].element_type;
241 }
242
243 const size_t effective = m_staging_floats.empty()
246 const auto groups = calculate_dispatch_size(effective, structure_info);
247
249 groups, m_bindings,
250 m_push_constants.empty() ? nullptr : m_push_constants.data(),
252
253 GpuChannelResult result;
254 result.primary = readback_primary(effective);
255 readback_aux(result);
256 return result;
257}
Range size
void readback_aux(GpuChannelResult &result)
Read back all OUTPUT bindings that have explicit size overrides into the aux map of a GpuChannelResul...
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.
std::vector< uint8_t > m_push_constants
std::vector< GpuBufferBinding > m_bindings
virtual void prepare_gpu_inputs(const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
Marshal channel data into GPU input buffers.
virtual void on_before_gpu_dispatch(const std::vector< std::vector< double > > &channels, const DataStructureInfo &structure_info)
Called immediately before dispatch.
std::vector< float > readback_primary(size_t float_count)
Read back the primary output buffer into a float vector.
void dispatch(const std::array< uint32_t, 3 > &groups, const std::vector< GpuBufferBinding > &bindings, const uint8_t *push_constant_data, size_t push_constant_size)
void bind_descriptor(size_t index, const GpuBufferBinding &spec)

References MayaFlux::Yantra::GpuResourceManager::bind_descriptor(), calculate_dispatch_size(), MayaFlux::Yantra::GpuResourceManager::dispatch(), MayaFlux::Yantra::GpuBufferBinding::IMAGE_SAMPLED, MayaFlux::Yantra::GpuBufferBinding::IMAGE_STORAGE, largest_binding_data_element_count(), m_bindings, m_push_constants, m_resources, m_staging_floats, on_before_gpu_dispatch(), prepare_gpu_inputs(), MayaFlux::Yantra::GpuChannelResult::primary, readback_aux(), and readback_primary().

+ Here is the call graph for this function: