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

Function sync_shared_buffer

compute/host/host_buffer.cpp:396–433  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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,
397 const aligned_ptr<uint8_t>& buffer, shared_buffer_type* shared_buffer_ptr,
398 bool& shared_object_state, const size_t& buffer_size,
399 const COMPUTE_MEMORY_FLAG& flags) {
400 if (!shared_buffer_ptr || !buffer) {
401 return false;
402 }
403 if (shared_object_state) {
404 // no need, already acquired for shared/render backend use
405 return true;
406 }
407
408 if (needs_sync_from_host(flags)) {
409 const auto cqueue = (cqueue_ != nullptr ? cqueue_ : dev.context->get_device_default_queue(dev));
410#if defined(FLOOR_DEBUG)
411 // validate host queue
412 if (const auto hst_queue = dynamic_cast<const host_queue*>(cqueue); hst_queue == nullptr) {
413 log_error("specified host queue is not a Host-Compute queue");
414 return false;
415 }
416#endif
417
418 const auto comp_rqueue = (rqueue != nullptr ? (const compute_queue*)rqueue :
419 compute_memory::get_default_queue_for_memory(*shared_buffer_ptr));
420
421 // full sync
422 cqueue->finish();
423 comp_rqueue->finish();
424
425 // write/copy the host data to the shared buffer
426 shared_buffer_ptr->write(*comp_rqueue, buffer.get(), buffer_size, 0);
427
428 // finish write
429 comp_rqueue->finish();
430 }
431
432 return true;
433}
434
435#if !defined(FLOOR_NO_METAL)
436bool host_buffer::acquire_metal_buffer(const compute_queue* cqueue_, const metal_queue* mtl_queue_) const {

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