MCPcopy Create free account
hub / github.com/a2flo/floor / release_sync_buffer

Function release_sync_buffer

compute/host/host_buffer.cpp:355–393  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

353
354template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
355static inline bool release_sync_buffer(const compute_queue* cqueue_, const backend_queue_type* rqueue, const compute_device& dev,
356 const aligned_ptr<uint8_t>& buffer, shared_buffer_type* shared_buffer_ptr,
357 bool& shared_object_state, const size_t& buffer_size,
358 const COMPUTE_MEMORY_FLAG& flags) {
359 if (!shared_buffer_ptr || !buffer) {
360 return false;
361 }
362 if (shared_object_state) {
363 // -> buffer has already been released for use with the render backend
364 return true;
365 }
366
367 if (needs_sync_from_host(flags)) {
368 const auto cqueue = (cqueue_ != nullptr ? cqueue_ : dev.context->get_device_default_queue(dev));
369#if defined(FLOOR_DEBUG)
370 // validate host queue
371 if (const auto hst_queue = dynamic_cast<const host_queue*>(cqueue); hst_queue == nullptr) {
372 log_error("specified host queue is not a Host-Compute queue");
373 return false;
374 }
375#endif
376
377 const auto comp_rqueue = (rqueue != nullptr ? (const compute_queue*)rqueue :
378 compute_memory::get_default_queue_for_memory(*shared_buffer_ptr));
379
380 // full sync
381 cqueue->finish();
382 comp_rqueue->finish();
383
384 // write/copy the host data to the shared buffer
385 shared_buffer_ptr->write(*comp_rqueue, buffer.get(), buffer_size, 0);
386
387 // finish write
388 comp_rqueue->finish();
389 }
390
391 shared_object_state = true;
392 return true;
393}
394
395template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
396static inline bool sync_shared_buffer(const compute_queue* cqueue_, const backend_queue_type* rqueue, const compute_device& dev,

Callers

nothing calls this directly

Calls 5

needs_sync_from_hostFunction · 0.70
finishMethod · 0.45
writeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected