36 std::shared_ptr<Kakshya::SignalSourceContainer>,
37 std::shared_ptr<Kakshya::SignalSourceContainer>> {
49 , m_output_format(output_format)
65 auto img = container.
to_image(layer);
66 auto sampler = Portal::Graphics::SamplerForge::instance().get_default_linear();
67 stage_image_sampled(binding_index, std::move(img), sampler);
91 const auto& ws = gpu_config().workgroup_size;
93 (m_width + ws[0] - 1) / ws[0],
94 (m_height + ws[1] - 1) / ws[1],
112 auto out = Portal::Graphics::TextureLoom::instance()
113 .create_storage_image(
width, height, m_output_format);
114 stage_image_storage(0, std::move(out));
125 const std::vector<std::vector<double>>& ,
128 auto img = get_output_image(0);
130 error<std::runtime_error>(
131 Journal::Component::Yantra,
132 Journal::Context::BufferProcessing,
133 std::source_location::current(),
134 "TextureExecutionContext: no output image at binding 0 after dispatch");
137 Portal::Graphics::TextureLoom::instance().transition_layout(
138 img, vk::ImageLayout::eGeneral, vk::ImageLayout::eShaderReadOnlyOptimal);
140 auto container = std::make_shared<Kakshya::TextureContainer>(m_width, m_height, m_output_format);
142 container->from_image(img, 0);
143 return ContainerDatum { std::static_pointer_cast<Kakshya::SignalSourceContainer>(container) };
148 uint32_t m_width { 0 };
149 uint32_t m_height { 0 };
std::shared_ptr< Core::VKImage > to_image(uint32_t layer=0) const
Upload the pixel buffer to a new VKImage via TextureLoom.
SignalSourceContainer wrapping GPU texture data as addressable pixel bytes.
Type-parameterised shell over GpuDispatchCore.
void prepare_output_image(uint32_t width, uint32_t height)
Creates the output storage image and stages it at binding 0.
std::array< uint32_t, 3 > calculate_dispatch_size(size_t, const DataStructureInfo &) const override
Derives dispatch groups from stored image dimensions.
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)
ContainerDatum collect_gpu_outputs(const GpuChannelResult &, const std::vector< std::vector< double > > &, const DataStructureInfo &) override
Wraps the written output image in a TextureContainer.
Portal::Graphics::ImageFormat m_output_format
std::pair< std::vector< std::vector< double > >, DataStructureInfo > extract_inputs(const ContainerDatum &) override
Returns empty channels – no numeric extraction for image shaders.
GpuExecutionContext specialisation for image-only compute shaders.
ImageFormat
User-friendly image format enum.
Metadata about data structure for reconstruction.
Input/Output container for computation pipeline data flow with structure preservation.
Erased output of a GPU dispatch: reconstructed float data plus any raw auxiliary outputs keyed by bin...
Plain-data description of the compute shader to dispatch.