MayaFlux 0.4.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 408 of file VKBuffer.cpp.

409{
410 auto buffer = std::make_shared<VKBuffer>(m_size_bytes, usage, m_modality);
411
412 if (auto layout = get_vertex_layout(); layout.has_value()) {
413 buffer->set_vertex_layout(layout.value());
414 }
415
416 buffer->set_processing_chain(get_processing_chain());
417 buffer->set_default_processor(get_default_processor());
418
419 if (is_host_visible()) {
420 if (buffer->is_host_visible()) {
421 auto src_ptr = static_cast<uint8_t*>(m_resources.mapped_ptr);
422 buffer->set_data({ std::vector<uint8_t>(src_ptr, src_ptr + m_size_bytes) });
423 } else {
425 std::dynamic_pointer_cast<VKBuffer>(shared_from_this()),
426 buffer,
427 nullptr);
428 }
429 } else {
430 if (buffer->is_host_visible()) {
432 buffer,
433 std::dynamic_pointer_cast<VKBuffer>(shared_from_this()),
434 get_data()[0]);
435 } else {
437 "Cloning device-local VKBuffer to another device-local VKBuffer requires external data transfer");
438 }
439 }
440
441 return buffer;
442}
#define MF_WARN(comp, ctx,...)
std::vector< Kakshya::DataVariant > get_data()
Read buffer contents as Kakshya DataVariant.
Definition VKBuffer.cpp:121
std::shared_ptr< Buffers::BufferProcessor > get_default_processor() const override
Get the currently attached default processor.
Definition VKBuffer.cpp:309
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:314
std::optional< Kakshya::VertexLayout > get_vertex_layout() const
Get vertex layout if set.
Definition VKBuffer.hpp:491
VKBufferResources m_resources
Definition VKBuffer.hpp:607
Kakshya::DataModality m_modality
Definition VKBuffer.hpp:615
bool is_host_visible() const
Whether this VKBuffer should be host-visible.
Definition VKBuffer.hpp:374
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.
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.
@ 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, and MayaFlux::Buffers::upload_device_local().

+ Here is the call graph for this function: