• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright (c) 2008-2020 The Khronos Group Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 /* cl_ext.h contains OpenCL extensions which don't have external */
18 /* (OpenGL, D3D) dependencies.                                   */
19 
20 #ifndef __CL_EXT_H
21 #define __CL_EXT_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include <CL/cl.h>
28 
29 /***************************************************************
30 * cl_khr_command_buffer
31 ***************************************************************/
32 #define cl_khr_command_buffer 1
33 #define CL_KHR_COMMAND_BUFFER_EXTENSION_NAME \
34     "cl_khr_command_buffer"
35 
36 typedef cl_bitfield         cl_device_command_buffer_capabilities_khr;
37 typedef struct _cl_command_buffer_khr* cl_command_buffer_khr;
38 typedef cl_uint             cl_sync_point_khr;
39 typedef cl_uint             cl_command_buffer_info_khr;
40 typedef cl_uint             cl_command_buffer_state_khr;
41 typedef cl_properties       cl_command_buffer_properties_khr;
42 typedef cl_bitfield         cl_command_buffer_flags_khr;
43 typedef cl_properties       cl_ndrange_kernel_command_properties_khr;
44 typedef struct _cl_mutable_command_khr* cl_mutable_command_khr;
45 
46 /* cl_device_info */
47 #define CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR           0x12A9
48 #define CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR 0x12AA
49 
50 /* cl_device_command_buffer_capabilities_khr - bitfield */
51 #define CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR      (1 << 0)
52 #define CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR (1 << 1)
53 #define CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR   (1 << 2)
54 #define CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR       (1 << 3)
55 
56 /* cl_command_buffer_properties_khr */
57 #define CL_COMMAND_BUFFER_FLAGS_KHR                         0x1293
58 
59 /* cl_command_buffer_flags_khr */
60 #define CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR              (1 << 0)
61 
62 /* Error codes */
63 #define CL_INVALID_COMMAND_BUFFER_KHR                       -1138
64 #define CL_INVALID_SYNC_POINT_WAIT_LIST_KHR                 -1139
65 #define CL_INCOMPATIBLE_COMMAND_QUEUE_KHR                   -1140
66 
67 /* cl_command_buffer_info_khr */
68 #define CL_COMMAND_BUFFER_QUEUES_KHR                        0x1294
69 #define CL_COMMAND_BUFFER_NUM_QUEUES_KHR                    0x1295
70 #define CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR               0x1296
71 #define CL_COMMAND_BUFFER_STATE_KHR                         0x1297
72 #define CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR              0x1298
73 
74 /* cl_command_buffer_state_khr */
75 #define CL_COMMAND_BUFFER_STATE_RECORDING_KHR               0
76 #define CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR              1
77 #define CL_COMMAND_BUFFER_STATE_PENDING_KHR                 2
78 #define CL_COMMAND_BUFFER_STATE_INVALID_KHR                 3
79 
80 /* cl_command_type */
81 #define CL_COMMAND_COMMAND_BUFFER_KHR                       0x12A8
82 
83 
84 typedef cl_command_buffer_khr (CL_API_CALL *
85 clCreateCommandBufferKHR_fn)(
86     cl_uint num_queues,
87     const cl_command_queue* queues,
88     const cl_command_buffer_properties_khr* properties,
89     cl_int* errcode_ret) ;
90 
91 typedef cl_int (CL_API_CALL *
92 clFinalizeCommandBufferKHR_fn)(
93     cl_command_buffer_khr command_buffer) ;
94 
95 typedef cl_int (CL_API_CALL *
96 clRetainCommandBufferKHR_fn)(
97     cl_command_buffer_khr command_buffer) ;
98 
99 typedef cl_int (CL_API_CALL *
100 clReleaseCommandBufferKHR_fn)(
101     cl_command_buffer_khr command_buffer) ;
102 
103 typedef cl_int (CL_API_CALL *
104 clEnqueueCommandBufferKHR_fn)(
105     cl_uint num_queues,
106     cl_command_queue* queues,
107     cl_command_buffer_khr command_buffer,
108     cl_uint num_events_in_wait_list,
109     const cl_event* event_wait_list,
110     cl_event* event) ;
111 
112 typedef cl_int (CL_API_CALL *
113 clCommandBarrierWithWaitListKHR_fn)(
114     cl_command_buffer_khr command_buffer,
115     cl_command_queue command_queue,
116     cl_uint num_sync_points_in_wait_list,
117     const cl_sync_point_khr* sync_point_wait_list,
118     cl_sync_point_khr* sync_point,
119     cl_mutable_command_khr* mutable_handle) ;
120 
121 typedef cl_int (CL_API_CALL *
122 clCommandCopyBufferKHR_fn)(
123     cl_command_buffer_khr command_buffer,
124     cl_command_queue command_queue,
125     cl_mem src_buffer,
126     cl_mem dst_buffer,
127     size_t src_offset,
128     size_t dst_offset,
129     size_t size,
130     cl_uint num_sync_points_in_wait_list,
131     const cl_sync_point_khr* sync_point_wait_list,
132     cl_sync_point_khr* sync_point,
133     cl_mutable_command_khr* mutable_handle) ;
134 
135 typedef cl_int (CL_API_CALL *
136 clCommandCopyBufferRectKHR_fn)(
137     cl_command_buffer_khr command_buffer,
138     cl_command_queue command_queue,
139     cl_mem src_buffer,
140     cl_mem dst_buffer,
141     const size_t* src_origin,
142     const size_t* dst_origin,
143     const size_t* region,
144     size_t src_row_pitch,
145     size_t src_slice_pitch,
146     size_t dst_row_pitch,
147     size_t dst_slice_pitch,
148     cl_uint num_sync_points_in_wait_list,
149     const cl_sync_point_khr* sync_point_wait_list,
150     cl_sync_point_khr* sync_point,
151     cl_mutable_command_khr* mutable_handle) ;
152 
153 typedef cl_int (CL_API_CALL *
154 clCommandCopyBufferToImageKHR_fn)(
155     cl_command_buffer_khr command_buffer,
156     cl_command_queue command_queue,
157     cl_mem src_buffer,
158     cl_mem dst_image,
159     size_t src_offset,
160     const size_t* dst_origin,
161     const size_t* region,
162     cl_uint num_sync_points_in_wait_list,
163     const cl_sync_point_khr* sync_point_wait_list,
164     cl_sync_point_khr* sync_point,
165     cl_mutable_command_khr* mutable_handle) ;
166 
167 typedef cl_int (CL_API_CALL *
168 clCommandCopyImageKHR_fn)(
169     cl_command_buffer_khr command_buffer,
170     cl_command_queue command_queue,
171     cl_mem src_image,
172     cl_mem dst_image,
173     const size_t* src_origin,
174     const size_t* dst_origin,
175     const size_t* region,
176     cl_uint num_sync_points_in_wait_list,
177     const cl_sync_point_khr* sync_point_wait_list,
178     cl_sync_point_khr* sync_point,
179     cl_mutable_command_khr* mutable_handle) ;
180 
181 typedef cl_int (CL_API_CALL *
182 clCommandCopyImageToBufferKHR_fn)(
183     cl_command_buffer_khr command_buffer,
184     cl_command_queue command_queue,
185     cl_mem src_image,
186     cl_mem dst_buffer,
187     const size_t* src_origin,
188     const size_t* region,
189     size_t dst_offset,
190     cl_uint num_sync_points_in_wait_list,
191     const cl_sync_point_khr* sync_point_wait_list,
192     cl_sync_point_khr* sync_point,
193     cl_mutable_command_khr* mutable_handle) ;
194 
195 typedef cl_int (CL_API_CALL *
196 clCommandFillBufferKHR_fn)(
197     cl_command_buffer_khr command_buffer,
198     cl_command_queue command_queue,
199     cl_mem buffer,
200     const void* pattern,
201     size_t pattern_size,
202     size_t offset,
203     size_t size,
204     cl_uint num_sync_points_in_wait_list,
205     const cl_sync_point_khr* sync_point_wait_list,
206     cl_sync_point_khr* sync_point,
207     cl_mutable_command_khr* mutable_handle) ;
208 
209 typedef cl_int (CL_API_CALL *
210 clCommandFillImageKHR_fn)(
211     cl_command_buffer_khr command_buffer,
212     cl_command_queue command_queue,
213     cl_mem image,
214     const void* fill_color,
215     const size_t* origin,
216     const size_t* region,
217     cl_uint num_sync_points_in_wait_list,
218     const cl_sync_point_khr* sync_point_wait_list,
219     cl_sync_point_khr* sync_point,
220     cl_mutable_command_khr* mutable_handle) ;
221 
222 typedef cl_int (CL_API_CALL *
223 clCommandNDRangeKernelKHR_fn)(
224     cl_command_buffer_khr command_buffer,
225     cl_command_queue command_queue,
226     const cl_ndrange_kernel_command_properties_khr* properties,
227     cl_kernel kernel,
228     cl_uint work_dim,
229     const size_t* global_work_offset,
230     const size_t* global_work_size,
231     const size_t* local_work_size,
232     cl_uint num_sync_points_in_wait_list,
233     const cl_sync_point_khr* sync_point_wait_list,
234     cl_sync_point_khr* sync_point,
235     cl_mutable_command_khr* mutable_handle) ;
236 
237 typedef cl_int (CL_API_CALL *
238 clGetCommandBufferInfoKHR_fn)(
239     cl_command_buffer_khr command_buffer,
240     cl_command_buffer_info_khr param_name,
241     size_t param_value_size,
242     void* param_value,
243     size_t* param_value_size_ret) ;
244 
245 #ifndef CL_NO_PROTOTYPES
246 
247 extern CL_API_ENTRY cl_command_buffer_khr CL_API_CALL
248 clCreateCommandBufferKHR(
249     cl_uint num_queues,
250     const cl_command_queue* queues,
251     const cl_command_buffer_properties_khr* properties,
252     cl_int* errcode_ret) ;
253 
254 extern CL_API_ENTRY cl_int CL_API_CALL
255 clFinalizeCommandBufferKHR(
256     cl_command_buffer_khr command_buffer) ;
257 
258 extern CL_API_ENTRY cl_int CL_API_CALL
259 clRetainCommandBufferKHR(
260     cl_command_buffer_khr command_buffer) ;
261 
262 extern CL_API_ENTRY cl_int CL_API_CALL
263 clReleaseCommandBufferKHR(
264     cl_command_buffer_khr command_buffer) ;
265 
266 extern CL_API_ENTRY cl_int CL_API_CALL
267 clEnqueueCommandBufferKHR(
268     cl_uint num_queues,
269     cl_command_queue* queues,
270     cl_command_buffer_khr command_buffer,
271     cl_uint num_events_in_wait_list,
272     const cl_event* event_wait_list,
273     cl_event* event) ;
274 
275 extern CL_API_ENTRY cl_int CL_API_CALL
276 clCommandBarrierWithWaitListKHR(
277     cl_command_buffer_khr command_buffer,
278     cl_command_queue command_queue,
279     cl_uint num_sync_points_in_wait_list,
280     const cl_sync_point_khr* sync_point_wait_list,
281     cl_sync_point_khr* sync_point,
282     cl_mutable_command_khr* mutable_handle) ;
283 
284 extern CL_API_ENTRY cl_int CL_API_CALL
285 clCommandCopyBufferKHR(
286     cl_command_buffer_khr command_buffer,
287     cl_command_queue command_queue,
288     cl_mem src_buffer,
289     cl_mem dst_buffer,
290     size_t src_offset,
291     size_t dst_offset,
292     size_t size,
293     cl_uint num_sync_points_in_wait_list,
294     const cl_sync_point_khr* sync_point_wait_list,
295     cl_sync_point_khr* sync_point,
296     cl_mutable_command_khr* mutable_handle) ;
297 
298 extern CL_API_ENTRY cl_int CL_API_CALL
299 clCommandCopyBufferRectKHR(
300     cl_command_buffer_khr command_buffer,
301     cl_command_queue command_queue,
302     cl_mem src_buffer,
303     cl_mem dst_buffer,
304     const size_t* src_origin,
305     const size_t* dst_origin,
306     const size_t* region,
307     size_t src_row_pitch,
308     size_t src_slice_pitch,
309     size_t dst_row_pitch,
310     size_t dst_slice_pitch,
311     cl_uint num_sync_points_in_wait_list,
312     const cl_sync_point_khr* sync_point_wait_list,
313     cl_sync_point_khr* sync_point,
314     cl_mutable_command_khr* mutable_handle) ;
315 
316 extern CL_API_ENTRY cl_int CL_API_CALL
317 clCommandCopyBufferToImageKHR(
318     cl_command_buffer_khr command_buffer,
319     cl_command_queue command_queue,
320     cl_mem src_buffer,
321     cl_mem dst_image,
322     size_t src_offset,
323     const size_t* dst_origin,
324     const size_t* region,
325     cl_uint num_sync_points_in_wait_list,
326     const cl_sync_point_khr* sync_point_wait_list,
327     cl_sync_point_khr* sync_point,
328     cl_mutable_command_khr* mutable_handle) ;
329 
330 extern CL_API_ENTRY cl_int CL_API_CALL
331 clCommandCopyImageKHR(
332     cl_command_buffer_khr command_buffer,
333     cl_command_queue command_queue,
334     cl_mem src_image,
335     cl_mem dst_image,
336     const size_t* src_origin,
337     const size_t* dst_origin,
338     const size_t* region,
339     cl_uint num_sync_points_in_wait_list,
340     const cl_sync_point_khr* sync_point_wait_list,
341     cl_sync_point_khr* sync_point,
342     cl_mutable_command_khr* mutable_handle) ;
343 
344 extern CL_API_ENTRY cl_int CL_API_CALL
345 clCommandCopyImageToBufferKHR(
346     cl_command_buffer_khr command_buffer,
347     cl_command_queue command_queue,
348     cl_mem src_image,
349     cl_mem dst_buffer,
350     const size_t* src_origin,
351     const size_t* region,
352     size_t dst_offset,
353     cl_uint num_sync_points_in_wait_list,
354     const cl_sync_point_khr* sync_point_wait_list,
355     cl_sync_point_khr* sync_point,
356     cl_mutable_command_khr* mutable_handle) ;
357 
358 extern CL_API_ENTRY cl_int CL_API_CALL
359 clCommandFillBufferKHR(
360     cl_command_buffer_khr command_buffer,
361     cl_command_queue command_queue,
362     cl_mem buffer,
363     const void* pattern,
364     size_t pattern_size,
365     size_t offset,
366     size_t size,
367     cl_uint num_sync_points_in_wait_list,
368     const cl_sync_point_khr* sync_point_wait_list,
369     cl_sync_point_khr* sync_point,
370     cl_mutable_command_khr* mutable_handle) ;
371 
372 extern CL_API_ENTRY cl_int CL_API_CALL
373 clCommandFillImageKHR(
374     cl_command_buffer_khr command_buffer,
375     cl_command_queue command_queue,
376     cl_mem image,
377     const void* fill_color,
378     const size_t* origin,
379     const size_t* region,
380     cl_uint num_sync_points_in_wait_list,
381     const cl_sync_point_khr* sync_point_wait_list,
382     cl_sync_point_khr* sync_point,
383     cl_mutable_command_khr* mutable_handle) ;
384 
385 extern CL_API_ENTRY cl_int CL_API_CALL
386 clCommandNDRangeKernelKHR(
387     cl_command_buffer_khr command_buffer,
388     cl_command_queue command_queue,
389     const cl_ndrange_kernel_command_properties_khr* properties,
390     cl_kernel kernel,
391     cl_uint work_dim,
392     const size_t* global_work_offset,
393     const size_t* global_work_size,
394     const size_t* local_work_size,
395     cl_uint num_sync_points_in_wait_list,
396     const cl_sync_point_khr* sync_point_wait_list,
397     cl_sync_point_khr* sync_point,
398     cl_mutable_command_khr* mutable_handle) ;
399 
400 extern CL_API_ENTRY cl_int CL_API_CALL
401 clGetCommandBufferInfoKHR(
402     cl_command_buffer_khr command_buffer,
403     cl_command_buffer_info_khr param_name,
404     size_t param_value_size,
405     void* param_value,
406     size_t* param_value_size_ret) ;
407 
408 #endif /* CL_NO_PROTOTYPES */
409 
410 /***************************************************************
411 * cl_khr_command_buffer_mutable_dispatch
412 ***************************************************************/
413 #define cl_khr_command_buffer_mutable_dispatch 1
414 #define CL_KHR_COMMAND_BUFFER_MUTABLE_DISPATCH_EXTENSION_NAME \
415     "cl_khr_command_buffer_mutable_dispatch"
416 
417 typedef cl_uint             cl_command_buffer_structure_type_khr;
418 typedef cl_bitfield         cl_mutable_dispatch_fields_khr;
419 typedef cl_uint             cl_mutable_command_info_khr;
420 typedef struct _cl_mutable_dispatch_arg_khr {
421     cl_uint arg_index;
422     size_t arg_size;
423     const void* arg_value;
424 } cl_mutable_dispatch_arg_khr;
425 typedef struct _cl_mutable_dispatch_exec_info_khr {
426     cl_uint param_name;
427     size_t param_value_size;
428     const void* param_value;
429 } cl_mutable_dispatch_exec_info_khr;
430 typedef struct _cl_mutable_dispatch_config_khr {
431     cl_command_buffer_structure_type_khr type;
432     const void* next;
433     cl_mutable_command_khr command;
434     cl_uint num_args;
435     cl_uint num_svm_args;
436     cl_uint num_exec_infos;
437     cl_uint work_dim;
438     const cl_mutable_dispatch_arg_khr* arg_list;
439     const cl_mutable_dispatch_arg_khr* arg_svm_list;
440     const cl_mutable_dispatch_exec_info_khr* exec_info_list;
441     const size_t* global_work_offset;
442     const size_t* global_work_size;
443     const size_t* local_work_size;
444 } cl_mutable_dispatch_config_khr;
445 typedef struct _cl_mutable_base_config_khr {
446     cl_command_buffer_structure_type_khr type;
447     const void* next;
448     cl_uint num_mutable_dispatch;
449     const cl_mutable_dispatch_config_khr* mutable_dispatch_list;
450 } cl_mutable_base_config_khr;
451 
452 /* cl_command_buffer_flags_khr - bitfield */
453 #define CL_COMMAND_BUFFER_MUTABLE_KHR                       (1 << 1)
454 
455 /* Error codes */
456 #define CL_INVALID_MUTABLE_COMMAND_KHR                      -1141
457 
458 /* cl_device_info */
459 #define CL_DEVICE_MUTABLE_DISPATCH_CAPABILITIES_KHR         0x12B0
460 
461 /* cl_ndrange_kernel_command_properties_khr */
462 #define CL_MUTABLE_DISPATCH_UPDATABLE_FIELDS_KHR            0x12B1
463 
464 /* cl_mutable_dispatch_fields_khr - bitfield */
465 #define CL_MUTABLE_DISPATCH_GLOBAL_OFFSET_KHR               (1 << 0)
466 #define CL_MUTABLE_DISPATCH_GLOBAL_SIZE_KHR                 (1 << 1)
467 #define CL_MUTABLE_DISPATCH_LOCAL_SIZE_KHR                  (1 << 2)
468 #define CL_MUTABLE_DISPATCH_ARGUMENTS_KHR                   (1 << 3)
469 #define CL_MUTABLE_DISPATCH_EXEC_INFO_KHR                   (1 << 4)
470 
471 /* cl_mutable_command_info_khr */
472 #define CL_MUTABLE_COMMAND_COMMAND_QUEUE_KHR                0x12A0
473 #define CL_MUTABLE_COMMAND_COMMAND_BUFFER_KHR               0x12A1
474 #define CL_MUTABLE_COMMAND_COMMAND_TYPE_KHR                 0x12AD
475 #define CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR            0x12A2
476 #define CL_MUTABLE_DISPATCH_KERNEL_KHR                      0x12A3
477 #define CL_MUTABLE_DISPATCH_DIMENSIONS_KHR                  0x12A4
478 #define CL_MUTABLE_DISPATCH_GLOBAL_WORK_OFFSET_KHR          0x12A5
479 #define CL_MUTABLE_DISPATCH_GLOBAL_WORK_SIZE_KHR            0x12A6
480 #define CL_MUTABLE_DISPATCH_LOCAL_WORK_SIZE_KHR             0x12A7
481 
482 /* cl_command_buffer_structure_type_khr */
483 #define CL_STRUCTURE_TYPE_MUTABLE_BASE_CONFIG_KHR           0
484 #define CL_STRUCTURE_TYPE_MUTABLE_DISPATCH_CONFIG_KHR       1
485 
486 
487 typedef cl_int (CL_API_CALL *
488 clUpdateMutableCommandsKHR_fn)(
489     cl_command_buffer_khr command_buffer,
490     const cl_mutable_base_config_khr* mutable_config) ;
491 
492 typedef cl_int (CL_API_CALL *
493 clGetMutableCommandInfoKHR_fn)(
494     cl_mutable_command_khr command,
495     cl_mutable_command_info_khr param_name,
496     size_t param_value_size,
497     void* param_value,
498     size_t* param_value_size_ret) ;
499 
500 #ifndef CL_NO_PROTOTYPES
501 
502 extern CL_API_ENTRY cl_int CL_API_CALL
503 clUpdateMutableCommandsKHR(
504     cl_command_buffer_khr command_buffer,
505     const cl_mutable_base_config_khr* mutable_config) ;
506 
507 extern CL_API_ENTRY cl_int CL_API_CALL
508 clGetMutableCommandInfoKHR(
509     cl_mutable_command_khr command,
510     cl_mutable_command_info_khr param_name,
511     size_t param_value_size,
512     void* param_value,
513     size_t* param_value_size_ret) ;
514 
515 #endif /* CL_NO_PROTOTYPES */
516 
517 /* cl_khr_fp64 extension - no extension #define since it has no functions  */
518 /* CL_DEVICE_DOUBLE_FP_CONFIG is defined in CL.h for OpenCL >= 120 */
519 
520 #if CL_TARGET_OPENCL_VERSION <= 110
521 #define CL_DEVICE_DOUBLE_FP_CONFIG                       0x1032
522 #endif
523 
524 /* cl_khr_fp16 extension - no extension #define since it has no functions  */
525 #define CL_DEVICE_HALF_FP_CONFIG                    0x1033
526 
527 /* Memory object destruction
528  *
529  * Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR
530  *
531  * Registers a user callback function that will be called when the memory object is deleted and its resources
532  * freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback
533  * stack associated with memobj. The registered user callback functions are called in the reverse order in
534  * which they were registered. The user callback functions are called and then the memory object is deleted
535  * and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be
536  * notified when the memory referenced by host_ptr, specified when the memory object is created and used as
537  * the storage bits for the memory object, can be reused or freed.
538  *
539  * The application may not call CL api's with the cl_mem object passed to the pfn_notify.
540  *
541  * Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
542  * before using.
543  */
544 #define cl_APPLE_SetMemObjectDestructor 1
545 extern CL_API_ENTRY cl_int CL_API_CALL clSetMemObjectDestructorAPPLE(  cl_mem memobj,
546                                         void (* pfn_notify)(cl_mem memobj, void * user_data),
547                                         void * user_data)             CL_API_SUFFIX__VERSION_1_0;
548 
549 
550 /* Context Logging Functions
551  *
552  * The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext().
553  * Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
554  * before using.
555  *
556  * clLogMessagesToSystemLog forwards on all log messages to the Apple System Logger
557  */
558 #define cl_APPLE_ContextLoggingFunctions 1
559 extern CL_API_ENTRY void CL_API_CALL clLogMessagesToSystemLogAPPLE(  const char * errstr,
560                                             const void * private_info,
561                                             size_t       cb,
562                                             void *       user_data)  CL_API_SUFFIX__VERSION_1_0;
563 
564 /* clLogMessagesToStdout sends all log messages to the file descriptor stdout */
565 extern CL_API_ENTRY void CL_API_CALL clLogMessagesToStdoutAPPLE(   const char * errstr,
566                                           const void * private_info,
567                                           size_t       cb,
568                                           void *       user_data)    CL_API_SUFFIX__VERSION_1_0;
569 
570 /* clLogMessagesToStderr sends all log messages to the file descriptor stderr */
571 extern CL_API_ENTRY void CL_API_CALL clLogMessagesToStderrAPPLE(   const char * errstr,
572                                           const void * private_info,
573                                           size_t       cb,
574                                           void *       user_data)    CL_API_SUFFIX__VERSION_1_0;
575 
576 
577 /************************
578 * cl_khr_icd extension *
579 ************************/
580 #define cl_khr_icd 1
581 
582 /* cl_platform_info                                                        */
583 #define CL_PLATFORM_ICD_SUFFIX_KHR                  0x0920
584 
585 /* Additional Error Codes                                                  */
586 #define CL_PLATFORM_NOT_FOUND_KHR                   -1001
587 
588 extern CL_API_ENTRY cl_int CL_API_CALL
589 clIcdGetPlatformIDsKHR(cl_uint          num_entries,
590                        cl_platform_id * platforms,
591                        cl_uint *        num_platforms);
592 
593 typedef cl_int
594 (CL_API_CALL *clIcdGetPlatformIDsKHR_fn)(cl_uint          num_entries,
595                                          cl_platform_id * platforms,
596                                          cl_uint *        num_platforms);
597 
598 
599 /*******************************
600  * cl_khr_il_program extension *
601  *******************************/
602 #define cl_khr_il_program 1
603 
604 /* New property to clGetDeviceInfo for retrieving supported intermediate
605  * languages
606  */
607 #define CL_DEVICE_IL_VERSION_KHR                    0x105B
608 
609 /* New property to clGetProgramInfo for retrieving for retrieving the IL of a
610  * program
611  */
612 #define CL_PROGRAM_IL_KHR                           0x1169
613 
614 extern CL_API_ENTRY cl_program CL_API_CALL
615 clCreateProgramWithILKHR(cl_context   context,
616                          const void * il,
617                          size_t       length,
618                          cl_int *     errcode_ret);
619 
620 typedef cl_program
621 (CL_API_CALL *clCreateProgramWithILKHR_fn)(cl_context   context,
622                                            const void * il,
623                                            size_t       length,
624                                            cl_int *     errcode_ret) CL_API_SUFFIX__VERSION_1_2;
625 
626 /* Extension: cl_khr_image2d_from_buffer
627  *
628  * This extension allows a 2D image to be created from a cl_mem buffer without
629  * a copy. The type associated with a 2D image created from a buffer in an
630  * OpenCL program is image2d_t. Both the sampler and sampler-less read_image
631  * built-in functions are supported for 2D images and 2D images created from
632  * a buffer.  Similarly, the write_image built-ins are also supported for 2D
633  * images created from a buffer.
634  *
635  * When the 2D image from buffer is created, the client must specify the
636  * width, height, image format (i.e. channel order and channel data type)
637  * and optionally the row pitch.
638  *
639  * The pitch specified must be a multiple of
640  * CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR pixels.
641  * The base address of the buffer must be aligned to
642  * CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR pixels.
643  */
644 
645 #define CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR              0x104A
646 #define CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR       0x104B
647 
648 
649 /**************************************
650  * cl_khr_initialize_memory extension *
651  **************************************/
652 
653 #define CL_CONTEXT_MEMORY_INITIALIZE_KHR            0x2030
654 
655 
656 /**************************************
657  * cl_khr_terminate_context extension *
658  **************************************/
659 
660 #define CL_CONTEXT_TERMINATED_KHR                   -1121
661 
662 #define CL_DEVICE_TERMINATE_CAPABILITY_KHR          0x2031
663 #define CL_CONTEXT_TERMINATE_KHR                    0x2032
664 
665 #define cl_khr_terminate_context 1
666 extern CL_API_ENTRY cl_int CL_API_CALL
667 clTerminateContextKHR(cl_context context) CL_API_SUFFIX__VERSION_1_2;
668 
669 typedef cl_int
670 (CL_API_CALL *clTerminateContextKHR_fn)(cl_context context) CL_API_SUFFIX__VERSION_1_2;
671 
672 
673 /*
674  * Extension: cl_khr_spir
675  *
676  * This extension adds support to create an OpenCL program object from a
677  * Standard Portable Intermediate Representation (SPIR) instance
678  */
679 
680 #define CL_DEVICE_SPIR_VERSIONS                     0x40E0
681 #define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE         0x40E1
682 
683 
684 /*****************************************
685  * cl_khr_create_command_queue extension *
686  *****************************************/
687 #define cl_khr_create_command_queue 1
688 
689 typedef cl_properties cl_queue_properties_khr;
690 
691 extern CL_API_ENTRY cl_command_queue CL_API_CALL
692 clCreateCommandQueueWithPropertiesKHR(cl_context context,
693                                       cl_device_id device,
694                                       const cl_queue_properties_khr* properties,
695                                       cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2;
696 
697 typedef cl_command_queue
698 (CL_API_CALL *clCreateCommandQueueWithPropertiesKHR_fn)(cl_context context,
699                                                         cl_device_id device,
700                                                         const cl_queue_properties_khr* properties,
701                                                         cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2;
702 
703 
704 /******************************************
705 * cl_nv_device_attribute_query extension *
706 ******************************************/
707 
708 /* cl_nv_device_attribute_query extension - no extension #define since it has no functions */
709 #define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV       0x4000
710 #define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV       0x4001
711 #define CL_DEVICE_REGISTERS_PER_BLOCK_NV            0x4002
712 #define CL_DEVICE_WARP_SIZE_NV                      0x4003
713 #define CL_DEVICE_GPU_OVERLAP_NV                    0x4004
714 #define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV            0x4005
715 #define CL_DEVICE_INTEGRATED_MEMORY_NV              0x4006
716 
717 
718 /*********************************
719 * cl_amd_device_attribute_query *
720 *********************************/
721 
722 #define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD            0x4036
723 #define CL_DEVICE_TOPOLOGY_AMD                          0x4037
724 #define CL_DEVICE_BOARD_NAME_AMD                        0x4038
725 #define CL_DEVICE_GLOBAL_FREE_MEMORY_AMD                0x4039
726 #define CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD             0x4040
727 #define CL_DEVICE_SIMD_WIDTH_AMD                        0x4041
728 #define CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD            0x4042
729 #define CL_DEVICE_WAVEFRONT_WIDTH_AMD                   0x4043
730 #define CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD               0x4044
731 #define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD          0x4045
732 #define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD     0x4046
733 #define CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD   0x4047
734 #define CL_DEVICE_LOCAL_MEM_BANKS_AMD                   0x4048
735 #define CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD            0x4049
736 #define CL_DEVICE_GFXIP_MAJOR_AMD                       0x404A
737 #define CL_DEVICE_GFXIP_MINOR_AMD                       0x404B
738 #define CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD            0x404C
739 #define CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_AMD         0x4030
740 #define CL_DEVICE_MAX_WORK_GROUP_SIZE_AMD               0x4031
741 #define CL_DEVICE_PREFERRED_CONSTANT_BUFFER_SIZE_AMD    0x4033
742 #define CL_DEVICE_PCIE_ID_AMD                           0x4034
743 
744 
745 /*********************************
746 * cl_arm_printf extension
747 *********************************/
748 
749 #define CL_PRINTF_CALLBACK_ARM                      0x40B0
750 #define CL_PRINTF_BUFFERSIZE_ARM                    0x40B1
751 
752 
753 /***********************************
754 * cl_ext_device_fission extension
755 ***********************************/
756 #define cl_ext_device_fission   1
757 
758 extern CL_API_ENTRY cl_int CL_API_CALL
759 clReleaseDeviceEXT(cl_device_id device) CL_API_SUFFIX__VERSION_1_1;
760 
761 typedef cl_int
762 (CL_API_CALL *clReleaseDeviceEXT_fn)(cl_device_id device) CL_API_SUFFIX__VERSION_1_1;
763 
764 extern CL_API_ENTRY cl_int CL_API_CALL
765 clRetainDeviceEXT(cl_device_id device) CL_API_SUFFIX__VERSION_1_1;
766 
767 typedef cl_int
768 (CL_API_CALL *clRetainDeviceEXT_fn)(cl_device_id device) CL_API_SUFFIX__VERSION_1_1;
769 
770 typedef cl_ulong  cl_device_partition_property_ext;
771 extern CL_API_ENTRY cl_int CL_API_CALL
772 clCreateSubDevicesEXT(cl_device_id   in_device,
773                       const cl_device_partition_property_ext * properties,
774                       cl_uint        num_entries,
775                       cl_device_id * out_devices,
776                       cl_uint *      num_devices) CL_API_SUFFIX__VERSION_1_1;
777 
778 typedef cl_int
779 (CL_API_CALL * clCreateSubDevicesEXT_fn)(cl_device_id   in_device,
780                                          const cl_device_partition_property_ext * properties,
781                                          cl_uint        num_entries,
782                                          cl_device_id * out_devices,
783                                          cl_uint *      num_devices) CL_API_SUFFIX__VERSION_1_1;
784 
785 /* cl_device_partition_property_ext */
786 #define CL_DEVICE_PARTITION_EQUALLY_EXT             0x4050
787 #define CL_DEVICE_PARTITION_BY_COUNTS_EXT           0x4051
788 #define CL_DEVICE_PARTITION_BY_NAMES_EXT            0x4052
789 #define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT  0x4053
790 
791 /* clDeviceGetInfo selectors */
792 #define CL_DEVICE_PARENT_DEVICE_EXT                 0x4054
793 #define CL_DEVICE_PARTITION_TYPES_EXT               0x4055
794 #define CL_DEVICE_AFFINITY_DOMAINS_EXT              0x4056
795 #define CL_DEVICE_REFERENCE_COUNT_EXT               0x4057
796 #define CL_DEVICE_PARTITION_STYLE_EXT               0x4058
797 
798 /* error codes */
799 #define CL_DEVICE_PARTITION_FAILED_EXT              -1057
800 #define CL_INVALID_PARTITION_COUNT_EXT              -1058
801 #define CL_INVALID_PARTITION_NAME_EXT               -1059
802 
803 /* CL_AFFINITY_DOMAINs */
804 #define CL_AFFINITY_DOMAIN_L1_CACHE_EXT             0x1
805 #define CL_AFFINITY_DOMAIN_L2_CACHE_EXT             0x2
806 #define CL_AFFINITY_DOMAIN_L3_CACHE_EXT             0x3
807 #define CL_AFFINITY_DOMAIN_L4_CACHE_EXT             0x4
808 #define CL_AFFINITY_DOMAIN_NUMA_EXT                 0x10
809 #define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT     0x100
810 
811 /* cl_device_partition_property_ext list terminators */
812 #define CL_PROPERTIES_LIST_END_EXT                  ((cl_device_partition_property_ext) 0)
813 #define CL_PARTITION_BY_COUNTS_LIST_END_EXT         ((cl_device_partition_property_ext) 0)
814 #define CL_PARTITION_BY_NAMES_LIST_END_EXT          ((cl_device_partition_property_ext) 0 - 1)
815 
816 
817 /***********************************
818  * cl_ext_migrate_memobject extension definitions
819  ***********************************/
820 #define cl_ext_migrate_memobject 1
821 
822 typedef cl_bitfield cl_mem_migration_flags_ext;
823 
824 #define CL_MIGRATE_MEM_OBJECT_HOST_EXT              0x1
825 
826 #define CL_COMMAND_MIGRATE_MEM_OBJECT_EXT           0x4040
827 
828 extern CL_API_ENTRY cl_int CL_API_CALL
829 clEnqueueMigrateMemObjectEXT(cl_command_queue command_queue,
830                              cl_uint          num_mem_objects,
831                              const cl_mem *   mem_objects,
832                              cl_mem_migration_flags_ext flags,
833                              cl_uint          num_events_in_wait_list,
834                              const cl_event * event_wait_list,
835                              cl_event *       event);
836 
837 typedef cl_int
838 (CL_API_CALL *clEnqueueMigrateMemObjectEXT_fn)(cl_command_queue command_queue,
839                                                cl_uint          num_mem_objects,
840                                                const cl_mem *   mem_objects,
841                                                cl_mem_migration_flags_ext flags,
842                                                cl_uint          num_events_in_wait_list,
843                                                const cl_event * event_wait_list,
844                                                cl_event *       event);
845 
846 
847 /*********************************
848 * cl_ext_cxx_for_opencl extension
849 *********************************/
850 #define cl_ext_cxx_for_opencl 1
851 
852 #define CL_DEVICE_CXX_FOR_OPENCL_NUMERIC_VERSION_EXT 0x4230
853 
854 /*********************************
855 * cl_qcom_ext_host_ptr extension
856 *********************************/
857 #define cl_qcom_ext_host_ptr 1
858 
859 #define CL_MEM_EXT_HOST_PTR_QCOM                  (1 << 29)
860 
861 #define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM   0x40A0
862 #define CL_DEVICE_PAGE_SIZE_QCOM                  0x40A1
863 #define CL_IMAGE_ROW_ALIGNMENT_QCOM               0x40A2
864 #define CL_IMAGE_SLICE_ALIGNMENT_QCOM             0x40A3
865 #define CL_MEM_HOST_UNCACHED_QCOM                 0x40A4
866 #define CL_MEM_HOST_WRITEBACK_QCOM                0x40A5
867 #define CL_MEM_HOST_WRITETHROUGH_QCOM             0x40A6
868 #define CL_MEM_HOST_WRITE_COMBINING_QCOM          0x40A7
869 
870 typedef cl_uint                                   cl_image_pitch_info_qcom;
871 
872 extern CL_API_ENTRY cl_int CL_API_CALL
873 clGetDeviceImageInfoQCOM(cl_device_id             device,
874                          size_t                   image_width,
875                          size_t                   image_height,
876                          const cl_image_format   *image_format,
877                          cl_image_pitch_info_qcom param_name,
878                          size_t                   param_value_size,
879                          void                    *param_value,
880                          size_t                  *param_value_size_ret);
881 
882 typedef struct _cl_mem_ext_host_ptr
883 {
884     /* Type of external memory allocation. */
885     /* Legal values will be defined in layered extensions. */
886     cl_uint  allocation_type;
887 
888     /* Host cache policy for this external memory allocation. */
889     cl_uint  host_cache_policy;
890 
891 } cl_mem_ext_host_ptr;
892 
893 
894 /*******************************************
895 * cl_qcom_ext_host_ptr_iocoherent extension
896 ********************************************/
897 
898 /* Cache policy specifying io-coherence */
899 #define CL_MEM_HOST_IOCOHERENT_QCOM               0x40A9
900 
901 
902 /*********************************
903 * cl_qcom_ion_host_ptr extension
904 *********************************/
905 
906 #define CL_MEM_ION_HOST_PTR_QCOM                  0x40A8
907 
908 typedef struct _cl_mem_ion_host_ptr
909 {
910     /* Type of external memory allocation. */
911     /* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */
912     cl_mem_ext_host_ptr  ext_host_ptr;
913 
914     /* ION file descriptor */
915     int                  ion_filedesc;
916 
917     /* Host pointer to the ION allocated memory */
918     void*                ion_hostptr;
919 
920 } cl_mem_ion_host_ptr;
921 
922 
923 /*********************************
924 * cl_qcom_android_native_buffer_host_ptr extension
925 *********************************/
926 
927 #define CL_MEM_ANDROID_NATIVE_BUFFER_HOST_PTR_QCOM                  0x40C6
928 
929 typedef struct _cl_mem_android_native_buffer_host_ptr
930 {
931     /* Type of external memory allocation. */
932     /* Must be CL_MEM_ANDROID_NATIVE_BUFFER_HOST_PTR_QCOM for Android native buffers. */
933     cl_mem_ext_host_ptr  ext_host_ptr;
934 
935     /* Virtual pointer to the android native buffer */
936     void*                anb_ptr;
937 
938 } cl_mem_android_native_buffer_host_ptr;
939 
940 
941 /******************************************
942  * cl_img_yuv_image extension *
943  ******************************************/
944 
945 /* Image formats used in clCreateImage */
946 #define CL_NV21_IMG                                 0x40D0
947 #define CL_YV12_IMG                                 0x40D1
948 
949 
950 /******************************************
951  * cl_img_cached_allocations extension *
952  ******************************************/
953 
954 /* Flag values used by clCreateBuffer */
955 #define CL_MEM_USE_UNCACHED_CPU_MEMORY_IMG          (1 << 26)
956 #define CL_MEM_USE_CACHED_CPU_MEMORY_IMG            (1 << 27)
957 
958 
959 /******************************************
960  * cl_img_use_gralloc_ptr extension *
961  ******************************************/
962 #define cl_img_use_gralloc_ptr 1
963 
964 /* Flag values used by clCreateBuffer */
965 #define CL_MEM_USE_GRALLOC_PTR_IMG                  (1 << 28)
966 
967 /* To be used by clGetEventInfo: */
968 #define CL_COMMAND_ACQUIRE_GRALLOC_OBJECTS_IMG      0x40D2
969 #define CL_COMMAND_RELEASE_GRALLOC_OBJECTS_IMG      0x40D3
970 
971 /* Error codes from clEnqueueAcquireGrallocObjectsIMG and clEnqueueReleaseGrallocObjectsIMG */
972 #define CL_GRALLOC_RESOURCE_NOT_ACQUIRED_IMG        0x40D4
973 #define CL_INVALID_GRALLOC_OBJECT_IMG               0x40D5
974 
975 extern CL_API_ENTRY cl_int CL_API_CALL
976 clEnqueueAcquireGrallocObjectsIMG(cl_command_queue      command_queue,
977                                   cl_uint               num_objects,
978                                   const cl_mem *        mem_objects,
979                                   cl_uint               num_events_in_wait_list,
980                                   const cl_event *      event_wait_list,
981                                   cl_event *            event) CL_API_SUFFIX__VERSION_1_2;
982 
983 extern CL_API_ENTRY cl_int CL_API_CALL
984 clEnqueueReleaseGrallocObjectsIMG(cl_command_queue      command_queue,
985                                   cl_uint               num_objects,
986                                   const cl_mem *        mem_objects,
987                                   cl_uint               num_events_in_wait_list,
988                                   const cl_event *      event_wait_list,
989                                   cl_event *            event) CL_API_SUFFIX__VERSION_1_2;
990 
991 /******************************************
992  * cl_img_generate_mipmap extension *
993  ******************************************/
994 #define cl_img_generate_mipmap 1
995 
996 typedef cl_uint cl_mipmap_filter_mode_img;
997 
998 /* To be used by clEnqueueGenerateMipmapIMG */
999 #define CL_MIPMAP_FILTER_ANY_IMG 0x0
1000 #define CL_MIPMAP_FILTER_BOX_IMG 0x1
1001 
1002 /* To be used by clGetEventInfo */
1003 #define CL_COMMAND_GENERATE_MIPMAP_IMG 0x40D6
1004 
1005 extern CL_API_ENTRY cl_int CL_API_CALL
1006 clEnqueueGenerateMipmapIMG(cl_command_queue          command_queue,
1007                            cl_mem                    src_image,
1008                            cl_mem                    dst_image,
1009                            cl_mipmap_filter_mode_img mipmap_filter_mode,
1010                            const size_t              *array_region,
1011                            const size_t              *mip_region,
1012                            cl_uint                   num_events_in_wait_list,
1013                            const cl_event            *event_wait_list,
1014                            cl_event *event) CL_API_SUFFIX__VERSION_1_2;
1015 
1016 /******************************************
1017  * cl_img_mem_properties extension *
1018  ******************************************/
1019 #define cl_img_mem_properties 1
1020 
1021 /* To be used by clCreateBufferWithProperties */
1022 #define CL_MEM_ALLOC_FLAGS_IMG 0x40D7
1023 
1024 /* To be used wiith the CL_MEM_ALLOC_FLAGS_IMG property */
1025 typedef cl_bitfield cl_mem_alloc_flags_img;
1026 
1027 /* To be used with cl_mem_alloc_flags_img */
1028 #define CL_MEM_ALLOC_RELAX_REQUIREMENTS_IMG (1 << 0)
1029 
1030 /*********************************
1031 * cl_khr_subgroups extension
1032 *********************************/
1033 #define cl_khr_subgroups 1
1034 
1035 #if !defined(CL_VERSION_2_1)
1036 /* For OpenCL 2.1 and newer, cl_kernel_sub_group_info is declared in CL.h.
1037    In hindsight, there should have been a khr suffix on this type for
1038    the extension, but keeping it un-suffixed to maintain backwards
1039    compatibility. */
1040 typedef cl_uint             cl_kernel_sub_group_info;
1041 #endif
1042 
1043 /* cl_kernel_sub_group_info */
1044 #define CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR    0x2033
1045 #define CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR       0x2034
1046 
1047 extern CL_API_ENTRY cl_int CL_API_CALL
1048 clGetKernelSubGroupInfoKHR(cl_kernel    in_kernel,
1049                            cl_device_id in_device,
1050                            cl_kernel_sub_group_info param_name,
1051                            size_t       input_value_size,
1052                            const void * input_value,
1053                            size_t       param_value_size,
1054                            void *       param_value,
1055                            size_t *     param_value_size_ret) CL_API_SUFFIX__VERSION_2_0_DEPRECATED;
1056 
1057 typedef cl_int
1058 (CL_API_CALL * clGetKernelSubGroupInfoKHR_fn)(cl_kernel    in_kernel,
1059                                               cl_device_id in_device,
1060                                               cl_kernel_sub_group_info param_name,
1061                                               size_t       input_value_size,
1062                                               const void * input_value,
1063                                               size_t       param_value_size,
1064                                               void *       param_value,
1065                                               size_t *     param_value_size_ret) CL_API_SUFFIX__VERSION_2_0_DEPRECATED;
1066 
1067 
1068 /*********************************
1069 * cl_khr_mipmap_image extension
1070 *********************************/
1071 
1072 /* cl_sampler_properties */
1073 #define CL_SAMPLER_MIP_FILTER_MODE_KHR              0x1155
1074 #define CL_SAMPLER_LOD_MIN_KHR                      0x1156
1075 #define CL_SAMPLER_LOD_MAX_KHR                      0x1157
1076 
1077 
1078 /*********************************
1079 * cl_khr_priority_hints extension
1080 *********************************/
1081 /* This extension define is for backwards compatibility.
1082    It shouldn't be required since this extension has no new functions. */
1083 #define cl_khr_priority_hints 1
1084 
1085 typedef cl_uint  cl_queue_priority_khr;
1086 
1087 /* cl_command_queue_properties */
1088 #define CL_QUEUE_PRIORITY_KHR 0x1096
1089 
1090 /* cl_queue_priority_khr */
1091 #define CL_QUEUE_PRIORITY_HIGH_KHR (1<<0)
1092 #define CL_QUEUE_PRIORITY_MED_KHR (1<<1)
1093 #define CL_QUEUE_PRIORITY_LOW_KHR (1<<2)
1094 
1095 
1096 /*********************************
1097 * cl_khr_throttle_hints extension
1098 *********************************/
1099 /* This extension define is for backwards compatibility.
1100    It shouldn't be required since this extension has no new functions. */
1101 #define cl_khr_throttle_hints 1
1102 
1103 typedef cl_uint  cl_queue_throttle_khr;
1104 
1105 /* cl_command_queue_properties */
1106 #define CL_QUEUE_THROTTLE_KHR 0x1097
1107 
1108 /* cl_queue_throttle_khr */
1109 #define CL_QUEUE_THROTTLE_HIGH_KHR (1<<0)
1110 #define CL_QUEUE_THROTTLE_MED_KHR (1<<1)
1111 #define CL_QUEUE_THROTTLE_LOW_KHR (1<<2)
1112 
1113 
1114 /*********************************
1115 * cl_khr_subgroup_named_barrier
1116 *********************************/
1117 /* This extension define is for backwards compatibility.
1118    It shouldn't be required since this extension has no new functions. */
1119 #define cl_khr_subgroup_named_barrier 1
1120 
1121 /* cl_device_info */
1122 #define CL_DEVICE_MAX_NAMED_BARRIER_COUNT_KHR       0x2035
1123 
1124 
1125 /*********************************
1126 * cl_khr_extended_versioning
1127 *********************************/
1128 
1129 #define cl_khr_extended_versioning 1
1130 
1131 #define CL_VERSION_MAJOR_BITS_KHR (10)
1132 #define CL_VERSION_MINOR_BITS_KHR (10)
1133 #define CL_VERSION_PATCH_BITS_KHR (12)
1134 
1135 #define CL_VERSION_MAJOR_MASK_KHR ((1 << CL_VERSION_MAJOR_BITS_KHR) - 1)
1136 #define CL_VERSION_MINOR_MASK_KHR ((1 << CL_VERSION_MINOR_BITS_KHR) - 1)
1137 #define CL_VERSION_PATCH_MASK_KHR ((1 << CL_VERSION_PATCH_BITS_KHR) - 1)
1138 
1139 #define CL_VERSION_MAJOR_KHR(version) ((version) >> (CL_VERSION_MINOR_BITS_KHR + CL_VERSION_PATCH_BITS_KHR))
1140 #define CL_VERSION_MINOR_KHR(version) (((version) >> CL_VERSION_PATCH_BITS_KHR) & CL_VERSION_MINOR_MASK_KHR)
1141 #define CL_VERSION_PATCH_KHR(version) ((version) & CL_VERSION_PATCH_MASK_KHR)
1142 
1143 #define CL_MAKE_VERSION_KHR(major, minor, patch) \
1144     ((((major) & CL_VERSION_MAJOR_MASK_KHR) << (CL_VERSION_MINOR_BITS_KHR + CL_VERSION_PATCH_BITS_KHR)) | \
1145     (((minor) &  CL_VERSION_MINOR_MASK_KHR) << CL_VERSION_PATCH_BITS_KHR) | \
1146     ((patch) & CL_VERSION_PATCH_MASK_KHR))
1147 
1148 typedef cl_uint cl_version_khr;
1149 
1150 #define CL_NAME_VERSION_MAX_NAME_SIZE_KHR 64
1151 
1152 typedef struct _cl_name_version_khr
1153 {
1154     cl_version_khr version;
1155     char name[CL_NAME_VERSION_MAX_NAME_SIZE_KHR];
1156 } cl_name_version_khr;
1157 
1158 /* cl_platform_info */
1159 #define CL_PLATFORM_NUMERIC_VERSION_KHR                  0x0906
1160 #define CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR          0x0907
1161 
1162 /* cl_device_info */
1163 #define CL_DEVICE_NUMERIC_VERSION_KHR                    0x105E
1164 #define CL_DEVICE_OPENCL_C_NUMERIC_VERSION_KHR           0x105F
1165 #define CL_DEVICE_EXTENSIONS_WITH_VERSION_KHR            0x1060
1166 #define CL_DEVICE_ILS_WITH_VERSION_KHR                   0x1061
1167 #define CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION_KHR      0x1062
1168 
1169 
1170 /*********************************
1171 * cl_khr_device_uuid extension
1172 *********************************/
1173 #define cl_khr_device_uuid 1
1174 
1175 #define CL_UUID_SIZE_KHR 16
1176 #define CL_LUID_SIZE_KHR 8
1177 
1178 #define CL_DEVICE_UUID_KHR          0x106A
1179 #define CL_DRIVER_UUID_KHR          0x106B
1180 #define CL_DEVICE_LUID_VALID_KHR    0x106C
1181 #define CL_DEVICE_LUID_KHR          0x106D
1182 #define CL_DEVICE_NODE_MASK_KHR     0x106E
1183 
1184 
1185 /***************************************************************
1186 * cl_khr_pci_bus_info
1187 ***************************************************************/
1188 #define cl_khr_pci_bus_info 1
1189 
1190 typedef struct _cl_device_pci_bus_info_khr {
1191     cl_uint pci_domain;
1192     cl_uint pci_bus;
1193     cl_uint pci_device;
1194     cl_uint pci_function;
1195 } cl_device_pci_bus_info_khr;
1196 
1197 /* cl_device_info */
1198 #define CL_DEVICE_PCI_BUS_INFO_KHR                          0x410F
1199 
1200 
1201 /***************************************************************
1202 * cl_khr_suggested_local_work_size
1203 ***************************************************************/
1204 #define cl_khr_suggested_local_work_size 1
1205 
1206 extern CL_API_ENTRY cl_int CL_API_CALL
1207 clGetKernelSuggestedLocalWorkSizeKHR(
1208     cl_command_queue command_queue,
1209     cl_kernel kernel,
1210     cl_uint work_dim,
1211     const size_t* global_work_offset,
1212     const size_t* global_work_size,
1213     size_t* suggested_local_work_size) CL_API_SUFFIX__VERSION_3_0;
1214 
1215 typedef cl_int (CL_API_CALL *
1216 clGetKernelSuggestedLocalWorkSizeKHR_fn)(
1217     cl_command_queue command_queue,
1218     cl_kernel kernel,
1219     cl_uint work_dim,
1220     const size_t* global_work_offset,
1221     const size_t* global_work_size,
1222     size_t* suggested_local_work_size) CL_API_SUFFIX__VERSION_3_0;
1223 
1224 
1225 /***************************************************************
1226 * cl_khr_integer_dot_product
1227 ***************************************************************/
1228 #define cl_khr_integer_dot_product 1
1229 
1230 typedef cl_bitfield         cl_device_integer_dot_product_capabilities_khr;
1231 
1232 /* cl_device_integer_dot_product_capabilities_khr */
1233 #define CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR (1 << 0)
1234 #define CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR      (1 << 1)
1235 
1236 typedef struct _cl_device_integer_dot_product_acceleration_properties_khr {
1237     cl_bool signed_accelerated;
1238     cl_bool unsigned_accelerated;
1239     cl_bool mixed_signedness_accelerated;
1240     cl_bool accumulating_saturating_signed_accelerated;
1241     cl_bool accumulating_saturating_unsigned_accelerated;
1242     cl_bool accumulating_saturating_mixed_signedness_accelerated;
1243 } cl_device_integer_dot_product_acceleration_properties_khr;
1244 
1245 /* cl_device_info */
1246 #define CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR                          0x1073
1247 #define CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR          0x1074
1248 #define CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR 0x1075
1249 
1250 
1251 /***************************************************************
1252 * cl_khr_external_memory
1253 ***************************************************************/
1254 #define cl_khr_external_memory 1
1255 
1256 typedef cl_uint             cl_external_memory_handle_type_khr;
1257 
1258 /* cl_platform_info */
1259 #define CL_PLATFORM_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR 0x2044
1260 
1261 /* cl_device_info */
1262 #define CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR   0x204F
1263 
1264 /* cl_mem_properties */
1265 #define CL_DEVICE_HANDLE_LIST_KHR                           0x2051
1266 #define CL_DEVICE_HANDLE_LIST_END_KHR                       0
1267 
1268 /* cl_command_type */
1269 #define CL_COMMAND_ACQUIRE_EXTERNAL_MEM_OBJECTS_KHR         0x2047
1270 #define CL_COMMAND_RELEASE_EXTERNAL_MEM_OBJECTS_KHR         0x2048
1271 
1272 
1273 typedef cl_int (CL_API_CALL *
1274 clEnqueueAcquireExternalMemObjectsKHR_fn)(
1275     cl_command_queue command_queue,
1276     cl_uint num_mem_objects,
1277     const cl_mem* mem_objects,
1278     cl_uint num_events_in_wait_list,
1279     const cl_event* event_wait_list,
1280     cl_event* event) CL_API_SUFFIX__VERSION_3_0;
1281 
1282 typedef cl_int (CL_API_CALL *
1283 clEnqueueReleaseExternalMemObjectsKHR_fn)(
1284     cl_command_queue command_queue,
1285     cl_uint num_mem_objects,
1286     const cl_mem* mem_objects,
1287     cl_uint num_events_in_wait_list,
1288     const cl_event* event_wait_list,
1289     cl_event* event) CL_API_SUFFIX__VERSION_3_0;
1290 
1291 extern CL_API_ENTRY cl_int CL_API_CALL
1292 clEnqueueAcquireExternalMemObjectsKHR(
1293     cl_command_queue command_queue,
1294     cl_uint num_mem_objects,
1295     const cl_mem* mem_objects,
1296     cl_uint num_events_in_wait_list,
1297     const cl_event* event_wait_list,
1298     cl_event* event) CL_API_SUFFIX__VERSION_3_0;
1299 
1300 extern CL_API_ENTRY cl_int CL_API_CALL
1301 clEnqueueReleaseExternalMemObjectsKHR(
1302     cl_command_queue command_queue,
1303     cl_uint num_mem_objects,
1304     const cl_mem* mem_objects,
1305     cl_uint num_events_in_wait_list,
1306     const cl_event* event_wait_list,
1307     cl_event* event) CL_API_SUFFIX__VERSION_3_0;
1308 
1309 /***************************************************************
1310 * cl_khr_external_memory_dma_buf
1311 ***************************************************************/
1312 #define cl_khr_external_memory_dma_buf 1
1313 
1314 /* cl_external_memory_handle_type_khr */
1315 #define CL_EXTERNAL_MEMORY_HANDLE_DMA_BUF_KHR               0x2067
1316 
1317 /***************************************************************
1318 * cl_khr_external_memory_dx
1319 ***************************************************************/
1320 #define cl_khr_external_memory_dx 1
1321 
1322 /* cl_external_memory_handle_type_khr */
1323 #define CL_EXTERNAL_MEMORY_HANDLE_D3D11_TEXTURE_KHR         0x2063
1324 #define CL_EXTERNAL_MEMORY_HANDLE_D3D11_TEXTURE_KMT_KHR     0x2064
1325 #define CL_EXTERNAL_MEMORY_HANDLE_D3D12_HEAP_KHR            0x2065
1326 #define CL_EXTERNAL_MEMORY_HANDLE_D3D12_RESOURCE_KHR        0x2066
1327 
1328 /***************************************************************
1329 * cl_khr_external_memory_opaque_fd
1330 ***************************************************************/
1331 #define cl_khr_external_memory_opaque_fd 1
1332 
1333 /* cl_external_memory_handle_type_khr */
1334 #define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_FD_KHR             0x2060
1335 
1336 /***************************************************************
1337 * cl_khr_external_memory_win32
1338 ***************************************************************/
1339 #define cl_khr_external_memory_win32 1
1340 
1341 /* cl_external_memory_handle_type_khr */
1342 #define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KHR          0x2061
1343 #define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KMT_KHR      0x2062
1344 
1345 /***************************************************************
1346 * cl_khr_external_semaphore
1347 ***************************************************************/
1348 #define cl_khr_external_semaphore 1
1349 
1350 typedef struct _cl_semaphore_khr * cl_semaphore_khr;
1351 typedef cl_uint             cl_external_semaphore_handle_type_khr;
1352 
1353 /* cl_platform_info */
1354 #define CL_PLATFORM_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR       0x2037
1355 #define CL_PLATFORM_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR       0x2038
1356 
1357 /* cl_device_info */
1358 #define CL_DEVICE_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR         0x204D
1359 #define CL_DEVICE_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR         0x204E
1360 
1361 /* cl_semaphore_properties_khr */
1362 #define CL_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR                0x203F
1363 #define CL_SEMAPHORE_EXPORT_HANDLE_TYPES_LIST_END_KHR       0
1364 
1365 
1366 typedef cl_int (CL_API_CALL *
1367 clGetSemaphoreHandleForTypeKHR_fn)(
1368     cl_semaphore_khr sema_object,
1369     cl_device_id device,
1370     cl_external_semaphore_handle_type_khr handle_type,
1371     size_t handle_size,
1372     void* handle_ptr,
1373     size_t* handle_size_ret) CL_API_SUFFIX__VERSION_1_2;
1374 
1375 extern CL_API_ENTRY cl_int CL_API_CALL
1376 clGetSemaphoreHandleForTypeKHR(
1377     cl_semaphore_khr sema_object,
1378     cl_device_id device,
1379     cl_external_semaphore_handle_type_khr handle_type,
1380     size_t handle_size,
1381     void* handle_ptr,
1382     size_t* handle_size_ret) CL_API_SUFFIX__VERSION_1_2;
1383 
1384 /***************************************************************
1385 * cl_khr_external_semaphore_dx_fence
1386 ***************************************************************/
1387 #define cl_khr_external_semaphore_dx_fence 1
1388 
1389 /* cl_external_semaphore_handle_type_khr */
1390 #define CL_SEMAPHORE_HANDLE_D3D12_FENCE_KHR                 0x2059
1391 
1392 /***************************************************************
1393 * cl_khr_external_semaphore_opaque_fd
1394 ***************************************************************/
1395 #define cl_khr_external_semaphore_opaque_fd 1
1396 
1397 /* cl_external_semaphore_handle_type_khr */
1398 #define CL_SEMAPHORE_HANDLE_OPAQUE_FD_KHR                   0x2055
1399 
1400 /***************************************************************
1401 * cl_khr_external_semaphore_sync_fd
1402 ***************************************************************/
1403 #define cl_khr_external_semaphore_sync_fd 1
1404 
1405 /* cl_external_semaphore_handle_type_khr */
1406 #define CL_SEMAPHORE_HANDLE_SYNC_FD_KHR                     0x2058
1407 
1408 /***************************************************************
1409 * cl_khr_external_semaphore_win32
1410 ***************************************************************/
1411 #define cl_khr_external_semaphore_win32 1
1412 
1413 /* cl_external_semaphore_handle_type_khr */
1414 #define CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KHR                0x2056
1415 #define CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KMT_KHR            0x2057
1416 
1417 /***************************************************************
1418 * cl_khr_semaphore
1419 ***************************************************************/
1420 #define cl_khr_semaphore 1
1421 
1422 /* type cl_semaphore_khr */
1423 typedef cl_properties       cl_semaphore_properties_khr;
1424 typedef cl_uint             cl_semaphore_info_khr;
1425 typedef cl_uint             cl_semaphore_type_khr;
1426 typedef cl_ulong            cl_semaphore_payload_khr;
1427 
1428 /* cl_semaphore_type */
1429 #define CL_SEMAPHORE_TYPE_BINARY_KHR                        1
1430 
1431 /* cl_platform_info */
1432 #define CL_PLATFORM_SEMAPHORE_TYPES_KHR                     0x2036
1433 
1434 /* cl_device_info */
1435 #define CL_DEVICE_SEMAPHORE_TYPES_KHR                       0x204C
1436 
1437 /* cl_semaphore_info_khr */
1438 #define CL_SEMAPHORE_CONTEXT_KHR                            0x2039
1439 #define CL_SEMAPHORE_REFERENCE_COUNT_KHR                    0x203A
1440 #define CL_SEMAPHORE_PROPERTIES_KHR                         0x203B
1441 #define CL_SEMAPHORE_PAYLOAD_KHR                            0x203C
1442 
1443 /* cl_semaphore_info_khr or cl_semaphore_properties_khr */
1444 #define CL_SEMAPHORE_TYPE_KHR                               0x203D
1445 /* enum CL_DEVICE_HANDLE_LIST_KHR */
1446 /* enum CL_DEVICE_HANDLE_LIST_END_KHR */
1447 
1448 /* cl_command_type */
1449 #define CL_COMMAND_SEMAPHORE_WAIT_KHR                       0x2042
1450 #define CL_COMMAND_SEMAPHORE_SIGNAL_KHR                     0x2043
1451 
1452 /* Error codes */
1453 #define CL_INVALID_SEMAPHORE_KHR                            -1142
1454 
1455 
1456 typedef cl_semaphore_khr (CL_API_CALL *
1457 clCreateSemaphoreWithPropertiesKHR_fn)(
1458     cl_context context,
1459     const cl_semaphore_properties_khr* sema_props,
1460     cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2;
1461 
1462 typedef cl_int (CL_API_CALL *
1463 clEnqueueWaitSemaphoresKHR_fn)(
1464     cl_command_queue command_queue,
1465     cl_uint num_sema_objects,
1466     const cl_semaphore_khr* sema_objects,
1467     const cl_semaphore_payload_khr* sema_payload_list,
1468     cl_uint num_events_in_wait_list,
1469     const cl_event* event_wait_list,
1470     cl_event* event) CL_API_SUFFIX__VERSION_1_2;
1471 
1472 typedef cl_int (CL_API_CALL *
1473 clEnqueueSignalSemaphoresKHR_fn)(
1474     cl_command_queue command_queue,
1475     cl_uint num_sema_objects,
1476     const cl_semaphore_khr* sema_objects,
1477     const cl_semaphore_payload_khr* sema_payload_list,
1478     cl_uint num_events_in_wait_list,
1479     const cl_event* event_wait_list,
1480     cl_event* event) CL_API_SUFFIX__VERSION_1_2;
1481 
1482 typedef cl_int (CL_API_CALL *
1483 clGetSemaphoreInfoKHR_fn)(
1484     cl_semaphore_khr sema_object,
1485     cl_semaphore_info_khr param_name,
1486     size_t param_value_size,
1487     void* param_value,
1488     size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
1489 
1490 typedef cl_int (CL_API_CALL *
1491 clReleaseSemaphoreKHR_fn)(
1492     cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2;
1493 
1494 typedef cl_int (CL_API_CALL *
1495 clRetainSemaphoreKHR_fn)(
1496     cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2;
1497 
1498 extern CL_API_ENTRY cl_semaphore_khr CL_API_CALL
1499 clCreateSemaphoreWithPropertiesKHR(
1500     cl_context context,
1501     const cl_semaphore_properties_khr* sema_props,
1502     cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2;
1503 
1504 extern CL_API_ENTRY cl_int CL_API_CALL
1505 clEnqueueWaitSemaphoresKHR(
1506     cl_command_queue command_queue,
1507     cl_uint num_sema_objects,
1508     const cl_semaphore_khr* sema_objects,
1509     const cl_semaphore_payload_khr* sema_payload_list,
1510     cl_uint num_events_in_wait_list,
1511     const cl_event* event_wait_list,
1512     cl_event* event) CL_API_SUFFIX__VERSION_1_2;
1513 
1514 extern CL_API_ENTRY cl_int CL_API_CALL
1515 clEnqueueSignalSemaphoresKHR(
1516     cl_command_queue command_queue,
1517     cl_uint num_sema_objects,
1518     const cl_semaphore_khr* sema_objects,
1519     const cl_semaphore_payload_khr* sema_payload_list,
1520     cl_uint num_events_in_wait_list,
1521     const cl_event* event_wait_list,
1522     cl_event* event) CL_API_SUFFIX__VERSION_1_2;
1523 
1524 extern CL_API_ENTRY cl_int CL_API_CALL
1525 clGetSemaphoreInfoKHR(
1526     cl_semaphore_khr sema_object,
1527     cl_semaphore_info_khr param_name,
1528     size_t param_value_size,
1529     void* param_value,
1530     size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
1531 
1532 extern CL_API_ENTRY cl_int CL_API_CALL
1533 clReleaseSemaphoreKHR(
1534     cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2;
1535 
1536 extern CL_API_ENTRY cl_int CL_API_CALL
1537 clRetainSemaphoreKHR(
1538     cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2;
1539 
1540 /**********************************
1541  * cl_arm_import_memory extension *
1542  **********************************/
1543 #define cl_arm_import_memory 1
1544 
1545 typedef intptr_t cl_import_properties_arm;
1546 
1547 /* Default and valid proporties name for cl_arm_import_memory */
1548 #define CL_IMPORT_TYPE_ARM                        0x40B2
1549 
1550 /* Host process memory type default value for CL_IMPORT_TYPE_ARM property */
1551 #define CL_IMPORT_TYPE_HOST_ARM                   0x40B3
1552 
1553 /* DMA BUF memory type value for CL_IMPORT_TYPE_ARM property */
1554 #define CL_IMPORT_TYPE_DMA_BUF_ARM                0x40B4
1555 
1556 /* Protected memory property */
1557 #define CL_IMPORT_TYPE_PROTECTED_ARM              0x40B5
1558 
1559 /* Android hardware buffer type value for CL_IMPORT_TYPE_ARM property */
1560 #define CL_IMPORT_TYPE_ANDROID_HARDWARE_BUFFER_ARM 0x41E2
1561 
1562 /* Data consistency with host property */
1563 #define CL_IMPORT_DMA_BUF_DATA_CONSISTENCY_WITH_HOST_ARM 0x41E3
1564 
1565 /* Index of plane in a multiplanar hardware buffer */
1566 #define CL_IMPORT_ANDROID_HARDWARE_BUFFER_PLANE_INDEX_ARM 0x41EF
1567 
1568 /* Index of layer in a multilayer hardware buffer */
1569 #define CL_IMPORT_ANDROID_HARDWARE_BUFFER_LAYER_INDEX_ARM 0x41F0
1570 
1571 /* Import memory size value to indicate a size for the whole buffer */
1572 #define CL_IMPORT_MEMORY_WHOLE_ALLOCATION_ARM SIZE_MAX
1573 
1574 /* This extension adds a new function that allows for direct memory import into
1575  * OpenCL via the clImportMemoryARM function.
1576  *
1577  * Memory imported through this interface will be mapped into the device's page
1578  * tables directly, providing zero copy access. It will never fall back to copy
1579  * operations and aliased buffers.
1580  *
1581  * Types of memory supported for import are specified as additional extension
1582  * strings.
1583  *
1584  * This extension produces cl_mem allocations which are compatible with all other
1585  * users of cl_mem in the standard API.
1586  *
1587  * This extension maps pages with the same properties as the normal buffer creation
1588  * function clCreateBuffer.
1589  */
1590 extern CL_API_ENTRY cl_mem CL_API_CALL
1591 clImportMemoryARM( cl_context context,
1592                    cl_mem_flags flags,
1593                    const cl_import_properties_arm *properties,
1594                    void *memory,
1595                    size_t size,
1596                    cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0;
1597 
1598 
1599 /******************************************
1600  * cl_arm_shared_virtual_memory extension *
1601  ******************************************/
1602 #define cl_arm_shared_virtual_memory 1
1603 
1604 /* Used by clGetDeviceInfo */
1605 #define CL_DEVICE_SVM_CAPABILITIES_ARM                  0x40B6
1606 
1607 /* Used by clGetMemObjectInfo */
1608 #define CL_MEM_USES_SVM_POINTER_ARM                     0x40B7
1609 
1610 /* Used by clSetKernelExecInfoARM: */
1611 #define CL_KERNEL_EXEC_INFO_SVM_PTRS_ARM                0x40B8
1612 #define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM_ARM   0x40B9
1613 
1614 /* To be used by clGetEventInfo: */
1615 #define CL_COMMAND_SVM_FREE_ARM                         0x40BA
1616 #define CL_COMMAND_SVM_MEMCPY_ARM                       0x40BB
1617 #define CL_COMMAND_SVM_MEMFILL_ARM                      0x40BC
1618 #define CL_COMMAND_SVM_MAP_ARM                          0x40BD
1619 #define CL_COMMAND_SVM_UNMAP_ARM                        0x40BE
1620 
1621 /* Flag values returned by clGetDeviceInfo with CL_DEVICE_SVM_CAPABILITIES_ARM as the param_name. */
1622 #define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER_ARM           (1 << 0)
1623 #define CL_DEVICE_SVM_FINE_GRAIN_BUFFER_ARM             (1 << 1)
1624 #define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM_ARM             (1 << 2)
1625 #define CL_DEVICE_SVM_ATOMICS_ARM                       (1 << 3)
1626 
1627 /* Flag values used by clSVMAllocARM: */
1628 #define CL_MEM_SVM_FINE_GRAIN_BUFFER_ARM                (1 << 10)
1629 #define CL_MEM_SVM_ATOMICS_ARM                          (1 << 11)
1630 
1631 typedef cl_bitfield cl_svm_mem_flags_arm;
1632 typedef cl_uint     cl_kernel_exec_info_arm;
1633 typedef cl_bitfield cl_device_svm_capabilities_arm;
1634 
1635 extern CL_API_ENTRY void * CL_API_CALL
1636 clSVMAllocARM(cl_context       context,
1637               cl_svm_mem_flags_arm flags,
1638               size_t           size,
1639               cl_uint          alignment) CL_API_SUFFIX__VERSION_1_2;
1640 
1641 extern CL_API_ENTRY void CL_API_CALL
1642 clSVMFreeARM(cl_context        context,
1643              void *            svm_pointer) CL_API_SUFFIX__VERSION_1_2;
1644 
1645 extern CL_API_ENTRY cl_int CL_API_CALL
1646 clEnqueueSVMFreeARM(cl_command_queue  command_queue,
1647                     cl_uint           num_svm_pointers,
1648                     void *            svm_pointers[],
1649                     void (CL_CALLBACK * pfn_free_func)(cl_command_queue queue,
1650                                                        cl_uint          num_svm_pointers,
1651                                                        void *           svm_pointers[],
1652                                                        void *           user_data),
1653                     void *            user_data,
1654                     cl_uint           num_events_in_wait_list,
1655                     const cl_event *  event_wait_list,
1656                     cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
1657 
1658 extern CL_API_ENTRY cl_int CL_API_CALL
1659 clEnqueueSVMMemcpyARM(cl_command_queue  command_queue,
1660                       cl_bool           blocking_copy,
1661                       void *            dst_ptr,
1662                       const void *      src_ptr,
1663                       size_t            size,
1664                       cl_uint           num_events_in_wait_list,
1665                       const cl_event *  event_wait_list,
1666                       cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
1667 
1668 extern CL_API_ENTRY cl_int CL_API_CALL
1669 clEnqueueSVMMemFillARM(cl_command_queue  command_queue,
1670                        void *            svm_ptr,
1671                        const void *      pattern,
1672                        size_t            pattern_size,
1673                        size_t            size,
1674                        cl_uint           num_events_in_wait_list,
1675                        const cl_event *  event_wait_list,
1676                        cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
1677 
1678 extern CL_API_ENTRY cl_int CL_API_CALL
1679 clEnqueueSVMMapARM(cl_command_queue  command_queue,
1680                    cl_bool           blocking_map,
1681                    cl_map_flags      flags,
1682                    void *            svm_ptr,
1683                    size_t            size,
1684                    cl_uint           num_events_in_wait_list,
1685                    const cl_event *  event_wait_list,
1686                    cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
1687 
1688 extern CL_API_ENTRY cl_int CL_API_CALL
1689 clEnqueueSVMUnmapARM(cl_command_queue  command_queue,
1690                      void *            svm_ptr,
1691                      cl_uint           num_events_in_wait_list,
1692                      const cl_event *  event_wait_list,
1693                      cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
1694 
1695 extern CL_API_ENTRY cl_int CL_API_CALL
1696 clSetKernelArgSVMPointerARM(cl_kernel    kernel,
1697                             cl_uint      arg_index,
1698                             const void * arg_value) CL_API_SUFFIX__VERSION_1_2;
1699 
1700 extern CL_API_ENTRY cl_int CL_API_CALL
1701 clSetKernelExecInfoARM(cl_kernel            kernel,
1702                        cl_kernel_exec_info_arm  param_name,
1703                        size_t               param_value_size,
1704                        const void *         param_value) CL_API_SUFFIX__VERSION_1_2;
1705 
1706 /********************************
1707  * cl_arm_get_core_id extension *
1708  ********************************/
1709 
1710 #ifdef CL_VERSION_1_2
1711 
1712 #define cl_arm_get_core_id 1
1713 
1714 /* Device info property for bitfield of cores present */
1715 #define CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM      0x40BF
1716 
1717 #endif  /* CL_VERSION_1_2 */
1718 
1719 /*********************************
1720 * cl_arm_job_slot_selection
1721 *********************************/
1722 
1723 #define cl_arm_job_slot_selection 1
1724 
1725 /* cl_device_info */
1726 #define CL_DEVICE_JOB_SLOTS_ARM                   0x41E0
1727 
1728 /* cl_command_queue_properties */
1729 #define CL_QUEUE_JOB_SLOT_ARM                     0x41E1
1730 
1731 /*********************************
1732 * cl_arm_scheduling_controls
1733 *********************************/
1734 
1735 #define cl_arm_scheduling_controls 1
1736 
1737 typedef cl_bitfield cl_device_scheduling_controls_capabilities_arm;
1738 
1739 /* cl_device_info */
1740 #define CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM          0x41E4
1741 
1742 #define CL_DEVICE_SCHEDULING_KERNEL_BATCHING_ARM               (1 << 0)
1743 #define CL_DEVICE_SCHEDULING_WORKGROUP_BATCH_SIZE_ARM          (1 << 1)
1744 #define CL_DEVICE_SCHEDULING_WORKGROUP_BATCH_SIZE_MODIFIER_ARM (1 << 2)
1745 #define CL_DEVICE_SCHEDULING_DEFERRED_FLUSH_ARM                (1 << 3)
1746 #define CL_DEVICE_SCHEDULING_REGISTER_ALLOCATION_ARM           (1 << 4)
1747 #define CL_DEVICE_SCHEDULING_WARP_THROTTLING_ARM               (1 << 5)
1748 #define CL_DEVICE_SCHEDULING_COMPUTE_UNIT_BATCH_QUEUE_SIZE_ARM (1 << 6)
1749 
1750 #define CL_DEVICE_SUPPORTED_REGISTER_ALLOCATIONS_ARM            0x41EB
1751 #define CL_DEVICE_MAX_WARP_COUNT_ARM                            0x41EA
1752 
1753 /* cl_kernel_info */
1754 #define CL_KERNEL_MAX_WARP_COUNT_ARM                            0x41E9
1755 
1756 /* cl_kernel_exec_info */
1757 #define CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM            0x41E5
1758 #define CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM   0x41E6
1759 #define CL_KERNEL_EXEC_INFO_WARP_COUNT_LIMIT_ARM                0x41E8
1760 #define CL_KERNEL_EXEC_INFO_COMPUTE_UNIT_MAX_QUEUED_BATCHES_ARM 0x41F1
1761 
1762 /* cl_queue_properties */
1763 #define CL_QUEUE_KERNEL_BATCHING_ARM                            0x41E7
1764 #define CL_QUEUE_DEFERRED_FLUSH_ARM                             0x41EC
1765 
1766 /**************************************
1767 * cl_arm_controlled_kernel_termination
1768 ***************************************/
1769 
1770 #define cl_arm_controlled_kernel_termination 1
1771 
1772 /* Error code to indicate kernel terminated with failure */
1773 #define CL_COMMAND_TERMINATED_ITSELF_WITH_FAILURE_ARM -1108
1774 
1775 /* cl_device_info */
1776 #define CL_DEVICE_CONTROLLED_TERMINATION_CAPABILITIES_ARM 0x41EE
1777 
1778 /* Bit fields for controlled termination feature query */
1779 typedef cl_bitfield cl_device_controlled_termination_capabilities_arm;
1780 
1781 #define CL_DEVICE_CONTROLLED_TERMINATION_SUCCESS_ARM (1 << 0)
1782 #define CL_DEVICE_CONTROLLED_TERMINATION_FAILURE_ARM (1 << 1)
1783 #define CL_DEVICE_CONTROLLED_TERMINATION_QUERY_ARM (1 << 2)
1784 
1785 /* cl_event_info */
1786 #define CL_EVENT_COMMAND_TERMINATION_REASON_ARM 0x41ED
1787 
1788 /* Values returned for event termination reason query */
1789 typedef cl_uint cl_command_termination_reason_arm;
1790 
1791 #define CL_COMMAND_TERMINATION_COMPLETION_ARM  0
1792 #define CL_COMMAND_TERMINATION_CONTROLLED_SUCCESS_ARM 1
1793 #define CL_COMMAND_TERMINATION_CONTROLLED_FAILURE_ARM 2
1794 #define CL_COMMAND_TERMINATION_ERROR_ARM 3
1795 
1796 /*************************************
1797 * cl_arm_protected_memory_allocation *
1798 *************************************/
1799 
1800 #define cl_arm_protected_memory_allocation 1
1801 
1802 #define CL_MEM_PROTECTED_ALLOC_ARM (1ULL << 36)
1803 
1804 /******************************************
1805 * cl_intel_exec_by_local_thread extension *
1806 ******************************************/
1807 
1808 #define cl_intel_exec_by_local_thread 1
1809 
1810 #define CL_QUEUE_THREAD_LOCAL_EXEC_ENABLE_INTEL      (((cl_bitfield)1) << 31)
1811 
1812 /***************************************************************
1813 * cl_intel_device_attribute_query
1814 ***************************************************************/
1815 
1816 #define cl_intel_device_attribute_query 1
1817 
1818 typedef cl_bitfield         cl_device_feature_capabilities_intel;
1819 
1820 /* cl_device_feature_capabilities_intel */
1821 #define CL_DEVICE_FEATURE_FLAG_DP4A_INTEL                   (1 << 0)
1822 #define CL_DEVICE_FEATURE_FLAG_DPAS_INTEL                   (1 << 1)
1823 
1824 /* cl_device_info */
1825 #define CL_DEVICE_IP_VERSION_INTEL                          0x4250
1826 #define CL_DEVICE_ID_INTEL                                  0x4251
1827 #define CL_DEVICE_NUM_SLICES_INTEL                          0x4252
1828 #define CL_DEVICE_NUM_SUB_SLICES_PER_SLICE_INTEL            0x4253
1829 #define CL_DEVICE_NUM_EUS_PER_SUB_SLICE_INTEL               0x4254
1830 #define CL_DEVICE_NUM_THREADS_PER_EU_INTEL                  0x4255
1831 #define CL_DEVICE_FEATURE_CAPABILITIES_INTEL                0x4256
1832 
1833 /***********************************************
1834 * cl_intel_device_partition_by_names extension *
1835 ************************************************/
1836 
1837 #define cl_intel_device_partition_by_names 1
1838 
1839 #define CL_DEVICE_PARTITION_BY_NAMES_INTEL          0x4052
1840 #define CL_PARTITION_BY_NAMES_LIST_END_INTEL        -1
1841 
1842 /************************************************
1843 * cl_intel_accelerator extension                *
1844 * cl_intel_motion_estimation extension          *
1845 * cl_intel_advanced_motion_estimation extension *
1846 *************************************************/
1847 
1848 #define cl_intel_accelerator 1
1849 #define cl_intel_motion_estimation 1
1850 #define cl_intel_advanced_motion_estimation 1
1851 
1852 typedef struct _cl_accelerator_intel* cl_accelerator_intel;
1853 typedef cl_uint cl_accelerator_type_intel;
1854 typedef cl_uint cl_accelerator_info_intel;
1855 
1856 typedef struct _cl_motion_estimation_desc_intel {
1857     cl_uint mb_block_type;
1858     cl_uint subpixel_mode;
1859     cl_uint sad_adjust_mode;
1860     cl_uint search_path_type;
1861 } cl_motion_estimation_desc_intel;
1862 
1863 /* error codes */
1864 #define CL_INVALID_ACCELERATOR_INTEL                              -1094
1865 #define CL_INVALID_ACCELERATOR_TYPE_INTEL                         -1095
1866 #define CL_INVALID_ACCELERATOR_DESCRIPTOR_INTEL                   -1096
1867 #define CL_ACCELERATOR_TYPE_NOT_SUPPORTED_INTEL                   -1097
1868 
1869 /* cl_accelerator_type_intel */
1870 #define CL_ACCELERATOR_TYPE_MOTION_ESTIMATION_INTEL               0x0
1871 
1872 /* cl_accelerator_info_intel */
1873 #define CL_ACCELERATOR_DESCRIPTOR_INTEL                           0x4090
1874 #define CL_ACCELERATOR_REFERENCE_COUNT_INTEL                      0x4091
1875 #define CL_ACCELERATOR_CONTEXT_INTEL                              0x4092
1876 #define CL_ACCELERATOR_TYPE_INTEL                                 0x4093
1877 
1878 /* cl_motion_detect_desc_intel flags */
1879 #define CL_ME_MB_TYPE_16x16_INTEL                                 0x0
1880 #define CL_ME_MB_TYPE_8x8_INTEL                                   0x1
1881 #define CL_ME_MB_TYPE_4x4_INTEL                                   0x2
1882 
1883 #define CL_ME_SUBPIXEL_MODE_INTEGER_INTEL                         0x0
1884 #define CL_ME_SUBPIXEL_MODE_HPEL_INTEL                            0x1
1885 #define CL_ME_SUBPIXEL_MODE_QPEL_INTEL                            0x2
1886 
1887 #define CL_ME_SAD_ADJUST_MODE_NONE_INTEL                          0x0
1888 #define CL_ME_SAD_ADJUST_MODE_HAAR_INTEL                          0x1
1889 
1890 #define CL_ME_SEARCH_PATH_RADIUS_2_2_INTEL                        0x0
1891 #define CL_ME_SEARCH_PATH_RADIUS_4_4_INTEL                        0x1
1892 #define CL_ME_SEARCH_PATH_RADIUS_16_12_INTEL                      0x5
1893 
1894 #define CL_ME_SKIP_BLOCK_TYPE_16x16_INTEL                         0x0
1895 #define CL_ME_CHROMA_INTRA_PREDICT_ENABLED_INTEL                  0x1
1896 #define CL_ME_LUMA_INTRA_PREDICT_ENABLED_INTEL                    0x2
1897 #define CL_ME_SKIP_BLOCK_TYPE_8x8_INTEL                           0x4
1898 
1899 #define CL_ME_FORWARD_INPUT_MODE_INTEL                            0x1
1900 #define CL_ME_BACKWARD_INPUT_MODE_INTEL                           0x2
1901 #define CL_ME_BIDIRECTION_INPUT_MODE_INTEL                        0x3
1902 
1903 #define CL_ME_BIDIR_WEIGHT_QUARTER_INTEL                          16
1904 #define CL_ME_BIDIR_WEIGHT_THIRD_INTEL                            21
1905 #define CL_ME_BIDIR_WEIGHT_HALF_INTEL                             32
1906 #define CL_ME_BIDIR_WEIGHT_TWO_THIRD_INTEL                        43
1907 #define CL_ME_BIDIR_WEIGHT_THREE_QUARTER_INTEL                    48
1908 
1909 #define CL_ME_COST_PENALTY_NONE_INTEL                             0x0
1910 #define CL_ME_COST_PENALTY_LOW_INTEL                              0x1
1911 #define CL_ME_COST_PENALTY_NORMAL_INTEL                           0x2
1912 #define CL_ME_COST_PENALTY_HIGH_INTEL                             0x3
1913 
1914 #define CL_ME_COST_PRECISION_QPEL_INTEL                           0x0
1915 #define CL_ME_COST_PRECISION_HPEL_INTEL                           0x1
1916 #define CL_ME_COST_PRECISION_PEL_INTEL                            0x2
1917 #define CL_ME_COST_PRECISION_DPEL_INTEL                           0x3
1918 
1919 #define CL_ME_LUMA_PREDICTOR_MODE_VERTICAL_INTEL                  0x0
1920 #define CL_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_INTEL                0x1
1921 #define CL_ME_LUMA_PREDICTOR_MODE_DC_INTEL                        0x2
1922 #define CL_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_LEFT_INTEL        0x3
1923 
1924 #define CL_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_RIGHT_INTEL       0x4
1925 #define CL_ME_LUMA_PREDICTOR_MODE_PLANE_INTEL                     0x4
1926 #define CL_ME_LUMA_PREDICTOR_MODE_VERTICAL_RIGHT_INTEL            0x5
1927 #define CL_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_DOWN_INTEL           0x6
1928 #define CL_ME_LUMA_PREDICTOR_MODE_VERTICAL_LEFT_INTEL             0x7
1929 #define CL_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_UP_INTEL             0x8
1930 
1931 #define CL_ME_CHROMA_PREDICTOR_MODE_DC_INTEL                      0x0
1932 #define CL_ME_CHROMA_PREDICTOR_MODE_HORIZONTAL_INTEL              0x1
1933 #define CL_ME_CHROMA_PREDICTOR_MODE_VERTICAL_INTEL                0x2
1934 #define CL_ME_CHROMA_PREDICTOR_MODE_PLANE_INTEL                   0x3
1935 
1936 /* cl_device_info */
1937 #define CL_DEVICE_ME_VERSION_INTEL                                0x407E
1938 
1939 #define CL_ME_VERSION_LEGACY_INTEL                                0x0
1940 #define CL_ME_VERSION_ADVANCED_VER_1_INTEL                        0x1
1941 #define CL_ME_VERSION_ADVANCED_VER_2_INTEL                        0x2
1942 
1943 extern CL_API_ENTRY cl_accelerator_intel CL_API_CALL
1944 clCreateAcceleratorINTEL(
1945     cl_context                   context,
1946     cl_accelerator_type_intel    accelerator_type,
1947     size_t                       descriptor_size,
1948     const void*                  descriptor,
1949     cl_int*                      errcode_ret) CL_API_SUFFIX__VERSION_1_2;
1950 
1951 typedef cl_accelerator_intel (CL_API_CALL *clCreateAcceleratorINTEL_fn)(
1952     cl_context                   context,
1953     cl_accelerator_type_intel    accelerator_type,
1954     size_t                       descriptor_size,
1955     const void*                  descriptor,
1956     cl_int*                      errcode_ret) CL_API_SUFFIX__VERSION_1_2;
1957 
1958 extern CL_API_ENTRY cl_int CL_API_CALL
1959 clGetAcceleratorInfoINTEL(
1960     cl_accelerator_intel         accelerator,
1961     cl_accelerator_info_intel    param_name,
1962     size_t                       param_value_size,
1963     void*                        param_value,
1964     size_t*                      param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
1965 
1966 typedef cl_int (CL_API_CALL *clGetAcceleratorInfoINTEL_fn)(
1967     cl_accelerator_intel         accelerator,
1968     cl_accelerator_info_intel    param_name,
1969     size_t                       param_value_size,
1970     void*                        param_value,
1971     size_t*                      param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
1972 
1973 extern CL_API_ENTRY cl_int CL_API_CALL
1974 clRetainAcceleratorINTEL(
1975     cl_accelerator_intel         accelerator) CL_API_SUFFIX__VERSION_1_2;
1976 
1977 typedef cl_int (CL_API_CALL *clRetainAcceleratorINTEL_fn)(
1978     cl_accelerator_intel         accelerator) CL_API_SUFFIX__VERSION_1_2;
1979 
1980 extern CL_API_ENTRY cl_int CL_API_CALL
1981 clReleaseAcceleratorINTEL(
1982     cl_accelerator_intel         accelerator) CL_API_SUFFIX__VERSION_1_2;
1983 
1984 typedef cl_int (CL_API_CALL *clReleaseAcceleratorINTEL_fn)(
1985     cl_accelerator_intel         accelerator) CL_API_SUFFIX__VERSION_1_2;
1986 
1987 /******************************************
1988 * cl_intel_simultaneous_sharing extension *
1989 *******************************************/
1990 
1991 #define cl_intel_simultaneous_sharing 1
1992 
1993 #define CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL            0x4104
1994 #define CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL        0x4105
1995 
1996 /***********************************
1997 * cl_intel_egl_image_yuv extension *
1998 ************************************/
1999 
2000 #define cl_intel_egl_image_yuv 1
2001 
2002 #define CL_EGL_YUV_PLANE_INTEL                           0x4107
2003 
2004 /********************************
2005 * cl_intel_packed_yuv extension *
2006 *********************************/
2007 
2008 #define cl_intel_packed_yuv 1
2009 
2010 #define CL_YUYV_INTEL                                    0x4076
2011 #define CL_UYVY_INTEL                                    0x4077
2012 #define CL_YVYU_INTEL                                    0x4078
2013 #define CL_VYUY_INTEL                                    0x4079
2014 
2015 /********************************************
2016 * cl_intel_required_subgroup_size extension *
2017 *********************************************/
2018 
2019 #define cl_intel_required_subgroup_size 1
2020 
2021 #define CL_DEVICE_SUB_GROUP_SIZES_INTEL                  0x4108
2022 #define CL_KERNEL_SPILL_MEM_SIZE_INTEL                   0x4109
2023 #define CL_KERNEL_COMPILE_SUB_GROUP_SIZE_INTEL           0x410A
2024 
2025 /****************************************
2026 * cl_intel_driver_diagnostics extension *
2027 *****************************************/
2028 
2029 #define cl_intel_driver_diagnostics 1
2030 
2031 typedef cl_uint cl_diagnostics_verbose_level;
2032 
2033 #define CL_CONTEXT_SHOW_DIAGNOSTICS_INTEL                0x4106
2034 
2035 #define CL_CONTEXT_DIAGNOSTICS_LEVEL_ALL_INTEL           ( 0xff )
2036 #define CL_CONTEXT_DIAGNOSTICS_LEVEL_GOOD_INTEL          ( 1 )
2037 #define CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL           ( 1 << 1 )
2038 #define CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL       ( 1 << 2 )
2039 
2040 /********************************
2041 * cl_intel_planar_yuv extension *
2042 *********************************/
2043 
2044 #define CL_NV12_INTEL                                       0x410E
2045 
2046 #define CL_MEM_NO_ACCESS_INTEL                              ( 1 << 24 )
2047 #define CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL              ( 1 << 25 )
2048 
2049 #define CL_DEVICE_PLANAR_YUV_MAX_WIDTH_INTEL                0x417E
2050 #define CL_DEVICE_PLANAR_YUV_MAX_HEIGHT_INTEL               0x417F
2051 
2052 /*******************************************************
2053 * cl_intel_device_side_avc_motion_estimation extension *
2054 ********************************************************/
2055 
2056 #define CL_DEVICE_AVC_ME_VERSION_INTEL                      0x410B
2057 #define CL_DEVICE_AVC_ME_SUPPORTS_TEXTURE_SAMPLER_USE_INTEL 0x410C
2058 #define CL_DEVICE_AVC_ME_SUPPORTS_PREEMPTION_INTEL          0x410D
2059 
2060 #define CL_AVC_ME_VERSION_0_INTEL                           0x0   /* No support. */
2061 #define CL_AVC_ME_VERSION_1_INTEL                           0x1   /* First supported version. */
2062 
2063 #define CL_AVC_ME_MAJOR_16x16_INTEL                         0x0
2064 #define CL_AVC_ME_MAJOR_16x8_INTEL                          0x1
2065 #define CL_AVC_ME_MAJOR_8x16_INTEL                          0x2
2066 #define CL_AVC_ME_MAJOR_8x8_INTEL                           0x3
2067 
2068 #define CL_AVC_ME_MINOR_8x8_INTEL                           0x0
2069 #define CL_AVC_ME_MINOR_8x4_INTEL                           0x1
2070 #define CL_AVC_ME_MINOR_4x8_INTEL                           0x2
2071 #define CL_AVC_ME_MINOR_4x4_INTEL                           0x3
2072 
2073 #define CL_AVC_ME_MAJOR_FORWARD_INTEL                       0x0
2074 #define CL_AVC_ME_MAJOR_BACKWARD_INTEL                      0x1
2075 #define CL_AVC_ME_MAJOR_BIDIRECTIONAL_INTEL                 0x2
2076 
2077 #define CL_AVC_ME_PARTITION_MASK_ALL_INTEL                  0x0
2078 #define CL_AVC_ME_PARTITION_MASK_16x16_INTEL                0x7E
2079 #define CL_AVC_ME_PARTITION_MASK_16x8_INTEL                 0x7D
2080 #define CL_AVC_ME_PARTITION_MASK_8x16_INTEL                 0x7B
2081 #define CL_AVC_ME_PARTITION_MASK_8x8_INTEL                  0x77
2082 #define CL_AVC_ME_PARTITION_MASK_8x4_INTEL                  0x6F
2083 #define CL_AVC_ME_PARTITION_MASK_4x8_INTEL                  0x5F
2084 #define CL_AVC_ME_PARTITION_MASK_4x4_INTEL                  0x3F
2085 
2086 #define CL_AVC_ME_SEARCH_WINDOW_EXHAUSTIVE_INTEL            0x0
2087 #define CL_AVC_ME_SEARCH_WINDOW_SMALL_INTEL                 0x1
2088 #define CL_AVC_ME_SEARCH_WINDOW_TINY_INTEL                  0x2
2089 #define CL_AVC_ME_SEARCH_WINDOW_EXTRA_TINY_INTEL            0x3
2090 #define CL_AVC_ME_SEARCH_WINDOW_DIAMOND_INTEL               0x4
2091 #define CL_AVC_ME_SEARCH_WINDOW_LARGE_DIAMOND_INTEL         0x5
2092 #define CL_AVC_ME_SEARCH_WINDOW_RESERVED0_INTEL             0x6
2093 #define CL_AVC_ME_SEARCH_WINDOW_RESERVED1_INTEL             0x7
2094 #define CL_AVC_ME_SEARCH_WINDOW_CUSTOM_INTEL                0x8
2095 #define CL_AVC_ME_SEARCH_WINDOW_16x12_RADIUS_INTEL          0x9
2096 #define CL_AVC_ME_SEARCH_WINDOW_4x4_RADIUS_INTEL            0x2
2097 #define CL_AVC_ME_SEARCH_WINDOW_2x2_RADIUS_INTEL            0xa
2098 
2099 #define CL_AVC_ME_SAD_ADJUST_MODE_NONE_INTEL                0x0
2100 #define CL_AVC_ME_SAD_ADJUST_MODE_HAAR_INTEL                0x2
2101 
2102 #define CL_AVC_ME_SUBPIXEL_MODE_INTEGER_INTEL               0x0
2103 #define CL_AVC_ME_SUBPIXEL_MODE_HPEL_INTEL                  0x1
2104 #define CL_AVC_ME_SUBPIXEL_MODE_QPEL_INTEL                  0x3
2105 
2106 #define CL_AVC_ME_COST_PRECISION_QPEL_INTEL                 0x0
2107 #define CL_AVC_ME_COST_PRECISION_HPEL_INTEL                 0x1
2108 #define CL_AVC_ME_COST_PRECISION_PEL_INTEL                  0x2
2109 #define CL_AVC_ME_COST_PRECISION_DPEL_INTEL                 0x3
2110 
2111 #define CL_AVC_ME_BIDIR_WEIGHT_QUARTER_INTEL                0x10
2112 #define CL_AVC_ME_BIDIR_WEIGHT_THIRD_INTEL                  0x15
2113 #define CL_AVC_ME_BIDIR_WEIGHT_HALF_INTEL                   0x20
2114 #define CL_AVC_ME_BIDIR_WEIGHT_TWO_THIRD_INTEL              0x2B
2115 #define CL_AVC_ME_BIDIR_WEIGHT_THREE_QUARTER_INTEL          0x30
2116 
2117 #define CL_AVC_ME_BORDER_REACHED_LEFT_INTEL                 0x0
2118 #define CL_AVC_ME_BORDER_REACHED_RIGHT_INTEL                0x2
2119 #define CL_AVC_ME_BORDER_REACHED_TOP_INTEL                  0x4
2120 #define CL_AVC_ME_BORDER_REACHED_BOTTOM_INTEL               0x8
2121 
2122 #define CL_AVC_ME_SKIP_BLOCK_PARTITION_16x16_INTEL          0x0
2123 #define CL_AVC_ME_SKIP_BLOCK_PARTITION_8x8_INTEL            0x4000
2124 
2125 #define CL_AVC_ME_SKIP_BLOCK_16x16_FORWARD_ENABLE_INTEL     ( 0x1 << 24 )
2126 #define CL_AVC_ME_SKIP_BLOCK_16x16_BACKWARD_ENABLE_INTEL    ( 0x2 << 24 )
2127 #define CL_AVC_ME_SKIP_BLOCK_16x16_DUAL_ENABLE_INTEL        ( 0x3 << 24 )
2128 #define CL_AVC_ME_SKIP_BLOCK_8x8_FORWARD_ENABLE_INTEL       ( 0x55 << 24 )
2129 #define CL_AVC_ME_SKIP_BLOCK_8x8_BACKWARD_ENABLE_INTEL      ( 0xAA << 24 )
2130 #define CL_AVC_ME_SKIP_BLOCK_8x8_DUAL_ENABLE_INTEL          ( 0xFF << 24 )
2131 #define CL_AVC_ME_SKIP_BLOCK_8x8_0_FORWARD_ENABLE_INTEL     ( 0x1 << 24 )
2132 #define CL_AVC_ME_SKIP_BLOCK_8x8_0_BACKWARD_ENABLE_INTEL    ( 0x2 << 24 )
2133 #define CL_AVC_ME_SKIP_BLOCK_8x8_1_FORWARD_ENABLE_INTEL     ( 0x1 << 26 )
2134 #define CL_AVC_ME_SKIP_BLOCK_8x8_1_BACKWARD_ENABLE_INTEL    ( 0x2 << 26 )
2135 #define CL_AVC_ME_SKIP_BLOCK_8x8_2_FORWARD_ENABLE_INTEL     ( 0x1 << 28 )
2136 #define CL_AVC_ME_SKIP_BLOCK_8x8_2_BACKWARD_ENABLE_INTEL    ( 0x2 << 28 )
2137 #define CL_AVC_ME_SKIP_BLOCK_8x8_3_FORWARD_ENABLE_INTEL     ( 0x1 << 30 )
2138 #define CL_AVC_ME_SKIP_BLOCK_8x8_3_BACKWARD_ENABLE_INTEL    ( 0x2 << 30 )
2139 
2140 #define CL_AVC_ME_BLOCK_BASED_SKIP_4x4_INTEL                0x00
2141 #define CL_AVC_ME_BLOCK_BASED_SKIP_8x8_INTEL                0x80
2142 
2143 #define CL_AVC_ME_INTRA_16x16_INTEL                         0x0
2144 #define CL_AVC_ME_INTRA_8x8_INTEL                           0x1
2145 #define CL_AVC_ME_INTRA_4x4_INTEL                           0x2
2146 
2147 #define CL_AVC_ME_INTRA_LUMA_PARTITION_MASK_16x16_INTEL     0x6
2148 #define CL_AVC_ME_INTRA_LUMA_PARTITION_MASK_8x8_INTEL       0x5
2149 #define CL_AVC_ME_INTRA_LUMA_PARTITION_MASK_4x4_INTEL       0x3
2150 
2151 #define CL_AVC_ME_INTRA_NEIGHBOR_LEFT_MASK_ENABLE_INTEL         0x60
2152 #define CL_AVC_ME_INTRA_NEIGHBOR_UPPER_MASK_ENABLE_INTEL        0x10
2153 #define CL_AVC_ME_INTRA_NEIGHBOR_UPPER_RIGHT_MASK_ENABLE_INTEL  0x8
2154 #define CL_AVC_ME_INTRA_NEIGHBOR_UPPER_LEFT_MASK_ENABLE_INTEL   0x4
2155 
2156 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_INTEL            0x0
2157 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_INTEL          0x1
2158 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_DC_INTEL                  0x2
2159 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_LEFT_INTEL  0x3
2160 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_RIGHT_INTEL 0x4
2161 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_PLANE_INTEL               0x4
2162 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_RIGHT_INTEL      0x5
2163 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_DOWN_INTEL     0x6
2164 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_LEFT_INTEL       0x7
2165 #define CL_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_UP_INTEL       0x8
2166 #define CL_AVC_ME_CHROMA_PREDICTOR_MODE_DC_INTEL                0x0
2167 #define CL_AVC_ME_CHROMA_PREDICTOR_MODE_HORIZONTAL_INTEL        0x1
2168 #define CL_AVC_ME_CHROMA_PREDICTOR_MODE_VERTICAL_INTEL          0x2
2169 #define CL_AVC_ME_CHROMA_PREDICTOR_MODE_PLANE_INTEL             0x3
2170 
2171 #define CL_AVC_ME_FRAME_FORWARD_INTEL                       0x1
2172 #define CL_AVC_ME_FRAME_BACKWARD_INTEL                      0x2
2173 #define CL_AVC_ME_FRAME_DUAL_INTEL                          0x3
2174 
2175 #define CL_AVC_ME_SLICE_TYPE_PRED_INTEL                     0x0
2176 #define CL_AVC_ME_SLICE_TYPE_BPRED_INTEL                    0x1
2177 #define CL_AVC_ME_SLICE_TYPE_INTRA_INTEL                    0x2
2178 
2179 #define CL_AVC_ME_INTERLACED_SCAN_TOP_FIELD_INTEL           0x0
2180 #define CL_AVC_ME_INTERLACED_SCAN_BOTTOM_FIELD_INTEL        0x1
2181 
2182 /*******************************************
2183 * cl_intel_unified_shared_memory extension *
2184 ********************************************/
2185 #define cl_intel_unified_shared_memory 1
2186 
2187 typedef cl_bitfield         cl_device_unified_shared_memory_capabilities_intel;
2188 typedef cl_properties 		cl_mem_properties_intel;
2189 typedef cl_bitfield         cl_mem_alloc_flags_intel;
2190 typedef cl_uint             cl_mem_info_intel;
2191 typedef cl_uint             cl_unified_shared_memory_type_intel;
2192 typedef cl_uint             cl_mem_advice_intel;
2193 
2194 /* cl_device_info */
2195 #define CL_DEVICE_HOST_MEM_CAPABILITIES_INTEL               0x4190
2196 #define CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL             0x4191
2197 #define CL_DEVICE_SINGLE_DEVICE_SHARED_MEM_CAPABILITIES_INTEL 0x4192
2198 #define CL_DEVICE_CROSS_DEVICE_SHARED_MEM_CAPABILITIES_INTEL 0x4193
2199 #define CL_DEVICE_SHARED_SYSTEM_MEM_CAPABILITIES_INTEL      0x4194
2200 
2201 /* cl_device_unified_shared_memory_capabilities_intel - bitfield */
2202 #define CL_UNIFIED_SHARED_MEMORY_ACCESS_INTEL               (1 << 0)
2203 #define CL_UNIFIED_SHARED_MEMORY_ATOMIC_ACCESS_INTEL        (1 << 1)
2204 #define CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ACCESS_INTEL    (1 << 2)
2205 #define CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ATOMIC_ACCESS_INTEL (1 << 3)
2206 
2207 /* cl_mem_properties_intel */
2208 #define CL_MEM_ALLOC_FLAGS_INTEL                            0x4195
2209 
2210 /* cl_mem_alloc_flags_intel - bitfield */
2211 #define CL_MEM_ALLOC_WRITE_COMBINED_INTEL                   (1 << 0)
2212 #define CL_MEM_ALLOC_INITIAL_PLACEMENT_DEVICE_INTEL         (1 << 1)
2213 #define CL_MEM_ALLOC_INITIAL_PLACEMENT_HOST_INTEL           (1 << 2)
2214 
2215 /* cl_mem_alloc_info_intel */
2216 #define CL_MEM_ALLOC_TYPE_INTEL                             0x419A
2217 #define CL_MEM_ALLOC_BASE_PTR_INTEL                         0x419B
2218 #define CL_MEM_ALLOC_SIZE_INTEL                             0x419C
2219 #define CL_MEM_ALLOC_DEVICE_INTEL                           0x419D
2220 
2221 /* cl_unified_shared_memory_type_intel */
2222 #define CL_MEM_TYPE_UNKNOWN_INTEL                           0x4196
2223 #define CL_MEM_TYPE_HOST_INTEL                              0x4197
2224 #define CL_MEM_TYPE_DEVICE_INTEL                            0x4198
2225 #define CL_MEM_TYPE_SHARED_INTEL                            0x4199
2226 
2227 /* cl_kernel_exec_info */
2228 #define CL_KERNEL_EXEC_INFO_INDIRECT_HOST_ACCESS_INTEL      0x4200
2229 #define CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL    0x4201
2230 #define CL_KERNEL_EXEC_INFO_INDIRECT_SHARED_ACCESS_INTEL    0x4202
2231 #define CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL                  0x4203
2232 
2233 /* cl_command_type */
2234 #define CL_COMMAND_MEMFILL_INTEL                            0x4204
2235 #define CL_COMMAND_MEMCPY_INTEL                             0x4205
2236 #define CL_COMMAND_MIGRATEMEM_INTEL                         0x4206
2237 #define CL_COMMAND_MEMADVISE_INTEL                          0x4207
2238 
2239 
2240 typedef void* (CL_API_CALL *
2241 clHostMemAllocINTEL_fn)(
2242     cl_context context,
2243     const cl_mem_properties_intel* properties,
2244     size_t size,
2245     cl_uint alignment,
2246     cl_int* errcode_ret) ;
2247 
2248 typedef void* (CL_API_CALL *
2249 clDeviceMemAllocINTEL_fn)(
2250     cl_context context,
2251     cl_device_id device,
2252     const cl_mem_properties_intel* properties,
2253     size_t size,
2254     cl_uint alignment,
2255     cl_int* errcode_ret) ;
2256 
2257 typedef void* (CL_API_CALL *
2258 clSharedMemAllocINTEL_fn)(
2259     cl_context context,
2260     cl_device_id device,
2261     const cl_mem_properties_intel* properties,
2262     size_t size,
2263     cl_uint alignment,
2264     cl_int* errcode_ret) ;
2265 
2266 typedef cl_int (CL_API_CALL *
2267 clMemFreeINTEL_fn)(
2268     cl_context context,
2269     void* ptr) ;
2270 
2271 typedef cl_int (CL_API_CALL *
2272 clMemBlockingFreeINTEL_fn)(
2273     cl_context context,
2274     void* ptr) ;
2275 
2276 typedef cl_int (CL_API_CALL *
2277 clGetMemAllocInfoINTEL_fn)(
2278     cl_context context,
2279     const void* ptr,
2280     cl_mem_info_intel param_name,
2281     size_t param_value_size,
2282     void* param_value,
2283     size_t* param_value_size_ret) ;
2284 
2285 typedef cl_int (CL_API_CALL *
2286 clSetKernelArgMemPointerINTEL_fn)(
2287     cl_kernel kernel,
2288     cl_uint arg_index,
2289     const void* arg_value) ;
2290 
2291 typedef cl_int (CL_API_CALL *
2292 clEnqueueMemFillINTEL_fn)(
2293     cl_command_queue command_queue,
2294     void* dst_ptr,
2295     const void* pattern,
2296     size_t pattern_size,
2297     size_t size,
2298     cl_uint num_events_in_wait_list,
2299     const cl_event* event_wait_list,
2300     cl_event* event) ;
2301 
2302 typedef cl_int (CL_API_CALL *
2303 clEnqueueMemcpyINTEL_fn)(
2304     cl_command_queue command_queue,
2305     cl_bool blocking,
2306     void* dst_ptr,
2307     const void* src_ptr,
2308     size_t size,
2309     cl_uint num_events_in_wait_list,
2310     const cl_event* event_wait_list,
2311     cl_event* event) ;
2312 
2313 typedef cl_int (CL_API_CALL *
2314 clEnqueueMemAdviseINTEL_fn)(
2315     cl_command_queue command_queue,
2316     const void* ptr,
2317     size_t size,
2318     cl_mem_advice_intel advice,
2319     cl_uint num_events_in_wait_list,
2320     const cl_event* event_wait_list,
2321     cl_event* event) ;
2322 
2323 #ifndef CL_NO_PROTOTYPES
2324 
2325 extern CL_API_ENTRY void* CL_API_CALL
2326 clHostMemAllocINTEL(
2327     cl_context context,
2328     const cl_mem_properties_intel* properties,
2329     size_t size,
2330     cl_uint alignment,
2331     cl_int* errcode_ret) ;
2332 
2333 extern CL_API_ENTRY void* CL_API_CALL
2334 clDeviceMemAllocINTEL(
2335     cl_context context,
2336     cl_device_id device,
2337     const cl_mem_properties_intel* properties,
2338     size_t size,
2339     cl_uint alignment,
2340     cl_int* errcode_ret) ;
2341 
2342 extern CL_API_ENTRY void* CL_API_CALL
2343 clSharedMemAllocINTEL(
2344     cl_context context,
2345     cl_device_id device,
2346     const cl_mem_properties_intel* properties,
2347     size_t size,
2348     cl_uint alignment,
2349     cl_int* errcode_ret) ;
2350 
2351 extern CL_API_ENTRY cl_int CL_API_CALL
2352 clMemFreeINTEL(
2353     cl_context context,
2354     void* ptr) ;
2355 
2356 extern CL_API_ENTRY cl_int CL_API_CALL
2357 clMemBlockingFreeINTEL(
2358     cl_context context,
2359     void* ptr) ;
2360 
2361 extern CL_API_ENTRY cl_int CL_API_CALL
2362 clGetMemAllocInfoINTEL(
2363     cl_context context,
2364     const void* ptr,
2365     cl_mem_info_intel param_name,
2366     size_t param_value_size,
2367     void* param_value,
2368     size_t* param_value_size_ret) ;
2369 
2370 extern CL_API_ENTRY cl_int CL_API_CALL
2371 clSetKernelArgMemPointerINTEL(
2372     cl_kernel kernel,
2373     cl_uint arg_index,
2374     const void* arg_value) ;
2375 
2376 extern CL_API_ENTRY cl_int CL_API_CALL
2377 clEnqueueMemFillINTEL(
2378     cl_command_queue command_queue,
2379     void* dst_ptr,
2380     const void* pattern,
2381     size_t pattern_size,
2382     size_t size,
2383     cl_uint num_events_in_wait_list,
2384     const cl_event* event_wait_list,
2385     cl_event* event) ;
2386 
2387 extern CL_API_ENTRY cl_int CL_API_CALL
2388 clEnqueueMemcpyINTEL(
2389     cl_command_queue command_queue,
2390     cl_bool blocking,
2391     void* dst_ptr,
2392     const void* src_ptr,
2393     size_t size,
2394     cl_uint num_events_in_wait_list,
2395     const cl_event* event_wait_list,
2396     cl_event* event) ;
2397 
2398 extern CL_API_ENTRY cl_int CL_API_CALL
2399 clEnqueueMemAdviseINTEL(
2400     cl_command_queue command_queue,
2401     const void* ptr,
2402     size_t size,
2403     cl_mem_advice_intel advice,
2404     cl_uint num_events_in_wait_list,
2405     const cl_event* event_wait_list,
2406     cl_event* event) ;
2407 
2408 #endif /* CL_NO_PROTOTYPES */
2409 
2410 #if defined(CL_VERSION_1_2)
2411 /* Requires OpenCL 1.2 for cl_mem_migration_flags: */
2412 
2413 typedef cl_int (CL_API_CALL *
2414 clEnqueueMigrateMemINTEL_fn)(
2415     cl_command_queue command_queue,
2416     const void* ptr,
2417     size_t size,
2418     cl_mem_migration_flags flags,
2419     cl_uint num_events_in_wait_list,
2420     const cl_event* event_wait_list,
2421     cl_event* event) ;
2422 
2423 #ifndef CL_NO_PROTOTYPES
2424 
2425 extern CL_API_ENTRY cl_int CL_API_CALL
2426 clEnqueueMigrateMemINTEL(
2427     cl_command_queue command_queue,
2428     const void* ptr,
2429     size_t size,
2430     cl_mem_migration_flags flags,
2431     cl_uint num_events_in_wait_list,
2432     const cl_event* event_wait_list,
2433     cl_event* event) ;
2434 
2435 #endif /* CL_NO_PROTOTYPES */
2436 
2437 #endif /* defined(CL_VERSION_1_2) */
2438 
2439 /* deprecated, use clEnqueueMemFillINTEL instead */
2440 
2441 typedef cl_int (CL_API_CALL *
2442 clEnqueueMemsetINTEL_fn)(
2443     cl_command_queue command_queue,
2444     void* dst_ptr,
2445     cl_int value,
2446     size_t size,
2447     cl_uint num_events_in_wait_list,
2448     const cl_event* event_wait_list,
2449     cl_event* event) ;
2450 
2451 #ifndef CL_NO_PROTOTYPES
2452 
2453 extern CL_API_ENTRY cl_int CL_API_CALL
2454 clEnqueueMemsetINTEL(
2455     cl_command_queue command_queue,
2456     void* dst_ptr,
2457     cl_int value,
2458     size_t size,
2459     cl_uint num_events_in_wait_list,
2460     const cl_event* event_wait_list,
2461     cl_event* event) ;
2462 
2463 #endif /* CL_NO_PROTOTYPES */
2464 
2465 /***************************************************************
2466 * cl_intel_mem_alloc_buffer_location
2467 ***************************************************************/
2468 #define cl_intel_mem_alloc_buffer_location 1
2469 #define CL_INTEL_MEM_ALLOC_BUFFER_LOCATION_EXTENSION_NAME \
2470     "cl_intel_mem_alloc_buffer_location"
2471 
2472 /* cl_mem_properties_intel */
2473 #define CL_MEM_ALLOC_BUFFER_LOCATION_INTEL                  0x419E
2474 
2475 /* cl_mem_alloc_info_intel */
2476 /* enum CL_MEM_ALLOC_BUFFER_LOCATION_INTEL */
2477 
2478 /***************************************************
2479 * cl_intel_create_buffer_with_properties extension *
2480 ****************************************************/
2481 
2482 #define cl_intel_create_buffer_with_properties 1
2483 
2484 extern CL_API_ENTRY cl_mem CL_API_CALL
2485 clCreateBufferWithPropertiesINTEL(
2486     cl_context   context,
2487     const cl_mem_properties_intel* properties,
2488     cl_mem_flags flags,
2489     size_t       size,
2490     void *       host_ptr,
2491     cl_int *     errcode_ret) CL_API_SUFFIX__VERSION_1_0;
2492 
2493 typedef cl_mem (CL_API_CALL *
2494 clCreateBufferWithPropertiesINTEL_fn)(
2495     cl_context   context,
2496     const cl_mem_properties_intel* properties,
2497     cl_mem_flags flags,
2498     size_t       size,
2499     void *       host_ptr,
2500     cl_int *     errcode_ret) CL_API_SUFFIX__VERSION_1_0;
2501 
2502 /******************************************
2503 * cl_intel_mem_channel_property extension *
2504 *******************************************/
2505 
2506 #define CL_MEM_CHANNEL_INTEL            0x4213
2507 
2508 /*********************************
2509 * cl_intel_mem_force_host_memory *
2510 **********************************/
2511 
2512 #define cl_intel_mem_force_host_memory 1
2513 
2514 /* cl_mem_flags */
2515 #define CL_MEM_FORCE_HOST_MEMORY_INTEL                      (1 << 20)
2516 
2517 /***************************************************************
2518 * cl_intel_command_queue_families
2519 ***************************************************************/
2520 #define cl_intel_command_queue_families 1
2521 
2522 typedef cl_bitfield         cl_command_queue_capabilities_intel;
2523 
2524 #define CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL                 64
2525 
2526 typedef struct _cl_queue_family_properties_intel {
2527     cl_command_queue_properties properties;
2528     cl_command_queue_capabilities_intel capabilities;
2529     cl_uint count;
2530     char name[CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL];
2531 } cl_queue_family_properties_intel;
2532 
2533 /* cl_device_info */
2534 #define CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL             0x418B
2535 
2536 /* cl_queue_properties */
2537 #define CL_QUEUE_FAMILY_INTEL                               0x418C
2538 #define CL_QUEUE_INDEX_INTEL                                0x418D
2539 
2540 /* cl_command_queue_capabilities_intel */
2541 #define CL_QUEUE_DEFAULT_CAPABILITIES_INTEL                 0
2542 #define CL_QUEUE_CAPABILITY_CREATE_SINGLE_QUEUE_EVENTS_INTEL (1 << 0)
2543 #define CL_QUEUE_CAPABILITY_CREATE_CROSS_QUEUE_EVENTS_INTEL (1 << 1)
2544 #define CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENT_WAIT_LIST_INTEL (1 << 2)
2545 #define CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENT_WAIT_LIST_INTEL (1 << 3)
2546 #define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL           (1 << 8)
2547 #define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL      (1 << 9)
2548 #define CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL                (1 << 10)
2549 #define CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL               (1 << 11)
2550 #define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL            (1 << 12)
2551 #define CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL                 (1 << 13)
2552 #define CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL                (1 << 14)
2553 #define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL     (1 << 15)
2554 #define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL     (1 << 16)
2555 #define CL_QUEUE_CAPABILITY_MARKER_INTEL                    (1 << 24)
2556 #define CL_QUEUE_CAPABILITY_BARRIER_INTEL                   (1 << 25)
2557 #define CL_QUEUE_CAPABILITY_KERNEL_INTEL                    (1 << 26)
2558 
2559 /***************************************************************
2560 * cl_intel_queue_no_sync_operations
2561 ***************************************************************/
2562 
2563 #define cl_intel_queue_no_sync_operations 1
2564 
2565 /* addition to cl_command_queue_properties */
2566 #define CL_QUEUE_NO_SYNC_OPERATIONS_INTEL                   (1 << 29)
2567 
2568 /***************************************************************
2569 * cl_intel_sharing_format_query
2570 ***************************************************************/
2571 #define cl_intel_sharing_format_query 1
2572 
2573 /***************************************************************
2574 * cl_ext_image_requirements_info
2575 ***************************************************************/
2576 
2577 #ifdef CL_VERSION_3_0
2578 
2579 #define cl_ext_image_requirements_info 1
2580 
2581 typedef cl_uint cl_image_requirements_info_ext;
2582 
2583 #define CL_IMAGE_REQUIREMENTS_ROW_PITCH_ALIGNMENT_EXT    0x1290
2584 #define CL_IMAGE_REQUIREMENTS_BASE_ADDRESS_ALIGNMENT_EXT 0x1292
2585 #define CL_IMAGE_REQUIREMENTS_SIZE_EXT                   0x12B2
2586 #define CL_IMAGE_REQUIREMENTS_MAX_WIDTH_EXT              0x12B3
2587 #define CL_IMAGE_REQUIREMENTS_MAX_HEIGHT_EXT             0x12B4
2588 #define CL_IMAGE_REQUIREMENTS_MAX_DEPTH_EXT              0x12B5
2589 #define CL_IMAGE_REQUIREMENTS_MAX_ARRAY_SIZE_EXT         0x12B6
2590 
2591 extern CL_API_ENTRY cl_int CL_API_CALL
2592 clGetImageRequirementsInfoEXT(
2593     cl_context                     context,
2594     const cl_mem_properties*       properties,
2595     cl_mem_flags                   flags,
2596     const cl_image_format*         image_format,
2597     const cl_image_desc*           image_desc,
2598     cl_image_requirements_info_ext param_name,
2599     size_t  param_value_size,
2600     void*   param_value,
2601     size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_3_0;
2602 
2603 typedef cl_int (CL_API_CALL *
2604 clGetImageRequirementsInfoEXT_fn)(
2605     cl_context                     context,
2606     const cl_mem_properties*       properties,
2607     cl_mem_flags                   flags,
2608     const cl_image_format*         image_format,
2609     const cl_image_desc*           image_desc,
2610     cl_image_requirements_info_ext param_name,
2611     size_t  param_value_size,
2612     void*   param_value,
2613     size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_3_0;
2614 
2615 #endif
2616 
2617 /***************************************************************
2618 * cl_ext_image_from_buffer
2619 ***************************************************************/
2620 
2621 #ifdef CL_VERSION_3_0
2622 
2623 #define cl_ext_image_from_buffer 1
2624 
2625 #define CL_IMAGE_REQUIREMENTS_SLICE_PITCH_ALIGNMENT_EXT  0x1291
2626 
2627 #endif
2628 
2629 #ifdef __cplusplus
2630 }
2631 #endif
2632 
2633 
2634 #endif /* __CL_EXT_H */
2635