1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
//! FFI bindings for OpenCL.
//!
//! For low level API access with Rust's safety and convenience, use the
//! extremely lightweight functions and types in the [ocl-core] crate.
//!
//! See [ocl-core] for usage examples.
//!
//! [ocl-core]: https://github.com/cogciprocate/ocl-core

pub extern crate libc;

mod cl_d3d10_h;
mod cl_d3d11_h;
mod cl_dx9_media_sharing_h;
mod cl_egl_h;
mod cl_gl_ext_h;
mod cl_gl_h;
mod cl_h;
mod glcorearb_h;
mod platform_h;

pub use libc::{
    c_char, c_double, c_float, c_int, c_longlong, c_short, c_uchar, c_uint, c_ulonglong, c_ushort,
    c_void, size_t,
};

pub use self::platform_h::{cl_GLenum, cl_GLint, cl_GLuint};

pub use self::glcorearb_h::{
    GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D,
    GL_TEXTURE_BUFFER, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
    GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_RECTANGLE,
};

pub use self::cl_gl_h::{
    cl_gl_context_info, cl_gl_object_type, cl_gl_platform_info, cl_gl_texture_info,
};

pub use self::cl_gl_h::{
    CL_CGL_SHAREGROUP_KHR, CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR, CL_DEVICES_FOR_GL_CONTEXT_KHR,
    CL_EGL_DISPLAY_KHR, CL_GLX_DISPLAY_KHR, CL_GL_CONTEXT_KHR, CL_GL_MIPMAP_LEVEL,
    CL_GL_NUM_SAMPLES, CL_GL_OBJECT_BUFFER, CL_GL_OBJECT_RENDERBUFFER, CL_GL_OBJECT_TEXTURE1D,
    CL_GL_OBJECT_TEXTURE1D_ARRAY, CL_GL_OBJECT_TEXTURE2D, CL_GL_OBJECT_TEXTURE2D_ARRAY,
    CL_GL_OBJECT_TEXTURE3D, CL_GL_OBJECT_TEXTURE_BUFFER, CL_GL_TEXTURE_TARGET,
    CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR, CL_KHR_GL_SHARING, CL_WGL_HDC_KHR,
};

#[cfg(not(feature = "opencl_vendor_mesa"))]
pub use self::cl_gl_h::{
    clCreateFromGLBuffer, clCreateFromGLRenderbuffer, clCreateFromGLTexture,
    clCreateFromGLTexture2D, clCreateFromGLTexture3D, clEnqueueAcquireGLObjects,
    clEnqueueReleaseGLObjects, clGetGLContextInfoKHR, clGetGLContextInfoKHR_fn, clGetGLObjectInfo,
    clGetGLTextureInfo,
};

pub use self::cl_egl_h::{
    cl_egl_image_properties_khr, CLeglDisplayKHR, CLeglImageKHR, CLeglSyncKHR,
};

pub use self::cl_gl_ext_h::CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE;

pub use self::cl_d3d10_h::{
    cl_d3d10_device_set_khr, cl_d3d10_device_source_khr, CL_CONTEXT_D3D10_DEVICE_KHR,
};

pub use self::cl_dx9_media_sharing_h::{
    CL_CONTEXT_ADAPTER_D3D9EX_KHR, CL_CONTEXT_ADAPTER_D3D9_KHR, CL_CONTEXT_ADAPTER_DXVA_KHR,
};

pub use self::cl_d3d11_h::{
    clCreateFromD3D11Buffer_fn, clCreateFromD3D11Texture2D_fn, clCreateFromD3D11Texture3D_fn,
    clEnqueueAcquireD3D11Objects_fn, clEnqueueReleaseD3D11Objects_fn, clGetDeviceIDsFromD3D11_fn,
    cl_d3d11_device_set, cl_d3d11_device_source, cl_id3d11_buffer, cl_id3d11_texture2d,
    cl_id3d11_texture3d, CL_CONTEXT_D3D11_DEVICE_KHR,
};

