From a597fdcf9ab0f1b203368e1f073c4e01335728ab Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Thu, 29 Oct 2015 12:44:38 -0500
Subject: [PATCH] Fix kernel initialization/setup out of all_kernels()

---
 pyopencl/__init__.py | 6 ++++++
 pyopencl/cffi_cl.py  | 6 +++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py
index b6e5ea83..0c3df5f9 100644
--- a/pyopencl/__init__.py
+++ b/pyopencl/__init__.py
@@ -675,10 +675,15 @@ def _add_functionality():
             prg = prg._get_prg()
 
         kernel_old_init(self, prg, name)
+
+        self._setup(prg)
+
+    def kernel__setup(self, prg):
         self._source = getattr(prg, "_source", None)
 
         self._generate_naive_call()
         self._wg_info_cache = {}
+        return self
 
     def kernel_get_work_group_info(self, param, device):
         try:
@@ -993,6 +998,7 @@ def _add_functionality():
                 *args, **kwargs)
 
     Kernel.__init__ = kernel_init
+    Kernel._setup = kernel__setup
     Kernel.get_work_group_info = kernel_get_work_group_info
     Kernel._set_set_args_body = kernel__set_set_args_body
     Kernel._generate_buffer_arg_setter = kernel__generate_buffer_arg_setter
diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index 5cef0a0f..5194f0b1 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -1045,7 +1045,11 @@ class _Program(_Common):
         knls = _CArray(_ffi.new('clobj_t**'))
         _handle_error(_lib.program__all_kernels(
             self.ptr, knls.ptr, knls.size))
-        return [Kernel._create(knls.ptr[0][i]) for i in range(knls.size[0])]
+        return [
+                Kernel
+                ._create(knls.ptr[0][i])
+                ._setup(self)
+                for i in range(knls.size[0])]
 
 # }}}
 
-- 
GitLab