1 #ifndef CLEW_HPP_INCLUDED
2 #define CLEW_HPP_INCLUDED
3 
4 //////////////////////////////////////////////////////////////////////////
5 //  Copyright (c) 2009-2011 Organic Vectory B.V., KindDragon
6 //  Written by George van Venrooij
7 //
8 //  Distributed under the MIT License.
9 //////////////////////////////////////////////////////////////////////////
10 
11 //! \file clew.h
12 //! \brief OpenCL run-time loader header
13 //!
14 //! This file contains a copy of the contents of CL.H and CL_PLATFORM.H from the
15 //! official OpenCL spec. The purpose of this code is to load the OpenCL dynamic
16 //! library at run-time and thus allow the executable to function on many
17 //! platforms regardless of the vendor of the OpenCL driver actually installed.
18 //! Some of the techniques used here were inspired by work done in the GLEW
19 //! library (http://glew.sourceforge.net/)
20 
21 //  Run-time dynamic linking functionality based on concepts used in GLEW
22 #ifdef __OPENCL_CL_H
23 #error cl.h included before clew.h
24 #endif
25 
26 #ifdef __OPENCL_CL_PLATFORM_H
27 #error cl_platform.h included before clew.h
28 #endif
29 
30 //  Prevent cl.h inclusion
31 #define __OPENCL_CL_H
32 //  Prevent cl_platform.h inclusion
33 #define __CL_PLATFORM_H
34 
35 /*******************************************************************************
36 * Copyright (c) 2008-2010 The Khronos Group Inc.
37 *
38 * Permission is hereby granted, free of charge, to any person obtaining a
39 * copy of this software and/or associated documentation files (the
40 * "Materials"), to deal in the Materials without restriction, including
41 * without limitation the rights to use, copy, modify, merge, publish,
42 * distribute, sublicense, and/or sell copies of the Materials, and to
43 * permit persons to whom the Materials are furnished to do so, subject to
44 * the following conditions:
45 *
46 * The above copyright notice and this permission notice shall be included
47 * in all copies or substantial portions of the Materials.
48 *
49 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
50 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
51 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
52 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
53 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
54 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
55 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
56 ******************************************************************************/
57 #ifdef __APPLE__
58 /* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */
59 #include <AvailabilityMacros.h>
60 #endif
61 
62 #ifdef __cplusplus
63 extern "C"
64 {
65 #endif
66 
67 #if defined(_WIN32)
68 #define CL_API_ENTRY
69 #define CL_API_CALL __stdcall
70 #define CL_CALLBACK __stdcall
71 #else
72 #define CL_API_ENTRY
73 #define CL_API_CALL
74 #define CL_CALLBACK
75 #endif
76 	//disabled the APPLE thing, don't know why it is there, is just causes tons of warnings
77 
78 #ifdef __APPLE1__
79 #define CL_EXTENSION_WEAK_LINK __attribute__((weak_import))
80 #define CL_API_SUFFIX__VERSION_1_0 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
81 #define CL_EXT_SUFFIX__VERSION_1_0 CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
82 #define CL_API_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK
83 #define CL_EXT_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK
84 #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
85 #else
86 #define CL_EXTENSION_WEAK_LINK
87 #define CL_API_SUFFIX__VERSION_1_0
88 #define CL_EXT_SUFFIX__VERSION_1_0
89 #define CL_API_SUFFIX__VERSION_1_1
90 #define CL_EXT_SUFFIX__VERSION_1_1
91 #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
92 #endif
93 
94 #if (defined(_WIN32) && defined(_MSC_VER))
95 
96 	/* scalar types  */
97 	typedef signed __int8 cl_char;
98 	typedef unsigned __int8 cl_uchar;
99 	typedef signed __int16 cl_short;
100 	typedef unsigned __int16 cl_ushort;
101 	typedef signed __int32 cl_int;
102 	typedef unsigned __int32 cl_uint;
103 	typedef signed __int64 cl_long;
104 	typedef unsigned __int64 cl_ulong;
105 
106 	typedef unsigned __int16 cl_half;
107 	typedef float cl_float;
108 	typedef double cl_double;
109 
110 /* Macro names and corresponding values defined by OpenCL */
111 #define CL_CHAR_BIT 8
112 #define CL_SCHAR_MAX 127
113 #define CL_SCHAR_MIN (-127 - 1)
114 #define CL_CHAR_MAX CL_SCHAR_MAX
115 #define CL_CHAR_MIN CL_SCHAR_MIN
116 #define CL_UCHAR_MAX 255
117 #define CL_SHRT_MAX 32767
118 #define CL_SHRT_MIN (-32767 - 1)
119 #define CL_USHRT_MAX 65535
120 #define CL_INT_MAX 2147483647
121 #define CL_INT_MIN (-2147483647 - 1)
122 #define CL_UINT_MAX 0xffffffffU
123 #define CL_LONG_MAX ((cl_long)0x7FFFFFFFFFFFFFFFLL)
124 #define CL_LONG_MIN ((cl_long)-0x7FFFFFFFFFFFFFFFLL - 1LL)
125 #define CL_ULONG_MAX ((cl_ulong)0xFFFFFFFFFFFFFFFFULL)
126 
127 #define CL_FLT_DIG 6
128 #define CL_FLT_MANT_DIG 24
129 #define CL_FLT_MAX_10_EXP +38
130 #define CL_FLT_MAX_EXP +128
131 #define CL_FLT_MIN_10_EXP -37
132 #define CL_FLT_MIN_EXP -125
133 #define CL_FLT_RADIX 2
134 #define CL_FLT_MAX 340282346638528859811704183484516925440.0f
135 #define CL_FLT_MIN 1.175494350822287507969e-38f
136 #define CL_FLT_EPSILON 0x1.0p-23f
137 
138 #define CL_DBL_DIG 15
139 #define CL_DBL_MANT_DIG 53
140 #define CL_DBL_MAX_10_EXP +308
141 #define CL_DBL_MAX_EXP +1024
142 #define CL_DBL_MIN_10_EXP -307
143 #define CL_DBL_MIN_EXP -1021
144 #define CL_DBL_RADIX 2
145 #define CL_DBL_MAX 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
146 #define CL_DBL_MIN 2.225073858507201383090e-308
147 #define CL_DBL_EPSILON 2.220446049250313080847e-16
148 
149 #define CL_M_E 2.718281828459045090796
150 #define CL_M_LOG2E 1.442695040888963387005
151 #define CL_M_LOG10E 0.434294481903251816668
152 #define CL_M_LN2 0.693147180559945286227
153 #define CL_M_LN10 2.302585092994045901094
154 #define CL_M_PI 3.141592653589793115998
155 #define CL_M_PI_2 1.570796326794896557999
156 #define CL_M_PI_4 0.785398163397448278999
157 #define CL_M_1_PI 0.318309886183790691216
158 #define CL_M_2_PI 0.636619772367581382433
159 #define CL_M_2_SQRTPI 1.128379167095512558561
160 #define CL_M_SQRT2 1.414213562373095145475
161 #define CL_M_SQRT1_2 0.707106781186547572737
162 
163 #define CL_M_E_F 2.71828174591064f
164 #define CL_M_LOG2E_F 1.44269502162933f
165 #define CL_M_LOG10E_F 0.43429449200630f
166 #define CL_M_LN2_F 0.69314718246460f
167 #define CL_M_LN10_F 2.30258512496948f
168 #define CL_M_PI_F 3.14159274101257f
169 #define CL_M_PI_2_F 1.57079637050629f
170 #define CL_M_PI_4_F 0.78539818525314f
171 #define CL_M_1_PI_F 0.31830987334251f
172 #define CL_M_2_PI_F 0.63661974668503f
173 #define CL_M_2_SQRTPI_F 1.12837922573090f
174 #define CL_M_SQRT2_F 1.41421353816986f
175 #define CL_M_SQRT1_2_F 0.70710676908493f
176 
177 #define CL_NAN (CL_INFINITY - CL_INFINITY)
178 #define CL_HUGE_VALF ((cl_float)1e50)
179 #define CL_HUGE_VAL ((cl_double)1e500)
180 #define CL_MAXFLOAT CL_FLT_MAX
181 #define CL_INFINITY CL_HUGE_VALF
182 
183 #else
184 
185 #include <stdint.h>
186 
187 /* scalar types  */
188 typedef int8_t cl_char;
189 typedef uint8_t cl_uchar;
190 typedef int16_t cl_short __attribute__((aligned(2)));
191 typedef uint16_t cl_ushort __attribute__((aligned(2)));
192 typedef int32_t cl_int __attribute__((aligned(4)));
193 typedef uint32_t cl_uint __attribute__((aligned(4)));
194 typedef int64_t cl_long __attribute__((aligned(8)));
195 typedef uint64_t cl_ulong __attribute__((aligned(8)));
196 
197 typedef uint16_t cl_half __attribute__((aligned(2)));
198 typedef float cl_float __attribute__((aligned(4)));
199 typedef double cl_double __attribute__((aligned(8)));
200 
201 /* Macro names and corresponding values defined by OpenCL */
202 #define CL_CHAR_BIT 8
203 #define CL_SCHAR_MAX 127
204 #define CL_SCHAR_MIN (-127 - 1)
205 #define CL_CHAR_MAX CL_SCHAR_MAX
206 #define CL_CHAR_MIN CL_SCHAR_MIN
207 #define CL_UCHAR_MAX 255
208 #define CL_SHRT_MAX 32767
209 #define CL_SHRT_MIN (-32767 - 1)
210 #define CL_USHRT_MAX 65535
211 #define CL_INT_MAX 2147483647
212 #define CL_INT_MIN (-2147483647 - 1)
213 #define CL_UINT_MAX 0xffffffffU
214 #define CL_LONG_MAX ((cl_long)0x7FFFFFFFFFFFFFFFLL)
215 #define CL_LONG_MIN ((cl_long)-0x7FFFFFFFFFFFFFFFLL - 1LL)
216 #define CL_ULONG_MAX ((cl_ulong)0xFFFFFFFFFFFFFFFFULL)
217 
218 #define CL_FLT_DIG 6
219 #define CL_FLT_MANT_DIG 24
220 #define CL_FLT_MAX_10_EXP +38
221 #define CL_FLT_MAX_EXP +128
222 #define CL_FLT_MIN_10_EXP -37
223 #define CL_FLT_MIN_EXP -125
224 #define CL_FLT_RADIX 2
225 #define CL_FLT_MAX 0x1.fffffep127f
226 #define CL_FLT_MIN 0x1.0p-126f
227 #define CL_FLT_EPSILON 0x1.0p-23f
228 
229 #define CL_DBL_DIG 15
230 #define CL_DBL_MANT_DIG 53
231 #define CL_DBL_MAX_10_EXP +308
232 #define CL_DBL_MAX_EXP +1024
233 #define CL_DBL_MIN_10_EXP -307
234 #define CL_DBL_MIN_EXP -1021
235 #define CL_DBL_RADIX 2
236 #define CL_DBL_MAX 0x1.fffffffffffffp1023
237 #define CL_DBL_MIN 0x1.0p-1022
238 #define CL_DBL_EPSILON 0x1.0p-52
239 
240 #define CL_M_E 2.718281828459045090796
241 #define CL_M_LOG2E 1.442695040888963387005
242 #define CL_M_LOG10E 0.434294481903251816668
243 #define CL_M_LN2 0.693147180559945286227
244 #define CL_M_LN10 2.302585092994045901094
245 #define CL_M_PI 3.141592653589793115998
246 #define CL_M_PI_2 1.570796326794896557999
247 #define CL_M_PI_4 0.785398163397448278999
248 #define CL_M_1_PI 0.318309886183790691216
249 #define CL_M_2_PI 0.636619772367581382433
250 #define CL_M_2_SQRTPI 1.128379167095512558561
251 #define CL_M_SQRT2 1.414213562373095145475
252 #define CL_M_SQRT1_2 0.707106781186547572737
253 
254 #define CL_M_E_F 2.71828174591064f
255 #define CL_M_LOG2E_F 1.44269502162933f
256 #define CL_M_LOG10E_F 0.43429449200630f
257 #define CL_M_LN2_F 0.69314718246460f
258 #define CL_M_LN10_F 2.30258512496948f
259 #define CL_M_PI_F 3.14159274101257f
260 #define CL_M_PI_2_F 1.57079637050629f
261 #define CL_M_PI_4_F 0.78539818525314f
262 #define CL_M_1_PI_F 0.31830987334251f
263 #define CL_M_2_PI_F 0.63661974668503f
264 #define CL_M_2_SQRTPI_F 1.12837922573090f
265 #define CL_M_SQRT2_F 1.41421353816986f
266 #define CL_M_SQRT1_2_F 0.70710676908493f
267 
268 #if defined(__GNUC__)
269 #define CL_HUGE_VALF __builtin_huge_valf()
270 #define CL_HUGE_VAL __builtin_huge_val()
271 #define CL_NAN __builtin_nanf("")
272 #else
273 #define CL_HUGE_VALF ((cl_float)1e50)
274 #define CL_HUGE_VAL ((cl_double)1e500)
275 float nanf(const char *);
276 #define CL_NAN nanf("")
277 #endif
278 #define CL_MAXFLOAT CL_FLT_MAX
279 #define CL_INFINITY CL_HUGE_VALF
280 
281 #endif
282 
283 #include <stddef.h>
284 
285 	/* Mirror types to GL types. Mirror types allow us to avoid deciding which headers to load based on whether we are using GL or GLES here. */
286 	typedef unsigned int cl_GLuint;
287 	typedef int cl_GLint;
288 	typedef unsigned int cl_GLenum;
289 
290 	/*
291  * Vector types
292  *
293  *  Note:   OpenCL requires that all types be naturally aligned.
294  *          This means that vector types must be naturally aligned.
295  *          For example, a vector of four floats must be aligned to
296  *          a 16 byte boundary (calculated as 4 * the natural 4-byte
297  *          alignment of the float).  The alignment qualifiers here
298  *          will only function properly if your compiler supports them
299  *          and if you don't actively work to defeat them.  For example,
300  *          in order for a cl_float4 to be 16 byte aligned in a struct,
301  *          the start of the struct must itself be 16-byte aligned.
302  *
303  *          Maintaining proper alignment is the user's responsibility.
304  */
305 
306 #ifdef _MSC_VER
307 #if defined(_M_IX86)
308 #if _M_IX86_FP >= 0
309 #define __SSE__
310 #endif
311 #if _M_IX86_FP >= 1
312 #define __SSE2__
313 #endif
314 #elif defined(_M_X64)
315 #define __SSE__
316 #define __SSE2__
317 #endif
318 #endif
319 
320 /* Define basic vector types */
321 #if defined(__VEC__)
322 #include <altivec.h> /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */
323 	typedef vector unsigned char __cl_uchar16;
324 	typedef vector signed char __cl_char16;
325 	typedef vector unsigned short __cl_ushort8;
326 	typedef vector signed short __cl_short8;
327 	typedef vector unsigned int __cl_uint4;
328 	typedef vector signed int __cl_int4;
329 	typedef vector float __cl_float4;
330 #define __CL_UCHAR16__ 1
331 #define __CL_CHAR16__ 1
332 #define __CL_USHORT8__ 1
333 #define __CL_SHORT8__ 1
334 #define __CL_UINT4__ 1
335 #define __CL_INT4__ 1
336 #define __CL_FLOAT4__ 1
337 #endif
338 
339 #if defined(__SSE__)
340 #if defined(__MINGW64__)
341 #include <intrin.h>
342 #else
343 #include <xmmintrin.h>
344 #endif
345 #if defined(__GNUC__) && !defined(__ICC)
346 	typedef float __cl_float4 __attribute__((vector_size(16)));
347 #else
348 	typedef __m128 __cl_float4;
349 #endif
350 #define __CL_FLOAT4__ 1
351 #endif
352 
353 #if defined(__SSE2__)
354 #if defined(__MINGW64__)
355 #include <intrin.h>
356 #else
357 #include <emmintrin.h>
358 #endif
359 #if defined(__GNUC__) && !defined(__ICC)
360 	typedef cl_uchar __cl_uchar16 __attribute__((vector_size(16)));
361 	typedef cl_char __cl_char16 __attribute__((vector_size(16)));
362 	typedef cl_ushort __cl_ushort8 __attribute__((vector_size(16)));
363 	typedef cl_short __cl_short8 __attribute__((vector_size(16)));
364 	typedef cl_uint __cl_uint4 __attribute__((vector_size(16)));
365 	typedef cl_int __cl_int4 __attribute__((vector_size(16)));
366 	typedef cl_ulong __cl_ulong2 __attribute__((vector_size(16)));
367 	typedef cl_long __cl_long2 __attribute__((vector_size(16)));
368 	typedef cl_double __cl_double2 __attribute__((vector_size(16)));
369 #else
370 	typedef __m128i __cl_uchar16;
371 	typedef __m128i __cl_char16;
372 	typedef __m128i __cl_ushort8;
373 	typedef __m128i __cl_short8;
374 	typedef __m128i __cl_uint4;
375 	typedef __m128i __cl_int4;
376 	typedef __m128i __cl_ulong2;
377 	typedef __m128i __cl_long2;
378 	typedef __m128d __cl_double2;
379 #endif
380 #define __CL_UCHAR16__ 1
381 #define __CL_CHAR16__ 1
382 #define __CL_USHORT8__ 1
383 #define __CL_SHORT8__ 1
384 #define __CL_INT4__ 1
385 #define __CL_UINT4__ 1
386 #define __CL_ULONG2__ 1
387 #define __CL_LONG2__ 1
388 #define __CL_DOUBLE2__ 1
389 #endif
390 
391 #if defined(__MMX__)
392 #include <mmintrin.h>
393 #if defined(__GNUC__) && !defined(__ICC)
394 	typedef cl_uchar __cl_uchar8 __attribute__((vector_size(8)));
395 	typedef cl_char __cl_char8 __attribute__((vector_size(8)));
396 	typedef cl_ushort __cl_ushort4 __attribute__((vector_size(8)));
397 	typedef cl_short __cl_short4 __attribute__((vector_size(8)));
398 	typedef cl_uint __cl_uint2 __attribute__((vector_size(8)));
399 	typedef cl_int __cl_int2 __attribute__((vector_size(8)));
400 	typedef cl_ulong __cl_ulong1 __attribute__((vector_size(8)));
401 	typedef cl_long __cl_long1 __attribute__((vector_size(8)));
402 	typedef cl_float __cl_float2 __attribute__((vector_size(8)));
403 #else
404 	typedef __m64 __cl_uchar8;
405 	typedef __m64 __cl_char8;
406 	typedef __m64 __cl_ushort4;
407 	typedef __m64 __cl_short4;
408 	typedef __m64 __cl_uint2;
409 	typedef __m64 __cl_int2;
410 	typedef __m64 __cl_ulong1;
411 	typedef __m64 __cl_long1;
412 	typedef __m64 __cl_float2;
413 #endif
414 #define __CL_UCHAR8__ 1
415 #define __CL_CHAR8__ 1
416 #define __CL_USHORT4__ 1
417 #define __CL_SHORT4__ 1
418 #define __CL_INT2__ 1
419 #define __CL_UINT2__ 1
420 #define __CL_ULONG1__ 1
421 #define __CL_LONG1__ 1
422 #define __CL_FLOAT2__ 1
423 #endif
424 
425 #if defined(__AVX__)
426 #if defined(__MINGW64__)
427 #include <intrin.h>
428 #else
429 #include <immintrin.h>
430 #endif
431 #if defined(__GNUC__) && !defined(__ICC)
432 	typedef cl_float __cl_float8 __attribute__((vector_size(32)));
433 	typedef cl_double __cl_double4 __attribute__((vector_size(32)));
434 #else
435 	typedef __m256 __cl_float8;
436 	typedef __m256d __cl_double4;
437 #endif
438 #define __CL_FLOAT8__ 1
439 #define __CL_DOUBLE4__ 1
440 #endif
441 
442 /* Define alignment keys */
443 #if defined(__GNUC__)
444 #define CL_ALIGNED(_x) __attribute__((aligned(_x)))
445 #elif defined(_WIN32) && (_MSC_VER)
446 /* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements     */
447 /* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx                                                 */
448 /* #include <crtdefs.h>                                                                                             */
449 /* #define CL_ALIGNED(_x)          _CRT_ALIGN(_x)                                                                   */
450 #define CL_ALIGNED(_x)
451 #else
452 #warning Need to implement some method to align data here
453 #define CL_ALIGNED(_x)
454 #endif
455 
456 /* Indicate whether .xyzw, .s0123 and .hi.lo are supported */
457 #if (defined(__GNUC__) && !defined(__STRICT_ANSI__)) || (defined(_MSC_VER) && !defined(__STDC__))
458 /* .xyzw and .s0123...{f|F} are supported */
459 #define CL_HAS_NAMED_VECTOR_FIELDS 1
460 /* .hi and .lo are supported */
461 #define CL_HAS_HI_LO_VECTOR_FIELDS 1
462 
463 #define CL_NAMED_STRUCT_SUPPORTED
464 #endif
465 
466 #if defined(CL_NAMED_STRUCT_SUPPORTED) && defined(_MSC_VER)
467 #define __extension__ __pragma(warning(suppress : 4201))
468 #endif
469 
470 	/* Define cl_vector types */
471 
472 	/* ---- cl_charn ---- */
473 	typedef union {
474 		cl_char CL_ALIGNED(2) s[2];
475 #if defined(CL_NAMED_STRUCT_SUPPORTED)
476 		__extension__ struct
477 		{
478 			cl_char x, y;
479 		};
480 		__extension__ struct
481 		{
482 			cl_char s0, s1;
483 		};
484 		__extension__ struct
485 		{
486 			cl_char lo, hi;
487 		};
488 #endif
489 #if defined(__CL_CHAR2__)
490 		__cl_char2 v2;
491 #endif
492 	} cl_char2;
493 
494 	typedef union {
495 		cl_char CL_ALIGNED(4) s[4];
496 #if defined(CL_NAMED_STRUCT_SUPPORTED)
497 		__extension__ struct
498 		{
499 			cl_char x, y, z, w;
500 		};
501 		__extension__ struct
502 		{
503 			cl_char s0, s1, s2, s3;
504 		};
505 		__extension__ struct
506 		{
507 			cl_char2 lo, hi;
508 		};
509 #endif
510 #if defined(__CL_CHAR2__)
511 		__cl_char2 v2[2];
512 #endif
513 #if defined(__CL_CHAR4__)
514 		__cl_char4 v4;
515 #endif
516 	} cl_char4;
517 
518 	/* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */
519 	typedef cl_char4 cl_char3;
520 
521 	typedef union {
522 		cl_char CL_ALIGNED(8) s[8];
523 #if defined(CL_NAMED_STRUCT_SUPPORTED)
524 		__extension__ struct
525 		{
526 			cl_char x, y, z, w;
527 		};
528 		__extension__ struct
529 		{
530 			cl_char s0, s1, s2, s3, s4, s5, s6, s7;
531 		};
532 		__extension__ struct
533 		{
534 			cl_char4 lo, hi;
535 		};
536 #endif
537 #if defined(__CL_CHAR2__)
538 		__cl_char2 v2[4];
539 #endif
540 #if defined(__CL_CHAR4__)
541 		__cl_char4 v4[2];
542 #endif
543 #if defined(__CL_CHAR8__)
544 		__cl_char8 v8;
545 #endif
546 	} cl_char8;
547 
548 	typedef union {
549 		cl_char CL_ALIGNED(16) s[16];
550 #if defined(CL_NAMED_STRUCT_SUPPORTED)
551 		__extension__ struct
552 		{
553 			cl_char x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
554 		};
555 		__extension__ struct
556 		{
557 			cl_char s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
558 		};
559 		__extension__ struct
560 		{
561 			cl_char8 lo, hi;
562 		};
563 #endif
564 #if defined(__CL_CHAR2__)
565 		__cl_char2 v2[8];
566 #endif
567 #if defined(__CL_CHAR4__)
568 		__cl_char4 v4[4];
569 #endif
570 #if defined(__CL_CHAR8__)
571 		__cl_char8 v8[2];
572 #endif
573 #if defined(__CL_CHAR16__)
574 		__cl_char16 v16;
575 #endif
576 	} cl_char16;
577 
578 	/* ---- cl_ucharn ---- */
579 	typedef union {
580 		cl_uchar CL_ALIGNED(2) s[2];
581 #if defined(CL_NAMED_STRUCT_SUPPORTED)
582 		__extension__ struct
583 		{
584 			cl_uchar x, y;
585 		};
586 		__extension__ struct
587 		{
588 			cl_uchar s0, s1;
589 		};
590 		__extension__ struct
591 		{
592 			cl_uchar lo, hi;
593 		};
594 #endif
595 #if defined(__cl_uchar2__)
596 		__cl_uchar2 v2;
597 #endif
598 	} cl_uchar2;
599 
600 	typedef union {
601 		cl_uchar CL_ALIGNED(4) s[4];
602 #if defined(CL_NAMED_STRUCT_SUPPORTED)
603 		__extension__ struct
604 		{
605 			cl_uchar x, y, z, w;
606 		};
607 		__extension__ struct
608 		{
609 			cl_uchar s0, s1, s2, s3;
610 		};
611 		__extension__ struct
612 		{
613 			cl_uchar2 lo, hi;
614 		};
615 #endif
616 #if defined(__CL_UCHAR2__)
617 		__cl_uchar2 v2[2];
618 #endif
619 #if defined(__CL_UCHAR4__)
620 		__cl_uchar4 v4;
621 #endif
622 	} cl_uchar4;
623 
624 	/* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */
625 	typedef cl_uchar4 cl_uchar3;
626 
627 	typedef union {
628 		cl_uchar CL_ALIGNED(8) s[8];
629 #if defined(CL_NAMED_STRUCT_SUPPORTED)
630 		__extension__ struct
631 		{
632 			cl_uchar x, y, z, w;
633 		};
634 		__extension__ struct
635 		{
636 			cl_uchar s0, s1, s2, s3, s4, s5, s6, s7;
637 		};
638 		__extension__ struct
639 		{
640 			cl_uchar4 lo, hi;
641 		};
642 #endif
643 #if defined(__CL_UCHAR2__)
644 		__cl_uchar2 v2[4];
645 #endif
646 #if defined(__CL_UCHAR4__)
647 		__cl_uchar4 v4[2];
648 #endif
649 #if defined(__CL_UCHAR8__)
650 		__cl_uchar8 v8;
651 #endif
652 	} cl_uchar8;
653 
654 	typedef union {
655 		cl_uchar CL_ALIGNED(16) s[16];
656 #if defined(CL_NAMED_STRUCT_SUPPORTED)
657 		__extension__ struct
658 		{
659 			cl_uchar x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
660 		};
661 		__extension__ struct
662 		{
663 			cl_uchar s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
664 		};
665 		__extension__ struct
666 		{
667 			cl_uchar8 lo, hi;
668 		};
669 #endif
670 #if defined(__CL_UCHAR2__)
671 		__cl_uchar2 v2[8];
672 #endif
673 #if defined(__CL_UCHAR4__)
674 		__cl_uchar4 v4[4];
675 #endif
676 #if defined(__CL_UCHAR8__)
677 		__cl_uchar8 v8[2];
678 #endif
679 #if defined(__CL_UCHAR16__)
680 		__cl_uchar16 v16;
681 #endif
682 	} cl_uchar16;
683 
684 	/* ---- cl_shortn ---- */
685 	typedef union {
686 		cl_short CL_ALIGNED(4) s[2];
687 #if defined(CL_NAMED_STRUCT_SUPPORTED)
688 		__extension__ struct
689 		{
690 			cl_short x, y;
691 		};
692 		__extension__ struct
693 		{
694 			cl_short s0, s1;
695 		};
696 		__extension__ struct
697 		{
698 			cl_short lo, hi;
699 		};
700 #endif
701 #if defined(__CL_SHORT2__)
702 		__cl_short2 v2;
703 #endif
704 	} cl_short2;
705 
706 	typedef union {
707 		cl_short CL_ALIGNED(8) s[4];
708 #if defined(CL_NAMED_STRUCT_SUPPORTED)
709 		__extension__ struct
710 		{
711 			cl_short x, y, z, w;
712 		};
713 		__extension__ struct
714 		{
715 			cl_short s0, s1, s2, s3;
716 		};
717 		__extension__ struct
718 		{
719 			cl_short2 lo, hi;
720 		};
721 #endif
722 #if defined(__CL_SHORT2__)
723 		__cl_short2 v2[2];
724 #endif
725 #if defined(__CL_SHORT4__)
726 		__cl_short4 v4;
727 #endif
728 	} cl_short4;
729 
730 	/* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */
731 	typedef cl_short4 cl_short3;
732 
733 	typedef union {
734 		cl_short CL_ALIGNED(16) s[8];
735 #if defined(CL_NAMED_STRUCT_SUPPORTED)
736 		__extension__ struct
737 		{
738 			cl_short x, y, z, w;
739 		};
740 		__extension__ struct
741 		{
742 			cl_short s0, s1, s2, s3, s4, s5, s6, s7;
743 		};
744 		__extension__ struct
745 		{
746 			cl_short4 lo, hi;
747 		};
748 #endif
749 #if defined(__CL_SHORT2__)
750 		__cl_short2 v2[4];
751 #endif
752 #if defined(__CL_SHORT4__)
753 		__cl_short4 v4[2];
754 #endif
755 #if defined(__CL_SHORT8__)
756 		__cl_short8 v8;
757 #endif
758 	} cl_short8;
759 
760 	typedef union {
761 		cl_short CL_ALIGNED(32) s[16];
762 #if defined(CL_NAMED_STRUCT_SUPPORTED)
763 		__extension__ struct
764 		{
765 			cl_short x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
766 		};
767 		__extension__ struct
768 		{
769 			cl_short s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
770 		};
771 		__extension__ struct
772 		{
773 			cl_short8 lo, hi;
774 		};
775 #endif
776 #if defined(__CL_SHORT2__)
777 		__cl_short2 v2[8];
778 #endif
779 #if defined(__CL_SHORT4__)
780 		__cl_short4 v4[4];
781 #endif
782 #if defined(__CL_SHORT8__)
783 		__cl_short8 v8[2];
784 #endif
785 #if defined(__CL_SHORT16__)
786 		__cl_short16 v16;
787 #endif
788 	} cl_short16;
789 
790 	/* ---- cl_ushortn ---- */
791 	typedef union {
792 		cl_ushort CL_ALIGNED(4) s[2];
793 #if defined(CL_NAMED_STRUCT_SUPPORTED)
794 		__extension__ struct
795 		{
796 			cl_ushort x, y;
797 		};
798 		__extension__ struct
799 		{
800 			cl_ushort s0, s1;
801 		};
802 		__extension__ struct
803 		{
804 			cl_ushort lo, hi;
805 		};
806 #endif
807 #if defined(__CL_USHORT2__)
808 		__cl_ushort2 v2;
809 #endif
810 	} cl_ushort2;
811 
812 	typedef union {
813 		cl_ushort CL_ALIGNED(8) s[4];
814 #if defined(CL_NAMED_STRUCT_SUPPORTED)
815 		__extension__ struct
816 		{
817 			cl_ushort x, y, z, w;
818 		};
819 		__extension__ struct
820 		{
821 			cl_ushort s0, s1, s2, s3;
822 		};
823 		__extension__ struct
824 		{
825 			cl_ushort2 lo, hi;
826 		};
827 #endif
828 #if defined(__CL_USHORT2__)
829 		__cl_ushort2 v2[2];
830 #endif
831 #if defined(__CL_USHORT4__)
832 		__cl_ushort4 v4;
833 #endif
834 	} cl_ushort4;
835 
836 	/* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */
837 	typedef cl_ushort4 cl_ushort3;
838 
839 	typedef union {
840 		cl_ushort CL_ALIGNED(16) s[8];
841 #if defined(CL_NAMED_STRUCT_SUPPORTED)
842 		__extension__ struct
843 		{
844 			cl_ushort x, y, z, w;
845 		};
846 		__extension__ struct
847 		{
848 			cl_ushort s0, s1, s2, s3, s4, s5, s6, s7;
849 		};
850 		__extension__ struct
851 		{
852 			cl_ushort4 lo, hi;
853 		};
854 #endif
855 #if defined(__CL_USHORT2__)
856 		__cl_ushort2 v2[4];
857 #endif
858 #if defined(__CL_USHORT4__)
859 		__cl_ushort4 v4[2];
860 #endif
861 #if defined(__CL_USHORT8__)
862 		__cl_ushort8 v8;
863 #endif
864 	} cl_ushort8;
865 
866 	typedef union {
867 		cl_ushort CL_ALIGNED(32) s[16];
868 #if defined(CL_NAMED_STRUCT_SUPPORTED)
869 		__extension__ struct
870 		{
871 			cl_ushort x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
872 		};
873 		__extension__ struct
874 		{
875 			cl_ushort s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
876 		};
877 		__extension__ struct
878 		{
879 			cl_ushort8 lo, hi;
880 		};
881 #endif
882 #if defined(__CL_USHORT2__)
883 		__cl_ushort2 v2[8];
884 #endif
885 #if defined(__CL_USHORT4__)
886 		__cl_ushort4 v4[4];
887 #endif
888 #if defined(__CL_USHORT8__)
889 		__cl_ushort8 v8[2];
890 #endif
891 #if defined(__CL_USHORT16__)
892 		__cl_ushort16 v16;
893 #endif
894 	} cl_ushort16;
895 
896 	/* ---- cl_intn ---- */
897 	typedef union {
898 		cl_int CL_ALIGNED(8) s[2];
899 #if defined(CL_NAMED_STRUCT_SUPPORTED)
900 		__extension__ struct
901 		{
902 			cl_int x, y;
903 		};
904 		__extension__ struct
905 		{
906 			cl_int s0, s1;
907 		};
908 		__extension__ struct
909 		{
910 			cl_int lo, hi;
911 		};
912 #endif
913 #if defined(__CL_INT2__)
914 		__cl_int2 v2;
915 #endif
916 	} cl_int2;
917 
918 	typedef union {
919 		cl_int CL_ALIGNED(16) s[4];
920 #if defined(CL_NAMED_STRUCT_SUPPORTED)
921 		__extension__ struct
922 		{
923 			cl_int x, y, z, w;
924 		};
925 		__extension__ struct
926 		{
927 			cl_int s0, s1, s2, s3;
928 		};
929 		__extension__ struct
930 		{
931 			cl_int2 lo, hi;
932 		};
933 #endif
934 #if defined(__CL_INT2__)
935 		__cl_int2 v2[2];
936 #endif
937 #if defined(__CL_INT4__)
938 		__cl_int4 v4;
939 #endif
940 	} cl_int4;
941 
942 	/* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */
943 	typedef cl_int4 cl_int3;
944 
945 	typedef union {
946 		cl_int CL_ALIGNED(32) s[8];
947 #if defined(CL_NAMED_STRUCT_SUPPORTED)
948 		__extension__ struct
949 		{
950 			cl_int x, y, z, w;
951 		};
952 		__extension__ struct
953 		{
954 			cl_int s0, s1, s2, s3, s4, s5, s6, s7;
955 		};
956 		__extension__ struct
957 		{
958 			cl_int4 lo, hi;
959 		};
960 #endif
961 #if defined(__CL_INT2__)
962 		__cl_int2 v2[4];
963 #endif
964 #if defined(__CL_INT4__)
965 		__cl_int4 v4[2];
966 #endif
967 #if defined(__CL_INT8__)
968 		__cl_int8 v8;
969 #endif
970 	} cl_int8;
971 
972 	typedef union {
973 		cl_int CL_ALIGNED(64) s[16];
974 #if defined(CL_NAMED_STRUCT_SUPPORTED)
975 		__extension__ struct
976 		{
977 			cl_int x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
978 		};
979 		__extension__ struct
980 		{
981 			cl_int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
982 		};
983 		__extension__ struct
984 		{
985 			cl_int8 lo, hi;
986 		};
987 #endif
988 #if defined(__CL_INT2__)
989 		__cl_int2 v2[8];
990 #endif
991 #if defined(__CL_INT4__)
992 		__cl_int4 v4[4];
993 #endif
994 #if defined(__CL_INT8__)
995 		__cl_int8 v8[2];
996 #endif
997 #if defined(__CL_INT16__)
998 		__cl_int16 v16;
999 #endif
1000 	} cl_int16;
1001 
1002 	/* ---- cl_uintn ---- */
1003 	typedef union {
1004 		cl_uint CL_ALIGNED(8) s[2];
1005 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1006 		__extension__ struct
1007 		{
1008 			cl_uint x, y;
1009 		};
1010 		__extension__ struct
1011 		{
1012 			cl_uint s0, s1;
1013 		};
1014 		__extension__ struct
1015 		{
1016 			cl_uint lo, hi;
1017 		};
1018 #endif
1019 #if defined(__CL_UINT2__)
1020 		__cl_uint2 v2;
1021 #endif
1022 	} cl_uint2;
1023 
1024 	typedef union {
1025 		cl_uint CL_ALIGNED(16) s[4];
1026 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1027 		__extension__ struct
1028 		{
1029 			cl_uint x, y, z, w;
1030 		};
1031 		__extension__ struct
1032 		{
1033 			cl_uint s0, s1, s2, s3;
1034 		};
1035 		__extension__ struct
1036 		{
1037 			cl_uint2 lo, hi;
1038 		};
1039 #endif
1040 #if defined(__CL_UINT2__)
1041 		__cl_uint2 v2[2];
1042 #endif
1043 #if defined(__CL_UINT4__)
1044 		__cl_uint4 v4;
1045 #endif
1046 	} cl_uint4;
1047 
1048 	/* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */
1049 	typedef cl_uint4 cl_uint3;
1050 
1051 	typedef union {
1052 		cl_uint CL_ALIGNED(32) s[8];
1053 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1054 		__extension__ struct
1055 		{
1056 			cl_uint x, y, z, w;
1057 		};
1058 		__extension__ struct
1059 		{
1060 			cl_uint s0, s1, s2, s3, s4, s5, s6, s7;
1061 		};
1062 		__extension__ struct
1063 		{
1064 			cl_uint4 lo, hi;
1065 		};
1066 #endif
1067 #if defined(__CL_UINT2__)
1068 		__cl_uint2 v2[4];
1069 #endif
1070 #if defined(__CL_UINT4__)
1071 		__cl_uint4 v4[2];
1072 #endif
1073 #if defined(__CL_UINT8__)
1074 		__cl_uint8 v8;
1075 #endif
1076 	} cl_uint8;
1077 
1078 	typedef union {
1079 		cl_uint CL_ALIGNED(64) s[16];
1080 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1081 		__extension__ struct
1082 		{
1083 			cl_uint x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
1084 		};
1085 		__extension__ struct
1086 		{
1087 			cl_uint s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
1088 		};
1089 		__extension__ struct
1090 		{
1091 			cl_uint8 lo, hi;
1092 		};
1093 #endif
1094 #if defined(__CL_UINT2__)
1095 		__cl_uint2 v2[8];
1096 #endif
1097 #if defined(__CL_UINT4__)
1098 		__cl_uint4 v4[4];
1099 #endif
1100 #if defined(__CL_UINT8__)
1101 		__cl_uint8 v8[2];
1102 #endif
1103 #if defined(__CL_UINT16__)
1104 		__cl_uint16 v16;
1105 #endif
1106 	} cl_uint16;
1107 
1108 	/* ---- cl_longn ---- */
1109 	typedef union {
1110 		cl_long CL_ALIGNED(16) s[2];
1111 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1112 		__extension__ struct
1113 		{
1114 			cl_long x, y;
1115 		};
1116 		__extension__ struct
1117 		{
1118 			cl_long s0, s1;
1119 		};
1120 		__extension__ struct
1121 		{
1122 			cl_long lo, hi;
1123 		};
1124 #endif
1125 #if defined(__CL_LONG2__)
1126 		__cl_long2 v2;
1127 #endif
1128 	} cl_long2;
1129 
1130 	typedef union {
1131 		cl_long CL_ALIGNED(32) s[4];
1132 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1133 		__extension__ struct
1134 		{
1135 			cl_long x, y, z, w;
1136 		};
1137 		__extension__ struct
1138 		{
1139 			cl_long s0, s1, s2, s3;
1140 		};
1141 		__extension__ struct
1142 		{
1143 			cl_long2 lo, hi;
1144 		};
1145 #endif
1146 #if defined(__CL_LONG2__)
1147 		__cl_long2 v2[2];
1148 #endif
1149 #if defined(__CL_LONG4__)
1150 		__cl_long4 v4;
1151 #endif
1152 	} cl_long4;
1153 
1154 	/* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */
1155 	typedef cl_long4 cl_long3;
1156 
1157 	typedef union {
1158 		cl_long CL_ALIGNED(64) s[8];
1159 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1160 		__extension__ struct
1161 		{
1162 			cl_long x, y, z, w;
1163 		};
1164 		__extension__ struct
1165 		{
1166 			cl_long s0, s1, s2, s3, s4, s5, s6, s7;
1167 		};
1168 		__extension__ struct
1169 		{
1170 			cl_long4 lo, hi;
1171 		};
1172 #endif
1173 #if defined(__CL_LONG2__)
1174 		__cl_long2 v2[4];
1175 #endif
1176 #if defined(__CL_LONG4__)
1177 		__cl_long4 v4[2];
1178 #endif
1179 #if defined(__CL_LONG8__)
1180 		__cl_long8 v8;
1181 #endif
1182 	} cl_long8;
1183 
1184 	typedef union {
1185 		cl_long CL_ALIGNED(128) s[16];
1186 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1187 		__extension__ struct
1188 		{
1189 			cl_long x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
1190 		};
1191 		__extension__ struct
1192 		{
1193 			cl_long s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
1194 		};
1195 		__extension__ struct
1196 		{
1197 			cl_long8 lo, hi;
1198 		};
1199 #endif
1200 #if defined(__CL_LONG2__)
1201 		__cl_long2 v2[8];
1202 #endif
1203 #if defined(__CL_LONG4__)
1204 		__cl_long4 v4[4];
1205 #endif
1206 #if defined(__CL_LONG8__)
1207 		__cl_long8 v8[2];
1208 #endif
1209 #if defined(__CL_LONG16__)
1210 		__cl_long16 v16;
1211 #endif
1212 	} cl_long16;
1213 
1214 	/* ---- cl_ulongn ---- */
1215 	typedef union {
1216 		cl_ulong CL_ALIGNED(16) s[2];
1217 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1218 		__extension__ struct
1219 		{
1220 			cl_ulong x, y;
1221 		};
1222 		__extension__ struct
1223 		{
1224 			cl_ulong s0, s1;
1225 		};
1226 		__extension__ struct
1227 		{
1228 			cl_ulong lo, hi;
1229 		};
1230 #endif
1231 #if defined(__CL_ULONG2__)
1232 		__cl_ulong2 v2;
1233 #endif
1234 	} cl_ulong2;
1235 
1236 	typedef union {
1237 		cl_ulong CL_ALIGNED(32) s[4];
1238 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1239 		__extension__ struct
1240 		{
1241 			cl_ulong x, y, z, w;
1242 		};
1243 		__extension__ struct
1244 		{
1245 			cl_ulong s0, s1, s2, s3;
1246 		};
1247 		__extension__ struct
1248 		{
1249 			cl_ulong2 lo, hi;
1250 		};
1251 #endif
1252 #if defined(__CL_ULONG2__)
1253 		__cl_ulong2 v2[2];
1254 #endif
1255 #if defined(__CL_ULONG4__)
1256 		__cl_ulong4 v4;
1257 #endif
1258 	} cl_ulong4;
1259 
1260 	/* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */
1261 	typedef cl_ulong4 cl_ulong3;
1262 
1263 	typedef union {
1264 		cl_ulong CL_ALIGNED(64) s[8];
1265 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1266 		__extension__ struct
1267 		{
1268 			cl_ulong x, y, z, w;
1269 		};
1270 		__extension__ struct
1271 		{
1272 			cl_ulong s0, s1, s2, s3, s4, s5, s6, s7;
1273 		};
1274 		__extension__ struct
1275 		{
1276 			cl_ulong4 lo, hi;
1277 		};
1278 #endif
1279 #if defined(__CL_ULONG2__)
1280 		__cl_ulong2 v2[4];
1281 #endif
1282 #if defined(__CL_ULONG4__)
1283 		__cl_ulong4 v4[2];
1284 #endif
1285 #if defined(__CL_ULONG8__)
1286 		__cl_ulong8 v8;
1287 #endif
1288 	} cl_ulong8;
1289 
1290 	typedef union {
1291 		cl_ulong CL_ALIGNED(128) s[16];
1292 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1293 		__extension__ struct
1294 		{
1295 			cl_ulong x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
1296 		};
1297 		__extension__ struct
1298 		{
1299 			cl_ulong s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
1300 		};
1301 		__extension__ struct
1302 		{
1303 			cl_ulong8 lo, hi;
1304 		};
1305 #endif
1306 #if defined(__CL_ULONG2__)
1307 		__cl_ulong2 v2[8];
1308 #endif
1309 #if defined(__CL_ULONG4__)
1310 		__cl_ulong4 v4[4];
1311 #endif
1312 #if defined(__CL_ULONG8__)
1313 		__cl_ulong8 v8[2];
1314 #endif
1315 #if defined(__CL_ULONG16__)
1316 		__cl_ulong16 v16;
1317 #endif
1318 	} cl_ulong16;
1319 
1320 	/* --- cl_floatn ---- */
1321 
1322 	typedef union {
1323 		cl_float CL_ALIGNED(8) s[2];
1324 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1325 		__extension__ struct
1326 		{
1327 			cl_float x, y;
1328 		};
1329 		__extension__ struct
1330 		{
1331 			cl_float s0, s1;
1332 		};
1333 		__extension__ struct
1334 		{
1335 			cl_float lo, hi;
1336 		};
1337 #endif
1338 #if defined(__CL_FLOAT2__)
1339 		__cl_float2 v2;
1340 #endif
1341 	} cl_float2;
1342 
1343 	typedef union {
1344 		cl_float CL_ALIGNED(16) s[4];
1345 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1346 		__extension__ struct
1347 		{
1348 			cl_float x, y, z, w;
1349 		};
1350 		__extension__ struct
1351 		{
1352 			cl_float s0, s1, s2, s3;
1353 		};
1354 		__extension__ struct
1355 		{
1356 			cl_float2 lo, hi;
1357 		};
1358 #endif
1359 #if defined(__CL_FLOAT2__)
1360 		__cl_float2 v2[2];
1361 #endif
1362 #if defined(__CL_FLOAT4__)
1363 		__cl_float4 v4;
1364 #endif
1365 	} cl_float4;
1366 
1367 	/* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */
1368 	typedef cl_float4 cl_float3;
1369 
1370 	typedef union {
1371 		cl_float CL_ALIGNED(32) s[8];
1372 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1373 		__extension__ struct
1374 		{
1375 			cl_float x, y, z, w;
1376 		};
1377 		__extension__ struct
1378 		{
1379 			cl_float s0, s1, s2, s3, s4, s5, s6, s7;
1380 		};
1381 		__extension__ struct
1382 		{
1383 			cl_float4 lo, hi;
1384 		};
1385 #endif
1386 #if defined(__CL_FLOAT2__)
1387 		__cl_float2 v2[4];
1388 #endif
1389 #if defined(__CL_FLOAT4__)
1390 		__cl_float4 v4[2];
1391 #endif
1392 #if defined(__CL_FLOAT8__)
1393 		__cl_float8 v8;
1394 #endif
1395 	} cl_float8;
1396 
1397 	typedef union {
1398 		cl_float CL_ALIGNED(64) s[16];
1399 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1400 		__extension__ struct
1401 		{
1402 			cl_float x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
1403 		};
1404 		__extension__ struct
1405 		{
1406 			cl_float s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
1407 		};
1408 		__extension__ struct
1409 		{
1410 			cl_float8 lo, hi;
1411 		};
1412 #endif
1413 #if defined(__CL_FLOAT2__)
1414 		__cl_float2 v2[8];
1415 #endif
1416 #if defined(__CL_FLOAT4__)
1417 		__cl_float4 v4[4];
1418 #endif
1419 #if defined(__CL_FLOAT8__)
1420 		__cl_float8 v8[2];
1421 #endif
1422 #if defined(__CL_FLOAT16__)
1423 		__cl_float16 v16;
1424 #endif
1425 	} cl_float16;
1426 
1427 	/* --- cl_doublen ---- */
1428 
1429 	typedef union {
1430 		cl_double CL_ALIGNED(16) s[2];
1431 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1432 		__extension__ struct
1433 		{
1434 			cl_double x, y;
1435 		};
1436 		__extension__ struct
1437 		{
1438 			cl_double s0, s1;
1439 		};
1440 		__extension__ struct
1441 		{
1442 			cl_double lo, hi;
1443 		};
1444 #endif
1445 #if defined(__CL_DOUBLE2__)
1446 		__cl_double2 v2;
1447 #endif
1448 	} cl_double2;
1449 
1450 	typedef union {
1451 		cl_double CL_ALIGNED(32) s[4];
1452 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1453 		__extension__ struct
1454 		{
1455 			cl_double x, y, z, w;
1456 		};
1457 		__extension__ struct
1458 		{
1459 			cl_double s0, s1, s2, s3;
1460 		};
1461 		__extension__ struct
1462 		{
1463 			cl_double2 lo, hi;
1464 		};
1465 #endif
1466 #if defined(__CL_DOUBLE2__)
1467 		__cl_double2 v2[2];
1468 #endif
1469 #if defined(__CL_DOUBLE4__)
1470 		__cl_double4 v4;
1471 #endif
1472 	} cl_double4;
1473 
1474 	/* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */
1475 	typedef cl_double4 cl_double3;
1476 
1477 	typedef union {
1478 		cl_double CL_ALIGNED(64) s[8];
1479 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1480 		__extension__ struct
1481 		{
1482 			cl_double x, y, z, w;
1483 		};
1484 		__extension__ struct
1485 		{
1486 			cl_double s0, s1, s2, s3, s4, s5, s6, s7;
1487 		};
1488 		__extension__ struct
1489 		{
1490 			cl_double4 lo, hi;
1491 		};
1492 #endif
1493 #if defined(__CL_DOUBLE2__)
1494 		__cl_double2 v2[4];
1495 #endif
1496 #if defined(__CL_DOUBLE4__)
1497 		__cl_double4 v4[2];
1498 #endif
1499 #if defined(__CL_DOUBLE8__)
1500 		__cl_double8 v8;
1501 #endif
1502 	} cl_double8;
1503 
1504 	typedef union {
1505 		cl_double CL_ALIGNED(128) s[16];
1506 #if defined(CL_NAMED_STRUCT_SUPPORTED)
1507 		__extension__ struct
1508 		{
1509 			cl_double x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
1510 		};
1511 		__extension__ struct
1512 		{
1513 			cl_double s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
1514 		};
1515 		__extension__ struct
1516 		{
1517 			cl_double8 lo, hi;
1518 		};
1519 #endif
1520 #if defined(__CL_DOUBLE2__)
1521 		__cl_double2 v2[8];
1522 #endif
1523 #if defined(__CL_DOUBLE4__)
1524 		__cl_double4 v4[4];
1525 #endif
1526 #if defined(__CL_DOUBLE8__)
1527 		__cl_double8 v8[2];
1528 #endif
1529 #if defined(__CL_DOUBLE16__)
1530 		__cl_double16 v16;
1531 #endif
1532 	} cl_double16;
1533 
1534 /* Macro to facilitate debugging
1535  * Usage:
1536  *   Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source.
1537  *   The first line ends with:   CL_PROGRAM_STRING_BEGIN \"
1538  *   Each line thereafter of OpenCL C source must end with: \n\
1539  *   The last line ends in ";
1540  *
1541  *   Example:
1542  *
1543  *   const char *my_program = CL_PROGRAM_STRING_BEGIN "\
1544  *   kernel void foo( int a, float * b )             \n\
1545  *   {                                               \n\
1546  *      // my comment                                \n\
1547  *      *b[ get_global_id(0)] = a;                   \n\
1548  *   }                                               \n\
1549  *   ";
1550  *
1551  * This should correctly set up the line, (column) and file information for your source
1552  * string so you can do source level debugging.
1553  */
1554 #define __CL_STRINGIFY(_x) #_x
1555 #define _CL_STRINGIFY(_x) __CL_STRINGIFY(_x)
1556 #define CL_PROGRAM_STRING_DEBUG_INFO "#line " _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n"
1557 
1558 	//  CL.h contents
1559 	/******************************************************************************/
1560 
1561 	typedef struct _cl_platform_id *cl_platform_id;
1562 	typedef struct _cl_device_id *cl_device_id;
1563 	typedef struct _cl_context *cl_context;
1564 	typedef struct _cl_command_queue *cl_command_queue;
1565 	typedef struct _cl_mem *cl_mem;
1566 	typedef struct _cl_program *cl_program;
1567 	typedef struct _cl_kernel *cl_kernel;
1568 	typedef struct _cl_event *cl_event;
1569 	typedef struct _cl_sampler *cl_sampler;
1570 
1571 	typedef cl_uint cl_bool; /* WARNING!  Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */
1572 	typedef cl_ulong cl_bitfield;
1573 	typedef cl_bitfield cl_device_type;
1574 	typedef cl_uint cl_platform_info;
1575 	typedef cl_uint cl_device_info;
1576 	typedef cl_bitfield cl_device_fp_config;
1577 	typedef cl_uint cl_device_mem_cache_type;
1578 	typedef cl_uint cl_device_local_mem_type;
1579 	typedef cl_bitfield cl_device_exec_capabilities;
1580 	typedef cl_bitfield cl_command_queue_properties;
1581 
1582 	typedef intptr_t cl_context_properties;
1583 	typedef cl_uint cl_context_info;
1584 	typedef cl_uint cl_command_queue_info;
1585 	typedef cl_uint cl_channel_order;
1586 	typedef cl_uint cl_channel_type;
1587 	typedef cl_bitfield cl_mem_flags;
1588 	typedef cl_uint cl_mem_object_type;
1589 	typedef cl_uint cl_mem_info;
1590 	typedef cl_uint cl_image_info;
1591 	typedef cl_uint cl_buffer_create_type;
1592 	typedef cl_uint cl_addressing_mode;
1593 	typedef cl_uint cl_filter_mode;
1594 	typedef cl_uint cl_sampler_info;
1595 	typedef cl_bitfield cl_map_flags;
1596 	typedef cl_uint cl_program_info;
1597 	typedef cl_uint cl_program_build_info;
1598 	typedef cl_int cl_build_status;
1599 	typedef cl_uint cl_kernel_info;
1600 	typedef cl_uint cl_kernel_work_group_info;
1601 	typedef cl_uint cl_event_info;
1602 	typedef cl_uint cl_command_type;
1603 	typedef cl_uint cl_profiling_info;
1604 
1605 	typedef struct _cl_image_format
1606 	{
1607 		cl_channel_order image_channel_order;
1608 		cl_channel_type image_channel_data_type;
1609 	} cl_image_format;
1610 
1611 	typedef struct _cl_buffer_region
1612 	{
1613 		size_t origin;
1614 		size_t size;
1615 	} cl_buffer_region;
1616 
1617 /******************************************************************************/
1618 
1619 /* Error Codes */
1620 #define CL_SUCCESS 0
1621 #define CL_DEVICE_NOT_FOUND -1
1622 #define CL_DEVICE_NOT_AVAILABLE -2
1623 #define CL_COMPILER_NOT_AVAILABLE -3
1624 #define CL_MEM_OBJECT_ALLOCATION_FAILURE -4
1625 #define CL_OUT_OF_RESOURCES -5
1626 #define CL_OUT_OF_HOST_MEMORY -6
1627 #define CL_PROFILING_INFO_NOT_AVAILABLE -7
1628 #define CL_MEM_COPY_OVERLAP -8
1629 #define CL_IMAGE_FORMAT_MISMATCH -9
1630 #define CL_IMAGE_FORMAT_NOT_SUPPORTED -10
1631 #define CL_BUILD_PROGRAM_FAILURE -11
1632 #define CL_MAP_FAILURE -12
1633 #define CL_MISALIGNED_SUB_BUFFER_OFFSET -13
1634 #define CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST -14
1635 
1636 #define CL_INVALID_VALUE -30
1637 #define CL_INVALID_DEVICE_TYPE -31
1638 #define CL_INVALID_PLATFORM -32
1639 #define CL_INVALID_DEVICE -33
1640 #define CL_INVALID_CONTEXT -34
1641 #define CL_INVALID_QUEUE_PROPERTIES -35
1642 #define CL_INVALID_COMMAND_QUEUE -36
1643 #define CL_INVALID_HOST_PTR -37
1644 #define CL_INVALID_MEM_OBJECT -38
1645 #define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR -39
1646 #define CL_INVALID_IMAGE_SIZE -40
1647 #define CL_INVALID_SAMPLER -41
1648 #define CL_INVALID_BINARY -42
1649 #define CL_INVALID_BUILD_OPTIONS -43
1650 #define CL_INVALID_PROGRAM -44
1651 #define CL_INVALID_PROGRAM_EXECUTABLE -45
1652 #define CL_INVALID_KERNEL_NAME -46
1653 #define CL_INVALID_KERNEL_DEFINITION -47
1654 #define CL_INVALID_KERNEL -48
1655 #define CL_INVALID_ARG_INDEX -49
1656 #define CL_INVALID_ARG_VALUE -50
1657 #define CL_INVALID_ARG_SIZE -51
1658 #define CL_INVALID_KERNEL_ARGS -52
1659 #define CL_INVALID_WORK_DIMENSION -53
1660 #define CL_INVALID_WORK_GROUP_SIZE -54
1661 #define CL_INVALID_WORK_ITEM_SIZE -55
1662 #define CL_INVALID_GLOBAL_OFFSET -56
1663 #define CL_INVALID_EVENT_WAIT_LIST -57
1664 #define CL_INVALID_EVENT -58
1665 #define CL_INVALID_OPERATION -59
1666 #define CL_INVALID_GL_OBJECT -60
1667 #define CL_INVALID_BUFFER_SIZE -61
1668 #define CL_INVALID_MIP_LEVEL -62
1669 #define CL_INVALID_GLOBAL_WORK_SIZE -63
1670 #define CL_INVALID_PROPERTY -64
1671 
1672 /* OpenCL Version */
1673 #define CL_VERSION_1_0 1
1674 #define CL_VERSION_1_1 1
1675 
1676 /* cl_bool */
1677 #define CL_FALSE 0
1678 #define CL_TRUE 1
1679 
1680 /* cl_platform_info */
1681 #define CL_PLATFORM_PROFILE 0x0900
1682 #define CL_PLATFORM_VERSION 0x0901
1683 #define CL_PLATFORM_NAME 0x0902
1684 #define CL_PLATFORM_VENDOR 0x0903
1685 #define CL_PLATFORM_EXTENSIONS 0x0904
1686 
1687 /* cl_device_type - bitfield */
1688 #define CL_DEVICE_TYPE_DEFAULT (1 << 0)
1689 #define CL_DEVICE_TYPE_CPU (1 << 1)
1690 #define CL_DEVICE_TYPE_GPU (1 << 2)
1691 #define CL_DEVICE_TYPE_ACCELERATOR (1 << 3)
1692 #define CL_DEVICE_TYPE_ALL 0xFFFFFFFF
1693 
1694 /* cl_device_info */
1695 #define CL_DEVICE_TYPE 0x1000
1696 #define CL_DEVICE_VENDOR_ID 0x1001
1697 #define CL_DEVICE_MAX_COMPUTE_UNITS 0x1002
1698 #define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS 0x1003
1699 #define CL_DEVICE_MAX_WORK_GROUP_SIZE 0x1004
1700 #define CL_DEVICE_MAX_WORK_ITEM_SIZES 0x1005
1701 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 0x1006
1702 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT 0x1007
1703 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 0x1008
1704 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG 0x1009
1705 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT 0x100A
1706 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE 0x100B
1707 #define CL_DEVICE_MAX_CLOCK_FREQUENCY 0x100C
1708 #define CL_DEVICE_ADDRESS_BITS 0x100D
1709 #define CL_DEVICE_MAX_READ_IMAGE_ARGS 0x100E
1710 #define CL_DEVICE_MAX_WRITE_IMAGE_ARGS 0x100F
1711 #define CL_DEVICE_MAX_MEM_ALLOC_SIZE 0x1010
1712 #define CL_DEVICE_IMAGE2D_MAX_WIDTH 0x1011
1713 #define CL_DEVICE_IMAGE2D_MAX_HEIGHT 0x1012
1714 #define CL_DEVICE_IMAGE3D_MAX_WIDTH 0x1013
1715 #define CL_DEVICE_IMAGE3D_MAX_HEIGHT 0x1014
1716 #define CL_DEVICE_IMAGE3D_MAX_DEPTH 0x1015
1717 #define CL_DEVICE_IMAGE_SUPPORT 0x1016
1718 #define CL_DEVICE_MAX_PARAMETER_SIZE 0x1017
1719 #define CL_DEVICE_MAX_SAMPLERS 0x1018
1720 #define CL_DEVICE_MEM_BASE_ADDR_ALIGN 0x1019
1721 #define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE 0x101A
1722 #define CL_DEVICE_SINGLE_FP_CONFIG 0x101B
1723 #define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE 0x101C
1724 #define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE 0x101D
1725 #define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE 0x101E
1726 #define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F
1727 #define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE 0x1020
1728 #define CL_DEVICE_MAX_CONSTANT_ARGS 0x1021
1729 #define CL_DEVICE_LOCAL_MEM_TYPE 0x1022
1730 #define CL_DEVICE_LOCAL_MEM_SIZE 0x1023
1731 #define CL_DEVICE_ERROR_CORRECTION_SUPPORT 0x1024
1732 #define CL_DEVICE_PROFILING_TIMER_RESOLUTION 0x1025
1733 #define CL_DEVICE_ENDIAN_LITTLE 0x1026
1734 #define CL_DEVICE_AVAILABLE 0x1027
1735 #define CL_DEVICE_COMPILER_AVAILABLE 0x1028
1736 #define CL_DEVICE_EXECUTION_CAPABILITIES 0x1029
1737 #define CL_DEVICE_QUEUE_PROPERTIES 0x102A
1738 #define CL_DEVICE_NAME 0x102B
1739 #define CL_DEVICE_VENDOR 0x102C
1740 #define CL_DRIVER_VERSION 0x102D
1741 #define CL_DEVICE_PROFILE 0x102E
1742 #define CL_DEVICE_VERSION 0x102F
1743 #define CL_DEVICE_EXTENSIONS 0x1030
1744 #define CL_DEVICE_PLATFORM 0x1031
1745 /* 0x1032 reserved for CL_DEVICE_DOUBLE_FP_CONFIG */
1746 /* 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG */
1747 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF 0x1034
1748 #define CL_DEVICE_HOST_UNIFIED_MEMORY 0x1035
1749 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR 0x1036
1750 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT 0x1037
1751 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_INT 0x1038
1752 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG 0x1039
1753 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT 0x103A
1754 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE 0x103B
1755 #define CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF 0x103C
1756 #define CL_DEVICE_OPENCL_C_VERSION 0x103D
1757 
1758 /* cl_device_fp_config - bitfield */
1759 #define CL_FP_DENORM (1 << 0)
1760 #define CL_FP_INF_NAN (1 << 1)
1761 #define CL_FP_ROUND_TO_NEAREST (1 << 2)
1762 #define CL_FP_ROUND_TO_ZERO (1 << 3)
1763 #define CL_FP_ROUND_TO_INF (1 << 4)
1764 #define CL_FP_FMA (1 << 5)
1765 #define CL_FP_SOFT_FLOAT (1 << 6)
1766 
1767 /* cl_device_mem_cache_type */
1768 #define CL_NONE 0x0
1769 #define CL_READ_ONLY_CACHE 0x1
1770 #define CL_READ_WRITE_CACHE 0x2
1771 
1772 /* cl_device_local_mem_type */
1773 #define CL_LOCAL 0x1
1774 #define CL_GLOBAL 0x2
1775 
1776 /* cl_device_exec_capabilities - bitfield */
1777 #define CL_EXEC_KERNEL (1 << 0)
1778 #define CL_EXEC_NATIVE_KERNEL (1 << 1)
1779 
1780 /* cl_command_queue_properties - bitfield */
1781 #define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE (1 << 0)
1782 #define CL_QUEUE_PROFILING_ENABLE (1 << 1)
1783 
1784 /* cl_context_info  */
1785 #define CL_CONTEXT_REFERENCE_COUNT 0x1080
1786 #define CL_CONTEXT_DEVICES 0x1081
1787 #define CL_CONTEXT_PROPERTIES 0x1082
1788 #define CL_CONTEXT_NUM_DEVICES 0x1083
1789 
1790 /* cl_context_info + cl_context_properties */
1791 #define CL_CONTEXT_PLATFORM 0x1084
1792 
1793 /* cl_command_queue_info */
1794 #define CL_QUEUE_CONTEXT 0x1090
1795 #define CL_QUEUE_DEVICE 0x1091
1796 #define CL_QUEUE_REFERENCE_COUNT 0x1092
1797 #define CL_QUEUE_PROPERTIES 0x1093
1798 
1799 /* cl_mem_flags - bitfield */
1800 #define CL_MEM_READ_WRITE (1 << 0)
1801 #define CL_MEM_WRITE_ONLY (1 << 1)
1802 #define CL_MEM_READ_ONLY (1 << 2)
1803 #define CL_MEM_USE_HOST_PTR (1 << 3)
1804 #define CL_MEM_ALLOC_HOST_PTR (1 << 4)
1805 #define CL_MEM_COPY_HOST_PTR (1 << 5)
1806 
1807 /* cl_channel_order */
1808 #define CL_R 0x10B0
1809 #define CL_A 0x10B1
1810 #define CL_RG 0x10B2
1811 #define CL_RA 0x10B3
1812 #define CL_RGB 0x10B4
1813 #define CL_RGBA 0x10B5
1814 #define CL_BGRA 0x10B6
1815 #define CL_ARGB 0x10B7
1816 #define CL_INTENSITY 0x10B8
1817 #define CL_LUMINANCE 0x10B9
1818 #define CL_Rx 0x10BA
1819 #define CL_RGx 0x10BB
1820 #define CL_RGBx 0x10BC
1821 
1822 /* cl_channel_type */
1823 #define CL_SNORM_INT8 0x10D0
1824 #define CL_SNORM_INT16 0x10D1
1825 #define CL_UNORM_INT8 0x10D2
1826 #define CL_UNORM_INT16 0x10D3
1827 #define CL_UNORM_SHORT_565 0x10D4
1828 #define CL_UNORM_SHORT_555 0x10D5
1829 #define CL_UNORM_INT_101010 0x10D6
1830 #define CL_SIGNED_INT8 0x10D7
1831 #define CL_SIGNED_INT16 0x10D8
1832 #define CL_SIGNED_INT32 0x10D9
1833 #define CL_UNSIGNED_INT8 0x10DA
1834 #define CL_UNSIGNED_INT16 0x10DB
1835 #define CL_UNSIGNED_INT32 0x10DC
1836 #define CL_HALF_FLOAT 0x10DD
1837 #define CL_FLOAT 0x10DE
1838 
1839 /* cl_mem_object_type */
1840 #define CL_MEM_OBJECT_BUFFER 0x10F0
1841 #define CL_MEM_OBJECT_IMAGE2D 0x10F1
1842 #define CL_MEM_OBJECT_IMAGE3D 0x10F2
1843 
1844 /* cl_mem_info */
1845 #define CL_MEM_TYPE 0x1100
1846 #define CL_MEM_FLAGS 0x1101
1847 #define CL_MEM_SIZE 0x1102
1848 #define CL_MEM_HOST_PTR 0x1103
1849 #define CL_MEM_MAP_COUNT 0x1104
1850 #define CL_MEM_REFERENCE_COUNT 0x1105
1851 #define CL_MEM_CONTEXT 0x1106
1852 #define CL_MEM_ASSOCIATED_MEMOBJECT 0x1107
1853 #define CL_MEM_OFFSET 0x1108
1854 
1855 /* cl_image_info */
1856 #define CL_IMAGE_FORMAT 0x1110
1857 #define CL_IMAGE_ELEMENT_SIZE 0x1111
1858 #define CL_IMAGE_ROW_PITCH 0x1112
1859 #define CL_IMAGE_SLICE_PITCH 0x1113
1860 #define CL_IMAGE_WIDTH 0x1114
1861 #define CL_IMAGE_HEIGHT 0x1115
1862 #define CL_IMAGE_DEPTH 0x1116
1863 
1864 /* cl_addressing_mode */
1865 #define CL_ADDRESS_NONE 0x1130
1866 #define CL_ADDRESS_CLAMP_TO_EDGE 0x1131
1867 #define CL_ADDRESS_CLAMP 0x1132
1868 #define CL_ADDRESS_REPEAT 0x1133
1869 #define CL_ADDRESS_MIRRORED_REPEAT 0x1134
1870 
1871 /* cl_filter_mode */
1872 #define CL_FILTER_NEAREST 0x1140
1873 #define CL_FILTER_LINEAR 0x1141
1874 
1875 /* cl_sampler_info */
1876 #define CL_SAMPLER_REFERENCE_COUNT 0x1150
1877 #define CL_SAMPLER_CONTEXT 0x1151
1878 #define CL_SAMPLER_NORMALIZED_COORDS 0x1152
1879 #define CL_SAMPLER_ADDRESSING_MODE 0x1153
1880 #define CL_SAMPLER_FILTER_MODE 0x1154
1881 
1882 /* cl_map_flags - bitfield */
1883 #define CL_MAP_READ (1 << 0)
1884 #define CL_MAP_WRITE (1 << 1)
1885 
1886 /* cl_program_info */
1887 #define CL_PROGRAM_REFERENCE_COUNT 0x1160
1888 #define CL_PROGRAM_CONTEXT 0x1161
1889 #define CL_PROGRAM_NUM_DEVICES 0x1162
1890 #define CL_PROGRAM_DEVICES 0x1163
1891 #define CL_PROGRAM_SOURCE 0x1164
1892 #define CL_PROGRAM_BINARY_SIZES 0x1165
1893 #define CL_PROGRAM_BINARIES 0x1166
1894 
1895 /* cl_program_build_info */
1896 #define CL_PROGRAM_BUILD_STATUS 0x1181
1897 #define CL_PROGRAM_BUILD_OPTIONS 0x1182
1898 #define CL_PROGRAM_BUILD_LOG 0x1183
1899 
1900 /* cl_build_status */
1901 #define CL_BUILD_SUCCESS 0
1902 #define CL_BUILD_NONE -1
1903 #define CL_BUILD_ERROR -2
1904 #define CL_BUILD_IN_PROGRESS -3
1905 
1906 /* cl_kernel_info */
1907 #define CL_KERNEL_FUNCTION_NAME 0x1190
1908 #define CL_KERNEL_NUM_ARGS 0x1191
1909 #define CL_KERNEL_REFERENCE_COUNT 0x1192
1910 #define CL_KERNEL_CONTEXT 0x1193
1911 #define CL_KERNEL_PROGRAM 0x1194
1912 
1913 /* cl_kernel_work_group_info */
1914 #define CL_KERNEL_WORK_GROUP_SIZE 0x11B0
1915 #define CL_KERNEL_COMPILE_WORK_GROUP_SIZE 0x11B1
1916 #define CL_KERNEL_LOCAL_MEM_SIZE 0x11B2
1917 #define CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 0x11B3
1918 #define CL_KERNEL_PRIVATE_MEM_SIZE 0x11B4
1919 
1920 /* cl_event_info  */
1921 #define CL_EVENT_COMMAND_QUEUE 0x11D0
1922 #define CL_EVENT_COMMAND_TYPE 0x11D1
1923 #define CL_EVENT_REFERENCE_COUNT 0x11D2
1924 #define CL_EVENT_COMMAND_EXECUTION_STATUS 0x11D3
1925 #define CL_EVENT_CONTEXT 0x11D4
1926 
1927 /* cl_command_type */
1928 #define CL_COMMAND_NDRANGE_KERNEL 0x11F0
1929 #define CL_COMMAND_TASK 0x11F1
1930 #define CL_COMMAND_NATIVE_KERNEL 0x11F2
1931 #define CL_COMMAND_READ_BUFFER 0x11F3
1932 #define CL_COMMAND_WRITE_BUFFER 0x11F4
1933 #define CL_COMMAND_COPY_BUFFER 0x11F5
1934 #define CL_COMMAND_READ_IMAGE 0x11F6
1935 #define CL_COMMAND_WRITE_IMAGE 0x11F7
1936 #define CL_COMMAND_COPY_IMAGE 0x11F8
1937 #define CL_COMMAND_COPY_IMAGE_TO_BUFFER 0x11F9
1938 #define CL_COMMAND_COPY_BUFFER_TO_IMAGE 0x11FA
1939 #define CL_COMMAND_MAP_BUFFER 0x11FB
1940 #define CL_COMMAND_MAP_IMAGE 0x11FC
1941 #define CL_COMMAND_UNMAP_MEM_OBJECT 0x11FD
1942 #define CL_COMMAND_MARKER 0x11FE
1943 #define CL_COMMAND_ACQUIRE_GL_OBJECTS 0x11FF
1944 #define CL_COMMAND_RELEASE_GL_OBJECTS 0x1200
1945 #define CL_COMMAND_READ_BUFFER_RECT 0x1201
1946 #define CL_COMMAND_WRITE_BUFFER_RECT 0x1202
1947 #define CL_COMMAND_COPY_BUFFER_RECT 0x1203
1948 #define CL_COMMAND_USER 0x1204
1949 
1950 /* command execution status */
1951 #define CL_COMPLETE 0x0
1952 #define CL_RUNNING 0x1
1953 #define CL_SUBMITTED 0x2
1954 #define CL_QUEUED 0x3
1955 
1956 /* cl_buffer_create_type  */
1957 #define CL_BUFFER_CREATE_TYPE_REGION 0x1220
1958 
1959 /* cl_profiling_info  */
1960 #define CL_PROFILING_COMMAND_QUEUED 0x1280
1961 #define CL_PROFILING_COMMAND_SUBMIT 0x1281
1962 #define CL_PROFILING_COMMAND_START 0x1282
1963 #define CL_PROFILING_COMMAND_END 0x1283
1964 
1965 	/********************************************************************************************************/
1966 
1967 	/********************************************************************************************************/
1968 
1969 	/*  Function signature typedef's */
1970 
1971 	/* Platform API */
1972 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
1973 									PFNCLGETPLATFORMIDS)(cl_uint /* num_entries */,
1974 														 cl_platform_id * /* platforms */,
1975 														 cl_uint * /* num_platforms */) CL_API_SUFFIX__VERSION_1_0;
1976 
1977 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
1978 									PFNCLGETPLATFORMINFO)(cl_platform_id /* platform */,
1979 														  cl_platform_info /* param_name */,
1980 														  size_t /* param_value_size */,
1981 														  void * /* param_value */,
1982 														  size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
1983 
1984 	/* Device APIs */
1985 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
1986 									PFNCLGETDEVICEIDS)(cl_platform_id /* platform */,
1987 													   cl_device_type /* device_type */,
1988 													   cl_uint /* num_entries */,
1989 													   cl_device_id * /* devices */,
1990 													   cl_uint * /* num_devices */) CL_API_SUFFIX__VERSION_1_0;
1991 
1992 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
1993 									PFNCLGETDEVICEINFO)(cl_device_id /* device */,
1994 														cl_device_info /* param_name */,
1995 														size_t /* param_value_size */,
1996 														void * /* param_value */,
1997 														size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
1998 
1999 	// Context APIs
2000 	typedef CL_API_ENTRY cl_context(CL_API_CALL *
2001 										PFNCLCREATECONTEXT)(const cl_context_properties * /* properties */,
2002 															cl_uint /* num_devices */,
2003 															const cl_device_id * /* devices */,
2004 															void(CL_CALLBACK * /* pfn_notify */)(const char *, const void *, size_t, void *),
2005 															void * /* user_data */,
2006 															cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2007 
2008 	typedef CL_API_ENTRY cl_context(CL_API_CALL *
2009 										PFNCLCREATECONTEXTFROMTYPE)(const cl_context_properties * /* properties */,
2010 																	cl_device_type /* device_type */,
2011 																	void(CL_CALLBACK * /* pfn_notify*/)(const char *, const void *, size_t, void *),
2012 																	void * /* user_data */,
2013 																	cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2014 
2015 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2016 									PFNCLRETAINCONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
2017 
2018 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2019 									PFNCLRELEASECONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
2020 
2021 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2022 									PFNCLGETCONTEXTINFO)(cl_context /* context */,
2023 														 cl_context_info /* param_name */,
2024 														 size_t /* param_value_size */,
2025 														 void * /* param_value */,
2026 														 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2027 
2028 	/* Command Queue APIs */
2029 	typedef CL_API_ENTRY cl_command_queue(CL_API_CALL *
2030 											  PFNCLCREATECOMMANDQUEUE)(cl_context /* context */,
2031 																	   cl_device_id /* device */,
2032 																	   cl_command_queue_properties /* properties */,
2033 																	   cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2034 
2035 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2036 									PFNCLRETAINCOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
2037 
2038 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2039 									PFNCLRELEASECOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
2040 
2041 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2042 									PFNCLGETCOMMANDQUEUEINFO)(cl_command_queue /* command_queue */,
2043 															  cl_command_queue_info /* param_name */,
2044 															  size_t /* param_value_size */,
2045 															  void * /* param_value */,
2046 															  size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2047 
2048 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2049 									PFNCLSETCOMMANDQUEUEPROPERTY)(cl_command_queue /* command_queue */,
2050 																  cl_command_queue_properties /* properties */,
2051 																  cl_bool /* enable */,
2052 																  cl_command_queue_properties * /* old_properties */) CL_API_SUFFIX__VERSION_1_0;
2053 
2054 	/* Memory Object APIs */
2055 	typedef CL_API_ENTRY cl_mem(CL_API_CALL *
2056 									PFNCLCREATEBUFFER)(cl_context /* context */,
2057 													   cl_mem_flags /* flags */,
2058 													   size_t /* size */,
2059 													   void * /* host_ptr */,
2060 													   cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2061 
2062 	typedef CL_API_ENTRY cl_mem(CL_API_CALL *
2063 									PFNCLCREATESUBBUFFER)(cl_mem /* buffer */,
2064 														  cl_mem_flags /* flags */,
2065 														  cl_buffer_create_type /* buffer_create_type */,
2066 														  const void * /* buffer_create_info */,
2067 														  cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
2068 
2069 	typedef CL_API_ENTRY cl_mem(CL_API_CALL *
2070 									PFNCLCREATEIMAGE2D)(cl_context /* context */,
2071 														cl_mem_flags /* flags */,
2072 														const cl_image_format * /* image_format */,
2073 														size_t /* image_width */,
2074 														size_t /* image_height */,
2075 														size_t /* image_row_pitch */,
2076 														void * /* host_ptr */,
2077 														cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2078 
2079 	typedef CL_API_ENTRY cl_mem(CL_API_CALL *
2080 									PFNCLCREATEIMAGE3D)(cl_context /* context */,
2081 														cl_mem_flags /* flags */,
2082 														const cl_image_format * /* image_format */,
2083 														size_t /* image_width */,
2084 														size_t /* image_height */,
2085 														size_t /* image_depth */,
2086 														size_t /* image_row_pitch */,
2087 														size_t /* image_slice_pitch */,
2088 														void * /* host_ptr */,
2089 														cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2090 
2091 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2092 									PFNCLRETAINMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
2093 
2094 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2095 									PFNCLRELEASEMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
2096 
2097 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2098 									PFNCLGETSUPPORTEDIMAGEFORMATS)(cl_context /* context */,
2099 																   cl_mem_flags /* flags */,
2100 																   cl_mem_object_type /* image_type */,
2101 																   cl_uint /* num_entries */,
2102 																   cl_image_format * /* image_formats */,
2103 																   cl_uint * /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0;
2104 
2105 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2106 									PFNCLGETMEMOBJECTINFO)(cl_mem /* memobj */,
2107 														   cl_mem_info /* param_name */,
2108 														   size_t /* param_value_size */,
2109 														   void * /* param_value */,
2110 														   size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2111 
2112 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2113 									PFNCLGETIMAGEINFO)(cl_mem /* image */,
2114 													   cl_image_info /* param_name */,
2115 													   size_t /* param_value_size */,
2116 													   void * /* param_value */,
2117 													   size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2118 
2119 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2120 									PFNCLSETMEMOBJECTDESTRUCTORCALLBACK)(cl_mem /* memobj */,
2121 																		 void(CL_CALLBACK * /*pfn_notify*/)(cl_mem /* memobj */, void * /*user_data*/),
2122 																		 void * /*user_data */) CL_API_SUFFIX__VERSION_1_1;
2123 
2124 	/* Sampler APIs  */
2125 	typedef CL_API_ENTRY cl_sampler(CL_API_CALL *
2126 										PFNCLCREATESAMPLER)(cl_context /* context */,
2127 															cl_bool /* normalized_coords */,
2128 															cl_addressing_mode /* addressing_mode */,
2129 															cl_filter_mode /* filter_mode */,
2130 															cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2131 
2132 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2133 									PFNCLRETAINSAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
2134 
2135 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2136 									PFNCLRELEASESAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
2137 
2138 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2139 									PFNCLGETSAMPLERINFO)(cl_sampler /* sampler */,
2140 														 cl_sampler_info /* param_name */,
2141 														 size_t /* param_value_size */,
2142 														 void * /* param_value */,
2143 														 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2144 
2145 	/* Program Object APIs  */
2146 	typedef CL_API_ENTRY cl_program(CL_API_CALL *
2147 										PFNCLCREATEPROGRAMWITHSOURCE)(cl_context /* context */,
2148 																	  cl_uint /* count */,
2149 																	  const char ** /* strings */,
2150 																	  const size_t * /* lengths */,
2151 																	  cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2152 
2153 	typedef CL_API_ENTRY cl_program(CL_API_CALL *
2154 										PFNCLCREATEPROGRAMWITHBINARY)(cl_context /* context */,
2155 																	  cl_uint /* num_devices */,
2156 																	  const cl_device_id * /* device_list */,
2157 																	  const size_t * /* lengths */,
2158 																	  const unsigned char ** /* binaries */,
2159 																	  cl_int * /* binary_status */,
2160 																	  cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2161 
2162 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2163 									PFNCLRETAINPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
2164 
2165 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2166 									PFNCLRELEASEPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
2167 
2168 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2169 									PFNCLBUILDPROGRAM)(cl_program /* program */,
2170 													   cl_uint /* num_devices */,
2171 													   const cl_device_id * /* device_list */,
2172 													   const char * /* options */,
2173 													   void(CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
2174 													   void * /* user_data */) CL_API_SUFFIX__VERSION_1_0;
2175 
2176 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2177 									PFNCLUNLOADCOMPILER)(void) CL_API_SUFFIX__VERSION_1_0;
2178 
2179 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2180 									PFNCLGETPROGRAMINFO)(cl_program /* program */,
2181 														 cl_program_info /* param_name */,
2182 														 size_t /* param_value_size */,
2183 														 void * /* param_value */,
2184 														 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2185 
2186 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2187 									PFNCLGETPROGRAMBUILDINFO)(cl_program /* program */,
2188 															  cl_device_id /* device */,
2189 															  cl_program_build_info /* param_name */,
2190 															  size_t /* param_value_size */,
2191 															  void * /* param_value */,
2192 															  size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2193 
2194 	/* Kernel Object APIs */
2195 	typedef CL_API_ENTRY cl_kernel(CL_API_CALL *
2196 									   PFNCLCREATEKERNEL)(cl_program /* program */,
2197 														  const char * /* kernel_name */,
2198 														  cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
2199 
2200 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2201 									PFNCLCREATEKERNELSINPROGRAM)(cl_program /* program */,
2202 																 cl_uint /* num_kernels */,
2203 																 cl_kernel * /* kernels */,
2204 																 cl_uint * /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0;
2205 
2206 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2207 									PFNCLRETAINKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
2208 
2209 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2210 									PFNCLRELEASEKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
2211 
2212 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2213 									PFNCLSETKERNELARG)(cl_kernel /* kernel */,
2214 													   cl_uint /* arg_index */,
2215 													   size_t /* arg_size */,
2216 													   const void * /* arg_value */) CL_API_SUFFIX__VERSION_1_0;
2217 
2218 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2219 									PFNCLGETKERNELINFO)(cl_kernel /* kernel */,
2220 														cl_kernel_info /* param_name */,
2221 														size_t /* param_value_size */,
2222 														void * /* param_value */,
2223 														size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2224 
2225 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2226 									PFNCLGETKERNELWORKGROUPINFO)(cl_kernel /* kernel */,
2227 																 cl_device_id /* device */,
2228 																 cl_kernel_work_group_info /* param_name */,
2229 																 size_t /* param_value_size */,
2230 																 void * /* param_value */,
2231 																 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2232 
2233 	// Event Object APIs
2234 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2235 									PFNCLWAITFOREVENTS)(cl_uint /* num_events */,
2236 														const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0;
2237 
2238 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2239 									PFNCLGETEVENTINFO)(cl_event /* event */,
2240 													   cl_event_info /* param_name */,
2241 													   size_t /* param_value_size */,
2242 													   void * /* param_value */,
2243 													   size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2244 
2245 	typedef CL_API_ENTRY cl_event(CL_API_CALL *
2246 									  PFNCLCREATEUSEREVENT)(cl_context /* context */,
2247 															cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
2248 
2249 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2250 									PFNCLRETAINEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
2251 
2252 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2253 									PFNCLRELEASEEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
2254 
2255 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2256 									PFNCLSETUSEREVENTSTATUS)(cl_event /* event */,
2257 															 cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1;
2258 
2259 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2260 									PFNCLSETEVENTCALLBACK)(cl_event /* event */,
2261 														   cl_int /* command_exec_callback_type */,
2262 														   void(CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *),
2263 														   void * /* user_data */) CL_API_SUFFIX__VERSION_1_1;
2264 
2265 	/* Profiling APIs  */
2266 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2267 									PFNCLGETEVENTPROFILINGINFO)(cl_event /* event */,
2268 																cl_profiling_info /* param_name */,
2269 																size_t /* param_value_size */,
2270 																void * /* param_value */,
2271 																size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
2272 
2273 	// Flush and Finish APIs
2274 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2275 									PFNCLFLUSH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
2276 
2277 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2278 									PFNCLFINISH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
2279 
2280 	/* Enqueued Commands APIs */
2281 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2282 									PFNCLENQUEUEREADBUFFER)(cl_command_queue /* command_queue */,
2283 															cl_mem /* buffer */,
2284 															cl_bool /* blocking_read */,
2285 															size_t /* offset */,
2286 															size_t /* cb */,
2287 															void * /* ptr */,
2288 															cl_uint /* num_events_in_wait_list */,
2289 															const cl_event * /* event_wait_list */,
2290 															cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2291 
2292 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2293 									PFNCLENQUEUEREADBUFFERRECT)(cl_command_queue /* command_queue */,
2294 																cl_mem /* buffer */,
2295 																cl_bool /* blocking_read */,
2296 																const size_t * /* buffer_origin */,
2297 																const size_t * /* host_origin */,
2298 																const size_t * /* region */,
2299 																size_t /* buffer_row_pitch */,
2300 																size_t /* buffer_slice_pitch */,
2301 																size_t /* host_row_pitch */,
2302 																size_t /* host_slice_pitch */,
2303 																void * /* ptr */,
2304 																cl_uint /* num_events_in_wait_list */,
2305 																const cl_event * /* event_wait_list */,
2306 																cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1;
2307 
2308 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2309 									PFNCLENQUEUEWRITEBUFFER)(cl_command_queue /* command_queue */,
2310 															 cl_mem /* buffer */,
2311 															 cl_bool /* blocking_write */,
2312 															 size_t /* offset */,
2313 															 size_t /* cb */,
2314 															 const void * /* ptr */,
2315 															 cl_uint /* num_events_in_wait_list */,
2316 															 const cl_event * /* event_wait_list */,
2317 															 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2318 
2319 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2320 									PFNCLENQUEUEWRITEBUFFERRECT)(cl_command_queue /* command_queue */,
2321 																 cl_mem /* buffer */,
2322 																 cl_bool /* blocking_write */,
2323 																 const size_t * /* buffer_origin */,
2324 																 const size_t * /* host_origin */,
2325 																 const size_t * /* region */,
2326 																 size_t /* buffer_row_pitch */,
2327 																 size_t /* buffer_slice_pitch */,
2328 																 size_t /* host_row_pitch */,
2329 																 size_t /* host_slice_pitch */,
2330 																 const void * /* ptr */,
2331 																 cl_uint /* num_events_in_wait_list */,
2332 																 const cl_event * /* event_wait_list */,
2333 																 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1;
2334 
2335 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2336 									PFNCLENQUEUECOPYBUFFER)(cl_command_queue /* command_queue */,
2337 															cl_mem /* src_buffer */,
2338 															cl_mem /* dst_buffer */,
2339 															size_t /* src_offset */,
2340 															size_t /* dst_offset */,
2341 															size_t /* cb */,
2342 															cl_uint /* num_events_in_wait_list */,
2343 															const cl_event * /* event_wait_list */,
2344 															cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2345 
2346 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2347 									PFNCLENQUEUECOPYBUFFERRECT)(cl_command_queue /* command_queue */,
2348 																cl_mem /* src_buffer */,
2349 																cl_mem /* dst_buffer */,
2350 																const size_t * /* src_origin */,
2351 																const size_t * /* dst_origin */,
2352 																const size_t * /* region */,
2353 																size_t /* src_row_pitch */,
2354 																size_t /* src_slice_pitch */,
2355 																size_t /* dst_row_pitch */,
2356 																size_t /* dst_slice_pitch */,
2357 																cl_uint /* num_events_in_wait_list */,
2358 																const cl_event * /* event_wait_list */,
2359 																cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1;
2360 
2361 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2362 									PFNCLENQUEUEREADIMAGE)(cl_command_queue /* command_queue */,
2363 														   cl_mem /* image */,
2364 														   cl_bool /* blocking_read */,
2365 														   const size_t * /* origin[3] */,
2366 														   const size_t * /* region[3] */,
2367 														   size_t /* row_pitch */,
2368 														   size_t /* slice_pitch */,
2369 														   void * /* ptr */,
2370 														   cl_uint /* num_events_in_wait_list */,
2371 														   const cl_event * /* event_wait_list */,
2372 														   cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2373 
2374 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2375 									PFNCLENQUEUEWRITEIMAGE)(cl_command_queue /* command_queue */,
2376 															cl_mem /* image */,
2377 															cl_bool /* blocking_write */,
2378 															const size_t * /* origin[3] */,
2379 															const size_t * /* region[3] */,
2380 															size_t /* input_row_pitch */,
2381 															size_t /* input_slice_pitch */,
2382 															const void * /* ptr */,
2383 															cl_uint /* num_events_in_wait_list */,
2384 															const cl_event * /* event_wait_list */,
2385 															cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2386 
2387 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2388 									PFNCLENQUEUECOPYIMAGE)(cl_command_queue /* command_queue */,
2389 														   cl_mem /* src_image */,
2390 														   cl_mem /* dst_image */,
2391 														   const size_t * /* src_origin[3] */,
2392 														   const size_t * /* dst_origin[3] */,
2393 														   const size_t * /* region[3] */,
2394 														   cl_uint /* num_events_in_wait_list */,
2395 														   const cl_event * /* event_wait_list */,
2396 														   cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2397 
2398 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2399 									PFNCLENQUEUECOPYIMAGETOBUFFER)(cl_command_queue /* command_queue */,
2400 																   cl_mem /* src_image */,
2401 																   cl_mem /* dst_buffer */,
2402 																   const size_t * /* src_origin[3] */,
2403 																   const size_t * /* region[3] */,
2404 																   size_t /* dst_offset */,
2405 																   cl_uint /* num_events_in_wait_list */,
2406 																   const cl_event * /* event_wait_list */,
2407 																   cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2408 
2409 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2410 									PFNCLENQUEUECOPYBUFFERTOIMAGE)(cl_command_queue /* command_queue */,
2411 																   cl_mem /* src_buffer */,
2412 																   cl_mem /* dst_image */,
2413 																   size_t /* src_offset */,
2414 																   const size_t * /* dst_origin[3] */,
2415 																   const size_t * /* region[3] */,
2416 																   cl_uint /* num_events_in_wait_list */,
2417 																   const cl_event * /* event_wait_list */,
2418 																   cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2419 
2420 	typedef CL_API_ENTRY void *(CL_API_CALL *
2421 									PFNCLENQUEUEMAPBUFFER)(cl_command_queue /* command_queue */,
2422 														   cl_mem /* buffer */,
2423 														   cl_bool /* blocking_map */,
2424 														   cl_map_flags /* map_flags */,
2425 														   size_t /* offset */,
2426 														   size_t /* cb */,
2427 														   cl_uint /* num_events_in_wait_list */,
2428 														   const cl_event * /* event_wait_list */,
2429 														   cl_event * /* event */,
2430 														   cl_int * /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;
2431 
2432 	typedef CL_API_ENTRY void *(CL_API_CALL *
2433 									PFNCLENQUEUEMAPIMAGE)(cl_command_queue /* command_queue */,
2434 														  cl_mem /* image */,
2435 														  cl_bool /* blocking_map */,
2436 														  cl_map_flags /* map_flags */,
2437 														  const size_t * /* origin[3] */,
2438 														  const size_t * /* region[3] */,
2439 														  size_t * /* image_row_pitch */,
2440 														  size_t * /* image_slice_pitch */,
2441 														  cl_uint /* num_events_in_wait_list */,
2442 														  const cl_event * /* event_wait_list */,
2443 														  cl_event * /* event */,
2444 														  cl_int * /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;
2445 
2446 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2447 									PFNCLENQUEUEUNMAPMEMOBJECT)(cl_command_queue /* command_queue */,
2448 																cl_mem /* memobj */,
2449 																void * /* mapped_ptr */,
2450 																cl_uint /* num_events_in_wait_list */,
2451 																const cl_event * /* event_wait_list */,
2452 																cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2453 
2454 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2455 									PFNCLENQUEUENDRANGEKERNEL)(cl_command_queue /* command_queue */,
2456 															   cl_kernel /* kernel */,
2457 															   cl_uint /* work_dim */,
2458 															   const size_t * /* global_work_offset */,
2459 															   const size_t * /* global_work_size */,
2460 															   const size_t * /* local_work_size */,
2461 															   cl_uint /* num_events_in_wait_list */,
2462 															   const cl_event * /* event_wait_list */,
2463 															   cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2464 
2465 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2466 									PFNCLENQUEUETASK)(cl_command_queue /* command_queue */,
2467 													  cl_kernel /* kernel */,
2468 													  cl_uint /* num_events_in_wait_list */,
2469 													  const cl_event * /* event_wait_list */,
2470 													  cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2471 
2472 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2473 									PFNCLENQUEUENATIVEKERNEL)(cl_command_queue /* command_queue */,
2474 															  void (*user_func)(void *),
2475 															  void * /* args */,
2476 															  size_t /* cb_args */,
2477 															  cl_uint /* num_mem_objects */,
2478 															  const cl_mem * /* mem_list */,
2479 															  const void ** /* args_mem_loc */,
2480 															  cl_uint /* num_events_in_wait_list */,
2481 															  const cl_event * /* event_wait_list */,
2482 															  cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2483 
2484 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2485 									PFNCLENQUEUEMARKER)(cl_command_queue /* command_queue */,
2486 														cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
2487 
2488 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2489 									PFNCLENQUEUEWAITFOREVENTS)(cl_command_queue /* command_queue */,
2490 															   cl_uint /* num_events */,
2491 															   const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0;
2492 
2493 	typedef CL_API_ENTRY cl_int(CL_API_CALL *
2494 									PFNCLENQUEUEBARRIER)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
2495 
2496 	// Extension function access
2497 	//
2498 	// Returns the extension function address for the given function name,
2499 	// or NULL if a valid function can not be found.  The client must
2500 	// check to make sure the address is not NULL, before using or
2501 	// calling the returned function address.
2502 	//
2503 	typedef CL_API_ENTRY void *(CL_API_CALL *PFNCLGETEXTENSIONFUNCTIONADDRESS)(const char * /* func_name */)CL_API_SUFFIX__VERSION_1_0;
2504 
2505 #define CLEW_STATIC
2506 
2507 #ifdef CLEW_STATIC
2508 #define CLEWAPI extern
2509 #else
2510 #ifdef CLEW_BUILD
2511 #define CLEWAPI extern __declspec(dllexport)
2512 #else
2513 #define CLEWAPI extern __declspec(dllimport)
2514 #endif
2515 #endif
2516 
2517 #if defined(_WIN32)
2518 #define CLEW_FUN_EXPORT extern
2519 #else
2520 #define CLEW_FUN_EXPORT CLEWAPI
2521 #endif
2522 
2523 #define CLEW_GET_FUN(x) x
2524 
2525 	//  Variables holding function entry points
2526 	CLEW_FUN_EXPORT PFNCLGETPLATFORMIDS __clewGetPlatformIDs;
2527 	CLEW_FUN_EXPORT PFNCLGETPLATFORMINFO __clewGetPlatformInfo;
2528 	CLEW_FUN_EXPORT PFNCLGETDEVICEIDS __clewGetDeviceIDs;
2529 	CLEW_FUN_EXPORT PFNCLGETDEVICEINFO __clewGetDeviceInfo;
2530 	CLEW_FUN_EXPORT PFNCLCREATECONTEXT __clewCreateContext;
2531 	CLEW_FUN_EXPORT PFNCLCREATECONTEXTFROMTYPE __clewCreateContextFromType;
2532 	CLEW_FUN_EXPORT PFNCLRETAINCONTEXT __clewRetainContext;
2533 	CLEW_FUN_EXPORT PFNCLRELEASECONTEXT __clewReleaseContext;
2534 	CLEW_FUN_EXPORT PFNCLGETCONTEXTINFO __clewGetContextInfo;
2535 	CLEW_FUN_EXPORT PFNCLCREATECOMMANDQUEUE __clewCreateCommandQueue;
2536 	CLEW_FUN_EXPORT PFNCLRETAINCOMMANDQUEUE __clewRetainCommandQueue;
2537 	CLEW_FUN_EXPORT PFNCLRELEASECOMMANDQUEUE __clewReleaseCommandQueue;
2538 	CLEW_FUN_EXPORT PFNCLGETCOMMANDQUEUEINFO __clewGetCommandQueueInfo;
2539 #ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
2540 	CLEW_FUN_EXPORT PFNCLSETCOMMANDQUEUEPROPERTY __clewSetCommandQueueProperty;
2541 #endif
2542 	CLEW_FUN_EXPORT PFNCLCREATEBUFFER __clewCreateBuffer;
2543 	CLEW_FUN_EXPORT PFNCLCREATESUBBUFFER __clewCreateSubBuffer;
2544 	CLEW_FUN_EXPORT PFNCLCREATEIMAGE2D __clewCreateImage2D;
2545 	CLEW_FUN_EXPORT PFNCLCREATEIMAGE3D __clewCreateImage3D;
2546 	CLEW_FUN_EXPORT PFNCLRETAINMEMOBJECT __clewRetainMemObject;
2547 	CLEW_FUN_EXPORT PFNCLRELEASEMEMOBJECT __clewReleaseMemObject;
2548 	CLEW_FUN_EXPORT PFNCLGETSUPPORTEDIMAGEFORMATS __clewGetSupportedImageFormats;
2549 	CLEW_FUN_EXPORT PFNCLGETMEMOBJECTINFO __clewGetMemObjectInfo;
2550 	CLEW_FUN_EXPORT PFNCLGETIMAGEINFO __clewGetImageInfo;
2551 	CLEW_FUN_EXPORT PFNCLSETMEMOBJECTDESTRUCTORCALLBACK __clewSetMemObjectDestructorCallback;
2552 	CLEW_FUN_EXPORT PFNCLCREATESAMPLER __clewCreateSampler;
2553 	CLEW_FUN_EXPORT PFNCLRETAINSAMPLER __clewRetainSampler;
2554 	CLEW_FUN_EXPORT PFNCLRELEASESAMPLER __clewReleaseSampler;
2555 	CLEW_FUN_EXPORT PFNCLGETSAMPLERINFO __clewGetSamplerInfo;
2556 	CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHSOURCE __clewCreateProgramWithSource;
2557 	CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHBINARY __clewCreateProgramWithBinary;
2558 	CLEW_FUN_EXPORT PFNCLRETAINPROGRAM __clewRetainProgram;
2559 	CLEW_FUN_EXPORT PFNCLRELEASEPROGRAM __clewReleaseProgram;
2560 	CLEW_FUN_EXPORT PFNCLBUILDPROGRAM __clewBuildProgram;
2561 	CLEW_FUN_EXPORT PFNCLUNLOADCOMPILER __clewUnloadCompiler;
2562 	CLEW_FUN_EXPORT PFNCLGETPROGRAMINFO __clewGetProgramInfo;
2563 	CLEW_FUN_EXPORT PFNCLGETPROGRAMBUILDINFO __clewGetProgramBuildInfo;
2564 	CLEW_FUN_EXPORT PFNCLCREATEKERNEL __clewCreateKernel;
2565 	CLEW_FUN_EXPORT PFNCLCREATEKERNELSINPROGRAM __clewCreateKernelsInProgram;
2566 	CLEW_FUN_EXPORT PFNCLRETAINKERNEL __clewRetainKernel;
2567 	CLEW_FUN_EXPORT PFNCLRELEASEKERNEL __clewReleaseKernel;
2568 	CLEW_FUN_EXPORT PFNCLSETKERNELARG __clewSetKernelArg;
2569 	CLEW_FUN_EXPORT PFNCLGETKERNELINFO __clewGetKernelInfo;
2570 	CLEW_FUN_EXPORT PFNCLGETKERNELWORKGROUPINFO __clewGetKernelWorkGroupInfo;
2571 	CLEW_FUN_EXPORT PFNCLWAITFOREVENTS __clewWaitForEvents;
2572 	CLEW_FUN_EXPORT PFNCLGETEVENTINFO __clewGetEventInfo;
2573 	CLEW_FUN_EXPORT PFNCLCREATEUSEREVENT __clewCreateUserEvent;
2574 	CLEW_FUN_EXPORT PFNCLRETAINEVENT __clewRetainEvent;
2575 	CLEW_FUN_EXPORT PFNCLRELEASEEVENT __clewReleaseEvent;
2576 	CLEW_FUN_EXPORT PFNCLSETUSEREVENTSTATUS __clewSetUserEventStatus;
2577 	CLEW_FUN_EXPORT PFNCLSETEVENTCALLBACK __clewSetEventCallback;
2578 	CLEW_FUN_EXPORT PFNCLGETEVENTPROFILINGINFO __clewGetEventProfilingInfo;
2579 	CLEW_FUN_EXPORT PFNCLFLUSH __clewFlush;
2580 	CLEW_FUN_EXPORT PFNCLFINISH __clewFinish;
2581 	CLEW_FUN_EXPORT PFNCLENQUEUEREADBUFFER __clewEnqueueReadBuffer;
2582 	CLEW_FUN_EXPORT PFNCLENQUEUEREADBUFFERRECT __clewEnqueueReadBufferRect;
2583 	CLEW_FUN_EXPORT PFNCLENQUEUEWRITEBUFFER __clewEnqueueWriteBuffer;
2584 	CLEW_FUN_EXPORT PFNCLENQUEUEWRITEBUFFERRECT __clewEnqueueWriteBufferRect;
2585 	CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFER __clewEnqueueCopyBuffer;
2586 	CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFERRECT __clewEnqueueCopyBufferRect;
2587 	CLEW_FUN_EXPORT PFNCLENQUEUEREADIMAGE __clewEnqueueReadImage;
2588 	CLEW_FUN_EXPORT PFNCLENQUEUEWRITEIMAGE __clewEnqueueWriteImage;
2589 	CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGE __clewEnqueueCopyImage;
2590 	CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGETOBUFFER __clewEnqueueCopyImageToBuffer;
2591 	CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFERTOIMAGE __clewEnqueueCopyBufferToImage;
2592 	CLEW_FUN_EXPORT PFNCLENQUEUEMAPBUFFER __clewEnqueueMapBuffer;
2593 	CLEW_FUN_EXPORT PFNCLENQUEUEMAPIMAGE __clewEnqueueMapImage;
2594 	CLEW_FUN_EXPORT PFNCLENQUEUEUNMAPMEMOBJECT __clewEnqueueUnmapMemObject;
2595 	CLEW_FUN_EXPORT PFNCLENQUEUENDRANGEKERNEL __clewEnqueueNDRangeKernel;
2596 	CLEW_FUN_EXPORT PFNCLENQUEUETASK __clewEnqueueTask;
2597 	CLEW_FUN_EXPORT PFNCLENQUEUENATIVEKERNEL __clewEnqueueNativeKernel;
2598 	CLEW_FUN_EXPORT PFNCLENQUEUEMARKER __clewEnqueueMarker;
2599 	CLEW_FUN_EXPORT PFNCLENQUEUEWAITFOREVENTS __clewEnqueueWaitForEvents;
2600 	CLEW_FUN_EXPORT PFNCLENQUEUEBARRIER __clewEnqueueBarrier;
2601 	CLEW_FUN_EXPORT PFNCLGETEXTENSIONFUNCTIONADDRESS __clewGetExtensionFunctionAddress;
2602 
2603 #define clGetPlatformIDs CLEW_GET_FUN(__clewGetPlatformIDs)
2604 #define clGetPlatformInfo CLEW_GET_FUN(__clewGetPlatformInfo)
2605 #define clGetDeviceIDs CLEW_GET_FUN(__clewGetDeviceIDs)
2606 #define clGetDeviceInfo CLEW_GET_FUN(__clewGetDeviceInfo)
2607 #define clCreateContext CLEW_GET_FUN(__clewCreateContext)
2608 #define clCreateContextFromType CLEW_GET_FUN(__clewCreateContextFromType)
2609 #define clRetainContext CLEW_GET_FUN(__clewRetainContext)
2610 #define clReleaseContext CLEW_GET_FUN(__clewReleaseContext)
2611 #define clGetContextInfo CLEW_GET_FUN(__clewGetContextInfo)
2612 #define clCreateCommandQueue CLEW_GET_FUN(__clewCreateCommandQueue)
2613 #define clRetainCommandQueue CLEW_GET_FUN(__clewRetainCommandQueue)
2614 #define clReleaseCommandQueue CLEW_GET_FUN(__clewReleaseCommandQueue)
2615 #define clGetCommandQueueInfo CLEW_GET_FUN(__clewGetCommandQueueInfo)
2616 #ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
2617 #warning CL_USE_DEPRECATED_OPENCL_1_0_APIS is defined. These APIs are unsupported and untested in OpenCL 1.1!
2618 /*
2619  *  WARNING:
2620  *     This API introduces mutable state into the OpenCL implementation. It has been REMOVED
2621  *  to better facilitate thread safety.  The 1.0 API is not thread safe. It is not tested by the
2622  *  OpenCL 1.1 conformance test, and consequently may not work or may not work dependably.
2623  *  It is likely to be non-performant. Use of this API is not advised. Use at your own risk.
2624  *
2625  *  Software developers previously relying on this API are instructed to set the command queue
2626  *  properties when creating the queue, instead.
2627  */
2628 #define clSetCommandQueueProperty CLEW_GET_FUN(__clewSetCommandQueueProperty)
2629 #endif /* CL_USE_DEPRECATED_OPENCL_1_0_APIS */
2630 #define clCreateBuffer CLEW_GET_FUN(__clewCreateBuffer)
2631 #define clCreateSubBuffer CLEW_GET_FUN(__clewCreateSubBuffer)
2632 #define clCreateImage2D CLEW_GET_FUN(__clewCreateImage2D)
2633 #define clCreateImage3D CLEW_GET_FUN(__clewCreateImage3D)
2634 #define clRetainMemObject CLEW_GET_FUN(__clewRetainMemObject)
2635 #define clReleaseMemObject CLEW_GET_FUN(__clewReleaseMemObject)
2636 #define clGetSupportedImageFormats CLEW_GET_FUN(__clewGetSupportedImageFormats)
2637 #define clGetMemObjectInfo CLEW_GET_FUN(__clewGetMemObjectInfo)
2638 #define clGetImageInfo CLEW_GET_FUN(__clewGetImageInfo)
2639 #define clSetMemObjectDestructorCallback CLEW_GET_FUN(__clewSetMemObjectDestructorCallback)
2640 #define clCreateSampler CLEW_GET_FUN(__clewCreateSampler)
2641 #define clRetainSampler CLEW_GET_FUN(__clewRetainSampler)
2642 #define clReleaseSampler CLEW_GET_FUN(__clewReleaseSampler)
2643 #define clGetSamplerInfo CLEW_GET_FUN(__clewGetSamplerInfo)
2644 #define clCreateProgramWithSource CLEW_GET_FUN(__clewCreateProgramWithSource)
2645 #define clCreateProgramWithBinary CLEW_GET_FUN(__clewCreateProgramWithBinary)
2646 #define clRetainProgram CLEW_GET_FUN(__clewRetainProgram)
2647 #define clReleaseProgram CLEW_GET_FUN(__clewReleaseProgram)
2648 #define clBuildProgram CLEW_GET_FUN(__clewBuildProgram)
2649 #define clUnloadCompiler CLEW_GET_FUN(__clewUnloadCompiler)
2650 #define clGetProgramInfo CLEW_GET_FUN(__clewGetProgramInfo)
2651 #define clGetProgramBuildInfo CLEW_GET_FUN(__clewGetProgramBuildInfo)
2652 #define clCreateKernel CLEW_GET_FUN(__clewCreateKernel)
2653 #define clCreateKernelsInProgram CLEW_GET_FUN(__clewCreateKernelsInProgram)
2654 #define clRetainKernel CLEW_GET_FUN(__clewRetainKernel)
2655 #define clReleaseKernel CLEW_GET_FUN(__clewReleaseKernel)
2656 #define clSetKernelArg CLEW_GET_FUN(__clewSetKernelArg)
2657 #define clGetKernelInfo CLEW_GET_FUN(__clewGetKernelInfo)
2658 #define clGetKernelWorkGroupInfo CLEW_GET_FUN(__clewGetKernelWorkGroupInfo)
2659 #define clWaitForEvents CLEW_GET_FUN(__clewWaitForEvents)
2660 #define clGetEventInfo CLEW_GET_FUN(__clewGetEventInfo)
2661 #define clCreateUserEvent CLEW_GET_FUN(__clewCreateUserEvent)
2662 #define clRetainEvent CLEW_GET_FUN(__clewRetainEvent)
2663 #define clReleaseEvent CLEW_GET_FUN(__clewReleaseEvent)
2664 #define clSetUserEventStatus CLEW_GET_FUN(__clewSetUserEventStatus)
2665 #define clSetEventCallback CLEW_GET_FUN(__clewSetEventCallback)
2666 #define clGetEventProfilingInfo CLEW_GET_FUN(__clewGetEventProfilingInfo)
2667 #define clFlush CLEW_GET_FUN(__clewFlush)
2668 #define clFinish CLEW_GET_FUN(__clewFinish)
2669 #define clEnqueueReadBuffer CLEW_GET_FUN(__clewEnqueueReadBuffer)
2670 #define clEnqueueReadBufferRect CLEW_GET_FUN(__clewEnqueueReadBufferRect)
2671 #define clEnqueueWriteBuffer CLEW_GET_FUN(__clewEnqueueWriteBuffer)
2672 #define clEnqueueWriteBufferRect CLEW_GET_FUN(__clewEnqueueWriteBufferRect)
2673 #define clEnqueueCopyBuffer CLEW_GET_FUN(__clewEnqueueCopyBuffer)
2674 #define clEnqueueCopyBufferRect CLEW_GET_FUN(__clewEnqueueCopyBufferRect)
2675 #define clEnqueueReadImage CLEW_GET_FUN(__clewEnqueueReadImage)
2676 #define clEnqueueWriteImage CLEW_GET_FUN(__clewEnqueueWriteImage)
2677 #define clEnqueueCopyImage CLEW_GET_FUN(__clewEnqueueCopyImage)
2678 #define clEnqueueCopyImageToBuffer CLEW_GET_FUN(__clewEnqueueCopyImageToBuffer)
2679 #define clEnqueueCopyBufferToImage CLEW_GET_FUN(__clewEnqueueCopyBufferToImage)
2680 #define clEnqueueMapBuffer CLEW_GET_FUN(__clewEnqueueMapBuffer)
2681 #define clEnqueueMapImage CLEW_GET_FUN(__clewEnqueueMapImage)
2682 #define clEnqueueUnmapMemObject CLEW_GET_FUN(__clewEnqueueUnmapMemObject)
2683 #define clEnqueueNDRangeKernel CLEW_GET_FUN(__clewEnqueueNDRangeKernel)
2684 #define clEnqueueTask CLEW_GET_FUN(__clewEnqueueTask)
2685 #define clEnqueueNativeKernel CLEW_GET_FUN(__clewEnqueueNativeKernel)
2686 #define clEnqueueMarker CLEW_GET_FUN(__clewEnqueueMarker)
2687 #define clEnqueueWaitForEvents CLEW_GET_FUN(__clewEnqueueWaitForEvents)
2688 #define clEnqueueBarrier CLEW_GET_FUN(__clewEnqueueBarrier)
2689 #define clGetExtensionFunctionAddress CLEW_GET_FUN(__clewGetExtensionFunctionAddress)
2690 
2691 #define CLEW_SUCCESS 0               //!<    Success error code
2692 #define CLEW_ERROR_OPEN_FAILED -1    //!<    Error code for failing to open the dynamic library
2693 #define CLEW_ERROR_ATEXIT_FAILED -2  //!<    Error code for failing to queue the closing of the dynamic library to atexit()
2694 
2695 	//! \brief Load OpenCL dynamic library and set function entry points
2696 	int clewInit(const char *);
2697 
2698 	//! \brief Exit clew and unload OpenCL dynamic library
2699 	void clewExit();
2700 
2701 	//! \brief Convert an OpenCL error code to its string equivalent
2702 	const char *clewErrorString(cl_int error);
2703 
2704 #ifdef __cplusplus
2705 }
2706 #endif
2707 
2708 #endif  //  CLEW_HPP_INCLUDED
2709