// Types:
pub use self::cl_h::{
    cl_addressing_mode, cl_bitfield, cl_bool, cl_buffer_create_type, cl_build_status,
    cl_channel_order, cl_channel_type, cl_char, cl_command_queue, cl_command_queue_info,
    cl_command_queue_properties, cl_command_type, cl_context, cl_context_info,
    cl_context_properties, cl_device_affinity_domain, cl_device_exec_capabilities,
    cl_device_fp_config, cl_device_id, cl_device_info, cl_device_local_mem_type,
    cl_device_mem_cache_type, cl_device_partition_property, cl_device_svm_capabilities,
    cl_device_type, cl_double, cl_event, cl_event_info, cl_filter_mode, cl_float, cl_half,
    cl_image_info, cl_int, cl_kernel, cl_kernel_arg_access_qualifier,
    cl_kernel_arg_address_qualifier, cl_kernel_arg_info, cl_kernel_arg_type_qualifier,
    cl_kernel_exec_info, cl_kernel_info, cl_kernel_sub_group_info, cl_kernel_work_group_info,
    cl_long, cl_map_flags, cl_mem, cl_mem_flags, cl_mem_info, cl_mem_migration_flags,
    cl_mem_object_type, cl_pipe_info, cl_pipe_properties, cl_platform_id, cl_platform_info,
    cl_profiling_info, cl_program, cl_program_binary_type, cl_program_build_info, cl_program_info,
    cl_queue_properties, cl_sampler, cl_sampler_info, cl_sampler_properties, cl_short,
    cl_svm_mem_flags, cl_uchar, cl_uint, cl_ulong, cl_ushort,
};

// Structs:
pub use self::cl_h::{cl_buffer_region, cl_image_desc, cl_image_format};

// Consts:
pub use self::cl_h::{
    CL_BUILD_PROGRAM_FAILURE, CL_COMPILER_NOT_AVAILABLE, CL_COMPILE_PROGRAM_FAILURE,
    CL_DEVICE_NOT_AVAILABLE, CL_DEVICE_NOT_FOUND, CL_DEVICE_PARTITION_FAILED,
    CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST, CL_IMAGE_FORMAT_MISMATCH,
    CL_IMAGE_FORMAT_NOT_SUPPORTED, CL_INVALID_ARG_INDEX, CL_INVALID_ARG_SIZE, CL_INVALID_ARG_VALUE,
    CL_INVALID_BINARY, CL_INVALID_BUFFER_SIZE, CL_INVALID_BUILD_OPTIONS, CL_INVALID_COMMAND_QUEUE,
    CL_INVALID_COMPILER_OPTIONS, CL_INVALID_CONTEXT, CL_INVALID_DEVICE,
    CL_INVALID_DEVICE_PARTITION_COUNT, CL_INVALID_DEVICE_QUEUE, CL_INVALID_DEVICE_TYPE,
    CL_INVALID_EVENT, CL_INVALID_EVENT_WAIT_LIST, CL_INVALID_GLOBAL_OFFSET,
    CL_INVALID_GLOBAL_WORK_SIZE, CL_INVALID_GL_OBJECT, CL_INVALID_HOST_PTR,
    CL_INVALID_IMAGE_DESCRIPTOR, CL_INVALID_IMAGE_FORMAT_DESCRIPTOR, CL_INVALID_IMAGE_SIZE,
    CL_INVALID_KERNEL, CL_INVALID_KERNEL_ARGS, CL_INVALID_KERNEL_DEFINITION,
    CL_INVALID_KERNEL_NAME, CL_INVALID_LINKER_OPTIONS, CL_INVALID_MEM_OBJECT, CL_INVALID_MIP_LEVEL,
    CL_INVALID_OPERATION, CL_INVALID_PIPE_SIZE, CL_INVALID_PLATFORM, CL_INVALID_PROGRAM,
    CL_INVALID_PROGRAM_EXECUTABLE, CL_INVALID_PROPERTY, CL_INVALID_QUEUE_PROPERTIES,
    CL_INVALID_SAMPLER, CL_INVALID_VALUE, CL_INVALID_WORK_DIMENSION, CL_INVALID_WORK_GROUP_SIZE,
    CL_INVALID_WORK_ITEM_SIZE, CL_KERNEL_ARG_INFO_NOT_AVAILABLE, CL_LINKER_NOT_AVAILABLE,
    CL_LINK_PROGRAM_FAILURE, CL_MAP_FAILURE, CL_MEM_COPY_OVERLAP, CL_MEM_OBJECT_ALLOCATION_FAILURE,
    CL_MISALIGNED_SUB_BUFFER_OFFSET, CL_OUT_OF_HOST_MEMORY, CL_OUT_OF_RESOURCES,
    CL_PLATFORM_NOT_FOUND_KHR, CL_PROFILING_INFO_NOT_AVAILABLE, CL_SUCCESS,
};

