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

◆ clone_to() [2/2]

std::shared_ptr< Buffers::VKBuffer > MayaFlux::Buffers::VKBuffer::clone_to ( Usage  usage)

Create a clone of this buffer with the same data and properties.

Parameters
usageUsage enum for the cloned buffer
Returns
Shared pointer to the cloned VKBuffer

The cloned buffer will have the same size, modality, dimensions, processing chain and default processor as the original. Changes to one buffer after cloning do not affect the other.

Definition at line 394 of file VKBuffer.cpp.

395{
396 auto buffer = std::make_shared<VKBuffer>(m_size_bytes, usage, m_modality);
397
398 if (auto layout = get_vertex_layout(); layout.has_value()) {
399 buffer->set_vertex_layout(layout.value());
400 }
401
402 buffer->set_processing_chain(get_processing_chain());
403 buffer->set_default_processor(get_default_processor());
404
405 if (is_host_visible()) {
406 if (buffer->is_host_visible()) {
407 auto src_ptr = static_cast<uint8_t*>(m_resources.mapped_ptr);
408 buffer->set_data({ std::vector<uint8_t>(src_ptr, src_ptr + m_size_bytes) });
409 } else {
411 std::dynamic_pointer_cast<VKBuffer>(shared_from_this()),
412 buffer,
413 nullptr);
414 }
415 } else {
416 if (buffer->is_host_visible()) {
418 buffer,
419 std::dynamic_pointer_cast<VKBuffer>(shared_from_this()),
420 get_data()[0]);
421 } else {
423 "Cloning device-local VKBuffer to another device-local VKBuffer requires external data transfer");
424 }
425 }
426
427 return buffer;
428}
#define MF_WARN(comp, ctx,...)
uint16_t usage
std::vector< Kakshya::DataVariant > get_data()
Read buffer contents as Kakshya DataVariant.
Definition VKBuffer.cpp:125
std::shared_ptr< Buffers::BufferProcessor > get_default_processor() const override
Get the currently attached default processor.
Definition VKBuffer.cpp:258
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:263
std::optional< Kakshya::VertexLayout > get_vertex_layout() const
Get vertex layout if set.
Definition VKBuffer.hpp:489
VKBufferResources m_resources
Definition VKBuffer.hpp:623
Kakshya::DataModality m_modality
Definition VKBuffer.hpp:631
bool is_host_visible() const
Whether this VKBuffer should be host-visible.
Definition VKBuffer.hpp:371
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.
void upload_device_local(const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging_buffer, const Kakshya::DataVariant &data, size_t dst_offset)
Upload data to a device-local buffer using a staging buffer.
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ Buffers
Buffers, Managers, processors and processing chains.

References MayaFlux::Journal::BufferManagement, MayaFlux::Journal::Buffers, MayaFlux::Buffers::download_device_local(), get_data(), get_default_processor(), get_processing_chain(), get_vertex_layout(), is_host_visible(), m_modality, m_resources, m_size_bytes, MayaFlux::Buffers::VKBufferResources::mapped_ptr, MF_WARN, MayaFlux::Buffers::upload_device_local(), and usage.

+ Here is the call graph for this function: