From 46e59d390745d9defc134a81dca43d7e3dc8f978 Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Fri, 20 Jun 2014 10:23:15 +0800 Subject: [PATCH] enqueue_fill_image in c --- pyopencl/c_wrapper/wrap_cl_core.h | 5 +++ src/c_wrapper/image.cpp | 51 ++++++++++++------------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index efd836fd..3e473a0f 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -200,6 +200,11 @@ error *enqueue_map_image(clobj_t *_evt, clobj_t *map, clobj_t _queue, size_t *row_pitch, size_t *slice_pitch, const clobj_t *_wait_for, uint32_t num_wait_for, int block); +error *enqueue_fill_image(clobj_t *evt, clobj_t _queue, clobj_t mem, + const void *color, const size_t *_origin, + size_t origin_l, const size_t *_region, + size_t region_l, const clobj_t *_wait_for, + uint32_t num_wait_for); // CL Object intptr_t clobj__int_ptr(clobj_t obj); error *clobj__get_info(clobj_t obj, cl_uint param, generic_info *out); diff --git a/src/c_wrapper/image.cpp b/src/c_wrapper/image.cpp index 9c53e8c5..438f9a80 100644 --- a/src/c_wrapper/image.cpp +++ b/src/c_wrapper/image.cpp @@ -250,35 +250,24 @@ enqueue_write_image(clobj_t *evt, clobj_t _queue, clobj_t _mem, } #if PYOPENCL_CL_VERSION >= 0x1020 -// PYOPENCL_INLINE -// event *enqueue_fill_image( -// command_queue &cq, -// memory_object_holder &mem, -// py::object color, -// py::object py_origin, py::object py_region, -// py::object py_wait_for -// ) -// { -// PYOPENCL_PARSE_WAIT_FOR; - -// COPY_PY_COORD_TRIPLE(origin); -// COPY_PY_REGION_TRIPLE(region); - -// const void *color_buf; -// PYOPENCL_BUFFER_SIZE_T color_len; - -// if (PyObject_AsReadBuffer(color.ptr(), &color_buf, &color_len)) -// throw py::error_already_set(); - -// cl_event evt; -// PYOPENCL_RETRY_IF_MEM_ERROR( -// PYOPENCL_CALL_GUARDED(clEnqueueFillImage, ( -// cq.data(), -// mem.data(), -// color_buf, origin, region, -// PYOPENCL_WAITLIST_ARGS, &evt -// )); -// ); -// PYOPENCL_RETURN_NEW_EVENT(evt); -// } +error* +enqueue_fill_image(clobj_t *evt, clobj_t _queue, clobj_t mem, + const void *color, const size_t *_origin, size_t origin_l, + const size_t *_region, size_t region_l, + const clobj_t *_wait_for, uint32_t num_wait_for) +{ + // TODO debug color + 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> origin(_origin, origin_l); + ConstBuffer<size_t, 3> region(_region, region_l, 1); + return c_handle_error([&] { + retry_mem_error([&] { + pyopencl_call_guarded( + clEnqueueFillImage, queue, img, color, origin, region, + wait_for, event_out(evt)); + }); + }); +} #endif -- GitLab