MayaFlux 1.0.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 493 of file TextureExecutionContext.hpp.

497 {
499 return output_type {};
500
501 auto img = get_output_image(output_slot().binding.binding);
502 if (!img) {
503 error<std::runtime_error>(
506 std::source_location::current(),
507 "TextureExecutionContext: no output image at declared output binding after dispatch");
508 }
509
511 img, vk::ImageLayout::eGeneral, vk::ImageLayout::eShaderReadOnlyOptimal);
512
514 return output_type {};
515
516 const uint32_t w = m_output_dim_override
517 ? m_output_dim_override->first
518 : (m_pending_container ? m_pending_container->get_width() : img->get_width());
519 const uint32_t h = m_output_dim_override
520 ? m_output_dim_override->second
521 : (m_pending_container ? m_pending_container->get_height() : img->get_height());
522
523 if (!m_output_container) {
524 m_output_container = std::make_shared<Kakshya::TextureContainer>(
525 w, h, m_output_format);
526 }
527
528 if (!m_download_staging) {
530 m_output_container->byte_size());
531 }
532
533 m_output_container->from_image(img, m_download_staging, 0);
534
535 output_type result;
536 result.container = std::static_pointer_cast<Kakshya::SignalSourceContainer>(
538 return result;
539 }
uint32_t h
Definition InkPress.cpp:29
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:33

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