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

◆ collect_result()

std::unique_ptr< DataReadProcessor::PendingRead > MayaFlux::Buffers::DataReadProcessor::collect_result ( ReadKind  kind)
private

Definition at line 284 of file DataReadProcessor.cpp.

285{
286 if (!m_result_ready.load(std::memory_order_acquire)) {
287 return nullptr;
288 }
289
290 std::unique_ptr<PendingRead> result;
291 m_result.sweep(
292 [kind](std::unique_ptr<PendingRead>& pending) {
293 switch (kind) {
294 case ReadKind::Bytes:
295 return !pending->mesh;
297 return pending->layout.has_value();
298 case ReadKind::Mesh:
299 return pending->mesh.has_value() || pending->triangle_soup;
300 case ReadKind::Pixels:
301 return pending->image.has_value();
302 }
303 return false;
304 },
305 [this, &result](std::unique_ptr<PendingRead>& pending) {
306 if (pending->transfer) {
308 pending->transfer,
309 generation_slot(pending->handle),
310 pending->bytes.data(),
311 pending->bytes.size(),
312 m_staging);
313 }
314 result = std::move(pending);
315 });
316 if (result) {
317 m_result_ready.store(false, std::memory_order_release);
318 m_result_occupied.store(false, std::memory_order_release);
319 }
320 return result;
321}
AttributeKind kind
Memory::SweepList< std::unique_ptr< PendingRead > > m_result
std::shared_ptr< VKBuffer > m_staging
VKBufferResources::GenerationSlot generation_slot(const Portal::Graphics::GpuBufferHandle &handle)
Express a buffer handle as the slot the back_buffers transfer helpers take.
void resolve_back_buffer_read(TransferHandle &handle, const VKBufferResources::GenerationSlot &slot, void *data, size_t size, std::shared_ptr< VKBuffer > &staging, size_t staging_offset)
Wait for a recorded download, then copy it out of staging.

References Bytes, MayaFlux::Buffers::generation_slot(), kind, m_result, m_result_occupied, m_result_ready, m_staging, Mesh, Pixels, MayaFlux::Buffers::resolve_back_buffer_read(), and Vertices.

Referenced by resolve_bytes(), resolve_mesh(), resolve_pixels(), and resolve_vertices().

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