Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. //
  2. // Copyright 2013 Francisco Jerez
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining a
  5. // copy of this software and associated documentation files (the "Software"),
  6. // to deal in the Software without restriction, including without limitation
  7. // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. // and/or sell copies of the Software, and to permit persons to whom the
  9. // Software is furnished to do so, subject to the following conditions:
  10. //
  11. // The above copyright notice and this permission notice shall be included in
  12. // all copies or substantial portions of the Software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17. // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. // OTHER DEALINGS IN THE SOFTWARE.
  21. //
  22.  
  23. #ifndef API_DISPATCH_HPP
  24. #define API_DISPATCH_HPP
  25.  
  26. #define CL_USE_DEPRECATED_OPENCL_1_1_APIS
  27.  
  28. #include "CL/cl.h"
  29. #include "CL/cl_ext.h"
  30. #include "CL/cl_gl.h"
  31.  
  32. ///
  33. /// OpenCL ICD vendor dispatch table.
  34. ///
  35. /// The entry point ordering should always be in agreement with
  36. /// Khronos' ICD loader.
  37. ///
  38. struct _cl_icd_dispatch {
  39.    CL_API_ENTRY cl_int (CL_API_CALL *clGetPlatformIDs)(
  40.       cl_uint num_entries,
  41.       cl_platform_id *platforms,
  42.       cl_uint *num_platforms);
  43.  
  44.    CL_API_ENTRY cl_int (CL_API_CALL *clGetPlatformInfo)(
  45.       cl_platform_id platform,
  46.       cl_platform_info param_name,
  47.       size_t param_value_size,
  48.       void *param_value,
  49.       size_t *param_value_size_ret);
  50.  
  51.    CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDs)(
  52.       cl_platform_id platform,
  53.       cl_device_type device_type,
  54.       cl_uint num_entries,
  55.       cl_device_id *devices,
  56.       cl_uint *num_devices);
  57.  
  58.    CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceInfo)(
  59.       cl_device_id device,
  60.       cl_device_info param_name,
  61.       size_t param_value_size,
  62.       void *param_value,
  63.       size_t *param_value_size_ret);
  64.  
  65.    CL_API_ENTRY cl_context (CL_API_CALL *clCreateContext)(
  66.       const cl_context_properties *properties,
  67.       cl_uint num_devices,
  68.       const cl_device_id *devices,
  69.       void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
  70.       void *user_data,
  71.       cl_int *errcode_ret);
  72.  
  73.    CL_API_ENTRY cl_context (CL_API_CALL *clCreateContextFromType)(
  74.       const cl_context_properties *properties,
  75.       cl_device_type device_type,
  76.       void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
  77.       void *user_data,
  78.       cl_int *errcode_ret);
  79.  
  80.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainContext)(
  81.       cl_context context);
  82.  
  83.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseContext)(
  84.       cl_context context);
  85.  
  86.    CL_API_ENTRY cl_int (CL_API_CALL *clGetContextInfo)(
  87.       cl_context context,
  88.       cl_context_info param_name,
  89.       size_t param_value_size,
  90.       void *param_value,
  91.       size_t *param_value_size_ret);
  92.  
  93.    CL_API_ENTRY cl_command_queue (CL_API_CALL *clCreateCommandQueue)(
  94.       cl_context context,
  95.       cl_device_id device,
  96.       cl_command_queue_properties properties,
  97.       cl_int *errcode_ret);
  98.  
  99.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainCommandQueue)(
  100.       cl_command_queue command_queue);
  101.  
  102.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseCommandQueue)(
  103.       cl_command_queue command_queue);
  104.  
  105.    CL_API_ENTRY cl_int (CL_API_CALL *clGetCommandQueueInfo)(
  106.       cl_command_queue command_queue,
  107.       cl_command_queue_info param_name,
  108.       size_t param_value_size,
  109.       void *param_value,
  110.       size_t *param_value_size_ret);
  111.  
  112.    CL_API_ENTRY cl_int (CL_API_CALL *clSetCommandQueueProperty)(
  113.       cl_command_queue command_queue,
  114.       cl_command_queue_properties properties,
  115.       cl_bool enable,
  116.       cl_command_queue_properties *old_properties);
  117.  
  118.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateBuffer)(
  119.       cl_context context,
  120.       cl_mem_flags flags,
  121.       size_t size,
  122.       void *host_ptr,
  123.       cl_int *errcode_ret);
  124.  
  125.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateImage2D)(
  126.       cl_context context,
  127.       cl_mem_flags flags,
  128.       const cl_image_format *image_format,
  129.       size_t image_width,
  130.       size_t image_height,
  131.       size_t image_row_pitch,
  132.       void *host_ptr,
  133.       cl_int *errcode_ret);
  134.  
  135.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateImage3D)(
  136.       cl_context context,
  137.       cl_mem_flags flags,
  138.       const cl_image_format *image_format,
  139.       size_t image_width,
  140.       size_t image_height,
  141.       size_t image_depth,
  142.       size_t image_row_pitch,
  143.       size_t image_slice_pitch,
  144.       void *host_ptr,
  145.       cl_int *errcode_ret);
  146.  
  147.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainMemObject)(
  148.       cl_mem memobj);
  149.  
  150.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseMemObject)(
  151.       cl_mem memobj);
  152.  
  153.    CL_API_ENTRY cl_int (CL_API_CALL *clGetSupportedImageFormats)(
  154.       cl_context context,
  155.       cl_mem_flags flags,
  156.       cl_mem_object_type image_type,
  157.       cl_uint num_entries,
  158.       cl_image_format *image_formats,
  159.       cl_uint *num_image_formats);
  160.  
  161.    CL_API_ENTRY cl_int (CL_API_CALL *clGetMemObjectInfo)(
  162.       cl_mem memobj,
  163.       cl_mem_info param_name,
  164.       size_t param_value_size,
  165.       void *param_value,
  166.       size_t *param_value_size_ret);
  167.  
  168.    CL_API_ENTRY cl_int (CL_API_CALL *clGetImageInfo)(
  169.       cl_mem image,
  170.       cl_image_info param_name,
  171.       size_t param_value_size,
  172.       void *param_value,
  173.       size_t *param_value_size_ret);
  174.  
  175.    CL_API_ENTRY cl_sampler (CL_API_CALL *clCreateSampler)(
  176.       cl_context context,
  177.       cl_bool normalized_coords,
  178.       cl_addressing_mode addressing_mode,
  179.       cl_filter_mode filter_mode,
  180.       cl_int *errcode_ret);
  181.  
  182.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainSampler)(
  183.       cl_sampler sampler);
  184.  
  185.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseSampler)(
  186.       cl_sampler sampler);
  187.  
  188.    CL_API_ENTRY cl_int (CL_API_CALL *clGetSamplerInfo)(
  189.       cl_sampler sampler,
  190.       cl_sampler_info param_name,
  191.       size_t param_value_size,
  192.       void *param_value,
  193.       size_t *param_value_size_ret);
  194.  
  195.    CL_API_ENTRY cl_program (CL_API_CALL *clCreateProgramWithSource)(
  196.       cl_context context,
  197.       cl_uint count,
  198.       const char **strings,
  199.       const size_t *lengths,
  200.       cl_int *errcode_ret);
  201.  
  202.    CL_API_ENTRY cl_program (CL_API_CALL *clCreateProgramWithBinary)(
  203.       cl_context context,
  204.       cl_uint num_devices,
  205.       const cl_device_id *device_list,
  206.       const size_t *lengths,
  207.       const unsigned char **binaries,
  208.       cl_int *binary_status,
  209.       cl_int *errcode_ret);
  210.  
  211.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainProgram)(
  212.       cl_program program);
  213.  
  214.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseProgram)(
  215.       cl_program program);
  216.  
  217.    CL_API_ENTRY cl_int (CL_API_CALL *clBuildProgram)(
  218.       cl_program program,
  219.       cl_uint num_devices,
  220.       const cl_device_id *device_list,
  221.       const char *options,
  222.       void (CL_CALLBACK *pfn_notify)(cl_program, void *),
  223.       void *user_data);
  224.  
  225.    CL_API_ENTRY cl_int (CL_API_CALL *clUnloadCompiler)(
  226.       void);
  227.  
  228.    CL_API_ENTRY cl_int (CL_API_CALL *clGetProgramInfo)(
  229.       cl_program program,
  230.       cl_program_info param_name,
  231.       size_t param_value_size,
  232.       void *param_value,
  233.       size_t *param_value_size_ret);
  234.  
  235.    CL_API_ENTRY cl_int (CL_API_CALL *clGetProgramBuildInfo)(
  236.       cl_program program,
  237.       cl_device_id device,
  238.       cl_program_build_info param_name,
  239.       size_t param_value_size,
  240.       void *param_value,
  241.       size_t *param_value_size_ret);
  242.  
  243.    CL_API_ENTRY cl_kernel (CL_API_CALL *clCreateKernel)(
  244.       cl_program program,
  245.       const char *kernel_name,
  246.       cl_int *errcode_ret);
  247.  
  248.    CL_API_ENTRY cl_int (CL_API_CALL *clCreateKernelsInProgram)(
  249.       cl_program program,
  250.       cl_uint num_kernels,
  251.       cl_kernel *kernels,
  252.       cl_uint *num_kernels_ret);
  253.  
  254.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainKernel)(
  255.       cl_kernel kernel);
  256.  
  257.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseKernel)(
  258.       cl_kernel kernel);
  259.  
  260.    CL_API_ENTRY cl_int (CL_API_CALL *clSetKernelArg)(
  261.       cl_kernel kernel,
  262.       cl_uint arg_index,
  263.       size_t arg_size,
  264.       const void *arg_value);
  265.  
  266.    CL_API_ENTRY cl_int (CL_API_CALL *clGetKernelInfo)(
  267.       cl_kernel kernel,
  268.       cl_kernel_info param_name,
  269.       size_t param_value_size,
  270.       void *param_value,
  271.       size_t *param_value_size_ret);
  272.  
  273.    CL_API_ENTRY cl_int (CL_API_CALL *clGetKernelWorkGroupInfo)(
  274.       cl_kernel kernel,
  275.       cl_device_id device,
  276.       cl_kernel_work_group_info param_name,
  277.       size_t param_value_size,
  278.       void *param_value,
  279.       size_t *param_value_size_ret);
  280.  
  281.    CL_API_ENTRY cl_int (CL_API_CALL *clWaitForEvents)(
  282.       cl_uint num_events,
  283.       const cl_event *event_list);
  284.  
  285.    CL_API_ENTRY cl_int (CL_API_CALL *clGetEventInfo)(
  286.       cl_event event,
  287.       cl_event_info param_name,
  288.       size_t param_value_size,
  289.       void *param_value,
  290.       size_t *param_value_size_ret);
  291.  
  292.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainEvent)(
  293.       cl_event event);
  294.  
  295.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseEvent)(
  296.       cl_event event);
  297.  
  298.    CL_API_ENTRY cl_int (CL_API_CALL *clGetEventProfilingInfo)(
  299.       cl_event event,
  300.       cl_profiling_info param_name,
  301.       size_t param_value_size,
  302.       void *param_value,
  303.       size_t *param_value_size_ret);
  304.  
  305.    CL_API_ENTRY cl_int (CL_API_CALL *clFlush)(
  306.       cl_command_queue command_queue);
  307.  
  308.    CL_API_ENTRY cl_int (CL_API_CALL *clFinish)(
  309.       cl_command_queue command_queue);
  310.  
  311.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReadBuffer)(
  312.       cl_command_queue command_queue,
  313.       cl_mem buffer,
  314.       cl_bool blocking_read,
  315.       size_t offset,
  316.       size_t cb,
  317.       void *ptr,
  318.       cl_uint num_events_in_wait_list,
  319.       const cl_event *event_wait_list,
  320.       cl_event *event);
  321.  
  322.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWriteBuffer)(
  323.       cl_command_queue command_queue,
  324.       cl_mem buffer,
  325.       cl_bool blocking_write,
  326.       size_t offset,
  327.       size_t cb,
  328.       const void *ptr,
  329.       cl_uint num_events_in_wait_list,
  330.       const cl_event *event_wait_list,
  331.       cl_event *event);
  332.  
  333.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyBuffer)(
  334.       cl_command_queue command_queue,
  335.       cl_mem src_buffer,
  336.       cl_mem dst_buffer,
  337.       size_t src_offset,
  338.       size_t dst_offset,
  339.       size_t cb,
  340.       cl_uint num_events_in_wait_list,
  341.       const cl_event *event_wait_list,
  342.       cl_event *event);
  343.  
  344.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReadImage)(
  345.       cl_command_queue command_queue,
  346.       cl_mem image,
  347.       cl_bool blocking_read,
  348.       const size_t *origin,
  349.       const size_t *region,
  350.       size_t row_pitch,
  351.       size_t slice_pitch,
  352.       void *ptr,
  353.       cl_uint num_events_in_wait_list,
  354.       const cl_event *event_wait_list,
  355.       cl_event *event);
  356.  
  357.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWriteImage)(
  358.       cl_command_queue command_queue,
  359.       cl_mem image,
  360.       cl_bool blocking_write,
  361.       const size_t *origin,
  362.       const size_t *region,
  363.       size_t input_row_pitch,
  364.       size_t input_slice_pitch,
  365.       const void *ptr,
  366.       cl_uint num_events_in_wait_list,
  367.       const cl_event *event_wait_list,
  368.       cl_event *event);
  369.  
  370.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyImage)(
  371.       cl_command_queue command_queue,
  372.       cl_mem src_image,
  373.       cl_mem dst_image,
  374.       const size_t *src_origin,
  375.       const size_t *dst_origin,
  376.       const size_t *region,
  377.       cl_uint num_events_in_wait_list,
  378.       const cl_event *event_wait_list,
  379.       cl_event *event);
  380.  
  381.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyImageToBuffer)(
  382.       cl_command_queue command_queue,
  383.       cl_mem src_image,
  384.       cl_mem dst_buffer,
  385.       const size_t *src_origin,
  386.       const size_t *region,
  387.       size_t dst_offset,
  388.       cl_uint num_events_in_wait_list,
  389.       const cl_event *event_wait_list,
  390.       cl_event *event);
  391.  
  392.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyBufferToImage)(
  393.       cl_command_queue command_queue,
  394.       cl_mem src_buffer,
  395.       cl_mem dst_image,
  396.       size_t src_offset,
  397.       const size_t *dst_origin,
  398.       const size_t *region,
  399.       cl_uint num_events_in_wait_list,
  400.       const cl_event *event_wait_list,
  401.       cl_event *event);
  402.  
  403.    CL_API_ENTRY void *(CL_API_CALL *clEnqueueMapBuffer)(
  404.       cl_command_queue command_queue,
  405.       cl_mem buffer,
  406.       cl_bool blocking_map,
  407.       cl_map_flags map_flags,
  408.       size_t offset,
  409.       size_t cb,
  410.       cl_uint num_events_in_wait_list,
  411.       const cl_event *event_wait_list,
  412.       cl_event *event,
  413.       cl_int *errcode_ret);
  414.  
  415.    CL_API_ENTRY void *(CL_API_CALL *clEnqueueMapImage)(
  416.       cl_command_queue command_queue,
  417.       cl_mem image,
  418.       cl_bool blocking_map,
  419.       cl_map_flags map_flags,
  420.       const size_t *origin,
  421.       const size_t *region,
  422.       size_t *image_row_pitch,
  423.       size_t *image_slice_pitch,
  424.       cl_uint num_events_in_wait_list,
  425.       const cl_event *event_wait_list,
  426.       cl_event *event,
  427.       cl_int *errcode_ret);
  428.  
  429.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueUnmapMemObject)(
  430.       cl_command_queue command_queue,
  431.       cl_mem memobj,
  432.       void *mapped_ptr,
  433.       cl_uint num_events_in_wait_list,
  434.       const cl_event *event_wait_list,
  435.       cl_event *event);
  436.  
  437.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueNDRangeKernel)(
  438.       cl_command_queue command_queue,
  439.       cl_kernel kernel,
  440.       cl_uint work_dim,
  441.       const size_t *global_work_offset,
  442.       const size_t *global_work_size,
  443.       const size_t *local_work_size,
  444.       cl_uint num_events_in_wait_list,
  445.       const cl_event *event_wait_list,
  446.       cl_event *event);
  447.  
  448.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueTask)(
  449.       cl_command_queue command_queue,
  450.       cl_kernel kernel,
  451.       cl_uint num_events_in_wait_list,
  452.       const cl_event *event_wait_list,
  453.       cl_event *event);
  454.  
  455.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueNativeKernel)(
  456.       cl_command_queue command_queue,
  457.       void (CL_CALLBACK *user_func)(void *),
  458.       void *args,
  459.       size_t cb_args,
  460.       cl_uint num_mem_objects,
  461.       const cl_mem *mem_list,
  462.       const void **args_mem_loc,
  463.       cl_uint num_events_in_wait_list,
  464.       const cl_event *event_wait_list,
  465.       cl_event *event);
  466.  
  467.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueMarker)(
  468.       cl_command_queue command_queue,
  469.       cl_event *event);
  470.  
  471.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWaitForEvents)(
  472.       cl_command_queue command_queue,
  473.       cl_uint num_events,
  474.       const cl_event *event_list);
  475.  
  476.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueBarrier)(
  477.       cl_command_queue command_queue);
  478.  
  479.    CL_API_ENTRY void *(CL_API_CALL *clGetExtensionFunctionAddress)(
  480.       const char *function_name);
  481.  
  482.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLBuffer)(
  483.       cl_context context,
  484.       cl_mem_flags flags,
  485.       cl_GLuint bufobj,
  486.       int *errcode_ret);
  487.  
  488.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLTexture2D)(
  489.       cl_context context,
  490.       cl_mem_flags flags,
  491.       cl_GLenum target,
  492.       cl_GLint miplevel,
  493.       cl_GLuint texture,
  494.       cl_int *errcode_ret);
  495.  
  496.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLTexture3D)(
  497.       cl_context context,
  498.       cl_mem_flags flags,
  499.       cl_GLenum target,
  500.       cl_GLint miplevel,
  501.       cl_GLuint texture,
  502.       cl_int *errcode_ret);
  503.  
  504.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLRenderbuffer)(
  505.       cl_context context,
  506.       cl_mem_flags flags,
  507.       cl_GLuint renderbuffer,
  508.       cl_int *errcode_ret);
  509.  
  510.    CL_API_ENTRY cl_int (CL_API_CALL *clGetGLObjectInfo)(
  511.       cl_mem memobj,
  512.       cl_gl_object_type *gl_object_type,
  513.       cl_GLuint *gl_object_name);
  514.  
  515.    CL_API_ENTRY cl_int (CL_API_CALL *clGetGLTextureInfo)(
  516.       cl_mem memobj,
  517.       cl_gl_texture_info param_name,
  518.       size_t param_value_size,
  519.       void *param_value,
  520.       size_t *param_value_size_ret);
  521.  
  522.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireGLObjects)(
  523.       cl_command_queue command_queue,
  524.       cl_uint num_objects,
  525.       const cl_mem *mem_objects,
  526.       cl_uint num_events_in_wait_list,
  527.       const cl_event *event_wait_list,
  528.       cl_event *event);
  529.  
  530.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseGLObjects)(
  531.       cl_command_queue command_queue,
  532.       cl_uint num_objects,
  533.       const cl_mem *mem_objects,
  534.       cl_uint num_events_in_wait_list,
  535.       const cl_event *event_wait_list,
  536.       cl_event *event);
  537.  
  538.    CL_API_ENTRY cl_int (CL_API_CALL *clGetGLContextInfoKHR)(
  539.       const cl_context_properties *properties,
  540.       cl_gl_context_info param_name,
  541.       size_t param_value_size,
  542.       void *param_value,
  543.       size_t *param_value_size_ret);
  544.  
  545.    void *clGetDeviceIDsFromD3D10KHR;
  546.    void *clCreateFromD3D10BufferKHR;
  547.    void *clCreateFromD3D10Texture2DKHR;
  548.    void *clCreateFromD3D10Texture3DKHR;
  549.    void *clEnqueueAcquireD3D10ObjectsKHR;
  550.    void *clEnqueueReleaseD3D10ObjectsKHR;
  551.  
  552.    CL_API_ENTRY cl_int (CL_API_CALL *clSetEventCallback)(
  553.       cl_event event,
  554.       cl_int type,
  555.       void (CL_CALLBACK *pfn_notify)(cl_event, cl_int, void *),
  556.       void *user_data);
  557.  
  558.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateSubBuffer)(
  559.       cl_mem                   buffer,
  560.       cl_mem_flags             flags,
  561.       cl_buffer_create_type    buffer_create_type,
  562.       const void *buffer_create_info,
  563.       cl_int *errcode_ret);
  564.  
  565.    CL_API_ENTRY cl_int (CL_API_CALL *clSetMemObjectDestructorCallback)(
  566.       cl_mem memobj,
  567.       void (CL_CALLBACK *pfn_notify)(cl_mem, void *),
  568.       void *user_data);
  569.  
  570.    CL_API_ENTRY cl_event (CL_API_CALL *clCreateUserEvent)(
  571.       cl_context context,
  572.       cl_int *errcode_ret);
  573.  
  574.    CL_API_ENTRY cl_int (CL_API_CALL *clSetUserEventStatus)(
  575.       cl_event event,
  576.       cl_int status);
  577.  
  578.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReadBufferRect)(
  579.       cl_command_queue command_queue,
  580.       cl_mem buffer,
  581.       cl_bool blocking_read,
  582.       const size_t *buffer_origin,
  583.       const size_t *host_origin,
  584.       const size_t *region,
  585.       size_t buffer_row_pitch,
  586.       size_t buffer_slice_pitch,
  587.       size_t host_row_pitch,
  588.       size_t host_slice_pitch,
  589.       void *ptr,
  590.       cl_uint num_events_in_wait_list,
  591.       const cl_event *event_wait_list,
  592.       cl_event *event);
  593.  
  594.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWriteBufferRect)(
  595.       cl_command_queue command_queue,
  596.       cl_mem buffer,
  597.       cl_bool blocking_read,
  598.       const size_t *buffer_origin,
  599.       const size_t *host_origin,
  600.       const size_t *region,
  601.       size_t buffer_row_pitch,
  602.       size_t buffer_slice_pitch,
  603.       size_t host_row_pitch,
  604.       size_t host_slice_pitch,
  605.       const void *ptr,
  606.       cl_uint num_events_in_wait_list,
  607.       const cl_event *event_wait_list,
  608.       cl_event *event);
  609.  
  610.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyBufferRect)(
  611.       cl_command_queue command_queue,
  612.       cl_mem src_buffer,
  613.       cl_mem dst_buffer,
  614.       const size_t *src_origin,
  615.       const size_t *dst_origin,
  616.       const size_t *region,
  617.       size_t src_row_pitch,
  618.       size_t src_slice_pitch,
  619.       size_t dst_row_pitch,
  620.       size_t dst_slice_pitch,
  621.       cl_uint num_events_in_wait_list,
  622.       const cl_event *event_wait_list,
  623.       cl_event *event);
  624.  
  625.    CL_API_ENTRY cl_int (CL_API_CALL *clCreateSubDevicesEXT)(
  626.       cl_device_id in_device,
  627.       const cl_device_partition_property_ext *partition_properties,
  628.       cl_uint num_entries,
  629.       cl_device_id *out_devices,
  630.       cl_uint *num_devices);
  631.  
  632.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainDeviceEXT)(
  633.       cl_device_id device);
  634.  
  635.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseDeviceEXT)(
  636.       cl_device_id device);
  637.  
  638.    CL_API_ENTRY cl_event (CL_API_CALL *clCreateEventFromGLsyncKHR)(
  639.       cl_context context,
  640.       cl_GLsync sync,
  641.       cl_int *errcode_ret);
  642.  
  643.     CL_API_ENTRY cl_int (CL_API_CALL *clCreateSubDevices)(
  644.        cl_device_id in_device,
  645.        const cl_device_partition_property *partition_properties,
  646.        cl_uint num_entries,
  647.        cl_device_id *out_devices,
  648.        cl_uint *num_devices);
  649.  
  650.    CL_API_ENTRY cl_int (CL_API_CALL *clRetainDevice)(
  651.       cl_device_id device);
  652.  
  653.    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseDevice)(
  654.       cl_device_id device);
  655.  
  656.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateImage)(
  657.       cl_context context,
  658.       cl_mem_flags flags,
  659.       const cl_image_format *image_format,
  660.       const cl_image_desc *image_desc,
  661.       void *host_ptr,
  662.       cl_int *errcode_ret);
  663.  
  664.    CL_API_ENTRY cl_program (CL_API_CALL *clCreateProgramWithBuiltInKernels)(
  665.       cl_context context,
  666.       cl_uint num_devices,
  667.       const cl_device_id *device_list,
  668.       const char *kernel_names,
  669.       cl_int *errcode_ret);
  670.  
  671.    CL_API_ENTRY cl_int (CL_API_CALL *clCompileProgram)(
  672.       cl_program program,
  673.       cl_uint num_devices,
  674.       const cl_device_id *device_list,
  675.       const char *options,
  676.       cl_uint num_input_headers,
  677.       const cl_program *input_headers,
  678.       const char **header_include_names,
  679.       void (CL_CALLBACK *pfn_notify)(cl_program, void *),
  680.       void *user_data);
  681.  
  682.    CL_API_ENTRY cl_program (CL_API_CALL *clLinkProgram)(
  683.       cl_context context,
  684.       cl_uint num_devices,
  685.       const cl_device_id *device_list,
  686.       const char *options,
  687.       cl_uint num_input_programs,
  688.       const cl_program *input_programs,
  689.       void (CL_CALLBACK *pfn_notify)(cl_program, void *),
  690.       void *user_data,
  691.       cl_int *errcode_ret);
  692.  
  693.    CL_API_ENTRY cl_int (CL_API_CALL *clUnloadPlatformCompiler)(
  694.       cl_platform_id platform);
  695.  
  696.    void *clGetKernelArgInfo;
  697.  
  698.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueFillBuffer)(
  699.       cl_command_queue command_queue,
  700.       cl_mem buffer,
  701.       const void *pattern,
  702.       size_t pattern_size,
  703.       size_t offset,
  704.       size_t cb,
  705.       cl_uint num_events_in_wait_list,
  706.       const cl_event *event_wait_list,
  707.       cl_event *event);
  708.  
  709.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueFillImage)(
  710.       cl_command_queue command_queue,
  711.       cl_mem image,
  712.       const void *fill_color,
  713.       const size_t origin[3],
  714.       const size_t region[3],
  715.       cl_uint num_events_in_wait_list,
  716.       const cl_event *event_wait_list,
  717.       cl_event *event);
  718.  
  719.    void *clEnqueueMigrateMemObjects;
  720.  
  721.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueMarkerWithWaitList)(
  722.       cl_command_queue command_queue,
  723.       cl_uint num_events_in_wait_list,
  724.       const cl_event *event_wait_list,
  725.       cl_event *event);
  726.  
  727.    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueBarrierWithWaitList)(
  728.       cl_command_queue command_queue,
  729.       cl_uint num_events_in_wait_list,
  730.       const cl_event *event_wait_list,
  731.       cl_event *event);
  732.  
  733.    CL_API_ENTRY void *(CL_API_CALL *clGetExtensionFunctionAddressForPlatform)(
  734.       cl_platform_id platform,
  735.       const char *function_name);
  736.  
  737.    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLTexture)(
  738.       cl_context context,
  739.       cl_mem_flags flags,
  740.       cl_GLenum target,
  741.       cl_GLint miplevel,
  742.       cl_GLuint texture,
  743.       cl_int *errcode_ret);
  744.  
  745.    void *clGetDeviceIDsFromD3D11KHR;
  746.    void *clCreateFromD3D11BufferKHR;
  747.    void *clCreateFromD3D11Texture2DKHR;
  748.    void *clCreateFromD3D11Texture3DKHR;
  749.    void *clCreateFromDX9MediaSurfaceKHR;
  750.    void *clEnqueueAcquireD3D11ObjectsKHR;
  751.    void *clEnqueueReleaseD3D11ObjectsKHR;
  752.    void *clGetDeviceIDsFromDX9MediaAdapterKHR;
  753.    void *clEnqueueAcquireDX9MediaSurfacesKHR;
  754.    void *clEnqueueReleaseDX9MediaSurfacesKHR;
  755. };
  756.  
  757. namespace clover {
  758.    extern const _cl_icd_dispatch _dispatch;
  759.  
  760.    cl_int
  761.    GetPlatformInfo(cl_platform_id d_platform, cl_platform_info param,
  762.                    size_t size, void *r_buf, size_t *r_size);
  763.  
  764.    void *
  765.    GetExtensionFunctionAddress(const char *p_name);
  766.  
  767.    cl_int
  768.    IcdGetPlatformIDsKHR(cl_uint num_entries, cl_platform_id *rd_platforms,
  769.                         cl_uint *rnum_platforms);
  770. }
  771.  
  772. #endif
  773.