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

◆ read_field()

void MayaFlux::Buffers::VolumeGridBuffer::read_field ( const std::string &  name,
void *  data,
size_t  size 
)

Copy the current read slot of a field to host memory.

Parameters
nameField name.
dataDestination pointer, at least get_field_bytes(name) bytes.
sizeByte count; must equal get_field_bytes(name).

Blocking. Records a fenced device-to-host copy and waits on it from the calling thread. Not for per-frame use on the graphics thread.

Definition at line 605 of file VolumeGridBuffer.cpp.

606{
607 const auto* field = find_field(name, "read_field");
608 if (!field) {
609 return;
610 }
611
612 const size_t expected = static_cast<size_t>(get_cell_count()) * field->stride_bytes;
613 if (size != expected) {
615 "VolumeGridBuffer::read_field: size {} does not match expected {} for '{}'",
616 size, expected, name);
617 return;
618 }
619
620 const uint32_t slot = field->read_is_a ? field->slot_a : field->slot_b;
622 download_back_buffer(get_buffer_resources().back_buffers[slot], data, size, m_transfer_staging);
623}
#define MF_ERROR(comp, ctx,...)
const VKBufferResources & get_buffer_resources() const
Get all buffer resources at once (read-only)
Definition VKBuffer.hpp:341
const Field * find_field(const std::string &name, const char *context) const
Resolve a field by name.
TransferHandle m_pending_transfer
In-flight seed upload, resolved before the next transfer.
uint32_t get_cell_count() const
Total cell count.
std::shared_ptr< VKBuffer > m_transfer_staging
Reused across seed and read calls.
void resolve_transfer(TransferHandle &handle)
Wait for a transfer and release its resources.
void download_back_buffer(const VKBufferResources::GenerationSlot &slot, void *data, size_t size, std::shared_ptr< VKBuffer > &staging)
Download a raw back_buffers slot to host memory.
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ Buffers
Buffers, Managers, processors and processing chains.

References MayaFlux::Journal::BufferManagement, MayaFlux::Journal::Buffers, MayaFlux::Buffers::download_back_buffer(), find_field(), MayaFlux::Buffers::VKBuffer::get_buffer_resources(), get_cell_count(), m_pending_transfer, m_transfer_staging, MF_ERROR, and MayaFlux::Buffers::resolve_transfer().

Referenced by accumulate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: