error* enqueue_write_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *buf, const size_t *_buf_orig, size_t buf_orig_l, const size_t *_host_orig, size_t host_orig_l, const size_t *_reg, size_t reg_l, const size_t *_buf_pitches, size_t buf_pitches_l, const size_t *_host_pitches, size_t host_pitches_l, const clobj_t *_wait_for, uint32_t num_wait_for, int block, void *pyobj) { #if PYOPENCL_CL_VERSION >= 0x1010 const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); auto queue = static_cast<command_queue*>(_queue); auto mem = static_cast<memory_object*>(_mem); ConstBuffer<size_t, 3> buf_orig(_buf_orig, buf_orig_l); ConstBuffer<size_t, 3> host_orig(_host_orig, host_orig_l); ConstBuffer<size_t, 3> reg(_reg, reg_l, 1); ConstBuffer<size_t, 2> buf_pitches(_buf_pitches, buf_pitches_l); ConstBuffer<size_t, 2> host_pitches(_host_pitches, host_pitches_l); return c_handle_retry_mem_error([&] { pyopencl_call_guarded( clEnqueueWriteBufferRect, queue, mem, bool(block), buf_orig, host_orig, reg, buf_pitches[0], buf_pitches[1], host_pitches[0], host_pitches[1], buf, wait_for, nanny_event_out(evt, pyobj)); }); #else PYOPENCL_UNSUPPORTED(clEnqueueWriteBufferRect, "CL 1.0") #endif }
error* enqueue_write_buffer(clobj_t *evt, clobj_t _queue, clobj_t _mem, const void *buffer, size_t size, size_t device_offset, const clobj_t *_wait_for, uint32_t num_wait_for, int block, void *pyobj) { const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); auto queue = static_cast<command_queue*>(_queue); auto mem = static_cast<memory_object*>(_mem); return c_handle_retry_mem_error([&] { pyopencl_call_guarded( clEnqueueWriteBuffer, queue, mem, bool(block), device_offset, size, buffer, wait_for, nanny_event_out(evt, pyobj)); }); }
error* enqueue_write_image(clobj_t *evt, clobj_t _queue, clobj_t _mem, const size_t *_orig, size_t orig_l, const size_t *_reg, size_t reg_l, const void *buf, size_t row_pitch, size_t slice_pitch, const clobj_t *_wait_for, uint32_t num_wait_for, int block, void *pyobj) { auto queue = static_cast<command_queue*>(_queue); auto img = static_cast<image*>(_mem); const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); ConstBuffer<size_t, 3> orig(_orig, orig_l); ConstBuffer<size_t, 3> reg(_reg, reg_l, 1); return c_handle_retry_mem_error([&] { pyopencl_call_guarded(clEnqueueWriteImage, queue, img, bool(block), orig, reg, row_pitch, slice_pitch, buf, wait_for, nanny_event_out(evt, pyobj)); }); }
error* enqueue_svm_memcpy( clobj_t *evt, clobj_t _queue, cl_bool is_blocking, void *dst_ptr, const void *src_ptr, size_t size, const clobj_t *_wait_for, uint32_t num_wait_for, void *pyobj) { #if PYOPENCL_CL_VERSION >= 0x2000 const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); auto queue = static_cast<command_queue*>(_queue); return c_handle_retry_mem_error([&] { pyopencl_call_guarded( clEnqueueSVMMemcpy, queue, is_blocking, dst_ptr, src_ptr, size, wait_for, nanny_event_out(evt, pyobj)); }); #else PYOPENCL_UNSUPPORTED_BEFORE(clEnqueueSVMMemcpy, "CL 2.0") #endif }