From 2a8cd63e27ff7a5cac79dd1bf63da127cd0083c8 Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Sun, 25 May 2014 23:58:18 -0400 Subject: [PATCH] enqueue_fill_buffer --- pyopencl/c_wrapper/wrap_cl_core.h | 8 ++++++-- pyopencl/cffi_cl.py | 10 +++++++++- src/c_wrapper/wrap_cl.cpp | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index 6f707c64..8210ba33 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 2f522783..233e1a03 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 894642d3..e1796b26 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, -- GitLab