53struct GpuResourceManagerImpl;
73 const std::vector<GpuBufferBinding>& bindings);
76 void upload(
size_t index,
const float* data,
size_t byte_size);
77 void upload_raw(
size_t index,
const uint8_t* data,
size_t byte_size);
78 void download(
size_t index,
float* dest,
size_t byte_size);
88 const std::shared_ptr<Core::VKImage>&
image,
99 const std::shared_ptr<Core::VKImage>&
image,
110 vk::ImageLayout old_layout,
111 vk::ImageLayout new_layout);
113 void dispatch(
const std::array<uint32_t, 3>& groups,
114 const std::vector<GpuBufferBinding>& bindings,
115 const uint8_t* push_constant_data,
116 size_t push_constant_size);
120 const std::array<uint32_t, 3>& groups,
121 const std::vector<GpuBufferBinding>& bindings,
122 const std::function<
void(uint32_t pass, std::vector<uint8_t>&)>& push_constant_updater,
123 size_t push_constant_size,
124 const std::unordered_map<std::string, std::any>& execution_metadata = {});
136 std::unique_ptr<GpuResourceManagerImpl>
m_impl;
size_t buffer_allocated_bytes(size_t index) const
GpuResourceManager & operator=(GpuResourceManager &&)=delete
void upload_raw(size_t index, const uint8_t *data, size_t byte_size)
void upload(size_t index, const float *data, size_t byte_size)
GpuResourceManager(GpuResourceManager &&)=delete
std::vector< BufferSlot > m_buffer_slots
Portal::Graphics::ComputePipelineID m_pipeline_id
Portal::Graphics::ShaderID m_shader_id
std::vector< std::shared_ptr< Core::VKImage > > m_image_slots
std::vector< Portal::Graphics::DescriptorSetID > m_descriptor_set_ids
void download(size_t index, float *dest, size_t byte_size)
void bind_image_storage(size_t index, const std::shared_ptr< Core::VKImage > &image, const GpuBufferBinding &spec)
Bind a storage image descriptor at the given slot index.
void dispatch_batched(uint32_t pass_count, const std::array< uint32_t, 3 > &groups, const std::vector< GpuBufferBinding > &bindings, const std::function< void(uint32_t pass, std::vector< uint8_t > &)> &push_constant_updater, size_t push_constant_size, const std::unordered_map< std::string, std::any > &execution_metadata={})
bool initialise(const GpuShaderConfig &config, const std::vector< GpuBufferBinding > &bindings)
void bind_image_sampled(size_t index, const std::shared_ptr< Core::VKImage > &image, vk::Sampler sampler, const GpuBufferBinding &spec)
Bind a combined image+sampler descriptor at the given slot index.
GpuResourceManager & operator=(const GpuResourceManager &)=delete
void transition_image(const std::shared_ptr< Core::VKImage > &image, vk::ImageLayout old_layout, vk::ImageLayout new_layout)
Transition a VKImage layout via an immediate command submission.
void ensure_buffer(size_t index, size_t required_bytes)
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)
GpuResourceManager(const GpuResourceManager &)=delete
std::unique_ptr< GpuResourceManagerImpl > m_impl
Encapsulates all Vulkan resource lifecycle behind Portal facades.
uint64_t ComputePipelineID
constexpr ShaderID INVALID_SHADER
constexpr ComputePipelineID INVALID_COMPUTE_PIPELINE
enum MayaFlux::Yantra::GpuBufferBinding::ElementType FLOAT32
enum MayaFlux::Yantra::GpuBufferBinding::Direction INPUT
ElementType
Element type the shader expects in this buffer.
Declares a single storage buffer the shader expects.
size_t push_constant_size
std::array< uint32_t, 3 > workgroup_size
Plain-data description of the compute shader to dispatch.