pub use self::cl_h::{
    CL_RGBx, CL_RGx, CL_Rx, CL_sBGRA, CL_sRGB, CL_sRGBA, CL_sRGBx, CL_A, CL_ABGR, CL_ADDRESS_CLAMP,
    CL_ADDRESS_CLAMP_TO_EDGE, CL_ADDRESS_MIRRORED_REPEAT, CL_ADDRESS_NONE, CL_ADDRESS_REPEAT,
    CL_ARGB, CL_BGRA, CL_BLOCKING, CL_BUFFER_CREATE_TYPE_REGION, CL_BUILD_ERROR,
    CL_BUILD_IN_PROGRESS, CL_BUILD_NONE, CL_BUILD_SUCCESS, CL_COMMAND_ACQUIRE_GL_OBJECTS,
    CL_COMMAND_BARRIER, CL_COMMAND_COPY_BUFFER, CL_COMMAND_COPY_BUFFER_RECT,
    CL_COMMAND_COPY_BUFFER_TO_IMAGE, CL_COMMAND_COPY_IMAGE, CL_COMMAND_COPY_IMAGE_TO_BUFFER,
    CL_COMMAND_FILL_BUFFER, CL_COMMAND_FILL_IMAGE, CL_COMMAND_MAP_BUFFER, CL_COMMAND_MAP_IMAGE,
    CL_COMMAND_MARKER, CL_COMMAND_MIGRATE_MEM_OBJECTS, CL_COMMAND_NATIVE_KERNEL,
    CL_COMMAND_NDRANGE_KERNEL, CL_COMMAND_READ_BUFFER, CL_COMMAND_READ_BUFFER_RECT,
    CL_COMMAND_READ_IMAGE, CL_COMMAND_RELEASE_GL_OBJECTS, CL_COMMAND_SVM_FREE, CL_COMMAND_SVM_MAP,
    CL_COMMAND_SVM_MEMCPY, CL_COMMAND_SVM_MEMFILL, CL_COMMAND_SVM_UNMAP, CL_COMMAND_TASK,
    CL_COMMAND_UNMAP_MEM_OBJECT, CL_COMMAND_USER, CL_COMMAND_WRITE_BUFFER,
    CL_COMMAND_WRITE_BUFFER_RECT, CL_COMMAND_WRITE_IMAGE, CL_COMPLETE, CL_CONTEXT_DEVICES,
    CL_CONTEXT_INTEROP_USER_SYNC, CL_CONTEXT_NUM_DEVICES, CL_CONTEXT_PLATFORM,
    CL_CONTEXT_PROPERTIES, CL_CONTEXT_REFERENCE_COUNT, CL_DEPTH, CL_DEPTH_STENCIL,
    CL_DEVICE_ADDRESS_BITS, CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE, CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE,
    CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE, CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE,
    CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE, CL_DEVICE_AFFINITY_DOMAIN_NUMA,
    CL_DEVICE_AVAILABLE, CL_DEVICE_BUILT_IN_KERNELS, CL_DEVICE_COMPILER_AVAILABLE,
    CL_DEVICE_DOUBLE_FP_CONFIG, CL_DEVICE_ENDIAN_LITTLE, CL_DEVICE_ERROR_CORRECTION_SUPPORT,
    CL_DEVICE_EXECUTION_CAPABILITIES, CL_DEVICE_EXTENSIONS, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE,
    CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, CL_DEVICE_GLOBAL_MEM_SIZE,
    CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE, CL_DEVICE_HALF_FP_CONFIG,
    CL_DEVICE_HOST_UNIFIED_MEMORY, CL_DEVICE_IL_VERSION, CL_DEVICE_IMAGE2D_MAX_HEIGHT,
    CL_DEVICE_IMAGE2D_MAX_WIDTH, CL_DEVICE_IMAGE3D_MAX_DEPTH, CL_DEVICE_IMAGE3D_MAX_HEIGHT,
    CL_DEVICE_IMAGE3D_MAX_WIDTH, CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT,
    CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, CL_DEVICE_IMAGE_MAX_BUFFER_SIZE,
    CL_DEVICE_IMAGE_PITCH_ALIGNMENT, CL_DEVICE_IMAGE_SUPPORT, CL_DEVICE_LINKER_AVAILABLE,
    CL_DEVICE_LOCAL_MEM_SIZE, CL_DEVICE_LOCAL_MEM_TYPE, CL_DEVICE_MAX_CLOCK_FREQUENCY,
    CL_DEVICE_MAX_COMPUTE_UNITS, CL_DEVICE_MAX_CONSTANT_ARGS, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE,
    CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE, CL_DEVICE_MAX_MEM_ALLOC_SIZE, CL_DEVICE_MAX_NUM_SUB_GROUPS,
    CL_DEVICE_MAX_ON_DEVICE_EVENTS, CL_DEVICE_MAX_ON_DEVICE_QUEUES, CL_DEVICE_MAX_PARAMETER_SIZE,
    CL_DEVICE_MAX_PIPE_ARGS, CL_DEVICE_MAX_READ_IMAGE_ARGS, CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS,
    CL_DEVICE_MAX_SAMPLERS, CL_DEVICE_MAX_WORK_GROUP_SIZE, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS,
    CL_DEVICE_MAX_WORK_ITEM_SIZES, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, CL_DEVICE_MEM_BASE_ADDR_ALIGN,
    CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, CL_DEVICE_NAME, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR,
    CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT,
    CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT,
    CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT,
    CL_DEVICE_OPENCL_C_VERSION, CL_DEVICE_PARENT_DEVICE, CL_DEVICE_PARTITION_AFFINITY_DOMAIN,
    CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN, CL_DEVICE_PARTITION_BY_COUNTS,
    CL_DEVICE_PARTITION_BY_COUNTS_LIST_END, CL_DEVICE_PARTITION_EQUALLY,
    CL_DEVICE_PARTITION_MAX_SUB_DEVICES, CL_DEVICE_PARTITION_PROPERTIES, CL_DEVICE_PARTITION_TYPE,
    CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS, CL_DEVICE_PIPE_MAX_PACKET_SIZE, CL_DEVICE_PLATFORM,
    CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC,
    CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT, CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT,
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE,
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF,
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG,
    CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, CL_DEVICE_PRINTF_BUFFER_SIZE, CL_DEVICE_PROFILE,
    CL_DEVICE_PROFILING_TIMER_RESOLUTION, CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE,
    CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES,
    CL_DEVICE_QUEUE_ON_HOST_PROPERTIES, CL_DEVICE_QUEUE_PROPERTIES, CL_DEVICE_REFERENCE_COUNT,
    CL_DEVICE_SINGLE_FP_CONFIG, CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS,
    CL_DEVICE_SVM_ATOMICS, CL_DEVICE_SVM_CAPABILITIES, CL_DEVICE_SVM_COARSE_GRAIN_BUFFER,
    CL_DEVICE_SVM_FINE_GRAIN_BUFFER, CL_DEVICE_SVM_FINE_GRAIN_SYSTEM, CL_DEVICE_TYPE,
    CL_DEVICE_TYPE_ACCELERATOR, CL_DEVICE_TYPE_ALL, CL_DEVICE_TYPE_CPU, CL_DEVICE_TYPE_CUSTOM,
    CL_DEVICE_TYPE_DEFAULT, CL_DEVICE_TYPE_GPU, CL_DEVICE_VENDOR, CL_DEVICE_VENDOR_ID,
    CL_DEVICE_VERSION, CL_DRIVER_VERSION, CL_EVENT_COMMAND_EXECUTION_STATUS,
    CL_EVENT_COMMAND_QUEUE, CL_EVENT_COMMAND_TYPE, CL_EVENT_CONTEXT, CL_EVENT_REFERENCE_COUNT,
    CL_EXEC_KERNEL, CL_EXEC_NATIVE_KERNEL, CL_FALSE, CL_FILTER_LINEAR, CL_FILTER_NEAREST, CL_FLOAT,
    CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT, CL_FP_DENORM, CL_FP_FMA, CL_FP_INF_NAN,
    CL_FP_ROUND_TO_INF, CL_FP_ROUND_TO_NEAREST, CL_FP_ROUND_TO_ZERO, CL_FP_SOFT_FLOAT, CL_GLOBAL,
    CL_HALF_FLOAT, CL_IMAGE_ARRAY_SIZE, CL_IMAGE_BUFFER, CL_IMAGE_DEPTH, CL_IMAGE_ELEMENT_SIZE,
    CL_IMAGE_FORMAT, CL_IMAGE_HEIGHT, CL_IMAGE_NUM_MIP_LEVELS, CL_IMAGE_NUM_SAMPLES,
    CL_IMAGE_ROW_PITCH, CL_IMAGE_SLICE_PITCH, CL_IMAGE_WIDTH, CL_INTENSITY,
    CL_KERNEL_ARG_ACCESS_NONE, CL_KERNEL_ARG_ACCESS_QUALIFIER, CL_KERNEL_ARG_ACCESS_READ_ONLY,
    CL_KERNEL_ARG_ACCESS_READ_WRITE, CL_KERNEL_ARG_ACCESS_WRITE_ONLY,
    CL_KERNEL_ARG_ADDRESS_CONSTANT, CL_KERNEL_ARG_ADDRESS_GLOBAL, CL_KERNEL_ARG_ADDRESS_LOCAL,
    CL_KERNEL_ARG_ADDRESS_PRIVATE, CL_KERNEL_ARG_ADDRESS_QUALIFIER, CL_KERNEL_ARG_NAME,
    CL_KERNEL_ARG_TYPE_CONST, CL_KERNEL_ARG_TYPE_NAME, CL_KERNEL_ARG_TYPE_NONE,
    CL_KERNEL_ARG_TYPE_PIPE, CL_KERNEL_ARG_TYPE_QUALIFIER, CL_KERNEL_ARG_TYPE_RESTRICT,
    CL_KERNEL_ARG_TYPE_VOLATILE, CL_KERNEL_ATTRIBUTES, CL_KERNEL_COMPILE_NUM_SUB_GROUPS,
    CL_KERNEL_COMPILE_WORK_GROUP_SIZE, CL_KERNEL_CONTEXT,
    CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM, CL_KERNEL_EXEC_INFO_SVM_PTRS,
    CL_KERNEL_FUNCTION_NAME, CL_KERNEL_GLOBAL_WORK_SIZE, CL_KERNEL_LOCAL_MEM_SIZE,
    CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT, CL_KERNEL_MAX_NUM_SUB_GROUPS,
    CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE, CL_KERNEL_NUM_ARGS,
    CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, CL_KERNEL_PRIVATE_MEM_SIZE, CL_KERNEL_PROGRAM,
    CL_KERNEL_REFERENCE_COUNT, CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE, CL_KERNEL_WORK_GROUP_SIZE,
    CL_LOCAL, CL_LUMINANCE, CL_MAP_READ, CL_MAP_WRITE, CL_MAP_WRITE_INVALIDATE_REGION,
    CL_MEM_ALLOC_HOST_PTR, CL_MEM_ASSOCIATED_MEMOBJECT, CL_MEM_CONTEXT, CL_MEM_COPY_HOST_PTR,
    CL_MEM_FLAGS, CL_MEM_HOST_NO_ACCESS, CL_MEM_HOST_PTR, CL_MEM_HOST_READ_ONLY,
    CL_MEM_HOST_WRITE_ONLY, CL_MEM_KERNEL_READ_AND_WRITE, CL_MEM_MAP_COUNT, CL_MEM_OBJECT_BUFFER,
    CL_MEM_OBJECT_IMAGE1D, CL_MEM_OBJECT_IMAGE1D_ARRAY, CL_MEM_OBJECT_IMAGE1D_BUFFER,
    CL_MEM_OBJECT_IMAGE2D, CL_MEM_OBJECT_IMAGE2D_ARRAY, CL_MEM_OBJECT_IMAGE3D, CL_MEM_OBJECT_PIPE,
    CL_MEM_OFFSET, CL_MEM_READ_ONLY, CL_MEM_READ_WRITE, CL_MEM_REFERENCE_COUNT, CL_MEM_SIZE,
    CL_MEM_SVM_ATOMICS, CL_MEM_SVM_FINE_GRAIN_BUFFER, CL_MEM_TYPE, CL_MEM_USES_SVM_POINTER,
    CL_MEM_USE_HOST_PTR, CL_MEM_WRITE_ONLY, CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED,
    CL_MIGRATE_MEM_OBJECT_HOST, CL_NONE, CL_NON_BLOCKING, CL_PIPE_MAX_PACKETS, CL_PIPE_PACKET_SIZE,
    CL_PLATFORM_EXTENSIONS, CL_PLATFORM_HOST_TIMER_RESOLUTION, CL_PLATFORM_NAME,
    CL_PLATFORM_PROFILE, CL_PLATFORM_VENDOR, CL_PLATFORM_VERSION, CL_PROFILING_COMMAND_COMPLETE,
    CL_PROFILING_COMMAND_END, CL_PROFILING_COMMAND_QUEUED, CL_PROFILING_COMMAND_START,
    CL_PROFILING_COMMAND_SUBMIT, CL_PROGRAM_BINARIES, CL_PROGRAM_BINARY_SIZES,
    CL_PROGRAM_BINARY_TYPE, CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT,
    CL_PROGRAM_BINARY_TYPE_EXECUTABLE, CL_PROGRAM_BINARY_TYPE_LIBRARY, CL_PROGRAM_BINARY_TYPE_NONE,
    CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE, CL_PROGRAM_BUILD_LOG, CL_PROGRAM_BUILD_OPTIONS,
    CL_PROGRAM_BUILD_STATUS, CL_PROGRAM_CONTEXT, CL_PROGRAM_DEVICES, CL_PROGRAM_IL,
    CL_PROGRAM_KERNEL_NAMES, CL_PROGRAM_NUM_DEVICES, CL_PROGRAM_NUM_KERNELS,
    CL_PROGRAM_REFERENCE_COUNT, CL_PROGRAM_SOURCE, CL_QUEUED, CL_QUEUE_CONTEXT, CL_QUEUE_DEVICE,
    CL_QUEUE_DEVICE_DEFAULT, CL_QUEUE_ON_DEVICE, CL_QUEUE_ON_DEVICE_DEFAULT,
    CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, CL_QUEUE_PROFILING_ENABLE, CL_QUEUE_PROPERTIES,
    CL_QUEUE_REFERENCE_COUNT, CL_QUEUE_SIZE, CL_R, CL_RA, CL_READ_ONLY_CACHE, CL_READ_WRITE_CACHE,
    CL_RG, CL_RGB, CL_RGBA, CL_RUNNING, CL_SAMPLER_ADDRESSING_MODE, CL_SAMPLER_CONTEXT,
    CL_SAMPLER_FILTER_MODE, CL_SAMPLER_LOD_MAX, CL_SAMPLER_LOD_MIN, CL_SAMPLER_MIP_FILTER_MODE,
    CL_SAMPLER_NORMALIZED_COORDS, CL_SAMPLER_REFERENCE_COUNT, CL_SIGNED_INT16, CL_SIGNED_INT32,
    CL_SIGNED_INT8, CL_SNORM_INT16, CL_SNORM_INT8, CL_SUBMITTED, CL_TRUE, CL_UNORM_INT16,
    CL_UNORM_INT24, CL_UNORM_INT8, CL_UNORM_INT_101010, CL_UNORM_INT_101010_2, CL_UNORM_SHORT_555,
    CL_UNORM_SHORT_565, CL_UNSIGNED_INT16, CL_UNSIGNED_INT32, CL_UNSIGNED_INT8, CL_VERSION_1_0,
    CL_VERSION_1_1, CL_VERSION_1_2, CL_VERSION_2_0, CL_VERSION_2_1,
};

