From 80a9412ea001f59272c2005d647d138316299419 Mon Sep 17 00:00:00 2001 From: Yichao Yu Date: Sun, 22 Jun 2014 20:55:42 +0800 Subject: [PATCH] _Program.create_with_built_in_kernels --- TODOs | 1 - pyopencl/c_wrapper/wrap_cl_core.h | 4 ++++ pyopencl/cffi_cl.py | 8 ++++++++ src/c_wrapper/program.cpp | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/TODOs b/TODOs index b34b882c..9c826a55 100644 --- a/TODOs +++ b/TODOs @@ -5,7 +5,6 @@ - enqueue_nd_range_kernel size/offset mess - CommandQueue.set_property -- _Program.create_with_built_in_kernels - _Program.compile - _Program.link - _Program.all_kernels diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index b50ab024..396014b9 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -109,6 +109,10 @@ error *program__build(clobj_t program, const char *options, error *program__kind(clobj_t program, int *kind); error *program__get_build_info(clobj_t program, clobj_t device, cl_program_build_info param, generic_info *out); +error *program__create_with_builtin_kernels(clobj_t *_prg, clobj_t _ctx, + const clobj_t *_devs, + uint32_t num_devs, + const char *names); // Sampler error *create_sampler(clobj_t *sampler, clobj_t context, int norm_coords, cl_addressing_mode am, cl_filter_mode fm); diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index f7043b8b..422fad54 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -881,6 +881,14 @@ class _Program(_Common): self.ptr, device.ptr, param, info)) return _generic_info_to_python(info) + @classmethod + def create_with_builtin_kernels(cls, context, devices, kernel_names): + _devs, num_devs = _clobj_list(devices) + _prg = _ffi.new('clobj_t*') + _handle_error(_lib.program__create_with_builtin_kernels( + _prg, context.ptr, _devs, num_devs, _to_cstring(kernel_names))) + return cls._create(_prg[0]) + # }}} diff --git a/src/c_wrapper/program.cpp b/src/c_wrapper/program.cpp index 87611fb4..286649cc 100644 --- a/src/c_wrapper/program.cpp +++ b/src/c_wrapper/program.cpp @@ -169,3 +169,19 @@ program__get_build_info(clobj_t _prog, clobj_t _dev, *out = prog->get_build_info(dev, param); }); } + +#if PYOPENCL_CL_VERSION >= 0x1020 +error* +program__create_with_builtin_kernels(clobj_t *_prg, clobj_t _ctx, + const clobj_t *_devs, uint32_t num_devs, + const char *names) +{ + const auto devs = buf_from_class(_devs, num_devs); + auto ctx = static_cast(_ctx); + return c_handle_error([&] { + auto prg = pyopencl_call_guarded(clCreateProgramWithBuiltInKernels, + ctx, devs, names); + *_prg = new_program(prg); + }); +} +#endif -- GitLab