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

Function sync_shared_buffer

src/device/host/host_buffer.cpp:327–364  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

325
326template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
327static inline bool sync_shared_buffer(const device_queue* cqueue_, const backend_queue_type* rqueue, const device& dev,
328 const aligned_ptr<uint8_t>& buffer, shared_buffer_type* shared_buffer_ptr,
329 bool& shared_object_state, const size_t& buffer_size,
330 const MEMORY_FLAG& flags) {
331 if (!shared_buffer_ptr || !buffer) {
332 return false;
333 }
334 if (shared_object_state) {
335 // no need, already acquired for shared/render backend use
336 return true;
337 }
338
339 if (needs_sync_from_host(flags)) {
340 const auto cqueue = (cqueue_ != nullptr ? cqueue_ : dev.context->get_device_default_queue(dev));
341#if defined(FLOOR_DEBUG)
342 // validate host queue
343 if (const auto hst_queue = dynamic_cast<const host_queue*>(cqueue); hst_queue == nullptr) {
344 log_error("specified host queue is not a Host-Compute queue");
345 return false;
346 }
347#endif
348
349 const auto comp_rqueue = (rqueue != nullptr ? (const device_queue*)rqueue :
350 device_memory::get_default_queue_for_memory(*shared_buffer_ptr));
351
352 // full sync
353 cqueue->finish();
354 comp_rqueue->finish();
355
356 // write/copy the host data to the shared buffer
357 shared_buffer_ptr->write(*comp_rqueue, buffer.get(), buffer_size, 0);
358
359 // finish write
360 comp_rqueue->finish();
361 }
362
363 return true;
364}
365
366#if !defined(FLOOR_NO_METAL)
367bool host_buffer::acquire_metal_buffer(const device_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