// Functions:
pub use self::cl_h::{
    clBuildProgram, clCreateBuffer, clCreateCommandQueue, clCreateContext, clCreateContextFromType,
    clCreateImage2D, clCreateImage3D, clCreateKernel, clCreateKernelsInProgram,
    clCreateProgramWithBinary, clCreateProgramWithSource, clCreateSampler, clCreateSubBuffer,
    clCreateUserEvent, clEnqueueBarrier, clEnqueueCopyBuffer, clEnqueueCopyBufferRect,
    clEnqueueCopyBufferToImage, clEnqueueCopyImage, clEnqueueCopyImageToBuffer, clEnqueueMapBuffer,
    clEnqueueMapImage, clEnqueueMarker, clEnqueueNDRangeKernel, clEnqueueNativeKernel,
    clEnqueueReadBuffer, clEnqueueReadBufferRect, clEnqueueReadImage, clEnqueueTask,
    clEnqueueUnmapMemObject, clEnqueueWaitForEvents, clEnqueueWriteBuffer,
    clEnqueueWriteBufferRect, clEnqueueWriteImage, clFinish, clFlush, clGetCommandQueueInfo,
    clGetContextInfo, clGetDeviceIDs, clGetDeviceInfo, clGetEventInfo, clGetEventProfilingInfo,
    clGetExtensionFunctionAddress, clGetImageInfo, clGetKernelInfo, clGetKernelWorkGroupInfo,
    clGetMemObjectInfo, clGetPlatformIDs, clGetPlatformInfo, clGetProgramBuildInfo,
    clGetProgramInfo, clGetSamplerInfo, clGetSupportedImageFormats, clReleaseCommandQueue,
    clReleaseContext, clReleaseEvent, clReleaseKernel, clReleaseMemObject, clReleaseProgram,
    clReleaseSampler, clRetainCommandQueue, clRetainContext, clRetainEvent, clRetainKernel,
    clRetainMemObject, clRetainProgram, clRetainSampler, clSetEventCallback, clSetKernelArg,
    clSetMemObjectDestructorCallback, clSetUserEventStatus, clUnloadCompiler, clWaitForEvents,
};

#[cfg(feature = "opencl_version_1_2")]
pub use self::cl_h::{
    clCompileProgram, clCreateImage, clCreateProgramWithBuiltInKernels, clCreateSubDevices,
    clEnqueueBarrierWithWaitList, clEnqueueFillBuffer, clEnqueueFillImage,
    clEnqueueMarkerWithWaitList, clEnqueueMigrateMemObjects,
    clGetExtensionFunctionAddressForPlatform, clGetKernelArgInfo, clLinkProgram, clReleaseDevice,
    clRetainDevice,
};

#[cfg(feature = "opencl_version_2_0")]
pub use self::cl_h::{
    clCreateCommandQueueWithProperties, clCreatePipe, clCreateSamplerWithProperties,
    clEnqueueSVMFree, clEnqueueSVMMap, clEnqueueSVMMemFill, clEnqueueSVMMemcpy, clEnqueueSVMUnmap,
    clGetPipeInfo, clSVMAlloc, clSVMFree, clSetKernelArgSVMPointer, clSetKernelExecInfo,
};

#[cfg(feature = "opencl_version_2_1")]
pub use self::cl_h::{
    clCloneKernel, clCreateProgramWithIL, clEnqueueSVMMigrateMem, clGetDeviceAndHostTimer,
    clGetHostTimer, clGetKernelSubGroupInfo, clSetDefaultDeviceCommandQueue,
};