diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index 3461709cf4fabfce9a8c176c458cc6dba8b5eb1c..2e7a0da77cfb1d7895f1232688c1bd9ea776a1e2 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -721,11 +721,10 @@ def _add_functionality(): # }}} - def kernel__generate_buffer_arg_setter(self, gen, arg_idx, buf_var, - could_be_numpy_scalar): + def kernel__generate_buffer_arg_setter(self, gen, arg_idx, buf_var): from pytools.py_codegen import Indentation - if _CPY2 and could_be_numpy_scalar: + if _CPY2: # https://github.com/numpy/numpy/issues/5381 gen("if isinstance({buf_var}, np.generic):".format(buf_var=buf_var)) with Indentation(gen): @@ -739,6 +738,15 @@ def _add_functionality(): """ .format(arg_idx=arg_idx, buf_var=buf_var)) + def kernel__generate_bytes_arg_setter(self, gen, arg_idx, buf_var): + gen(""" + status = _lib.kernel__set_arg_buf(self.ptr, {arg_idx}, + {buf_var}, len({buf_var})) + if status != _ffi.NULL: + _handle_error(status) + """ + .format(arg_idx=arg_idx, buf_var=buf_var)) + def kernel__generate_generic_arg_handler(self, gen, arg_idx, arg_var): from pytools.py_codegen import Indentation @@ -754,8 +762,7 @@ def _add_functionality(): gen("else:") with Indentation(gen): - self._generate_buffer_arg_setter(gen, arg_idx, arg_var, - could_be_numpy_scalar=True) + self._generate_buffer_arg_setter(gen, arg_idx, arg_var) def kernel__generate_naive_call(self): num_args = self.num_args @@ -849,15 +856,13 @@ def _add_functionality(): gen( "buf = pack('{arg_char}', {arg_var}.real)" .format(arg_char=arg_char, arg_var=arg_var)) - self._generate_buffer_arg_setter(gen, cl_arg_idx, "buf", - could_be_numpy_scalar=False) + self._generate_bytes_arg_setter(gen, cl_arg_idx, "buf") cl_arg_idx += 1 gen("current_arg = current_arg + 1000") gen( "buf = pack('{arg_char}', {arg_var}.imag)" .format(arg_char=arg_char, arg_var=arg_var)) - self._generate_buffer_arg_setter(gen, cl_arg_idx, "buf", - could_be_numpy_scalar=False) + self._generate_bytes_arg_setter(gen, cl_arg_idx, "buf") cl_arg_idx += 1 elif (work_around_arg_count_bug == "apple" @@ -873,8 +878,7 @@ def _add_functionality(): "buf = pack('{arg_char}{arg_char}', " "{arg_var}.real, {arg_var}.imag)" .format(arg_char=arg_char, arg_var=arg_var)) - self._generate_buffer_arg_setter(gen, cl_arg_idx, "buf", - could_be_numpy_scalar=False) + self._generate_bytes_arg_setter(gen, cl_arg_idx, "buf") cl_arg_idx += 1 fp_arg_count += 2 @@ -886,8 +890,7 @@ def _add_functionality(): gen( "buf = pack('{arg_char}', long({arg_var}))" .format(arg_char=arg_dtype.char, arg_var=arg_var)) - self._generate_buffer_arg_setter(gen, cl_arg_idx, "buf", - could_be_numpy_scalar=False) + self._generate_bytes_arg_setter(gen, cl_arg_idx, "buf") cl_arg_idx += 1 else: @@ -901,8 +904,7 @@ def _add_functionality(): .format( arg_char=arg_char, arg_var=arg_var)) - self._generate_buffer_arg_setter(gen, cl_arg_idx, "buf", - could_be_numpy_scalar=False) + self._generate_bytes_arg_setter(gen, cl_arg_idx, "buf") cl_arg_idx += 1 gen("") @@ -935,6 +937,7 @@ def _add_functionality(): Kernel.__init__ = kernel_init Kernel._set_set_args_body = kernel__set_set_args_body Kernel._generate_buffer_arg_setter = kernel__generate_buffer_arg_setter + Kernel._generate_bytes_arg_setter = kernel__generate_bytes_arg_setter Kernel._generate_generic_arg_handler = kernel__generate_generic_arg_handler Kernel._generate_naive_call = kernel__generate_naive_call Kernel.set_scalar_arg_dtypes = kernel_set_scalar_arg_dtypes