From d9d97fabe894348c014e5b6861c0fb13d84f8bee Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Sun, 22 Jun 2014 13:45:19 +0800 Subject: [PATCH] check cb availability only when needed --- pyopencl/cffi_cl.py | 11 ----------- src/c_wrapper/context.h | 2 +- src/c_wrapper/event.cpp | 8 +++++++- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index 3aefa690..d1fc6bee 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -918,17 +918,6 @@ class Kernel(_Common): class Event(_Common): _id = 'event' - @classmethod - def _create(cls, ptr): - self = _Common._create.__func__(cls, ptr) - try: - if (self.context._get_cl_version() >= (1, 1) and - get_cl_header_version() >= (1, 1)): - _lib.event__set_support_cb(ptr, 1); - except: - pass - return self - def __init__(self): pass diff --git a/src/c_wrapper/context.h b/src/c_wrapper/context.h index 3ae4098c..323381de 100644 --- a/src/c_wrapper/context.h +++ b/src/c_wrapper/context.h @@ -16,7 +16,7 @@ extern template void print_buf<cl_context>(std::ostream&, const cl_context*, class context : public clobj<cl_context> { public: PYOPENCL_DEF_CL_CLASS(CONTEXT); - void get_version(cl_context ctx, int *major, int *minor); + static void get_version(cl_context ctx, int *major, int *minor); PYOPENCL_INLINE context(cl_context ctx, bool retain) : clobj(ctx) diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp index f74d6e2c..a8f03438 100644 --- a/src/c_wrapper/event.cpp +++ b/src/c_wrapper/event.cpp @@ -64,7 +64,13 @@ release_private_use_cb(event *evt) // is already completed. if (status <= CL_COMPLETE) return false; - return evt->support_cb; + cl_context ctx; + pyopencl_call_guarded(clGetEventInfo, evt, CL_EVENT_CONTEXT, + size_arg(ctx), nullptr); + int major; + int minor; + context::get_version(ctx, &major, &minor); + return (major > 1) || (major >= 1 && minor >= 1); } catch (const clerror &e) { cleanup_print_error(e.code(), e.what()); return false; -- GitLab