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

◆ download_back_buffer()

MAYAFLUX_API void MayaFlux::Buffers::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.

Parameters
slotSource slot, typically from VKBuffer::get_back_buffer().
sizeByte count to copy.
dataDestination pointer, at least size bytes.
stagingPersistent staging buffer for device-local slots. Ignored, and may be null, when slot.mapped_ptr is already valid.

Reads slot.mapped_ptr directly when present (host-visible slot, no transfer). Otherwise records a fenced copy into staging exactly as download_from_gpu_async does, using slot.buffer as the copy source.

Definition at line 294 of file StagingUtils.cpp.

299{
300 if (!data || size == 0)
301 return;
302
303 if (slot.mapped_ptr) {
304 std::memcpy(data, slot.mapped_ptr, size);
305 return;
306 }
307
308 auto buffer_service = Registry::BackendRegistry::instance()
309 .get_service<Registry::Service::BufferService>();
310
311 if (!buffer_service
312 || !buffer_service->execute_fenced
313 || !buffer_service->wait_fenced
314 || !buffer_service->release_fenced
315 || !buffer_service->invalidate_range) {
316 error<std::runtime_error>(
317 Journal::Component::Buffers,
318 Journal::Context::BufferProcessing,
319 std::source_location::current(),
320 "download_back_buffer: BufferService unavailable");
321 }
322
323 if (!staging || staging->get_size_bytes() < size)
324 staging = create_staging_buffer(size);
325
326 auto handle = buffer_service->copy_buffer_fenced(
327 static_cast<void*>(slot.buffer),
328 static_cast<void*>(staging->get_buffer()),
329 size, 0, 0);
330
331 buffer_service->wait_fenced(handle);
332
333 auto& resources = staging->get_buffer_resources();
334 buffer_service->invalidate_range(resources.memory, 0, size);
335
336 std::memcpy(data, staging->get_mapped_ptr(), size);
337 buffer_service->release_fenced(handle);
338}
Backend buffer management service interface.

References MayaFlux::Buffers::VKBufferResources::GenerationSlot::buffer, MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, create_staging_buffer(), MayaFlux::Registry::BackendRegistry::get_service(), MayaFlux::Registry::BackendRegistry::instance(), and MayaFlux::Buffers::VKBufferResources::GenerationSlot::mapped_ptr.

Referenced by MayaFlux::Buffers::BufferDownloadProcessor::download_back_buffers(), MayaFlux::Buffers::RelaxationStepProcessor::on_after_execute(), and MayaFlux::Buffers::VolumeGridBuffer::read_field().

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