From 582457c4a7ebb824c87dc1427e900702f5e2e873 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Fri, 10 Aug 2018 17:30:05 -0500 Subject: [PATCH] Wrap CL2 constants --- pyopencl/__init__.py | 21 ++---- src/wrap_cl.hpp | 98 +++++++++++++++++++++--- src/wrap_constants.cpp | 168 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 263 insertions(+), 24 deletions(-) diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index ffd03907..0b3de63a 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -64,20 +64,17 @@ from pyopencl._cl import ( # noqa device_mem_cache_type, device_local_mem_type, device_exec_capabilities, - # FIXME - # device_svm_capabilities, + device_svm_capabilities, command_queue_properties, context_info, gl_context_info, context_properties, command_queue_info, - # FIXME - # queue_properties, + queue_properties, mem_flags, - # FIXME - # svm_mem_flags, + svm_mem_flags, channel_order, channel_type, @@ -94,10 +91,9 @@ from pyopencl._cl import ( # noqa kernel_info, kernel_arg_info, - # FIXME - # kernel_arg_address_qualifier, - # kernel_arg_access_qualifier, - # kernel_arg_type_qualifier, + kernel_arg_address_qualifier, + kernel_arg_access_qualifier, + kernel_arg_type_qualifier, kernel_work_group_info, event_info, @@ -105,8 +101,7 @@ from pyopencl._cl import ( # noqa command_execution_status, profiling_info, mem_migration_flags, - # FIXME - # mem_migration_flags_ext, + mem_migration_flags_ext, device_partition_property, device_affinity_domain, gl_object_type, @@ -132,8 +127,6 @@ from pyopencl._cl import ( # noqa # SVM, # SVMMap, - # FIXME - # CompilerWarning, _Program, Kernel, diff --git a/src/wrap_cl.hpp b/src/wrap_cl.hpp index 1a4cbd48..ab735ea1 100644 --- a/src/wrap_cl.hpp +++ b/src/wrap_cl.hpp @@ -648,7 +648,11 @@ namespace pyopencl case CL_DEVICE_AVAILABLE: DEV_GET_INT_INF(cl_bool); case CL_DEVICE_COMPILER_AVAILABLE: DEV_GET_INT_INF(cl_bool); case CL_DEVICE_EXECUTION_CAPABILITIES: DEV_GET_INT_INF(cl_device_exec_capabilities); +#if PYOPENCL_CL_VERSION >= 0x2000 + case CL_DEVICE_QUEUE_ON_HOST_PROPERTIES: DEV_GET_INT_INF(cl_command_queue_properties); +#else case CL_DEVICE_QUEUE_PROPERTIES: DEV_GET_INT_INF(cl_command_queue_properties); +#endif case CL_DEVICE_NAME: case CL_DEVICE_VENDOR: @@ -687,6 +691,30 @@ namespace pyopencl case CL_DEVICE_INTEGRATED_MEMORY_NV: DEV_GET_INT_INF(cl_bool); #endif +#ifdef CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV + case CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV: + DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_PCI_BUS_ID_NV + case CL_DEVICE_PCI_BUS_ID_NV: + DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_PCI_SLOT_ID_NV + case CL_DEVICE_PCI_SLOT_ID_NV: + DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD + case CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD: DEV_GET_INT_INF(cl_bool); +#endif +#ifdef CL_DEVICE_GFXIP_MAJOR_AMD + case CL_DEVICE_GFXIP_MAJOR_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_GFXIP_MINOR_AMD + case CL_DEVICE_GFXIP_MINOR_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD + case CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD: DEV_GET_INT_INF(cl_uint); +#endif #if PYOPENCL_CL_VERSION >= 0x1020 case CL_DEVICE_LINKER_AVAILABLE: DEV_GET_INT_INF(cl_bool); case CL_DEVICE_BUILT_IN_KERNELS: @@ -713,7 +741,7 @@ namespace pyopencl case CL_DEVICE_PREFERRED_INTEROP_USER_SYNC: DEV_GET_INT_INF(cl_bool); case CL_DEVICE_PRINTF_BUFFER_SIZE: DEV_GET_INT_INF(cl_bool); #endif -// {{{ AMD dev attrs +// {{{ AMD dev attrs cl_amd_device_attribute_query // // types of AMD dev attrs divined from // https://www.khronos.org/registry/cl/api/1.2/cl.hpp @@ -740,15 +768,6 @@ namespace pyopencl #ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD case CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD: DEV_GET_INT_INF(cl_uint); #endif -#ifdef CL_DEVICE_SIMD_WIDTH_AMD - case CL_DEVICE_SIMD_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); -#endif -#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD - case CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); -#endif -#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD - case CL_DEVICE_WAVEFRONT_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); -#endif #ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD case CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD: DEV_GET_INT_INF(cl_uint); #endif @@ -769,6 +788,56 @@ namespace pyopencl #ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT case CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT: DEV_GET_INT_INF(cl_uint); #endif +#if PYOPENCL_CL_VERSION >= 0x2000 + case CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE: DEV_GET_INT_INF(size_t); + case CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES: DEV_GET_INT_INF(cl_command_queue_properties); + case CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_ON_DEVICE_QUEUES: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_ON_DEVICE_EVENTS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_SVM_CAPABILITIES: DEV_GET_INT_INF(cl_device_svm_capabilities); + case CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE: DEV_GET_INT_INF(size_t); + case CL_DEVICE_MAX_PIPE_ARGS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PIPE_MAX_PACKET_SIZE: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT: DEV_GET_INT_INF(cl_uint); +#endif +#if PYOPENCL_CL_VERSION >= 0x2010 + case CL_DEVICE_IL_VERSION: DEV_GET_INT_INF(); + case CL_DEVICE_MAX_NUM_SUB_GROUPS: DEV_GET_INT_INF(); + case CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS: DEV_GET_INT_INF(); +#endif +#ifdef CL_DEVICE_ME_VERSION_INTEL + case CL_DEVICE_ME_VERSION_INTEL: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM + case CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_PAGE_SIZE_QCOM + case CL_DEVICE_PAGE_SIZE_QCOM: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_SPIR_VERSIONS + case CL_DEVICE_SPIR_VERSIONS: + PYOPENCL_GET_STR_INFO(Device, m_device, param_name); +#endif +#ifdef CL_DEVICE_CORE_TEMPERATURE_ALTERA + case CL_DEVICE_CORE_TEMPERATURE_ALTERA: DEV_GET_INT_INF(cl_int); +#endif + +#ifdef CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL + case CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL: + { + std::vector<cl_uint> result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_RETURN_VECTOR(cl_uint, result); + } +#endif +#ifdef CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL + case CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL: DEV_GET_INT_INF(cl_uint); +#endif default: throw error("Device.get_info", CL_INVALID_VALUE); @@ -1255,6 +1324,9 @@ namespace pyopencl case CL_PROFILING_COMMAND_SUBMIT: case CL_PROFILING_COMMAND_START: case CL_PROFILING_COMMAND_END: +#if PYOPENCL_CL_VERSION >= 0x2000 + case CL_PROFILING_COMMAND_COMPLETE: +#endif PYOPENCL_GET_INTEGRAL_INFO(EventProfiling, m_event, param_name, cl_ulong); default: @@ -3177,6 +3249,12 @@ namespace pyopencl PYOPENCL_FIRST_ARG, param_name, cl_program_binary_type); #endif +#if PYOPENCL_CL_VERSION >= 0x2000 + case CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE: + PYOPENCL_GET_INTEGRAL_INFO(ProgramBuild, + PYOPENCL_FIRST_ARG, param_name, + size_t); +#endif #undef PYOPENCL_FIRST_ARG default: diff --git a/src/wrap_constants.cpp b/src/wrap_constants.cpp index 3356eba5..7bf410c9 100644 --- a/src/wrap_constants.cpp +++ b/src/wrap_constants.cpp @@ -15,6 +15,7 @@ namespace class device_mem_cache_type { }; class device_local_mem_type { }; class device_exec_capabilities { }; + class device_svm_capabilities { }; class command_queue_properties { }; class context_info { }; class gl_context_info { }; @@ -38,6 +39,7 @@ namespace class kernel_arg_info { }; class kernel_arg_address_qualifier { }; class kernel_arg_access_qualifier { }; + class kernel_arg_type_qualifier { }; class kernel_work_group_info { }; class event_info { }; class command_type { }; @@ -186,6 +188,11 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(, INVALID_DEVICE_PARTITION_COUNT); #endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(, INVALID_PIPE_SIZE); + ADD_ATTR(, INVALID_DEVICE_QUEUE); +#endif + #if defined(cl_ext_device_fission) && defined(PYOPENCL_USE_DEVICE_FISSION) ADD_ATTR(, DEVICE_PARTITION_FAILED_EXT); ADD_ATTR(, INVALID_PARTITION_COUNT_EXT); @@ -267,6 +274,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(DEVICE_, COMPILER_AVAILABLE); ADD_ATTR(DEVICE_, EXECUTION_CAPABILITIES); ADD_ATTR(DEVICE_, QUEUE_PROPERTIES); +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(DEVICE_, QUEUE_ON_HOST_PROPERTIES); +#endif ADD_ATTR(DEVICE_, NAME); ADD_ATTR(DEVICE_, VENDOR); ADD_ATTR(, DRIVER_VERSION); @@ -296,6 +306,16 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(DEVICE_, GPU_OVERLAP_NV); ADD_ATTR(DEVICE_, KERNEL_EXEC_TIMEOUT_NV); ADD_ATTR(DEVICE_, INTEGRATED_MEMORY_NV); + // Nvidia specific device attributes, not defined in Khronos CL/cl_ext.h +#ifdef CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV + ADD_ATTR(DEVICE_, ATTRIBUTE_ASYNC_ENGINE_COUNT_NV); +#endif +#ifdef CL_DEVICE_PCI_BUS_ID_NV + ADD_ATTR(DEVICE_, PCI_BUS_ID_NV); +#endif +#ifdef CL_DEVICE_PCI_SLOT_ID_NV + ADD_ATTR(DEVICE_, PCI_SLOT_ID_NV); +#endif #endif // {{{ cl_amd_device_attribute_query #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD @@ -338,6 +358,19 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(DEVICE_, LOCAL_MEM_BANKS_AMD); #endif // }}} +#ifdef CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD + ADD_ATTR(DEVICE_, THREAD_TRACE_SUPPORTED_AMD); +#endif +#ifdef CL_DEVICE_GFXIP_MAJOR_AMD + ADD_ATTR(DEVICE_, GFXIP_MAJOR_AMD); +#endif +#ifdef CL_DEVICE_GFXIP_MINOR_AMD + ADD_ATTR(DEVICE_, GFXIP_MINOR_AMD); +#endif +#ifdef CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD + ADD_ATTR(DEVICE_, AVAILABLE_ASYNC_QUEUES_AMD); +#endif + #ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT ADD_ATTR(DEVICE_, MAX_ATOMIC_COUNTERS_EXT); #endif @@ -358,6 +391,58 @@ void pyopencl_expose_constants(py::module &m) #ifdef cl_khr_image2d_from_buffer ADD_ATTR(DEVICE_, IMAGE_PITCH_ALIGNMENT); ADD_ATTR(DEVICE_, IMAGE_BASE_ADDRESS_ALIGNMENT); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(DEVICE_, MAX_READ_WRITE_IMAGE_ARGS); + ADD_ATTR(DEVICE_, MAX_GLOBAL_VARIABLE_SIZE); + ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_PROPERTIES); + ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_PREFERRED_SIZE); + ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_MAX_SIZE); + ADD_ATTR(DEVICE_, MAX_ON_DEVICE_QUEUES); + ADD_ATTR(DEVICE_, MAX_ON_DEVICE_EVENTS); + ADD_ATTR(DEVICE_, SVM_CAPABILITIES); + ADD_ATTR(DEVICE_, GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE); + ADD_ATTR(DEVICE_, MAX_PIPE_ARGS); + ADD_ATTR(DEVICE_, PIPE_MAX_ACTIVE_RESERVATIONS); + ADD_ATTR(DEVICE_, PIPE_MAX_PACKET_SIZE); + ADD_ATTR(DEVICE_, PREFERRED_PLATFORM_ATOMIC_ALIGNMENT); + ADD_ATTR(DEVICE_, PREFERRED_GLOBAL_ATOMIC_ALIGNMENT); + ADD_ATTR(DEVICE_, PREFERRED_LOCAL_ATOMIC_ALIGNMENT); +#endif +#if PYOPENCL_CL_VERSION >= 0x2010 + ADD_ATTR(DEVICE_, IL_VERSION); + ADD_ATTR(DEVICE_, MAX_NUM_SUB_GROUPS); + ADD_ATTR(DEVICE_, SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS); +#endif + /* cl_intel_advanced_motion_estimation */ +#ifdef CL_DEVICE_ME_VERSION_INTEL + ADD_ATTR(DEVICE_, ME_VERSION_INTEL); +#endif + + /* cl_qcom_ext_host_ptr */ +#ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM + ADD_ATTR(DEVICE_, EXT_MEM_PADDING_IN_BYTES_QCOM); +#endif +#ifdef CL_DEVICE_PAGE_SIZE_QCOM + ADD_ATTR(DEVICE_, PAGE_SIZE_QCOM); +#endif + + /* cl_khr_spir */ +#ifdef CL_DEVICE_SPIR_VERSIONS + ADD_ATTR(DEVICE_, SPIR_VERSIONS); +#endif + + /* cl_altera_device_temperature */ +#ifdef CL_DEVICE_CORE_TEMPERATURE_ALTERA + ADD_ATTR(DEVICE_, CORE_TEMPERATURE_ALTERA); +#endif + + /* cl_intel_simultaneous_sharing */ +#ifdef CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL + ADD_ATTR(DEVICE_, SIMULTANEOUS_INTEROPS_INTEL); +#endif +#ifdef CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL + ADD_ATTR(DEVICE_, NUM_SIMULTANEOUS_INTEROPS_INTEL); #endif } @@ -399,12 +484,27 @@ void pyopencl_expose_constants(py::module &m) #endif } + { + py::class_<device_svm_capabilities> cls(m, "device_svm_capabilities"); +#if PYOPENCL_CL_VERSION >= 0x2000 + // device_svm_capabilities + ADD_ATTR(DEVICE_SVM_, COARSE_GRAIN_BUFFER); + ADD_ATTR(DEVICE_SVM_, FINE_GRAIN_BUFFER); + ADD_ATTR(DEVICE_SVM_, FINE_GRAIN_SYSTEM); + ADD_ATTR(DEVICE_SVM_, ATOMICS); +#endif + } + { py::class_<command_queue_properties> cls(m, "command_queue_properties"); ADD_ATTR(QUEUE_, OUT_OF_ORDER_EXEC_MODE_ENABLE); ADD_ATTR(QUEUE_, PROFILING_ENABLE); #ifdef CL_QUEUE_IMMEDIATE_EXECUTION_ENABLE_INTEL ADD_ATTR(QUEUE_, IMMEDIATE_EXECUTION_ENABLE_INTEL); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(QUEUE_, ON_DEVICE); + ADD_ATTR(QUEUE_, ON_DEVICE_DEFAULT); #endif } @@ -456,6 +556,15 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(QUEUE_, PROPERTIES); } + { + // queue_properties +#if PYOPENCL_CL_VERSION >= 0x2000 + py::class_<queue_properties> cls(m, "queue_properties"); + ADD_ATTR(QUEUE_, PROPERTIES); + ADD_ATTR(QUEUE_, SIZE); +#endif + } + { py::class_<mem_flags> cls(m, "mem_flags"); ADD_ATTR(MEM_, READ_WRITE); @@ -471,6 +580,20 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(MEM_, HOST_WRITE_ONLY); ADD_ATTR(MEM_, HOST_READ_ONLY); ADD_ATTR(MEM_, HOST_NO_ACCESS); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(MEM_, KERNEL_READ_AND_WRITE); +#endif + } + + { +#if PYOPENCL_CL_VERSION >= 0x2000 + py::class_<svm_mem_flags> cls(m, "svm_mem_flags"); + ADD_ATTR(MEM_, READ_WRITE); + ADD_ATTR(MEM_, WRITE_ONLY); + ADD_ATTR(MEM_, READ_ONLY); + ADD_ATTR(MEM_, SVM_FINE_GRAIN_BUFFER); + ADD_ATTR(MEM_, SVM_ATOMICS); #endif } @@ -489,6 +612,13 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR( , Rx); ADD_ATTR( , RGx); ADD_ATTR( , RGBx); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR( , sRGB); + ADD_ATTR( , sRGBx); + ADD_ATTR( , sRGBA); + ADD_ATTR( , sBGRA); + ADD_ATTR( , ABGR); #endif } @@ -521,6 +651,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(MEM_OBJECT_, IMAGE1D); ADD_ATTR(MEM_OBJECT_, IMAGE1D_ARRAY); ADD_ATTR(MEM_OBJECT_, IMAGE1D_BUFFER); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(MEM_OBJECT_, PIPE); #endif } @@ -536,6 +669,9 @@ void pyopencl_expose_constants(py::module &m) #if PYOPENCL_CL_VERSION >= 0x1010 ADD_ATTR(MEM_, ASSOCIATED_MEMOBJECT); ADD_ATTR(MEM_, OFFSET); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(MEM_, USES_SVM_POINTER); #endif } @@ -580,6 +716,11 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(SAMPLER_, NORMALIZED_COORDS); ADD_ATTR(SAMPLER_, ADDRESSING_MODE); ADD_ATTR(SAMPLER_, FILTER_MODE); +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(SAMPLER_, MIP_FILTER_MODE); + ADD_ATTR(SAMPLER_, LOD_MIN); + ADD_ATTR(SAMPLER_, LOD_MAX); +#endif } { @@ -613,6 +754,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(PROGRAM_BUILD_, LOG); #if PYOPENCL_CL_VERSION >= 0x1020 ADD_ATTR(PROGRAM_, BINARY_TYPE); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(PROGRAM_BUILD_, GLOBAL_VARIABLE_TOTAL_SIZE); #endif } @@ -670,6 +814,20 @@ void pyopencl_expose_constants(py::module &m) #endif } + { + py::class_<kernel_arg_type_qualifier> cls( + m, "kernel_arg_type_qualifier"); +#if PYOPENCL_CL_VERSION >= 0x1020 + ADD_ATTR(KERNEL_ARG_TYPE_, NONE); + ADD_ATTR(KERNEL_ARG_TYPE_, CONST); + ADD_ATTR(KERNEL_ARG_TYPE_, RESTRICT); + ADD_ATTR(KERNEL_ARG_TYPE_, VOLATILE); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(KERNEL_ARG_TYPE_, PIPE); +#endif + } + { py::class_<kernel_work_group_info> cls(m, "kernel_work_group_info"); ADD_ATTR(KERNEL_, WORK_GROUP_SIZE); @@ -728,6 +886,13 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(COMMAND_, MIGRATE_MEM_OBJECTS); ADD_ATTR(COMMAND_, FILL_BUFFER); ADD_ATTR(COMMAND_, FILL_IMAGE); +#endif +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(COMMAND_, SVM_FREE); + ADD_ATTR(COMMAND_, SVM_MEMCPY); + ADD_ATTR(COMMAND_, SVM_MEMFILL); + ADD_ATTR(COMMAND_, SVM_MAP); + ADD_ATTR(COMMAND_, SVM_UNMAP); #endif } @@ -745,6 +910,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(PROFILING_COMMAND_, SUBMIT); ADD_ATTR(PROFILING_COMMAND_, START); ADD_ATTR(PROFILING_COMMAND_, END); +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR("profiling_info", PROFILING_COMMAND_, COMPLETE); +#endif } /* not needed--filled in automatically by implementation. -- GitLab