From fd055f3a1f3812f683ecd1074512260dc7a1d1c5 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Tue, 22 Jan 2013 23:59:51 -0500 Subject: [PATCH] Use header version *and* platform version to decide which image creation method to use. --- pyopencl/__init__.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index 3294ba14..64509e0a 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -224,7 +224,7 @@ class Image(_cl._ImageBase): if hostbuf is None and pitches is not None: raise Error("'pitches' may only be given if 'hostbuf' is given") - if get_cl_header_version() >= (1,2): + if context._get_cl_version() >= (1, 2) and get_cl_header_version() >= (1, 2): if buffer is not None and is_array: raise ValueError("'buffer' and 'is_array' are mutually exclusive") @@ -387,11 +387,26 @@ def _add_functionality(): # }}} # {{{ Context + def context_repr(self): return "<pyopencl.Context at 0x%x on %s>" % (self.obj_ptr, ", ".join(repr(dev) for dev in self.devices)) + def context_get_cl_version(self): + import re + platform = self.devices[0].platform + plat_version_string = platform.version + match = re.match(r"^OpenCL ([0-9]+)\.([0-9]+) .*$", + plat_version_string) + if match is None: + raise RuntimeError("platform %s returned non-conformant " + "platform version string '%s'" % (platform, plat_version_string)) + + return int(match.group(1)), int(match.group(2)) + Context.__repr__ = context_repr + from pytools import memoize_method + Context._get_cl_version = memoize_method(context_get_cl_version) # }}} -- GitLab