Skip to content
Snippets Groups Projects
Commit fc244cc6 authored by Yichao Yu's avatar Yichao Yu
Browse files

Kernel.get_arg_info

parent 454f137f
No related branches found
No related tags found
No related merge requests found
......@@ -13,7 +13,6 @@
- _Program.compile
- _Program.link
- _Program.all_kernels
- Kernel.get_arg_info
- ?LocalMemory
- get_apple_cgl_share_group
- GLBuffer
......
......@@ -123,6 +123,8 @@ error *kernel__set_arg_buf(clobj_t kernel, cl_uint arg_index,
error *kernel__get_work_group_info(clobj_t kernel,
cl_kernel_work_group_info param,
clobj_t device, generic_info *out);
error *kernel__get_arg_info(clobj_t _knl, cl_uint idx,
cl_kernel_arg_info param, generic_info *out);
// Image
error *create_image_2d(clobj_t *image, clobj_t context, cl_mem_flags flags,
cl_image_format *fmt, size_t width, size_t height,
......
......@@ -910,6 +910,11 @@ class Kernel(_Common):
self.ptr, param, device.ptr, info))
return _generic_info_to_python(info)
def get_arg_info(self, idx, param):
info = _ffi.new('generic_info*')
_handle_error(_lib.kernel__get_arg_info(self.ptr, idx, param, info))
return _generic_info_to_python(info)
# }}}
......
......@@ -67,6 +67,26 @@ kernel::get_work_group_info(cl_kernel_work_group_info param,
}
}
#if PYOPENCL_CL_VERSION >= 0x1020
PYOPENCL_USE_RESULT generic_info
kernel::get_arg_info(cl_uint idx, cl_kernel_arg_info param) const
{
switch (param) {
case CL_KERNEL_ARG_ADDRESS_QUALIFIER:
return pyopencl_get_int_info(cl_kernel_arg_address_qualifier,
KernelArg, this, idx, param);
case CL_KERNEL_ARG_ACCESS_QUALIFIER:
return pyopencl_get_int_info(cl_kernel_arg_access_qualifier,
KernelArg, this, idx, param);
case CL_KERNEL_ARG_TYPE_NAME:
case CL_KERNEL_ARG_NAME:
return pyopencl_get_str_info(KernelArg, this, idx, param);
default:
throw clerror("Kernel.get_arg_info", CL_INVALID_VALUE);
}
}
#endif
}
// c wrapper
......@@ -137,6 +157,18 @@ kernel__get_work_group_info(clobj_t _knl, cl_kernel_work_group_info param,
});
}
#if PYOPENCL_CL_VERSION >= 0x1020
error*
kernel__get_arg_info(clobj_t _knl, cl_uint idx, cl_kernel_arg_info param,
generic_info *out)
{
auto knl = static_cast<kernel*>(_knl);
return c_handle_error([&] {
*out = knl->get_arg_info(idx, param);
});
}
#endif
error*
enqueue_nd_range_kernel(clobj_t *evt, clobj_t _queue, clobj_t _knl,
cl_uint work_dim, const size_t *global_work_offset,
......
......@@ -33,34 +33,10 @@ public:
get_work_group_info(cl_kernel_work_group_info param,
const device *dev) const;
// #if PYOPENCL_CL_VERSION >= 0x1020
// py::object get_arg_info(
// cl_uint arg_index,
// cl_kernel_arg_info param_name
// ) const
// {
// switch (param_name)
// {
// #define PYOPENCL_FIRST_ARG data(), arg_index // hackety hack
// case CL_KERNEL_ARG_ADDRESS_QUALIFIER:
// PYOPENCL_GET_INTEGRAL_INFO(KernelArg,
// PYOPENCL_FIRST_ARG, param_name,
// cl_kernel_arg_address_qualifier);
// case CL_KERNEL_ARG_ACCESS_QUALIFIER:
// PYOPENCL_GET_INTEGRAL_INFO(KernelArg,
// PYOPENCL_FIRST_ARG, param_name,
// cl_kernel_arg_access_qualifier);
// case CL_KERNEL_ARG_TYPE_NAME:
// case CL_KERNEL_ARG_NAME:
// PYOPENCL_GET_STR_INFO(KernelArg, PYOPENCL_FIRST_ARG, param_name);
// #undef PYOPENCL_FIRST_ARG
// default:
// throw error("Kernel.get_arg_info", CL_INVALID_VALUE);
// }
// }
// #endif
#if PYOPENCL_CL_VERSION >= 0x1020
PYOPENCL_USE_RESULT generic_info
get_arg_info(cl_uint idx, cl_kernel_arg_info param) const;
#endif
};
extern template void print_clobj<kernel>(std::ostream&, const kernel*);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment