/*******************************************************************************
 * Copyright (c) 2008-2010 The Khronos Group Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and/or associated documentation files (the
 * "Materials"), to deal in the Materials without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Materials, and to
 * permit persons to whom the Materials are furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Materials.
 *
 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
 ******************************************************************************/

#ifndef __OPENCL_CL_ICD_H
#define __OPENCL_CL_ICD_H

#include <CL/cl.h>
#include <CL/cl_gl.h>

#define cl_khr_icd 1

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef cl_int(CL_API_CALL* clGetPlatformIDs_fn)(
    cl_uint /* num_entries */, cl_platform_id* /* platforms */,
    cl_uint* /* num_platforms */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetPlatformInfo_fn)(
    cl_platform_id /* platform */, cl_platform_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetDeviceIDs_fn)(
    cl_platform_id /* platform */, cl_device_type /* device_type */, cl_uint /* num_entries */,
    cl_device_id* /* devices */, cl_uint* /* num_devices */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetDeviceInfo_fn)(
    cl_device_id /* device */, cl_device_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_context(CL_API_CALL* clCreateContext_fn)(
    const cl_context_properties* /* properties */, cl_uint /* num_devices */,
    const cl_device_id* /* devices */,
    void(CL_CALLBACK* /* pfn_notify */)(const char*, const void*, size_t, void*),
    void* /* user_data */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_context(CL_API_CALL* clCreateContextFromType_fn)(
    const cl_context_properties* /* properties */, cl_device_type /* device_type */,
    void(CL_CALLBACK* /* pfn_notify*/)(const char*, const void*, size_t, void*),
    void* /* user_data */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clRetainContext_fn)(cl_context /* context */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseContext_fn)(cl_context /* context */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetContextInfo_fn)(
    cl_context /* context */, cl_context_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_command_queue(CL_API_CALL* clCreateCommandQueue_fn)(
    cl_context /* context */, cl_device_id /* device */,
    cl_command_queue_properties /* properties */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clRetainCommandQueue_fn)(cl_command_queue /* command_queue */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseCommandQueue_fn)(cl_command_queue /* command_queue */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetCommandQueueInfo_fn)(
    cl_command_queue /* command_queue */, cl_command_queue_info /* param_name */,
    size_t /* param_value_size */, void* /* param_value */,
    size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clSetCommandQueueProperty_fn)(
    cl_command_queue /* command_queue */, cl_command_queue_properties /* properties */,
    cl_bool /* enable */,
    cl_command_queue_properties* /* old_properties */) /*CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED*/;

typedef cl_mem(CL_API_CALL* clCreateBuffer_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, size_t /* size */, void* /* host_ptr */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_mem(CL_API_CALL* clCreateSubBuffer_fn)(
    cl_mem /* buffer */, cl_mem_flags /* flags */, cl_buffer_create_type /* buffer_create_type */,
    const void* /* buffer_create_info */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_mem(CL_API_CALL* clCreateImage2D_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, const cl_image_format* /* image_format */,
    size_t /* image_width */, size_t /* image_height */, size_t /* image_row_pitch */,
    void* /* host_ptr */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_mem(CL_API_CALL* clCreateImage3D_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, const cl_image_format* /* image_format */,
    size_t /* image_width */, size_t /* image_height */, size_t /* image_depth */,
    size_t /* image_row_pitch */, size_t /* image_slice_pitch */, void* /* host_ptr */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clRetainMemObject_fn)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseMemObject_fn)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetSupportedImageFormats_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, cl_mem_object_type /* image_type */,
    cl_uint /* num_entries */, cl_image_format* /* image_formats */,
    cl_uint* /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetMemObjectInfo_fn)(
    cl_mem /* memobj */, cl_mem_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetImageInfo_fn)(
    cl_mem /* image */, cl_image_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clSetMemObjectDestructorCallback_fn)(
    cl_mem /* memobj */,
    void(CL_CALLBACK* /*pfn_notify*/)(cl_mem /* memobj */, void* /*user_data*/),
    void* /*user_data */) CL_API_SUFFIX__VERSION_1_1;

/* Sampler APIs  */
typedef cl_sampler(CL_API_CALL* clCreateSampler_fn)(
    cl_context /* context */, cl_bool /* normalized_coords */,
    cl_addressing_mode /* addressing_mode */, cl_filter_mode /* filter_mode */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clRetainSampler_fn)(cl_sampler /* sampler */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseSampler_fn)(cl_sampler /* sampler */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetSamplerInfo_fn)(
    cl_sampler /* sampler */, cl_sampler_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

/* Program Object APIs  */
typedef cl_program(CL_API_CALL* clCreateProgramWithSource_fn)(
    cl_context /* context */, cl_uint /* count */, const char** /* strings */,
    const size_t* /* lengths */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

extern CL_API_ENTRY cl_program CL_API_CALL
clCreateProgramWithIL(cl_context /* context */,
    const void * /* strings */, size_t /* lengths */,
    cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_2_0;

typedef cl_program(CL_API_CALL* clCreateProgramWithILKHR_fn)(
    cl_context /* context */, const void* /* il */, size_t /* length */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_program(CL_API_CALL* clCreateProgramWithBinary_fn)(
    cl_context /* context */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
    const size_t* /* lengths */, const unsigned char** /* binaries */, cl_int* /* binary_status */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clRetainProgram_fn)(cl_program /* program */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseProgram_fn)(cl_program /* program */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clBuildProgram_fn)(
    cl_program /* program */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
    const char* /* options */,
    void(CL_CALLBACK* /* pfn_notify */)(cl_program /* program */, void* /* user_data */),
    void* /* user_data */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clUnloadCompiler_fn)(void) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetProgramInfo_fn)(
    cl_program /* program */, cl_program_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetProgramBuildInfo_fn)(
    cl_program /* program */, cl_device_id /* device */, cl_program_build_info /* param_name */,
    size_t /* param_value_size */, void* /* param_value */,
    size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

/* Kernel Object APIs */
typedef cl_kernel(CL_API_CALL* clCreateKernel_fn)(
    cl_program /* program */, const char* /* kernel_name */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clCreateKernelsInProgram_fn)(
    cl_program /* program */, cl_uint /* num_kernels */, cl_kernel* /* kernels */,
    cl_uint* /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clRetainKernel_fn)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseKernel_fn)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clSetKernelArg_fn)(cl_kernel /* kernel */, cl_uint /* arg_index */,
                                               size_t /* arg_size */, const void* /* arg_value */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetKernelInfo_fn)(
    cl_kernel /* kernel */, cl_kernel_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetKernelWorkGroupInfo_fn)(
    cl_kernel /* kernel */, cl_device_id /* device */, cl_kernel_work_group_info /* param_name */,
    size_t /* param_value_size */, void* /* param_value */,
    size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

/* Event Object APIs  */
typedef cl_int(CL_API_CALL* clWaitForEvents_fn)(
    cl_uint /* num_events */, const cl_event* /* event_list */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetEventInfo_fn)(
    cl_event /* event */, cl_event_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_event(CL_API_CALL* clCreateUserEvent_fn)(
    cl_context /* context */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_int(CL_API_CALL* clRetainEvent_fn)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clReleaseEvent_fn)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clSetUserEventStatus_fn)(
    cl_event /* event */, cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_int(CL_API_CALL* clSetEventCallback_fn)(
    cl_event /* event */, cl_int /* command_exec_callback_type */,
    void(CL_CALLBACK* /* pfn_notify */)(cl_event, cl_int, void*),
    void* /* user_data */) CL_API_SUFFIX__VERSION_1_1;

/* Profiling APIs  */
typedef cl_int(CL_API_CALL* clGetEventProfilingInfo_fn)(
    cl_event /* event */, cl_profiling_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

/* Flush and Finish APIs */
typedef cl_int(CL_API_CALL* clFlush_fn)(cl_command_queue /* command_queue */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clFinish_fn)(cl_command_queue /* command_queue */)
    CL_API_SUFFIX__VERSION_1_0;

/* Enqueued Commands APIs */
typedef cl_int(CL_API_CALL* clEnqueueReadBuffer_fn)(
    cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */,
    size_t /* offset */, size_t /* cb */, void* /* ptr */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueReadBufferRect_fn)(
    cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */,
    const size_t* /* buffer_offset */, const size_t* /* host_offset */, const size_t* /* region */,
    size_t /* buffer_row_pitch */, size_t /* buffer_slice_pitch */, size_t /* host_row_pitch */,
    size_t /* host_slice_pitch */, void* /* ptr */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_int(CL_API_CALL* clEnqueueWriteBuffer_fn)(
    cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_write */,
    size_t /* offset */, size_t /* cb */, const void* /* ptr */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueWriteBufferRect_fn)(
    cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */,
    const size_t* /* buffer_offset */, const size_t* /* host_offset */, const size_t* /* region */,
    size_t /* buffer_row_pitch */, size_t /* buffer_slice_pitch */, size_t /* host_row_pitch */,
    size_t /* host_slice_pitch */, const void* /* ptr */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_int(CL_API_CALL* clEnqueueCopyBuffer_fn)(
    cl_command_queue /* command_queue */, cl_mem /* src_buffer */, cl_mem /* dst_buffer */,
    size_t /* src_offset */, size_t /* dst_offset */, size_t /* cb */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueCopyBufferRect_fn)(
    cl_command_queue /* command_queue */, cl_mem /* src_buffer */, cl_mem /* dst_buffer */,
    const size_t* /* src_origin */, const size_t* /* dst_origin */, const size_t* /* region */,
    size_t /* src_row_pitch */, size_t /* src_slice_pitch */, size_t /* dst_row_pitch */,
    size_t /* dst_slice_pitch */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_int(CL_API_CALL* clEnqueueReadImage_fn)(
    cl_command_queue /* command_queue */, cl_mem /* image */, cl_bool /* blocking_read */,
    const size_t* /* origin[3] */, const size_t* /* region[3] */, size_t /* row_pitch */,
    size_t /* slice_pitch */, void* /* ptr */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueWriteImage_fn)(
    cl_command_queue /* command_queue */, cl_mem /* image */, cl_bool /* blocking_write */,
    const size_t* /* origin[3] */, const size_t* /* region[3] */, size_t /* input_row_pitch */,
    size_t /* input_slice_pitch */, const void* /* ptr */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueCopyImage_fn)(
    cl_command_queue /* command_queue */, cl_mem /* src_image */, cl_mem /* dst_image */,
    const size_t* /* src_origin[3] */, const size_t* /* dst_origin[3] */,
    const size_t* /* region[3] */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueCopyImageToBuffer_fn)(
    cl_command_queue /* command_queue */, cl_mem /* src_image */, cl_mem /* dst_buffer */,
    const size_t* /* src_origin[3] */, const size_t* /* region[3] */, size_t /* dst_offset */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueCopyBufferToImage_fn)(
    cl_command_queue /* command_queue */, cl_mem /* src_buffer */, cl_mem /* dst_image */,
    size_t /* src_offset */, const size_t* /* dst_origin[3] */, const size_t* /* region[3] */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef void*(CL_API_CALL* clEnqueueMapBuffer_fn)(
    cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_map */,
    cl_map_flags /* map_flags */, size_t /* offset */, size_t /* cb */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */, cl_int* /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;

typedef void*(CL_API_CALL* clEnqueueMapImage_fn)(
    cl_command_queue /* command_queue */, cl_mem /* image */, cl_bool /* blocking_map */,
    cl_map_flags /* map_flags */, const size_t* /* origin[3] */, const size_t* /* region[3] */,
    size_t* /* image_row_pitch */, size_t* /* image_slice_pitch */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */, cl_int* /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueUnmapMemObject_fn)(
    cl_command_queue /* command_queue */, cl_mem /* memobj */, void* /* mapped_ptr */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueNDRangeKernel_fn)(
    cl_command_queue /* command_queue */, cl_kernel /* kernel */, cl_uint /* work_dim */,
    const size_t* /* global_work_offset */, const size_t* /* global_work_size */,
    const size_t* /* local_work_size */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueTask_fn)(cl_command_queue /* command_queue */,
                                              cl_kernel /* kernel */,
                                              cl_uint /* num_events_in_wait_list */,
                                              const cl_event* /* event_wait_list */,
                                              cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueNativeKernel_fn)(
    cl_command_queue /* command_queue */, void(CL_CALLBACK* user_func)(void*), void* /* args */,
    size_t /* cb_args */, cl_uint /* num_mem_objects */, const cl_mem* /* mem_list */,
    const void** /* args_mem_loc */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueMarker_fn)(cl_command_queue /* command_queue */,
                                                cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueWaitForEvents_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_events */,
    const cl_event* /* event_list */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueBarrier_fn)(cl_command_queue /* command_queue */)
    CL_API_SUFFIX__VERSION_1_0;

typedef void*(CL_API_CALL* clGetExtensionFunctionAddress_fn)(const char* /* func_name */)
    CL_API_SUFFIX__VERSION_1_0;

typedef cl_mem(CL_API_CALL* clCreateFromGLBuffer_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, cl_GLuint /* bufobj */,
    int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_mem(CL_API_CALL* clCreateFromGLTexture2D_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* target */,
    cl_GLint /* miplevel */, cl_GLuint /* texture */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_mem(CL_API_CALL* clCreateFromGLTexture3D_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* target */,
    cl_GLint /* miplevel */, cl_GLuint /* texture */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_mem(CL_API_CALL* clCreateFromGLRenderbuffer_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, cl_GLuint /* renderbuffer */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetGLObjectInfo_fn)(
    cl_mem /* memobj */, cl_gl_object_type* /* gl_object_type */,
    cl_GLuint* /* gl_object_name */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clGetGLTextureInfo_fn)(
    cl_mem /* memobj */, cl_gl_texture_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_event(CL_API_CALL* clCreateEventFromGLsyncKHR_fn)(
    cl_context /* context */, cl_GLsync /* cl_GLsync */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;

typedef cl_int(CL_API_CALL* clEnqueueAcquireGLObjects_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_objects */,
    const cl_mem* /* mem_objects */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clEnqueueReleaseGLObjects_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_objects */,
    const cl_mem* /* mem_objects */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_0;

typedef cl_int(CL_API_CALL* clCreateSubDevices_fn)(
    cl_device_id /* in_device */, const cl_device_partition_property* /* properties */,
    cl_uint /* num_entries */, cl_device_id* /* out_devices */,
    cl_uint* /* num_devices */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clRetainDevice_fn)(cl_device_id /* device */)
    CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clReleaseDevice_fn)(cl_device_id /* device */)
    CL_API_SUFFIX__VERSION_1_2;

typedef cl_mem(CL_API_CALL* clCreateImage_fn)(cl_context /* context */, cl_mem_flags /* flags */,
                                              const cl_image_format* /* image_format*/,
                                              const cl_image_desc* /* image_desc*/,
                                              void* /* host_ptr */,
                                              cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_program(CL_API_CALL* clCreateProgramWithBuiltInKernels_fn)(
    cl_context /* context */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
    const char* /* kernel_names */, cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clCompileProgram_fn)(
    cl_program /* program */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
    const char* /* options */, cl_uint /* num_input_headers */,
    const cl_program* /* input_headers */, const char** /* header_include_names */,
    void(CL_CALLBACK* pfn_notify)(cl_program program, void* user_data),
    void* /* user_data */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_program(CL_API_CALL* clLinkProgram_fn)(
    cl_context /* context */, cl_uint /* num_devices */, const cl_device_id* /* device_list */,
    const char* /* options */, cl_uint /* num_input_programs */,
    const cl_program* /* input_programs */,
    void(CL_CALLBACK* pfn_notify)(cl_program program, void* user_data), void* /* user_data */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clUnloadPlatformCompiler_fn)(cl_platform_id /* platform */)
    CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clGetKernelArgInfo_fn)(
    cl_kernel /* kernel */, cl_uint /* arg_indx */, cl_kernel_arg_info /* param_name */,
    size_t /* param_value_size */, void* /* param_value */,
    size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clEnqueueFillBuffer_fn)(
    cl_command_queue /* command_queue */, cl_mem /* buffer */, const void* /* pattern */,
    size_t /* pattern_size */, size_t /* offset */, size_t /* size */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clEnqueueFillImage_fn)(
    cl_command_queue /* command_queue */, cl_mem /* image */, const void* /* fill_color */,
    const size_t* /* origin */, const size_t* /* region */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clEnqueueMigrateMemObjects_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_mem_objects */,
    const cl_mem* /* mem_objects */, cl_mem_migration_flags /* flags */,
    cl_uint /* num_events_in_wait_list */, const cl_event* /* event_wait_list */,
    cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clEnqueueMarkerWithWaitList_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_int(CL_API_CALL* clEnqueueBarrierWithWaitList_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_1_2;

typedef void*(CL_API_CALL* clGetExtensionFunctionAddressForPlatform_fn)(
    cl_platform_id /* platform */, const char* /* funcname */)CL_API_SUFFIX__VERSION_1_2;

typedef cl_mem(CL_API_CALL* clCreateFromGLTexture_fn)(
    cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* texture_target */,
    cl_GLint /* miplevel */, cl_GLuint /* texture */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;

typedef cl_command_queue(CL_API_CALL* clCreateCommandQueueWithProperties_fn)(
    cl_context /* context */, cl_device_id /* device */,
    const cl_queue_properties* /* properties */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_sampler(CL_API_CALL* clCreateSamplerWithProperties_fn)(
    cl_context /* context */, const cl_sampler_properties* /* properties */,
    cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;

typedef void*(CL_API_CALL* clSVMAlloc_fn)(cl_context /* context */, cl_svm_mem_flags /* flags */,
                                          size_t /* size */,
                                          cl_uint /* alignment */)CL_API_SUFFIX__VERSION_2_0;

typedef void(CL_API_CALL* clSVMFree_fn)(cl_context /* context */,
                                        void* /* svm_pointer */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clSetKernelArgSVMPointer_fn)(
    cl_kernel /* kernel */, cl_uint /*  arg_index */,
    const void* /* arg_value */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clSetKernelExecInfo_fn)(
    cl_kernel /* kernel */, cl_kernel_exec_info /* param_name */, size_t /* param_value_size */,
    const void* /* param_value */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clEnqueueSVMFree_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_svm_pointers */,
    void* [] /* svm_pointers */,
    void(CL_CALLBACK* /* pfn_free_func */)(cl_command_queue /* queue */,
                                           cl_uint /* num_svm_pointers */,
                                           void* [] /* svm_pointers */, void* /* user_data */),
    void* /* user_data */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clEnqueueSVMMemcpy_fn)(
    cl_command_queue /* command_queue */, cl_bool /* blocking_copy */, void* /* dst_ptr */,
    const void* /* src_ptr */, size_t /* size */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clEnqueueSVMMemFill_fn)(
    cl_command_queue /* command_queue */, void* /* svm_ptr */, const void* /* pattern */,
    size_t /* pattern_size */, size_t /* size */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clEnqueueSVMMap_fn)(
    cl_command_queue /* command_queue */, cl_bool /* blocking_map */, cl_map_flags /* flags */,
    void* /* svm_ptr */, size_t /* size */, cl_uint /* num_events_in_wait_list */,
    const cl_event* /* event_wait_list */, cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clEnqueueSVMUnmap_fn)(cl_command_queue /* command_queue */,
                                                  void* /* svm_ptr */,
                                                  cl_uint /* num_events_in_wait_list */,
                                                  const cl_event* /* event_wait_list */,
                                                  cl_event* /* event */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_mem(CL_API_CALL* clCreatePipe_fn)(cl_context /* context */, cl_mem_flags /* flags */,
                                             cl_uint /* pipe_packet_size */,
                                             cl_uint /* pipe_max_packets */,
                                             const cl_pipe_properties* /* properties */,
                                             cl_int* /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clGetPipeInfo_fn)(
    cl_mem /* pipe */, cl_pipe_info /* param_name */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0;

typedef cl_int(CL_API_CALL* clGetKernelSubGroupInfoKHR_fn)(
    cl_kernel /* kernel */, cl_device_id /* device */, cl_kernel_sub_group_info /* param_name */,
    size_t /* input_value_size */, const void* /* input_value */, size_t /* param_value_size */,
    void* /* param_value */, size_t* /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0;


typedef cl_int(CL_API_CALL* clSetDefaultDeviceCommandQueue_fn)(
    cl_context /* context */, cl_device_id /* device */,
    cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_2_1;

typedef cl_kernel(CL_API_CALL* clCloneKernel_fn)(
    cl_kernel /* source_kernel */, cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_1;

typedef cl_int (CL_API_CALL* clEnqueueSVMMigrateMem_fn)(
    cl_command_queue /* command_queue */, cl_uint /* num_svm_pointers */,
    const void ** /* svm_pointers */, const size_t * /* sizes */,
    cl_mem_migration_flags /* flags */, cl_uint /* num_events_in_wait_list */,
    const cl_event * /* event_wait_list */, cl_event * /* event */) CL_API_SUFFIX__VERSION_2_1;

typedef cl_int (CL_API_CALL* clGetDeviceAndHostTimer_fn)(
    cl_device_id /* device */, cl_ulong * /* device_timestamp */,
    cl_ulong * /* host_timestamp */) CL_API_SUFFIX__VERSION_2_1;

typedef cl_int (CL_API_CALL* clGetHostTimer_fn)(
    cl_device_id /* device */, cl_ulong * /* host_timestamp */) CL_API_SUFFIX__VERSION_2_1;

typedef cl_int (CL_API_CALL* clSetProgramSpecializationConstant_fn)(
    cl_program /* program */, cl_uint /* spec_id */, size_t /* spec_size */,
    const void* /* spec_value */) CL_API_SUFFIX__VERSION_2_2;

typedef cl_int (CL_API_CALL* clSetProgramReleaseCallback_fn)(
    cl_program /* program */,
    void (CL_CALLBACK *  /* pfn_notify */)(cl_program program, void * user_data),
    void * /* user_data */) CL_API_SUFFIX__VERSION_2_2;

typedef struct _cl_icd_dispatch_table {
  /* OpenCL 1.0 */
  clGetPlatformIDs_fn GetPlatformIDs;
  clGetPlatformInfo_fn GetPlatformInfo;
  clGetDeviceIDs_fn GetDeviceIDs;
  clGetDeviceInfo_fn GetDeviceInfo;
  clCreateContext_fn CreateContext;
  clCreateContextFromType_fn CreateContextFromType;
  clRetainContext_fn RetainContext;
  clReleaseContext_fn ReleaseContext;
  clGetContextInfo_fn GetContextInfo;
  clCreateCommandQueue_fn CreateCommandQueue;
  clRetainCommandQueue_fn RetainCommandQueue;
  clReleaseCommandQueue_fn ReleaseCommandQueue;
  clGetCommandQueueInfo_fn GetCommandQueueInfo;
  clSetCommandQueueProperty_fn SetCommandQueueProperty;
  clCreateBuffer_fn CreateBuffer;
  clCreateImage2D_fn CreateImage2D;
  clCreateImage3D_fn CreateImage3D;
  clRetainMemObject_fn RetainMemObject;
  clReleaseMemObject_fn ReleaseMemObject;
  clGetSupportedImageFormats_fn GetSupportedImageFormats;
  clGetMemObjectInfo_fn GetMemObjectInfo;
  clGetImageInfo_fn GetImageInfo;
  clCreateSampler_fn CreateSampler;
  clRetainSampler_fn RetainSampler;
  clReleaseSampler_fn ReleaseSampler;
  clGetSamplerInfo_fn GetSamplerInfo;
  clCreateProgramWithSource_fn CreateProgramWithSource;
  clCreateProgramWithBinary_fn CreateProgramWithBinary;
  clRetainProgram_fn RetainProgram;
  clReleaseProgram_fn ReleaseProgram;
  clBuildProgram_fn BuildProgram;
  clUnloadCompiler_fn UnloadCompiler;
  clGetProgramInfo_fn GetProgramInfo;
  clGetProgramBuildInfo_fn GetProgramBuildInfo;
  clCreateKernel_fn CreateKernel;
  clCreateKernelsInProgram_fn CreateKernelsInProgram;
  clRetainKernel_fn RetainKernel;
  clReleaseKernel_fn ReleaseKernel;
  clSetKernelArg_fn SetKernelArg;
  clGetKernelInfo_fn GetKernelInfo;
  clGetKernelWorkGroupInfo_fn GetKernelWorkGroupInfo;
  clWaitForEvents_fn WaitForEvents;
  clGetEventInfo_fn GetEventInfo;
  clRetainEvent_fn RetainEvent;
  clReleaseEvent_fn ReleaseEvent;
  clGetEventProfilingInfo_fn GetEventProfilingInfo;
  clFlush_fn Flush;
  clFinish_fn Finish;
  clEnqueueReadBuffer_fn EnqueueReadBuffer;
  clEnqueueWriteBuffer_fn EnqueueWriteBuffer;
  clEnqueueCopyBuffer_fn EnqueueCopyBuffer;
  clEnqueueReadImage_fn EnqueueReadImage;
  clEnqueueWriteImage_fn EnqueueWriteImage;
  clEnqueueCopyImage_fn EnqueueCopyImage;
  clEnqueueCopyImageToBuffer_fn EnqueueCopyImageToBuffer;
  clEnqueueCopyBufferToImage_fn EnqueueCopyBufferToImage;
  clEnqueueMapBuffer_fn EnqueueMapBuffer;
  clEnqueueMapImage_fn EnqueueMapImage;
  clEnqueueUnmapMemObject_fn EnqueueUnmapMemObject;
  clEnqueueNDRangeKernel_fn EnqueueNDRangeKernel;
  clEnqueueTask_fn EnqueueTask;
  clEnqueueNativeKernel_fn EnqueueNativeKernel;
  clEnqueueMarker_fn EnqueueMarker;
  clEnqueueWaitForEvents_fn EnqueueWaitForEvents;
  clEnqueueBarrier_fn EnqueueBarrier;
  clGetExtensionFunctionAddress_fn GetExtensionFunctionAddress;
  clCreateFromGLBuffer_fn CreateFromGLBuffer;
  clCreateFromGLTexture2D_fn CreateFromGLTexture2D;
  clCreateFromGLTexture3D_fn CreateFromGLTexture3D;
  clCreateFromGLRenderbuffer_fn CreateFromGLRenderbuffer;
  clGetGLObjectInfo_fn GetGLObjectInfo;
  clGetGLTextureInfo_fn GetGLTextureInfo;
  clEnqueueAcquireGLObjects_fn EnqueueAcquireGLObjects;
  clEnqueueReleaseGLObjects_fn EnqueueReleaseGLObjects;
  clGetGLContextInfoKHR_fn GetGLContextInfoKHR;
  void* _reservedForD3D10KHR[6];
  /* OpenCL 1.1 */
  clSetEventCallback_fn SetEventCallback;
  clCreateSubBuffer_fn CreateSubBuffer;
  clSetMemObjectDestructorCallback_fn SetMemObjectDestructorCallback;
  clCreateUserEvent_fn CreateUserEvent;
  clSetUserEventStatus_fn SetUserEventStatus;
  clEnqueueReadBufferRect_fn EnqueueReadBufferRect;
  clEnqueueWriteBufferRect_fn EnqueueWriteBufferRect;
  clEnqueueCopyBufferRect_fn EnqueueCopyBufferRect;

  void* _reservedForDeviceFissionEXT[3];
  clCreateEventFromGLsyncKHR_fn CreateEventFromGLsyncKHR;

  /* OpenCL 1.2 */
  clCreateSubDevices_fn CreateSubDevices;
  clRetainDevice_fn RetainDevice;
  clReleaseDevice_fn ReleaseDevice;
  clCreateImage_fn CreateImage;
  clCreateProgramWithBuiltInKernels_fn CreateProgramWithBuiltInKernels;
  clCompileProgram_fn CompileProgram;
  clLinkProgram_fn LinkProgram;
  clUnloadPlatformCompiler_fn UnloadPlatformCompiler;
  clGetKernelArgInfo_fn GetKernelArgInfo;
  clEnqueueFillBuffer_fn EnqueueFillBuffer;
  clEnqueueFillImage_fn EnqueueFillImage;
  clEnqueueMigrateMemObjects_fn EnqueueMigrateMemObjects;
  clEnqueueMarkerWithWaitList_fn EnqueueMarkerWithWaitList;
  clEnqueueBarrierWithWaitList_fn EnqueueBarrierWithWaitList;
  clGetExtensionFunctionAddressForPlatform_fn GetExtensionFunctionAddressForPlatform;
  clCreateFromGLTexture_fn CreateFromGLTexture;

  /* cl_khr_d3d11_sharing, cl_khr_dx9_media_sharing */
  void* _reservedD3DExtensions[10];

  /* cl_khr_egl_image, cl_khr_egl_event */
  void* _reservedEGLExtensions[4];

  /* OpenCL 2.0 */
  clCreateCommandQueueWithProperties_fn CreateCommandQueueWithProperties;
  clCreatePipe_fn CreatePipe;
  clGetPipeInfo_fn GetPipeInfo;
  clSVMAlloc_fn SVMAlloc;
  clSVMFree_fn SVMFree;
  clEnqueueSVMFree_fn EnqueueSVMFree;
  clEnqueueSVMMemcpy_fn EnqueueSVMMemcpy;
  clEnqueueSVMMemFill_fn EnqueueSVMMemFill;
  clEnqueueSVMMap_fn EnqueueSVMMap;
  clEnqueueSVMUnmap_fn EnqueueSVMUnmap;
  clCreateSamplerWithProperties_fn CreateSamplerWithProperties;
  clSetKernelArgSVMPointer_fn SetKernelArgSVMPointer;
  clSetKernelExecInfo_fn SetKernelExecInfo;

  /* cl_khr_sub_groups */
  clGetKernelSubGroupInfoKHR_fn clGetKernelSubGroupInfoKHR;

  /* OpenCL 2.1 */
  clCloneKernel_fn clCloneKernel;
  clCreateProgramWithILKHR_fn clCreateProgramWithIL;
  clEnqueueSVMMigrateMem_fn clEnqueueSVMMigrateMem;
  clGetDeviceAndHostTimer_fn  clGetDeviceAndHostTimer;
  clGetHostTimer_fn clGetHostTimer;
  clGetKernelSubGroupInfoKHR_fn clGetKernelSubGroupInfo;
  clSetDefaultDeviceCommandQueue_fn clSetDefaultDeviceCommandQueue;

  /* OpenCL 2.2 */
  clSetProgramReleaseCallback_fn clSetProgramReleaseCallback;
  clSetProgramSpecializationConstant_fn clSetProgramSpecializationConstant;

} cl_icd_dispatch_table;

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __OPENCL_CL_ICD_H */
