diff --git a/doc/source/runtime.rst b/doc/source/runtime.rst index 32434a8cd86708c9992faecc3ac74e3cf967f8e7..7479b78b47e433e26da99f4fe7186d83dd7829d3 100644 --- a/doc/source/runtime.rst +++ b/doc/source/runtime.rst @@ -379,90 +379,16 @@ Buffers :meth:`get_sub_region` is set to the same flags with which *self* was created. -.. function:: enqueue_read_buffer(queue, mem, hostbuf, device_offset=0, wait_for=None, is_blocking=True) - |std-enqueue-blurb| - - *hostbuf* |buf-iface| - - |copy-depr| - - .. versionchanged:: 2011.1 - *is_blocking* now defaults to True. - -.. function:: enqueue_write_buffer(queue, mem, hostbuf, device_offset=0, wait_for=None, is_blocking=True) - - |std-enqueue-blurb| - - *hostbuf* |buf-iface| - - |copy-depr| - - .. versionchanged:: 2011.1 - *is_blocking* now defaults to True. - -.. function:: enqueue_copy_buffer(queue, src, dst, byte_count=0, src_offset=0, dst_offset=0, wait_for=None) - - If *byte_count* is passed as 0 (the default), the size of the - :class:`Buffer` *src* is used instead. - - |std-enqueue-blurb| - - |copy-depr| - - .. versionadded:: 0.91.5 - -.. function:: enqueue_read_buffer_rect(queue, mem, hostbuf, buffer_origin, host_origin, region, buffer_pitches=None, host_pitches=None, wait_for=None, is_blocking=True) - - The *origin* and *region* parameters are :class:`tuple` instances of length - three or shorter. The *pitches* parameters are :class:`tuple` instances of - length two or shorter, which may be zero to indicate 'tight packing'. - - |std-enqueue-blurb| - - *hostbuf* |buf-iface| - - |copy-depr| - - Only available in OpenCL 1.1 and newer. - - .. versionadded:: 0.92 - - .. versionchanged:: 2011.1 - *is_blocking* now defaults to True. - -.. function:: enqueue_write_buffer_rect(queue, mem, hostbuf, buffer_origin, host_origin, region, buffer_pitches=None, host_pitches=None, wait_for=None, is_blocking=True) - - The *origin* and *region* parameters are :class:`tuple` instances of length - three or shorter. The *pitches* parameters are :class:`tuple` instances of - length two or shorter, which may be zero to indicate 'tight packing'. - - |std-enqueue-blurb| - - *hostbuf* |buf-iface| - - |copy-depr| +.. function:: enqueue_fill_buffer(queue, mem, pattern, offset, size, wait_for=None) - Only available in OpenCL 1.1 and newer. - - .. versionadded:: 0.92 - - .. versionchanged:: 2011.1 - *is_blocking* now defaults to True. - -.. function:: enqueue_copy_buffer_rect(queue, src, dst, src_origin, dst_origin, region, src_pitches=None, dst_pitches=None, wait_for=None) - - The *origin* and *region* parameters are :class:`tuple` instances of length - three or shorter. The *pitches* parameters are :class:`tuple` instances of - length two or shorter, which may be zero to indicate 'tight packing'. + :arg pattern: a buffer object (likely a :class:`numpy.ndarray`) |std-enqueue-blurb| - |copy-depr| - - Only available in OpenCL 1.1 and newer. + Only available with CL 1.2. - .. versionadded:: 0.92 + .. versionadded:: 2011.2 Image Formats ^^^^^^^^^^^^^ @@ -570,49 +496,15 @@ Images .. versionadded:: 2011.2 -.. function:: enqueue_read_image(queue, mem, origin, region, hostbuf, row_pitch=0, slice_pitch=0, wait_for=None, is_blocking=True) +.. function:: enqueue_fill_image(queue, mem, color, origin, region, wait_for=None) - |copy-depr| + :arg color: a buffer object (likely a :class:`numpy.ndarray`) |std-enqueue-blurb| - .. versionchanged:: 0.91 - *pitch* arguments defaults to zero, moved. - - .. versionchanged:: 2011.1 - *is_blocking* now defaults to True. - - -.. function:: enqueue_write_image(queue, mem, origin, region, hostbuf, row_pitch=0, slice_pitch=0, wait_for=None, is_blocking=True) - - |copy-depr| - - |std-enqueue-blurb| - - .. versionchanged:: 0.91 - *pitch* arguments defaults to zero, moved. - - .. versionchanged:: 2011.1 - *is_blocking* now defaults to True. - - -.. function:: enqueue_copy_image(queue, src, dest, src_origin, dest_origin, region, wait_for=None) - - |copy-depr| - - |std-enqueue-blurb| - -.. function:: enqueue_copy_image_to_buffer(queue, src, dest, origin, region, offset, wait_for=None) - - |copy-depr| - - |std-enqueue-blurb| - -.. function:: enqueue_copy_buffer_to_image(queue, src, dest, offset, origin, region, wait_for=None) - - |copy-depr| + Only available with CL 1.2. - |std-enqueue-blurb| + .. versionadded:: 2011.2 Transfers ^^^^^^^^^ @@ -1025,5 +917,5 @@ with GL support. See :func:`have_gl`. .. versionchanged:: 2011.2 - Accepts the *platform* argument. Use *platform* equal to None is + Accepts the *platform* argument. Using *platform* equal to None is deprecated as of PyOpenCL 2011.2. diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp index 07a99fe9d7eed7d21618216b0d16ebea19861858..a0c44d10c7523ae008a361ce3bdd9bb059d7d916 100644 --- a/src/wrapper/wrap_cl.hpp +++ b/src/wrapper/wrap_cl.hpp @@ -1,7 +1,7 @@ #ifndef _AFJHAYYTA_PYOPENCL_HEADER_SEEN_WRAP_CL_HPP #define _AFJHAYYTA_PYOPENCL_HEADER_SEEN_WRAP_CL_HPP -// CL 1.2 TODO: clEnqueueFill{Buffer, Image} +// CL 1.2 TODO: // python interface for new-style image creation // clSetPrintfCallback @@ -1940,6 +1940,36 @@ namespace pyopencl // }}} +#ifdef CL_VERSION_1_2 + inline + event *enqueue_fill_buffer( + command_queue &cq, + memory_object_holder &mem, + py::object pattern, + size_t offset, + size_t size, + py::object py_wait_for + ) + { + PYOPENCL_PARSE_WAIT_FOR; + + const void *pattern_buf; + PYOPENCL_BUFFER_SIZE_T pattern_len; + + if (PyObject_AsReadBuffer(pattern.ptr(), &pattern_buf, &pattern_len)) + throw py::error_already_set(); + + cl_event evt; + PYOPENCL_CALL_GUARDED(clEnqueueFillBuffer, ( + cq.data(), + mem.data(), + pattern_buf, pattern_len, offset, size, + PYOPENCL_WAITLIST_ARGS, &evt + )); + PYOPENCL_RETURN_NEW_EVENT(evt); + } +#endif + // }}} // {{{ image @@ -2445,6 +2475,38 @@ namespace pyopencl // }}} +#ifdef CL_VERSION_1_2 + 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_CALL_GUARDED(clEnqueueFillImage, ( + cq.data(), + mem.data(), + color_buf, origin, region, + PYOPENCL_WAITLIST_ARGS, &evt + )); + PYOPENCL_RETURN_NEW_EVENT(evt); + } +#endif + // }}} // {{{ maps diff --git a/src/wrapper/wrap_cl_part_1.cpp b/src/wrapper/wrap_cl_part_1.cpp index 8c22898964dec2495d2df772263a4885100f493e..fa289ecf4cbf47e0113c680083578546bfbaf326 100644 --- a/src/wrapper/wrap_cl_part_1.cpp +++ b/src/wrapper/wrap_cl_part_1.cpp @@ -271,6 +271,12 @@ void pyopencl_expose_part_1() // }}} +#ifdef CL_VERSION_1_2 + py::def("enqueue_fill_buffer", enqueue_fill_buffer, + (py::args("queue", "mem", "pattern", "offset", "size"), + py::arg("wait_for")=py::object()), + py::return_value_policy()); +#endif } // vim: foldmethod=marker diff --git a/src/wrapper/wrap_cl_part_2.cpp b/src/wrapper/wrap_cl_part_2.cpp index 75b45b3e99530a810bc1c775636f05d99e9fd0bd..b5b2db82ab39410ff26724a9bb8eb4966df5798b 100644 --- a/src/wrapper/wrap_cl_part_2.cpp +++ b/src/wrapper/wrap_cl_part_2.cpp @@ -128,6 +128,13 @@ void pyopencl_expose_part_2() py::arg("wait_for")=py::object()), py::return_value_policy()); +#ifdef CL_VERSION_1_2 + py::def("enqueue_fill_image", enqueue_write_image, + (py::args("queue", "mem", "color", "origin", "region"), + py::arg("wait_for")=py::object()), + py::return_value_policy()); +#endif + // }}} // {{{ memory_map