From 1c750e01bda04d21e0571c73cee756a8b75351e6 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Sun, 26 Jul 2015 21:55:21 -0500 Subject: [PATCH] Fix, test program-valued GetInfo queries --- pyopencl/cffi_cl.py | 13 +++++++++++-- test/test_wrapper.py | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index fbd2a0cc..24a1ac5c 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -150,12 +150,21 @@ def _generic_info_to_python(info): _lib.CLASS_COMMAND_QUEUE: CommandQueue }[info.opaque_class] + if klass is _Program: + def create_inst(val): + from pyopencl import Program + return Program(_Program._create(val)) + + else: + create_inst = klass._create + if type_.endswith(']'): - ret = list(map(klass._create, value)) + ret = list(map(create_inst, value)) _lib.free_pointer(info.value) return ret else: - return klass._create(value) + return create_inst(value) + if type_ == 'char*': ret = _ffi_pystr(value) elif type_.startswith('char*['): diff --git a/test/test_wrapper.py b/test/test_wrapper.py index aef813a9..1f13b9cd 100644 --- a/test/test_wrapper.py +++ b/test/test_wrapper.py @@ -764,6 +764,23 @@ def test_buffer_get_host_array(ctx_factory): pass +def test_program_valued_get_info(ctx_factory): + ctx = ctx_factory() + + prg = cl.Program(ctx, """ + __kernel void + reverse(__global float *out) + { + out[get_global_id(0)] *= 2; + } + """).build() + + knl = prg.reverse + + assert knl.program == prg + knl.program.binaries[0] + + if __name__ == "__main__": # make sure that import failures get reported, instead of skipping the tests. import pyopencl # noqa -- GitLab