diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp index 17ae1a910f7d1bdce8827c481e21b48e8ff8d2d5..6f69d0f19f9849db2c6160c7b17b8492e27aa1da 100644 --- a/src/wrapper/wrap_cl.hpp +++ b/src/wrapper/wrap_cl.hpp @@ -1310,12 +1310,6 @@ namespace pyopencl } #endif - inline - memory_object *memory_object_from_int(intptr_t cl_mem_as_int) - { - return new memory_object((cl_mem) cl_mem_as_int, true); - } - // }}} // {{{ buffer @@ -3231,6 +3225,40 @@ namespace pyopencl // {{{ deferred implementation bits + inline py::object create_mem_object_wrapper(cl_mem mem) + { + cl_mem_object_type mem_obj_type; + PYOPENCL_CALL_GUARDED(clGetMemObjectInfo, \ + (mem, CL_MEM_TYPE, sizeof(mem_obj_type), &mem_obj_type, 0)); + + switch (mem_obj_type) + { + case CL_MEM_OBJECT_BUFFER: + return py::object(handle_from_new_ptr( + new buffer(mem, /*retain*/ true))); + case CL_MEM_OBJECT_IMAGE2D: + case CL_MEM_OBJECT_IMAGE3D: +#ifdef CL_VERSION_1_2 + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + case CL_MEM_OBJECT_IMAGE1D: + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + case CL_MEM_OBJECT_IMAGE1D_BUFFER: +#endif + return py::object(handle_from_new_ptr( + new image(mem, /*retain*/ true))); + default: + return py::object(handle_from_new_ptr( + new memory_object(mem, /*retain*/ true))); + } + } + + inline + py::object memory_object_from_int(intptr_t cl_mem_as_int) + { + return create_mem_object_wrapper((cl_mem) cl_mem_as_int); + } + + inline py::object memory_object_holder::get_info(cl_mem_info param_name) const { @@ -3270,23 +3298,7 @@ namespace pyopencl return py::object(); } - cl_mem_object_type mem_obj_type; - PYOPENCL_CALL_GUARDED(clGetMemObjectInfo, \ - (data(), CL_MEM_TYPE, sizeof(mem_obj_type), &mem_obj_type, 0)); - - switch (mem_obj_type) - { - case CL_MEM_OBJECT_BUFFER: - return py::object(handle_from_new_ptr( - new buffer(param_value, /*retain*/ true))); - case CL_MEM_OBJECT_IMAGE2D: - case CL_MEM_OBJECT_IMAGE3D: - return py::object(handle_from_new_ptr( - new image(param_value, /*retain*/ true))); - default: - return py::object(handle_from_new_ptr( - new memory_object(param_value, /*retain*/ true))); - } + return create_mem_object_wrapper(param_value); } case CL_MEM_OFFSET: PYOPENCL_GET_INTEGRAL_INFO(MemObject, data(), param_name, diff --git a/src/wrapper/wrap_cl_part_1.cpp b/src/wrapper/wrap_cl_part_1.cpp index 48095b04e3bbcfda63d417eceedd57cb18276b22..eaa62ae65646d022ad664062f476590c42c76053 100644 --- a/src/wrapper/wrap_cl_part_1.cpp +++ b/src/wrapper/wrap_cl_part_1.cpp @@ -152,7 +152,6 @@ void pyopencl_expose_part_1() .add_property("obj_ptr", &cls::obj_ptr) .add_property("hostbuf", &cls::hostbuf) .def("from_cl_mem_as_int", memory_object_from_int, - py::return_value_policy<py::manage_new_object>(), py::args("cl_mem_as_int")) .staticmethod("from_cl_mem_as_int") ;