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

◆ collect_gpu_outputs()

output_type MayaFlux::Yantra::TextureExecutionContext::collect_gpu_outputs ( const GpuChannelResult ,
const std::vector< std::vector< double > > &  ,
const DataStructureInfo  
)
inlineoverrideprotectedvirtual

In CONTAINER mode: downloads the storage image at the declared output binding into a new TextureContainer placed in output.container.

In SCALAR mode: returns an empty DataIO (use collect_result() instead).

Reimplemented from MayaFlux::Yantra::GpuExecutionContext< std::vector< Kakshya::DataVariant >, std::vector< Kakshya::DataVariant > >.

Definition at line 479 of file TextureExecutionContext.hpp.

483 {
485 return output_type {};
486
487 auto img = get_output_image(output_slot().binding.binding);
488 if (!img) {
489 error<std::runtime_error>(
492 std::source_location::current(),
493 "TextureExecutionContext: no output image at declared output binding after dispatch");
494 }
495
497 img, vk::ImageLayout::eGeneral, vk::ImageLayout::eShaderReadOnlyOptimal);
498
500 return output_type {};
501
502 const uint32_t w = m_output_dim_override
503 ? m_output_dim_override->first
504 : (m_pending_container ? m_pending_container->get_width() : img->get_width());
505 const uint32_t h = m_output_dim_override
506 ? m_output_dim_override->second
507 : (m_pending_container ? m_pending_container->get_height() : img->get_height());
508
509 if (!m_output_container) {
510 m_output_container = std::make_shared<Kakshya::TextureContainer>(
511 w, h, m_output_format);
512 }
513
514 if (!m_download_staging) {
516 m_output_container->byte_size());
517 }
518
519 m_output_container->from_image(img, m_download_staging, 0);
520
521 output_type result;
522 result.container = std::static_pointer_cast<Kakshya::SignalSourceContainer>(
524 return result;
525 }
uint32_t h
Definition InkPress.cpp:28
void transition_layout(const std::shared_ptr< Core::VKImage > &image, vk::ImageLayout old_layout, vk::ImageLayout new_layout, uint32_t mip_levels=1, uint32_t array_layers=1, vk::ImageAspectFlags aspect_mask=vk::ImageAspectFlagBits::eColor)
Transition a VKImage to a new Vulkan layout via an immediate submission.
std::shared_ptr< Core::VKImage > get_output_image(size_t binding_index) const
Return the image registered at an IMAGE_STORAGE output binding.
std::shared_ptr< Kakshya::TextureContainer > m_output_container
ImageSlot & output_slot()
Find the declared output image slot.
std::shared_ptr< Buffers::VKBuffer > m_download_staging
std::shared_ptr< Kakshya::TextureContainer > m_pending_container
std::optional< std::pair< uint32_t, uint32_t > > m_output_dim_override
@ IMAGE
Transition output image to shader-read layout; no CPU download.
@ SCALAR
Return SSBO readback via collect_result(); no image download.
std::shared_ptr< VKBuffer > create_image_staging_buffer(size_t size)
Allocate a persistent host-visible staging buffer sized for repeated streaming uploads to an image of...
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Yantra
DSP algorithms, computational units, matrix operations, Grammar.
std::optional< std::shared_ptr< Kakshya::SignalSourceContainer > > container
Optional reference to container, required for regions.
Definition DataIO.hpp:31

References MayaFlux::Yantra::Datum< T >::container, and h.