diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index 6f707c64362b0cb6a8714a9d2ccc3b6059ac1afc..8210ba3395964f9ec9ae6ac3fcd3f929de5ec7f6 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -139,7 +139,7 @@ error *enqueue_wait_for_events(clobj_t _queue, const clobj_t *_wait_for, uint32_t num_wait_for); error *enqueue_marker(clobj_t *event, clobj_t queue); error *enqueue_barrier(clobj_t queue); - +// enqueue_*_buffer* error *enqueue_read_buffer(clobj_t *event, clobj_t queue, clobj_t mem, void *buffer, size_t size, size_t device_offset, const clobj_t *wait_for, uint32_t num_wait_for, @@ -157,7 +157,11 @@ error *enqueue_map_buffer(clobj_t *_evt, clobj_t *mpa, clobj_t _queue, clobj_t _mem, cl_map_flags flags, size_t offset, size_t size, const clobj_t *_wait_for, uint32_t num_wait_for, int block); - +error *enqueue_fill_buffer(clobj_t *_evt, clobj_t _queue, clobj_t _mem, + void *pattern, size_t psize, size_t offset, + size_t size, const clobj_t *_wait_for, + uint32_t num_wait_for); +// enqueue_*_image* error *enqueue_read_image(clobj_t *event, clobj_t queue, clobj_t mem, size_t *origin, size_t *region, void *buffer, size_t row_pitch, size_t slice_pitch, diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index 2f5227834c7a5f452d912dd6e1f699ef24800e69..233e1a0336e7a4c1f6b3d7b74d4c65f5a54bca7c 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -711,7 +711,6 @@ class NannyEvent(Event): # enqueue_read_buffer_rect # enqueue_write_buffer_rect # enqueue_copy_buffer_rect -# enqueue_fill_buffer # get_image_format_channel_count # get_image_format_dtype_size # get_image_format_item_size @@ -891,6 +890,15 @@ def enqueue_map_buffer(queue, buf, flags, offset, shape, dtype, } return np.asarray(map), event +def _enqueue_fill_buffer(queue, mem, pattern, offset, size, wait_for=None): + c_pattern, psize, c_ref = _c_buffer_from_obj(pattern) + _event = _ffi.new('clobj_t*') + c_wait_for, num_wait_for = _clobj_list(wait_for) + _handle_error(_lib.enqueue_fill_buffer( + _event, queue.ptr, mem.ptr, c_pattern, psize, offset, size, + c_wait_for, num_wait_for)) + return _create_instance(Event, ptr_event[0]) + # }}} diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp index 894642d30bbca0b5b979b6cb7f0e1ea5bf2299de..e1796b2618120528e997f238bd0c09c6fdf98ac1 100644 --- a/src/c_wrapper/wrap_cl.cpp +++ b/src/c_wrapper/wrap_cl.cpp @@ -2559,6 +2559,26 @@ enqueue_map_buffer(clobj_t *_evt, clobj_t *map, clobj_t _queue, clobj_t _mem, }); } +error* +enqueue_fill_buffer(clobj_t *_evt, clobj_t _queue, clobj_t _mem, void *pattern, + size_t psize, size_t offset, size_t size, + const clobj_t *_wait_for, uint32_t num_wait_for) +{ + 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_holder*>(_mem); + return c_handle_error([&] { + cl_event evt; + retry_mem_error<void>([&] { + pyopencl_call_guarded( + clEnqueueFillBuffer, queue->data(), mem->data(), + pattern, psize, offset, size, num_wait_for, + wait_for.get(), &evt); + }); + *_evt = new_event(evt); + }); +} + error* enqueue_read_image(clobj_t *_evt, clobj_t _queue, clobj_t _mem, size_t *origin, size_t *region, void *buffer, size_t row_pitch,