From be9fd38f6fd85651422817e27dd1636788c374ad Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Fri, 15 Jan 2021 14:22:41 -0600
Subject: [PATCH] Create special-case set_arg wrappers for common integer/float
 types

---
 src/wrap_cl.hpp        | 7 +++++++
 src/wrap_cl_part_2.cpp | 7 +++++++
 2 files changed, 14 insertions(+)

diff --git a/src/wrap_cl.hpp b/src/wrap_cl.hpp
index ad5b7ab8..7ffcc983 100644
--- a/src/wrap_cl.hpp
+++ b/src/wrap_cl.hpp
@@ -4343,6 +4343,13 @@ namespace pyopencl
               sizeof(cl_mem), &m));
       }
 
+      template <typename T>
+      void set_arg_pod(cl_uint arg_index, T pod_value)
+      {
+        PYOPENCL_CALL_GUARDED(clSetKernelArg, (m_kernel, arg_index,
+              sizeof(T), &pod_value));
+      }
+
       void set_arg_mem(cl_uint arg_index, memory_object_holder &moh)
       {
         cl_mem m = moh.data();
diff --git a/src/wrap_cl_part_2.cpp b/src/wrap_cl_part_2.cpp
index e68c7851..2c986718 100644
--- a/src/wrap_cl_part_2.cpp
+++ b/src/wrap_cl_part_2.cpp
@@ -467,6 +467,13 @@ void pyopencl_expose_part_2(py::module &m)
 #endif
       .def("_set_arg_null", &cls::set_arg_null)
       .def("_set_arg_buf", &cls::set_arg_buf)
+      .def("_set_arg_mem", &cls::set_arg_mem)
+      .def("_set_arg_i32", &cls::set_arg_pod<int32_t>)
+      .def("_set_arg_i64", &cls::set_arg_pod<int64_t>)
+      .def("_set_arg_u32", &cls::set_arg_pod<uint32_t>)
+      .def("_set_arg_u64", &cls::set_arg_pod<uint64_t>)
+      .def("_set_arg_f32", &cls::set_arg_pod<float>)
+      .def("_set_arg_f64", &cls::set_arg_pod<double>)
 #if PYOPENCL_CL_VERSION >= 0x2000
       .def("_set_arg_svm", &cls::set_arg_svm)
 #endif
-- 
GitLab