46MAYAFLUX_API
void download_host_visible(
const std::shared_ptr<VKBuffer>& source,
const std::shared_ptr<VKBuffer>& target);
60MAYAFLUX_API
void download_device_local(
const std::shared_ptr<VKBuffer>& source,
const std::shared_ptr<VKBuffer>& target,
const std::shared_ptr<VKBuffer>& staging_buffer);
77 const std::shared_ptr<VKBuffer>& target,
78 const std::shared_ptr<VKBuffer>& staging =
nullptr);
89 std::span<const T> data,
90 const std::shared_ptr<VKBuffer>& target,
91 const std::shared_ptr<VKBuffer>& staging =
nullptr)
93 upload_to_gpu(data.data(), data.size_bytes(), target, staging);
105 const std::vector<T>& data,
106 const std::shared_ptr<VKBuffer>& target,
107 const std::shared_ptr<VKBuffer>& staging =
nullptr)
127 const std::shared_ptr<VKBuffer>& target,
128 const std::shared_ptr<VKBuffer>& staging,
129 float growth_factor = 1.5F);
144 const std::shared_ptr<VKBuffer>& source,
147 const std::shared_ptr<VKBuffer>& staging =
nullptr);
158 const std::shared_ptr<VKBuffer>& source,
160 const std::shared_ptr<VKBuffer>& staging =
nullptr)
174 const std::shared_ptr<VKBuffer>& source,
175 std::vector<T>& data,
176 const std::shared_ptr<VKBuffer>& staging =
nullptr)
178 size_t element_count = source->get_size_bytes() /
sizeof(T);
179 data.resize(element_count);
204MAYAFLUX_API
bool is_device_local(
const std::shared_ptr<VKBuffer>& buffer);
219 const std::shared_ptr<VKBuffer>& target,
220 const std::shared_ptr<VKBuffer>& staging,
237 const std::shared_ptr<VKBuffer>& target,
238 const std::shared_ptr<VKBuffer>& staging =
nullptr)
240 auto view = accessor.
view<T>();
242 const void* data_ptr = view.data();
243 size_t data_bytes = view.size() *
sizeof(T);
245 if constexpr (std::is_same_v<T, double>) {
246 if (target->get_format() != vk::Format::eR64Sfloat) {
248 "Uploading double precision to buffer with format {}. Consider using R64Sfloat for audio.",
249 vk::to_string(target->get_format()));
270 const std::shared_ptr<VKBuffer>& target,
271 const std::shared_ptr<VKBuffer>& staging =
nullptr)
274 error<std::invalid_argument>(
277 std::source_location::current(),
278 "Cannot upload structured view from non-structured data");
281 auto structured_view = accessor.
view<T>();
282 upload_to_gpu(structured_view.data(), structured_view.size_bytes(), target, staging);
290 const std::shared_ptr<VKBuffer>& source,
292 const std::vector<Kakshya::DataDimension>& dimensions,
294 const std::shared_ptr<VKBuffer>& staging =
nullptr)
296 size_t element_count = source->get_size_bytes() /
sizeof(T);
298 std::vector<T> temp_buffer(element_count);
301 target_variant = std::move(temp_buffer);
318 const std::shared_ptr<AudioBuffer>& audio_buffer,
319 const std::shared_ptr<VKBuffer>& gpu_buffer,
320 const std::shared_ptr<VKBuffer>& staging =
nullptr);
333 const std::shared_ptr<VKBuffer>& gpu_buffer,
334 const std::shared_ptr<AudioBuffer>& audio_buffer,
335 const std::shared_ptr<VKBuffer>& staging =
nullptr);
#define MF_WARN(comp, ctx,...)
auto view() const
Get explicit typed view of data.
bool is_structured() const
Type-erased accessor for NDData with semantic view construction.
void upload_host_visible(const std::shared_ptr< VKBuffer > &target, const Kakshya::DataVariant &data)
Upload data to a host-visible buffer.
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...
void upload_audio_to_gpu(const std::shared_ptr< AudioBuffer > &audio_buffer, const std::shared_ptr< VKBuffer > &gpu_buffer, const std::shared_ptr< VKBuffer > &staging)
Upload AudioBuffer to GPU (always double precision)
void upload_structured_view(const Kakshya::DataAccess &accessor, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging=nullptr)
Upload structured data with GLM double-precision types.
void upload_resizing(const void *data, size_t size, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging, float growth_factor)
Upload size bytes to target, growing both buffers first if needed.
void upload_device_local(const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging_buffer, const Kakshya::DataVariant &data)
Upload data to a device-local buffer using a staging buffer.
constexpr float k_buffer_growth_factor
std::shared_ptr< VKBuffer > create_staging_buffer(size_t size)
Create staging buffer for transfers.
bool is_device_local(const std::shared_ptr< VKBuffer > &buffer)
Check if buffer is device-local (staging needed)
void download_audio_from_gpu(const std::shared_ptr< VKBuffer > &gpu_buffer, const std::shared_ptr< AudioBuffer > &audio_buffer, const std::shared_ptr< VKBuffer > &staging)
Download GPU buffer to AudioBuffer (expects double precision)
void upload_from_view(const Kakshya::DataAccess &accessor, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging=nullptr)
Upload data from DataAccess view to GPU buffer (precision-preserving)
void download_from_gpu(const std::shared_ptr< VKBuffer > &source, void *data, size_t size, const std::shared_ptr< VKBuffer > &staging)
Download from GPU buffer to raw data (auto-detects host-visible vs device-local)
void download_host_visible(const std::shared_ptr< VKBuffer > &source, const std::shared_ptr< VKBuffer > &target)
Download data from a host-visible buffer.
void ensure_gpu_capacity(const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging, size_t required, float growth_factor)
Grow a GPU buffer (and its paired staging buffer) to fit required bytes.
void download_device_local(const std::shared_ptr< VKBuffer > &source, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging_buffer)
Download data from a device-local buffer using a staging buffer.
Kakshya::DataAccess download_to_view(const std::shared_ptr< VKBuffer > &source, Kakshya::DataVariant &target_variant, const std::vector< Kakshya::DataDimension > &dimensions, Kakshya::DataModality modality, const std::shared_ptr< VKBuffer > &staging=nullptr)
Download GPU buffer to DataAccess-compatible format (precision-preserving)
void upload_to_gpu(const void *data, size_t size, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging)
Upload raw data to GPU buffer (auto-detects host-visible vs device-local)
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
DataModality
Data modality types for cross-modal analysis.