1 // DerelictCL - a Derelict based dynamic binding for OpenCL
2 // written in the D programming language
3 //
4 // Copyright: MeinMein 2013-2014.
5 // License:   Boost License 1.0
6 //            (See accompanying file LICENSE_1_0.txt or copy at
7 //             http://www.boost.org/LICENSE_1_0.txt)
8 // Authors:   Gerbrand Kamphuis (meinmein.com),
9 //            Marvin Meeng (meinmein.com).
10 module derelict.opencl.constants;
11 
12 import derelict.opencl.types;
13 
14 // cl.h
15 
16 // Error Codes
17 enum
18 {
19     CL_SUCCESS                                  = 0,
20     CL_DEVICE_NOT_FOUND                         = -1,
21     CL_DEVICE_NOT_AVAILABLE                     = -2,
22     CL_COMPILER_NOT_AVAILABLE                   = -3,
23     CL_MEM_OBJECT_ALLOCATION_FAILURE            = -4,
24     CL_OUT_OF_RESOURCES                         = -5,
25     CL_OUT_OF_HOST_MEMORY                       = -6,
26     CL_PROFILING_INFO_NOT_AVAILABLE             = -7,
27     CL_MEM_COPY_OVERLAP                         = -8,
28     CL_IMAGE_FORMAT_MISMATCH                    = -9,
29     CL_IMAGE_FORMAT_NOT_SUPPORTED               = -10,
30     CL_BUILD_PROGRAM_FAILURE                    = -11,
31     CL_MAP_FAILURE                              = -12,
32     CL_MISALIGNED_SUB_BUFFER_OFFSET             = -13,
33     CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST= -14,
34     CL_COMPILE_PROGRAM_FAILURE                  = -15,
35     CL_LINKER_NOT_AVAILABLE                     = -16,
36     CL_LINK_PROGRAM_FAILURE                     = -17,
37     CL_DEVICE_PARTITION_FAILED                  = -18,
38     CL_KERNEL_ARG_INFO_NOT_AVAILABLE            = -19,
39 
40     CL_INVALID_VALUE                            = -30,
41     CL_INVALID_DEVICE_TYPE                      = -31,
42     CL_INVALID_PLATFORM                         = -32,
43     CL_INVALID_DEVICE                           = -33,
44     CL_INVALID_CONTEXT                          = -34,
45     CL_INVALID_QUEUE_PROPERTIES                 = -35,
46     CL_INVALID_COMMAND_QUEUE                    = -36,
47     CL_INVALID_HOST_PTR                         = -37,
48     CL_INVALID_MEM_OBJECT                       = -38,
49     CL_INVALID_IMAGE_FORMAT_DESCRIPTOR          = -39,
50     CL_INVALID_IMAGE_SIZE                       = -40,
51     CL_INVALID_SAMPLER                          = -41,
52     CL_INVALID_BINARY                           = -42,
53     CL_INVALID_BUILD_OPTIONS                    = -43,
54     CL_INVALID_PROGRAM                          = -44,
55     CL_INVALID_PROGRAM_EXECUTABLE               = -45,
56     CL_INVALID_KERNEL_NAME                      = -46,
57     CL_INVALID_KERNEL_DEFINITION                = -47,
58     CL_INVALID_KERNEL                           = -48,
59     CL_INVALID_ARG_INDEX                        = -49,
60     CL_INVALID_ARG_VALUE                        = -50,
61     CL_INVALID_ARG_SIZE                         = -51,
62     CL_INVALID_KERNEL_ARGS                      = -52,
63     CL_INVALID_WORK_DIMENSION                   = -53,
64     CL_INVALID_WORK_GROUP_SIZE                  = -54,
65     CL_INVALID_WORK_ITEM_SIZE                   = -55,
66     CL_INVALID_GLOBAL_OFFSET                    = -56,
67     CL_INVALID_EVENT_WAIT_LIST                  = -57,
68     CL_INVALID_EVENT                            = -58,
69     CL_INVALID_OPERATION                        = -59,
70     CL_INVALID_GL_OBJECT                        = -60,
71     CL_INVALID_BUFFER_SIZE                      = -61,
72     CL_INVALID_MIP_LEVEL                        = -62,
73     CL_INVALID_GLOBAL_WORK_SIZE                 = -63,
74     CL_INVALID_PROPERTY                         = -64,
75     CL_INVALID_IMAGE_DESCRIPTOR                 = -65,
76     CL_INVALID_COMPILER_OPTIONS                 = -66,
77     CL_INVALID_LINKER_OPTIONS                   = -67,
78     CL_INVALID_DEVICE_PARTITION_COUNT           = -68,
79     CL_INVALID_PIPE_SIZE                        = -69,
80     CL_INVALID_DEVICE_QUEUE                     = -70,
81     CL_INVALID_SPEC_ID                          = -71,
82     CL_MAX_SIZE_RESTRICTION_EXCEEDED            = -72,
83 }
84 
85 // cl_bool
86 enum
87 {
88     CL_FALSE                                    = 0,
89     CL_TRUE                                     = 1,
90     CL_BLOCKING                                 = CL_TRUE,
91     CL_NON_BLOCKING                             = CL_FALSE
92 }
93 
94 // cl_platform_info
95 enum
96 {
97     CL_PLATFORM_PROFILE                         = 0x0900,
98     CL_PLATFORM_VERSION                         = 0x0901,
99     CL_PLATFORM_NAME                            = 0x0902,
100     CL_PLATFORM_VENDOR                          = 0x0903,
101     CL_PLATFORM_EXTENSIONS                      = 0x0904,
102     CL_PLATFORM_HOST_TIMER_RESOLUTION           = 0x0905,
103 }
104 
105 // cl_device_type - bitfield
106 enum : cl_bitfield
107 {
108     CL_DEVICE_TYPE_DEFAULT                      = (1 << 0),
109     CL_DEVICE_TYPE_CPU                          = (1 << 1),
110     CL_DEVICE_TYPE_GPU                          = (1 << 2),
111     CL_DEVICE_TYPE_ACCELERATOR                  = (1 << 3),
112     CL_DEVICE_TYPE_CUSTOM                       = (1 << 4),
113     CL_DEVICE_TYPE_ALL                          = 0xFFFFFFFF,
114 }
115 
116 // cl_device_info
117 enum
118 {
119     CL_DEVICE_TYPE                              = 0x1000,
120     CL_DEVICE_VENDOR_ID                         = 0x1001,
121     CL_DEVICE_MAX_COMPUTE_UNITS                 = 0x1002,
122     CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS          = 0x1003,
123     CL_DEVICE_MAX_WORK_GROUP_SIZE               = 0x1004,
124     CL_DEVICE_MAX_WORK_ITEM_SIZES               = 0x1005,
125     CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR       = 0x1006,
126     CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT      = 0x1007,
127     CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT        = 0x1008,
128     CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG       = 0x1009,
129     CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT      = 0x100A,
130     CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE     = 0x100B,
131     CL_DEVICE_MAX_CLOCK_FREQUENCY               = 0x100C,
132     CL_DEVICE_ADDRESS_BITS                      = 0x100D,
133     CL_DEVICE_MAX_READ_IMAGE_ARGS               = 0x100E,
134     CL_DEVICE_MAX_WRITE_IMAGE_ARGS              = 0x100F,
135     CL_DEVICE_MAX_MEM_ALLOC_SIZE                = 0x1010,
136     CL_DEVICE_IMAGE2D_MAX_WIDTH                 = 0x1011,
137     CL_DEVICE_IMAGE2D_MAX_HEIGHT                = 0x1012,
138     CL_DEVICE_IMAGE3D_MAX_WIDTH                 = 0x1013,
139     CL_DEVICE_IMAGE3D_MAX_HEIGHT                = 0x1014,
140     CL_DEVICE_IMAGE3D_MAX_DEPTH                 = 0x1015,
141     CL_DEVICE_IMAGE_SUPPORT                     = 0x1016,
142     CL_DEVICE_MAX_PARAMETER_SIZE                = 0x1017,
143     CL_DEVICE_MAX_SAMPLERS                      = 0x1018,
144     CL_DEVICE_MEM_BASE_ADDR_ALIGN               = 0x1019,
145     CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE          = 0x101A, // Deprecated in OpenCl 1.2
146     CL_DEVICE_SINGLE_FP_CONFIG                  = 0x101B,
147     CL_DEVICE_GLOBAL_MEM_CACHE_TYPE             = 0x101C,
148     CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE         = 0x101D,
149     CL_DEVICE_GLOBAL_MEM_CACHE_SIZE             = 0x101E,
150     CL_DEVICE_GLOBAL_MEM_SIZE                   = 0x101F,
151     CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE          = 0x1020,
152     CL_DEVICE_MAX_CONSTANT_ARGS                 = 0x1021,
153     CL_DEVICE_LOCAL_MEM_TYPE                    = 0x1022,
154     CL_DEVICE_LOCAL_MEM_SIZE                    = 0x1023,
155     CL_DEVICE_ERROR_CORRECTION_SUPPORT          = 0x1024,
156     CL_DEVICE_PROFILING_TIMER_RESOLUTION        = 0x1025,
157     CL_DEVICE_ENDIAN_LITTLE                     = 0x1026,
158     CL_DEVICE_AVAILABLE                         = 0x1027,
159     CL_DEVICE_COMPILER_AVAILABLE                = 0x1028,
160     CL_DEVICE_EXECUTION_CAPABILITIES            = 0x1029,
161     CL_DEVICE_QUEUE_PROPERTIES                  = 0x102A,
162     CL_DEVICE_NAME                              = 0x102B,
163     CL_DEVICE_VENDOR                            = 0x102C,
164     CL_DRIVER_VERSION                           = 0x102D,
165     CL_DEVICE_PROFILE                           = 0x102E,
166     CL_DEVICE_VERSION                           = 0x102F,
167     CL_DEVICE_EXTENSIONS                        = 0x1030,
168     CL_DEVICE_PLATFORM                          = 0x1031,
169     CL_DEVICE_DOUBLE_FP_CONFIG                  = 0x1032,
170     // 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG
171     CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF       = 0x1034,
172     CL_DEVICE_HOST_UNIFIED_MEMORY               = 0x1035,
173     CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR          = 0x1036,
174     CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT         = 0x1037,
175     CL_DEVICE_NATIVE_VECTOR_WIDTH_INT           = 0x1038,
176     CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG          = 0x1039,
177     CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT         = 0x103A,
178     CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE        = 0x103B,
179     CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF          = 0x103C,
180     CL_DEVICE_OPENCL_C_VERSION                  = 0x103D,
181     CL_DEVICE_LINKER_AVAILABLE                  = 0x103E,
182     CL_DEVICE_BUILT_IN_KERNELS                  = 0x103F,
183     CL_DEVICE_IMAGE_MAX_BUFFER_SIZE             = 0x1040,
184     CL_DEVICE_IMAGE_MAX_ARRAY_SIZE              = 0x1041,
185     CL_DEVICE_PARENT_DEVICE                     = 0x1042,
186     CL_DEVICE_PARTITION_MAX_SUB_DEVICES         = 0x1043,
187     CL_DEVICE_PARTITION_PROPERTIES              = 0x1044,
188     CL_DEVICE_PARTITION_AFFINITY_DOMAIN         = 0x1045,
189     CL_DEVICE_PARTITION_TYPE                    = 0x1046,
190     CL_DEVICE_REFERENCE_COUNT                   = 0x1047,
191     CL_DEVICE_PREFERRED_INTEROP_USER_SYNC       = 0x1048,
192     CL_DEVICE_PRINTF_BUFFER_SIZE                = 0x1049,
193     CL_DEVICE_IMAGE_PITCH_ALIGNMENT             = 0x104A,
194     CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT      = 0x104B,
195     CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS         = 0x104C,
196     CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE          = 0x104D,
197     CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES        = 0x104E,
198     CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE    = 0x104F,
199     CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE          = 0x1050,
200     CL_DEVICE_MAX_ON_DEVICE_QUEUES              = 0x1051,
201     CL_DEVICE_MAX_ON_DEVICE_EVENTS              = 0x1052,
202     CL_DEVICE_SVM_CAPABILITIES                  = 0x1053,
203     CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE = 0x1054,
204     CL_DEVICE_MAX_PIPE_ARGS                     = 0x1055,
205     CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS      = 0x1056,
206     CL_DEVICE_PIPE_MAX_PACKET_SIZE              = 0x1057,
207     CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT = 0x1058,
208     CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT = 0x1059,
209     CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT  = 0x105A,
210     CL_DEVICE_IL_VERSION                        = 0x105B,
211     CL_DEVICE_MAX_NUM_SUB_GROUPS                = 0x105C,
212     CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS = 0x105D,
213 }
214 
215 // cl_device_fp_config
216 enum : cl_bitfield
217 {
218     CL_FP_DENORM                                = (1 << 0),
219     CL_FP_INF_NAN                               = (1 << 1),
220     CL_FP_ROUND_TO_NEAREST                      = (1 << 2),
221     CL_FP_ROUND_TO_ZERO                         = (1 << 3),
222     CL_FP_ROUND_TO_INF                          = (1 << 4),
223     CL_FP_FMA                                   = (1 << 5),
224     CL_FP_SOFT_FLOAT                            = (1 << 6),
225     CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT         = (1 << 7),
226 }
227 
228 // cl_device_mem_cache_type
229 enum
230 {
231     CL_NONE                                     = 0x0,
232     CL_READ_ONLY_CACHE                          = 0x1,
233     CL_READ_WRITE_CACHE                         = 0x2,
234 }
235 
236 // cl_device_local_mem_type
237 enum
238 {
239     CL_LOCAL                                    = 0x1,
240     CL_GLOBAL                                   = 0x2,
241 }
242 
243 // cl_device_exec_capabilities
244 enum : cl_bitfield
245 {
246     CL_EXEC_KERNEL                              = (1 << 0),
247     CL_EXEC_NATIVE_KERNEL                       = (1 << 1),
248 }
249 
250 // cl_command_queue_properties
251 enum : cl_bitfield
252 {
253     CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE      = (1 << 0),
254     CL_QUEUE_PROFILING_ENABLE                   = (1 << 1),
255     CL_QUEUE_ON_DEVICE                          = (1 << 2),
256     CL_QUEUE_ON_DEVICE_DEFAULT                  = (1 << 3),
257 }
258 
259 // cl_context_info
260 enum
261 {
262     CL_CONTEXT_REFERENCE_COUNT                  = 0x1080,
263     CL_CONTEXT_DEVICES                          = 0x1081,
264     CL_CONTEXT_PROPERTIES                       = 0x1082,
265     CL_CONTEXT_NUM_DEVICES                      = 0x1083,
266 }
267 
268 // cl_context_properties
269 enum
270 {
271     CL_CONTEXT_PLATFORM                         = 0x1084,
272     CL_CONTEXT_INTEROP_USER_SYNC                = 0x1085,
273 }
274 
275 // cl_device_partition_property
276 enum : ptrdiff_t
277 {
278     CL_DEVICE_PARTITION_EQUALLY                 = 0x1086,
279     CL_DEVICE_PARTITION_BY_COUNTS               = 0x1087,
280     CL_DEVICE_PARTITION_BY_COUNTS_LIST_END      = 0x0,
281     CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN      = 0x1088,
282 }
283 
284 // cl_device_affinity_domain
285 enum : cl_bitfield
286 {
287     CL_DEVICE_AFFINITY_DOMAIN_NUMA               = (1 << 0),
288     CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE           = (1 << 1),
289     CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE           = (1 << 2),
290     CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE           = (1 << 3),
291     CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE           = (1 << 4),
292     CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 << 5),
293 }
294 
295 // cl_device_svm_capabilities
296 enum
297 {
298     CL_DEVICE_SVM_COARSE_GRAIN_BUFFER = (1 << 0),
299     CL_DEVICE_SVM_FINE_GRAIN_BUFFER   = (1 << 1),
300     CL_DEVICE_SVM_FINE_GRAIN_SYSTEM   = (1 << 2),
301     CL_DEVICE_SVM_ATOMICS             = (1 << 3),
302 }
303 // cl_command_queue_info
304 enum
305 {
306     CL_QUEUE_CONTEXT                            = 0x1090,
307     CL_QUEUE_DEVICE                             = 0x1091,
308     CL_QUEUE_REFERENCE_COUNT                    = 0x1092,
309     CL_QUEUE_PROPERTIES                         = 0x1093,
310     CL_QUEUE_SIZE                               = 0x1094,
311     CL_QUEUE_DEVICE_DEFAULT                     = 0x1095,
312 }
313 
314 // cl_mem_flags and cl_svm_mem_flags - bitfield
315 enum : cl_bitfield
316 {
317     CL_MEM_READ_WRITE                           = (1 << 0),
318     CL_MEM_WRITE_ONLY                           = (1 << 1),
319     CL_MEM_READ_ONLY                            = (1 << 2),
320     CL_MEM_USE_HOST_PTR                         = (1 << 3),
321     CL_MEM_ALLOC_HOST_PTR                       = (1 << 4),
322     CL_MEM_COPY_HOST_PTR                        = (1 << 5),
323 // reserved                                     = (1 << 6),
324     CL_MEM_HOST_WRITE_ONLY                      = (1 << 7),
325     CL_MEM_HOST_READ_ONLY                       = (1 << 8),
326     CL_MEM_HOST_NO_ACCESS                       = (1 << 9),
327     CL_MEM_SVM_FINE_GRAIN_BUFFER                = (1 << 10), // cl_svm_mem_flags only
328     CL_MEM_SVM_ATOMICS                          = (1 << 11), // cl_svm_mem_flags only
329     CL_MEM_KERNEL_READ_AND_WRITE                = (1 << 12),
330 }
331 
332 // cl_mem_migration_flags
333 enum : cl_bitfield
334 {
335     CL_MIGRATE_MEM_OBJECT_HOST                  = (1 << 0),
336     CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED     = (1 << 1),
337 }
338 
339 // cl_channel_order
340 enum
341 {
342     CL_R                                        = 0x10B0,
343     CL_A                                        = 0x10B1,
344     CL_RG                                       = 0x10B2,
345     CL_RA                                       = 0x10B3,
346     CL_RGB                                      = 0x10B4,
347     CL_RGBA                                     = 0x10B5,
348     CL_BGRA                                     = 0x10B6,
349     CL_ARGB                                     = 0x10B7,
350     CL_INTENSITY                                = 0x10B8,
351     CL_LUMINANCE                                = 0x10B9,
352     CL_Rx                                       = 0x10BA,
353     CL_RGx                                      = 0x10BB,
354     CL_RGBx                                     = 0x10BC,
355     CL_DEPTH                                    = 0x10BD,
356     CL_DEPTH_STENCIL                            = 0x10BE,
357     CL_sRGB                                     = 0x10BF,
358     CL_sRGBx                                    = 0x10C0,
359     CL_sRGBA                                    = 0x10C1,
360     CL_sBRGA                                    = 0x10C2,
361     CL_ABGR                                     = 0x10C3,
362 }
363 
364 // cl_channel_type
365 enum
366 {
367     CL_SNORM_INT8                               = 0x10D0,
368     CL_SNORM_INT16                              = 0x10D1,
369     CL_UNORM_INT8                               = 0x10D2,
370     CL_UNORM_INT16                              = 0x10D3,
371     CL_UNORM_SHORT_565                          = 0x10D4,
372     CL_UNORM_SHORT_555                          = 0x10D5,
373     CL_UNORM_INT_101010                         = 0x10D6,
374     CL_SIGNED_INT8                              = 0x10D7,
375     CL_SIGNED_INT16                             = 0x10D8,
376     CL_SIGNED_INT32                             = 0x10D9,
377     CL_UNSIGNED_INT8                            = 0x10DA,
378     CL_UNSIGNED_INT16                           = 0x10DB,
379     CL_UNSIGNED_INT32                           = 0x10DC,
380     CL_HALF_FLOAT                               = 0x10DD,
381     CL_FLOAT                                    = 0x10DE,
382     CL_UNORM_INT24                              = 0x10DF,
383     CL_UNORM_INT_101010_2                       = 0x10E0,
384 }
385 
386 // cl_mem_object_type
387 enum
388 {
389     CL_MEM_OBJECT_BUFFER                        = 0x10F0,
390     CL_MEM_OBJECT_IMAGE2D                       = 0x10F1,
391     CL_MEM_OBJECT_IMAGE3D                       = 0x10F2,
392     CL_MEM_OBJECT_IMAGE2D_ARRAY                 = 0x10F3,
393     CL_MEM_OBJECT_IMAGE1D                       = 0x10F4,
394     CL_MEM_OBJECT_IMAGE1D_ARRAY                 = 0x10F5,
395     CL_MEM_OBJECT_IMAGE1D_BUFFER                = 0x10F6,
396     CL_MEM_OBJECT_PIPE                          = 0x10F7,
397 }
398 
399 // cl_mem_info
400 enum
401 {
402     CL_MEM_TYPE                                 = 0x1100,
403     CL_MEM_FLAGS                                = 0x1101,
404     CL_MEM_SIZE                                 = 0x1102,
405     CL_MEM_HOST_PTR                             = 0x1103,
406     CL_MEM_MAP_COUNT                            = 0x1104,
407     CL_MEM_REFERENCE_COUNT                      = 0x1105,
408     CL_MEM_CONTEXT                              = 0x1106,
409     CL_MEM_ASSOCIATED_MEMOBJECT                 = 0x1107,
410     CL_MEM_OFFSET                               = 0x1108,
411     CL_MEM_USES_SVM_POINTER                     = 0x1109,
412 }
413 
414 // cl_image_info
415 enum
416 {
417     CL_IMAGE_FORMAT                             = 0x1110,
418     CL_IMAGE_ELEMENT_SIZE                       = 0x1111,
419     CL_IMAGE_ROW_PITCH                          = 0x1112,
420     CL_IMAGE_SLICE_PITCH                        = 0x1113,
421     CL_IMAGE_WIDTH                              = 0x1114,
422     CL_IMAGE_HEIGHT                             = 0x1115,
423     CL_IMAGE_DEPTH                              = 0x1116,
424     CL_IMAGE_ARRAY_SIZE                         = 0x1117,
425     CL_IMAGE_BUFFER                             = 0x1118,
426     CL_IMAGE_NUM_MIP_LEVELS                     = 0x1119,
427     CL_IMAGE_NUM_SAMPLES                        = 0x111A,
428 }
429 
430 // cl_pipe_info
431 enum
432 {
433     CL_PIPE_PACKET_SIZE                         = 0x1120,
434     CL_PIPE_MAX_PACKETS                         = 0x1121,
435 }
436 
437 // cl_addressing_mode
438 enum
439 {
440     CL_ADDRESS_NONE                             = 0x1130,
441     CL_ADDRESS_CLAMP_TO_EDGE                    = 0x1131,
442     CL_ADDRESS_CLAMP                            = 0x1132,
443     CL_ADDRESS_REPEAT                           = 0x1133,
444     CL_ADDRESS_MIRRORED_REPEAT                  = 0x1134,
445 }
446 
447 // cl_filter_mode
448 enum
449 {
450     CL_FILTER_NEAREST                           = 0x1140,
451     CL_FILTER_LINEAR                            = 0x1141,
452 }
453 
454 // cl_sampler_info
455 enum
456 {
457     CL_SAMPLER_REFERENCE_COUNT                  = 0x1150,
458     CL_SAMPLER_CONTEXT                          = 0x1151,
459     CL_SAMPLER_NORMALIZED_COORDS                = 0x1152,
460     CL_SAMPLER_ADDRESSING_MODE                  = 0x1153,
461     CL_SAMPLER_FILTER_MODE                      = 0x1154,
462     CL_SAMPLER_MIP_FILTER_MODE                  = 0x1155,
463     CL_SAMPLER_LOD_MIN                          = 0x1156,
464     CL_SAMPLER_LOD_MAX                          = 0x1157,
465 }
466 
467 // cl_map_flags - bitfield
468 enum : cl_bitfield
469 {
470     CL_MAP_READ                                 = (1 << 0),
471     CL_MAP_WRITE                                = (1 << 1),
472     CL_MAP_WRITE_INVALIDATE_REGION              = (1 << 2),
473 }
474 
475 // cl_program_info
476 enum
477 {
478     CL_PROGRAM_REFERENCE_COUNT                  = 0x1160,
479     CL_PROGRAM_CONTEXT                          = 0x1161,
480     CL_PROGRAM_NUM_DEVICES                      = 0x1162,
481     CL_PROGRAM_DEVICES                          = 0x1163,
482     CL_PROGRAM_SOURCE                           = 0x1164,
483     CL_PROGRAM_BINARY_SIZES                     = 0x1165,
484     CL_PROGRAM_BINARIES                         = 0x1166,
485     CL_PROGRAM_NUM_KERNELS                      = 0x1167,
486     CL_PROGRAM_KERNEL_NAMES                     = 0x1168,
487     CL_PROGRAM_IL                               = 0x1169,
488     CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT       = 0x116A,
489     CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT       = 0x116B,
490 }
491 
492 // cl_program_build_info
493 enum
494 {
495     CL_PROGRAM_BUILD_STATUS                     = 0x1181,
496     CL_PROGRAM_BUILD_OPTIONS                    = 0x1182,
497     CL_PROGRAM_BUILD_LOG                        = 0x1183,
498     CL_PROGRAM_BINARY_TYPE                      = 0x1184,
499     CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE = 0x1185,
500 }
501 
502 // cl_program_binary_type
503 enum
504 {
505     CL_PROGRAM_BINARY_TYPE_NONE                 = 0x0,
506     CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT      = 0x1,
507     CL_PROGRAM_BINARY_TYPE_LIBRARY              = 0x2,
508     CL_PROGRAM_BINARY_TYPE_EXECUTABLE           = 0x4,
509 }
510 
511 // cl_build_status
512 enum
513 {
514     CL_BUILD_SUCCESS                            =  0,
515     CL_BUILD_NONE                               = -1,
516     CL_BUILD_ERROR                              = -2,
517     CL_BUILD_IN_PROGRESS                        = -3,
518 }
519 
520 // cl_kernel_info
521 enum
522 {
523     CL_KERNEL_FUNCTION_NAME                     = 0x1190,
524     CL_KERNEL_NUM_ARGS                          = 0x1191,
525     CL_KERNEL_REFERENCE_COUNT                   = 0x1192,
526     CL_KERNEL_CONTEXT                           = 0x1193,
527     CL_KERNEL_PROGRAM                           = 0x1194,
528     CL_KERNEL_ATTRIBUTES                        = 0x1195,
529     CL_KERNEL_MAX_NUM_SUB_GROUPS                = 0x11B9,
530     CL_KERNEL_COMPILE_NUM_SUB_GROUPS            = 0x11BA,
531 }
532 
533 // cl_kernel_arg_info
534 enum
535 {
536     CL_KERNEL_ARG_ADDRESS_QUALIFIER             = 0x1196,
537     CL_KERNEL_ARG_ACCESS_QUALIFIER              = 0x1197,
538     CL_KERNEL_ARG_TYPE_NAME                     = 0x1198,
539     CL_KERNEL_ARG_TYPE_QUALIFIER                = 0x1199,
540     CL_KERNEL_ARG_NAME                          = 0x119A,
541 }
542 
543 // cl_kernel_arg_address_qualifier
544 enum
545 {
546     CL_KERNEL_ARG_ADDRESS_GLOBAL                = 0x119B,
547     CL_KERNEL_ARG_ADDRESS_LOCAL                 = 0x119C,
548     CL_KERNEL_ARG_ADDRESS_CONSTANT              = 0x119D,
549     CL_KERNEL_ARG_ADDRESS_PRIVATE               = 0x119E,
550 }
551 
552 // cl_kernel_arg_access_qualifier
553 enum
554 {
555     CL_KERNEL_ARG_ACCESS_READ_ONLY              = 0x11A0,
556     CL_KERNEL_ARG_ACCESS_WRITE_ONLY             = 0x11A1,
557     CL_KERNEL_ARG_ACCESS_READ_WRITE             = 0x11A2,
558     CL_KERNEL_ARG_ACCESS_NONE                   = 0x11A3,
559 }
560 
561 // cl_kernel_arg_type_qualifer
562 enum : cl_bitfield
563 {
564     CL_KERNEL_ARG_TYPE_NONE                     = 0,
565     CL_KERNEL_ARG_TYPE_CONST                    = (1 << 0),
566     CL_KERNEL_ARG_TYPE_RESTRICT                 = (1 << 1),
567     CL_KERNEL_ARG_TYPE_VOLATILE                 = (1 << 2),
568     CL_KERNEL_ARG_TYPE_PIPE                     = (1 << 3),
569 }
570 
571 // cl_kernel_work_group_info
572 enum
573 {
574     CL_KERNEL_WORK_GROUP_SIZE                   = 0x11B0,
575     CL_KERNEL_COMPILE_WORK_GROUP_SIZE           = 0x11B1,
576     CL_KERNEL_LOCAL_MEM_SIZE                    = 0x11B2,
577     CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE= 0x11B3,
578     CL_KERNEL_PRIVATE_MEM_SIZE                  = 0x11B4,
579     CL_KERNEL_GLOBAL_WORK_SIZE                  = 0x11B5,
580 }
581 
582 // cl_kernel_sub_group_info
583 enum
584 {
585     CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE    = 0x2033,
586     CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE       = 0x2034,
587     CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT    = 0x11B8,
588 }
589 
590 // cl_kernel_exec_info
591 enum
592 {
593     CL_KERNEL_EXEC_INFO_SVM_PTRS                = 0x11B6,
594     CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM   = 0x11B7,
595 }
596 
597 // cl_event_info
598 enum
599 {
600     CL_EVENT_COMMAND_QUEUE                      = 0x11D0,
601     CL_EVENT_COMMAND_TYPE                       = 0x11D1,
602     CL_EVENT_REFERENCE_COUNT                    = 0x11D2,
603     CL_EVENT_COMMAND_EXECUTION_STATUS           = 0x11D3,
604     CL_EVENT_CONTEXT                            = 0x11D4,
605 }
606 
607 // cl_command_type
608 enum
609 {
610     CL_COMMAND_NDRANGE_KERNEL                   = 0x11F0,
611     CL_COMMAND_TASK                             = 0x11F1,
612     CL_COMMAND_NATIVE_KERNEL                    = 0x11F2,
613     CL_COMMAND_READ_BUFFER                      = 0x11F3,
614     CL_COMMAND_WRITE_BUFFER                     = 0x11F4,
615     CL_COMMAND_COPY_BUFFER                      = 0x11F5,
616     CL_COMMAND_READ_IMAGE                       = 0x11F6,
617     CL_COMMAND_WRITE_IMAGE                      = 0x11F7,
618     CL_COMMAND_COPY_IMAGE                       = 0x11F8,
619     CL_COMMAND_COPY_IMAGE_TO_BUFFER             = 0x11F9,
620     CL_COMMAND_COPY_BUFFER_TO_IMAGE             = 0x11FA,
621     CL_COMMAND_MAP_BUFFER                       = 0x11FB,
622     CL_COMMAND_MAP_IMAGE                        = 0x11FC,
623     CL_COMMAND_UNMAP_MEM_OBJECT                 = 0x11FD,
624     CL_COMMAND_MARKER                           = 0x11FE,
625     CL_COMMAND_ACQUIRE_GL_OBJECTS               = 0x11FF,
626     CL_COMMAND_RELEASE_GL_OBJECTS               = 0x1200,
627     CL_COMMAND_READ_BUFFER_RECT                 = 0x1201,
628     CL_COMMAND_WRITE_BUFFER_RECT                = 0x1202,
629     CL_COMMAND_COPY_BUFFER_RECT                 = 0x1203,
630     CL_COMMAND_USER                             = 0x1204,
631     CL_COMMAND_BARRIER                          = 0x1205,
632     CL_COMMAND_MIGRATE_MEM_OBJECTS              = 0x1206,
633     CL_COMMAND_FILL_BUFFER                      = 0x1207,
634     CL_COMMAND_FILL_IMAGE                       = 0x1208,
635     CL_COMMAND_SVM_FREE                         = 0x1209,
636     CL_COMMAND_SVM_MEMCPY                       = 0x120A,
637     CL_COMMAND_SVM_MEMFILL                      = 0x120B,
638     CL_COMMAND_SVM_MAP                          = 0x120C,
639     CL_COMMAND_SVM_UNMAP                        = 0x120D,
640 }
641 
642 // cl_command_execution_status
643 enum
644 {
645     CL_COMPLETE                                 = 0x0,
646     CL_RUNNING                                  = 0x1,
647     CL_SUBMITTED                                = 0x2,
648     CL_QUEUED                                   = 0x3,
649 }
650 
651 // cl_buffer_create_type
652 enum
653 {
654     CL_BUFFER_CREATE_TYPE_REGION                = 0x1220,
655 }
656 
657 // cl_profiling_info
658 enum
659 {
660     CL_PROFILING_COMMAND_QUEUED                 = 0x1280,
661     CL_PROFILING_COMMAND_SUBMIT                 = 0x1281,
662     CL_PROFILING_COMMAND_START                  = 0x1282,
663     CL_PROFILING_COMMAND_END                    = 0x1283,
664     CL_PROFILING_COMMAND_COMPLETE               = 0x1284,
665 }
666 
667 
668 // cl_ext.h
669 
670 // cl_khr_fp16 extension
671 enum CL_DEVICE_HALF_FP_CONFIG                   = 0x1033;
672 
673 // cl_APPLE_SetMemObjectDestructor extension
674 enum cl_APPLE_SetMemObjectDestructor            = 1;
675 
676 // cl_APPLE_ContextLoggingFunctions
677 enum cl_APPLE_ContextLoggingFunctions           = 1;
678 
679 // cl_khr_icd extension
680 enum cl_khr_icd                                 = 1;
681 // cl_platform_info
682 enum CL_PLATFORM_ICD_SUFFIX_KHR                 = 0x0920;
683 // Additional Error Codes
684 enum CL_PLATFORM_NOT_FOUND_KHR                  = -1001;
685 
686 // cl_khr_initalize_memory extension
687 enum CL_CONTEXT_MEMORY_INITIALIZE_KHR           = 0x200E;
688 
689 // cl_khr_terminate_context extension
690 enum cl_khr_terminate_context                   = 1;
691 enum
692 {
693     CL_DEVICE_TERMINATE_CAPABILITY_KHR          = 0x200F,
694     CL_CONTEXT_TERMINATE_KHR                    = 0x2010,
695 }
696 
697 // cl_nv_device_attribute_query extension
698 enum
699 {
700     CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV       = 0x4000,
701     CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV       = 0x4001,
702     CL_DEVICE_REGISTERS_PER_BLOCK_NV            = 0x4002,
703     CL_DEVICE_WARP_SIZE_NV                      = 0x4003,
704     CL_DEVICE_GPU_OVERLAP_NV                    = 0x4004,
705     CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV            = 0x4005,
706     CL_DEVICE_INTEGRATED_MEMORY_NV              = 0x4006,
707 }
708 
709 // cl_amd_device_attribute_query extension
710 enum CL_DEVICE_PROFILING_TIMER_OFFSET_AMD       = 0x4036;
711 
712 // cl_ext_device_fission extension
713 enum cl_ext_device_fission                      = 1;
714 
715 // cl_device_partition_property_ext extension
716 enum
717 {
718     CL_DEVICE_PARTITION_EQUALLY_EXT             = 0x4050,
719     CL_DEVICE_PARTITION_BY_COUNTS_EXT           = 0x4051,
720     CL_DEVICE_PARTITION_BY_NAMES_EXT            = 0x4052,
721     CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT  = 0x4053,
722 }
723 
724 // clDeviceGetInfo selectors
725 enum
726 {
727     CL_DEVICE_PARENT_DEVICE_EXT                 = 0x4054,
728     CL_DEVICE_PARTITION_TYPES_EXT               = 0x4055,
729     CL_DEVICE_AFFINITY_DOMAINS_EXT              = 0x4056,
730     CL_DEVICE_REFERENCE_COUNT_EXT               = 0x4057,
731     CL_DEVICE_PARTITION_STYLE_EXT               = 0x4058,
732 }
733 
734 // error codes
735 enum
736 {
737     CL_DEVICE_PARTITION_FAILED_EXT              = -1057,
738     CL_INVALID_PARTITION_COUNT_EXT              = -1058,
739     CL_INVALID_PARTITION_NAME_EXT               = -1059,
740 }
741 
742 // CL_AFFINITY_DOMAINs
743 enum
744 {
745     CL_AFFINITY_DOMAIN_L1_CACHE_EXT             = 0x1,
746     CL_AFFINITY_DOMAIN_L2_CACHE_EXT             = 0x2,
747     CL_AFFINITY_DOMAIN_L3_CACHE_EXT             = 0x3,
748     CL_AFFINITY_DOMAIN_L4_CACHE_EXT             = 0x4,
749     CL_AFFINITY_DOMAIN_NUMA_EXT                 = 0x10,
750     CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT     = 0x100,
751 }
752 
753 // cl_device_partition_property_ext list terminators
754 enum
755 {
756     CL_PROPERTIES_LIST_END_EXT                  = (cast(cl_device_partition_property_ext) 0),
757     CL_PARTITION_BY_COUNTS_LIST_END_EXT         = (cast(cl_device_partition_property_ext) 0),
758     CL_PARTITION_BY_NAMES_LIST_END_EXT          = (cast(cl_device_partition_property_ext) 0 - 1),
759 }
760 
761 
762 // cl_egl.h
763 
764 // Command type for events created with clEnqueueAcquireEGLObjectsKHR
765 enum
766 {
767     CL_COMMAND_EGL_FENCE_SYNC_OBJECT_KHR        = 0x202F,
768     CL_COMMAND_ACQUIRE_EGL_OBJECTS_KHR          = 0x202D,
769     CL_COMMAND_RELEASE_EGL_OBJECTS_KHR          = 0x202E,
770 }
771 
772 // Error type for clCreateFromEGLImageKHR
773 enum
774 {
775     CL_INVALID_EGL_OBJECT_KHR                   = -1093,
776     CL_EGL_RESOURCE_NOT_ACQUIRED_KHR            = -1092,
777 }
778 
779 // cl_khr_egl_image extension
780 enum cl_khr_egl_image                           = 1;
781 
782 // cl_khr_egl_event extension
783 enum cl_khr_egl_event                           = 1;
784 
785 
786 // cl_gl.h
787 
788 // cl_gl_object_type
789 enum
790 {
791     CL_GL_OBJECT_BUFFER                         = 0x2000,
792     CL_GL_OBJECT_TEXTURE2D                      = 0x2001,
793     CL_GL_OBJECT_TEXTURE3D                      = 0x2002,
794     CL_GL_OBJECT_RENDERBUFFER                   = 0x2003,
795     CL_GL_OBJECT_TEXTURE2D_ARRAY                = 0x200E,
796     CL_GL_OBJECT_TEXTURE1D                      = 0x200F,
797     CL_GL_OBJECT_TEXTURE1D_ARRAY                = 0x2010,
798     CL_GL_OBJECT_TEXTURE_BUFFER                 = 0x2011,
799 }
800 
801 // cl_gl_texture_info
802 enum
803 {
804     CL_GL_TEXTURE_TARGET                        = 0x2004,
805     CL_GL_MIPMAP_LEVEL                          = 0x2005,
806     CL_GL_NUM_SAMPLES                           = 0x2012,
807 }
808 
809 // Additional Error Codes
810 enum CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR     = -1000;
811 
812 // cl_gl_context_info
813 enum
814 {
815     CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR        = 0x2006,
816     CL_DEVICES_FOR_GL_CONTEXT_KHR               = 0x2007,
817 }
818 
819 // Additional cl_context_properties
820 enum
821 {
822     CL_GL_CONTEXT_KHR                           = 0x2008,
823     CL_EGL_DISPLAY_KHR                          = 0x2009,
824     CL_GLX_DISPLAY_KHR                          = 0x200A,
825     CL_WGL_HDC_KHR                              = 0x200B,
826     CL_CGL_SHAREGROUP_KHR                       = 0x200C,
827 }
828 
829 // cl_khr_gl_sharing extension
830 enum cl_khr_gl_sharing                          = 1;
831 
832 
833 // cl_gl_ext.h
834 
835 // cl_khr_gl_event extension
836 enum CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR        = 0x200D;
837 
838 
839 // cl_d3d10.h
840 
841 // cl_khr_d3d10_sharing extension
842 enum cl_khr_d3d10_sharing                           = 1;
843 
844 // Error Codes
845 enum
846 {
847     CL_INVALID_D3D10_DEVICE_KHR                     = -1002,
848     CL_INVALID_D3D10_RESOURCE_KHR                   = -1003,
849     CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR          = -1004,
850     CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR              = -1005,
851 }
852 
853 // cl_d3d10_device_source_nv
854 enum
855 {
856     CL_D3D10_DEVICE_KHR                             = 0x4010,
857     CL_D3D10_DXGI_ADAPTER_KHR                       = 0x4011,
858 }
859 
860 // cl_d3d10_device_set_nv
861 enum
862 {
863     CL_PREFERRED_DEVICES_FOR_D3D10_KHR              = 0x4012,
864     CL_ALL_DEVICES_FOR_D3D10_KHR                    = 0x4013,
865 }
866 
867 // cl_context_info
868 enum
869 {
870     CL_CONTEXT_D3D10_DEVICE_KHR                     = 0x4014,
871     CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR    = 0x402C,
872 }
873 
874 // cl_mem_info
875 enum CL_MEM_D3D10_RESOURCE_KHR                      = 0x4015;
876 
877 // cl_image_info
878 enum CL_IMAGE_D3D10_SUBRESOURCE_KHR                 = 0x4016;
879 
880 // cl_command_type
881 enum CL_COMMAND_ACQUIRE_D3D10_OBJECTS_KHR           = 0x4017;
882 enum CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR           = 0x4018;
883 
884 
885 // cl_d3d11.h
886 
887 // cl_khr_d3d11_sharing extension
888 enum cl_khr_d3d11_sharing = 1;
889 
890 // Error Codes
891 enum
892 {
893     CL_INVALID_D3D11_DEVICE_KHR                     = -1006,
894     CL_INVALID_D3D11_RESOURCE_KHR                   = -1007,
895     CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR          = -1008,
896     CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR              = -1009,
897 }
898 
899 // cl_d3d11_device_source
900 enum
901 {
902     CL_D3D11_DEVICE_KHR                             = 0x4019,
903     CL_D3D11_DXGI_ADAPTER_KHR                       = 0x401A,
904 }
905 
906 // cl_d3d11_device_set
907 enum
908 {
909     CL_PREFERRED_DEVICES_FOR_D3D11_KHR              = 0x401B,
910     CL_ALL_DEVICES_FOR_D3D11_KHR                    = 0x401C,
911 }
912 
913 // cl_context_info
914 enum
915 {
916     CL_CONTEXT_D3D11_DEVICE_KHR                     = 0x401D,
917     CL_CONTEXT_D3D11_PREFER_SHARED_RESOURCES_KHR    = 0x402D,
918 }
919 
920 // cl_mem_info
921 enum CL_MEM_D3D11_RESOURCE_KHR                      = 0x401E;
922 
923 // cl_image_info
924 enum CL_IMAGE_D3D11_SUBRESOURCE_KHR                 = 0x401F;
925 
926 // cl_command_type
927 enum
928 {
929     CL_COMMAND_ACQUIRE_D3D11_OBJECTS_KHR            = 0x4020,
930     CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR            = 0x4021,
931 }
932 
933 
934 // cl_dx9_media_sharing.h extension
935 
936 // cl_khr_dx9_media_sharing
937 enum cl_khr_dx9_media_sharing                       = 1;
938 
939 // Error Codes
940 enum
941 {
942     CL_INVALID_DX9_MEDIA_ADAPTER_KHR                = -1010,
943     CL_INVALID_DX9_MEDIA_SURFACE_KHR                = -1011,
944     CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR       = -1012,
945     CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR           = -1013,
946 }
947 
948 // cl_media_adapter_type_khr
949 enum
950 {
951     CL_ADAPTER_D3D9_KHR                             = 0x2020,
952     CL_ADAPTER_D3D9EX_KHR                           = 0x2021,
953     CL_ADAPTER_DXVA_KHR                             = 0x2022,
954 }
955 
956 // cl_media_adapter_set_khr
957 enum
958 {
959     CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR  = 0x2023,
960     CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR        = 0x2024,
961 }
962 
963 // cl_context_info
964 enum
965 {
966     CL_CONTEXT_ADAPTER_D3D9_KHR                     = 0x2025,
967     CL_CONTEXT_ADAPTER_D3D9EX_KHR                   = 0x2026,
968     CL_CONTEXT_ADAPTER_DXVA_KHR                     = 0x2027,
969 }
970 
971 // cl_mem_info
972 enum
973 {
974     CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR               = 0x2028,
975     CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR               = 0x2029,
976 }
977 
978 // cl_image_info
979 enum CL_IMAGE_DX9_MEDIA_PLANE_KHR                   = 0x202A;
980 
981 // cl_command_type
982 enum
983 {
984     CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR       = 0x202B,
985     CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR       = 0x202C,
986 }
987 
988 
989 // cl_platform.h
990 
991 /* Macro names and corresponding values defined by OpenCL */
992 enum CL_CHAR_BIT         = 8;
993 enum CL_SCHAR_MAX        = 127;
994 enum CL_SCHAR_MIN        = (-127-1);
995 enum CL_CHAR_MAX         = CL_SCHAR_MAX;
996 enum CL_CHAR_MIN         = CL_SCHAR_MIN;
997 enum CL_UCHAR_MAX        = 255;
998 enum CL_SHRT_MAX         = 32767;
999 enum CL_SHRT_MIN         = (-32767-1);
1000 enum CL_USHRT_MAX        = 65535;
1001 enum CL_INT_MAX          = 2147483647;
1002 enum CL_INT_MIN          = (-2147483647-1);
1003 enum CL_UINT_MAX         = 0xffffffffU;
1004 enum CL_LONG_MAX         = (cast(cl_long) 0x7FFFFFFFFFFFFFFF);
1005 enum CL_LONG_MIN         = (cast(cl_long) -0x7FFFFFFFFFFFFFFF - 1);
1006 enum CL_ULONG_MAX        = (cast(cl_ulong) 0xFFFFFFFFFFFFFFFF);
1007 
1008 enum CL_FLT_DIG          = 6;
1009 enum CL_FLT_MANT_DIG     = 24;
1010 enum CL_FLT_MAX_10_EXP   = +38;
1011 enum CL_FLT_MAX_EXP      = +128;
1012 enum CL_FLT_MIN_10_EXP   = -37;
1013 enum CL_FLT_MIN_EXP      = -125;
1014 enum CL_FLT_RADIX        = 2;
1015 
1016 enum CL_FLT_MAX          = float.max;
1017 enum CL_FLT_MIN          = float.min_normal;
1018 enum CL_FLT_EPSILON      = 0x1.0p-23f;
1019 
1020 enum CL_DBL_DIG          = 15;
1021 enum CL_DBL_MANT_DIG     = 53;
1022 enum CL_DBL_MAX_10_EXP   = +308;
1023 enum CL_DBL_MAX_EXP      = +1024;
1024 enum CL_DBL_MIN_10_EXP   = -307;
1025 enum CL_DBL_MIN_EXP      = -1021;
1026 enum CL_DBL_RADIX        = 2;
1027 
1028 enum CL_DBL_MAX      = double.max;
1029 enum CL_DBL_MIN      = double.min_normal;
1030 enum CL_DBL_EPSILON  = double.epsilon;
1031 
1032 enum CL_M_E             = 2.718281828459045090796;
1033 enum CL_M_LOG2E         = 1.442695040888963387005;
1034 enum CL_M_LOG10E        = 0.434294481903251816668;
1035 enum CL_M_LN2           = 0.693147180559945286227;
1036 enum CL_M_LN10          = 2.302585092994045901094;
1037 enum CL_M_PI            = 3.141592653589793115998;
1038 enum CL_M_PI_2          = 1.570796326794896557999;
1039 enum CL_M_PI_4          = 0.785398163397448278999;
1040 enum CL_M_1_PI          = 0.318309886183790691216;
1041 enum CL_M_2_PI          = 0.636619772367581382433;
1042 enum CL_M_2_SQRTPI      = 1.128379167095512558561;
1043 enum CL_M_SQRT2         = 1.414213562373095145475;
1044 enum CL_M_SQRT1_2       = 0.707106781186547572737;
1045 
1046 enum CL_M_E_F           = 2.71828174591064f;
1047 enum CL_M_LOG2E_F       = 1.44269502162933f;
1048 enum CL_M_LOG10E_F      = 0.43429449200630f;
1049 enum CL_M_LN2_F         = 0.69314718246460f;
1050 enum CL_M_LN10_F        = 2.30258512496948f;
1051 enum CL_M_PI_F          = 3.14159274101257f;
1052 enum CL_M_PI_2_F        = 1.57079637050629f;
1053 enum CL_M_PI_4_F        = 0.78539818525314f;
1054 enum CL_M_1_PI_F        = 0.31830987334251f;
1055 enum CL_M_2_PI_F        = 0.63661974668503f;
1056 enum CL_M_2_SQRTPI_F    = 1.12837922573090f;
1057 enum CL_M_SQRT2_F       = 1.41421353816986f;
1058 enum CL_M_SQRT1_2_F     = 0.70710676908493f;
1059 
1060 enum CL_NAN             = cl_float.nan;
1061 enum CL_HUGE_VALF       = cl_float.infinity;
1062 enum CL_HUGE_VAL        = cl_double.infinity;
1063 enum CL_MAXFLOAT        = CL_FLT_MAX;
1064 enum CL_INFINITY        = CL_HUGE_VALF;
1065 
1066 
1067 // generate code for the CL vector types
1068 // this might look crazy, but eases further changes
1069 // do a pragma(msg, genCLVectorTypes()); for debugging
1070 import std.conv;
1071 version(GNU) import gcc.attribute;
1072 
1073 // TODO: finish compiler-specific vector types, e.g. __attribute__((vector_size(16))); for GDC
1074 // TODO: CPU instruction sets-specific alignment (MMX, SSE*, AVX)
1075 private string genCLVectorTypes()
1076 {
1077     string res;
1078     foreach(type; ["cl_char", "cl_uchar", "cl_short", "cl_ushort", "cl_int", "cl_uint", "cl_long", "cl_ulong", "cl_float", "cl_double"])
1079     {
1080         res ~= "alias " ~ type ~ "4 " ~ type ~ "3;"; // cl_xx3 is identical in size, alignment and behavior to cl_xx4. See section 6.1.5. of the spec
1081         // now add the rest of the types
1082         foreach (size; [2,4,8,16])
1083         {
1084             res ~= `
1085 union ` ~ type ~ to!string(size) ~ `
1086 {
1087     `;
1088     // add aligned attribute if inside GDC
1089     version(GNU) res ~= `@attribute("aligned", (` ~ to!string(size) ~ ` * ` ~ type ~ `.sizeof).to!string) `;
1090     res ~= type ~ "[" ~ to!string(size) ~ `] s;
1091     alias s this; // allow array access and implicit conversion to the array
1092     struct { ` ~ type ~ ` x, y` ~ (size<=2 ? "" : ", z, w") ~ (size>=16 ? ", __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf" : "") ~ `; }
1093     struct { ` ~ type ~ ` s0, s1` ~ (size<=2 ? "" : ", s2, s3") ~ (size>=8 ? ", s4, s5, s6, s7" : "") ~ (size>=16 ? ", s8, s9, sA, sB, sC, sD, sE, sF" : "") ~ `; }
1094     struct { ` ~ type ~ (size>2 ? to!string(size/2) : "") ~ ` lo, hi; }`;
1095     version(GNU) res ~= `
1096     @attribute("vector_size", (` ~ to!string(size) ~ ` * ` ~ type ~ `.sizeof).to!string) ` ~ type ~ " v" ~ to!string(size) ~ `;`;
1097     res ~= `
1098 }
1099 `;
1100         }
1101     }
1102 
1103     return res;
1104 }
1105 
1106 //pragma(msg, genCLVectorTypes());
1107 mixin(genCLVectorTypes());
1108 // NOTE: There are no vector types for half
1109 
1110 
1111 /**
1112  * Macro to facilitate debugging
1113  * Usage:
1114  *   Place mixin(CL_PROGRAM_STRING_DEBUG_INFO) on the line before the first line of your source.
1115  *   The first line ends with:   CL_PROGRAM_STRING_BEGIN \"
1116  *   Each line thereafter of OpenCL C source must have a line end
1117  *   The last line is empty;
1118  *
1119  *   Example:
1120  *
1121  *   string code = mixin(CL_PROGRAM_STRING_DEBUG_INFO) ~ q{
1122  *   kernel void foo( int a, float * b )
1123  *   {
1124  *      // my comment
1125  *      *b[ get_global_id(0)] = a;
1126  *   }
1127  *   };
1128  *
1129  * This should correctly set up the line, (column) and file information for your source
1130  * string so you can do source level debugging.
1131  */
1132 
1133 // Workaround: OpenCL expects Linux dir separators ("unrecognized character escape sequence")
1134 // Usage: createProgram( CL_PROGRAM_STRING_DEBUG_INFO(__LINE__, __FILE__) ~ q{ __kernel code });
1135 import std..string;
1136 
1137 string CL_PROGRAM_STRING_DEBUG_INFO(size_t line = __LINE__, string file = __FILE__)
1138 {
1139     string ret = "";
1140 
1141     debug
1142     {
1143         file = tr(file, "\\", "/");
1144         ret = "#line " ~ to!string(line) ~ " \"" ~ file ~ "\"" ~ "\n\n";
1145     }
1146 
1147     return ret;
1148 }