1 /* Copyright 2019 The TensorFlow Authors. All Rights Reserved. 2 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 7 http://www.apache.org/licenses/LICENSE-2.0 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 ==============================================================================*/ 15 16 #ifndef TENSORFLOW_LITE_DELEGATES_GPU_CL_OPENCL_WRAPPER_H_ 17 #define TENSORFLOW_LITE_DELEGATES_GPU_CL_OPENCL_WRAPPER_H_ 18 19 #include <CL/cl.h> 20 #include <CL/cl_egl.h> 21 #include <CL/cl_ext.h> 22 #include <CL/cl_gl.h> 23 #include <CL/cl_platform.h> 24 #include "tensorflow/lite/delegates/gpu/cl/default/qcom_wrapper.h" 25 #include "tensorflow/lite/delegates/gpu/common/status.h" 26 27 namespace tflite { 28 namespace gpu { 29 namespace cl { 30 31 absl::Status LoadOpenCL(); 32 33 typedef cl_int(CL_API_CALL *PFN_clGetPlatformIDs)( 34 cl_uint /* num_entries */, cl_platform_id * /* platforms */, 35 cl_uint * /* num_platforms */) CL_API_SUFFIX__VERSION_1_0; 36 typedef cl_int(CL_API_CALL *PFN_clGetPlatformInfo)( 37 cl_platform_id /* platform */, cl_platform_info /* param_name */, 38 size_t /* param_value_size */, void * /* param_value */, 39 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 40 typedef cl_int(CL_API_CALL *PFN_clGetDeviceIDs)( 41 cl_platform_id /* platform */, cl_device_type /* device_type */, 42 cl_uint /* num_entries */, cl_device_id * /* devices */, 43 cl_uint * /* num_devices */) CL_API_SUFFIX__VERSION_1_0; 44 typedef cl_int(CL_API_CALL *PFN_clGetDeviceInfo)( 45 cl_device_id /* device */, cl_device_info /* param_name */, 46 size_t /* param_value_size */, void * /* param_value */, 47 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 48 typedef cl_int(CL_API_CALL *PFN_clCreateSubDevices)( 49 cl_device_id /* in_device */, 50 const cl_device_partition_property * /* properties */, 51 cl_uint /* num_devices */, cl_device_id * /* out_devices */, 52 cl_uint * /* num_devices_ret */) CL_API_SUFFIX__VERSION_1_2; 53 typedef cl_int(CL_API_CALL *PFN_clRetainDevice)(cl_device_id /* device */) 54 CL_API_SUFFIX__VERSION_1_2; 55 typedef cl_int(CL_API_CALL *PFN_clReleaseDevice)(cl_device_id /* device */) 56 CL_API_SUFFIX__VERSION_1_2; 57 typedef cl_context(CL_API_CALL *PFN_clCreateContext)( 58 const cl_context_properties * /* properties */, cl_uint /* num_devices */, 59 const cl_device_id * /* devices */, 60 void(CL_CALLBACK * /* pfn_notify */)(const char *, const void *, size_t, 61 void *), 62 void * /* user_data */, 63 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; 64 typedef cl_context(CL_API_CALL *PFN_clCreateContextFromType)( 65 const cl_context_properties * /* properties */, 66 cl_device_type /* device_type */, 67 void(CL_CALLBACK * /* pfn_notify*/)(const char *, const void *, size_t, 68 void *), 69 void * /* user_data */, 70 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; 71 typedef cl_int(CL_API_CALL *PFN_clRetainContext)(cl_context /* context */) 72 CL_API_SUFFIX__VERSION_1_0; 73 typedef cl_int(CL_API_CALL *PFN_clReleaseContext)(cl_context /* context */) 74 CL_API_SUFFIX__VERSION_1_0; 75 typedef cl_int(CL_API_CALL *PFN_clGetContextInfo)( 76 cl_context /* context */, cl_context_info /* param_name */, 77 size_t /* param_value_size */, void * /* param_value */, 78 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 79 typedef cl_command_queue(CL_API_CALL *PFN_clCreateCommandQueueWithProperties)( 80 cl_context /* context */, cl_device_id /* device */, 81 const cl_queue_properties * /* properties */, 82 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0; 83 typedef cl_int(CL_API_CALL *PFN_clRetainCommandQueue)( 84 cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; 85 typedef cl_int(CL_API_CALL *PFN_clReleaseCommandQueue)( 86 cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; 87 typedef cl_int(CL_API_CALL *PFN_clGetCommandQueueInfo)( 88 cl_command_queue /* command_queue */, 89 cl_command_queue_info /* param_name */, size_t /* param_value_size */, 90 void * /* param_value */, 91 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 92 typedef cl_mem(CL_API_CALL *PFN_clCreateBuffer)( 93 cl_context /* context */, cl_mem_flags /* flags */, size_t /* size */, 94 void * /* host_ptr */, 95 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; 96 typedef cl_mem(CL_API_CALL *PFN_clCreateSubBuffer)( 97 cl_mem /* buffer */, cl_mem_flags /* flags */, 98 cl_buffer_create_type /* buffer_create_type */, 99 const void * /* buffer_create_info */, 100 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1; 101 typedef cl_mem(CL_API_CALL *PFN_clCreateImage)( 102 cl_context /* context */, cl_mem_flags /* flags */, 103 const cl_image_format * /* image_format */, 104 const cl_image_desc * /* image_desc */, void * /* host_ptr */, 105 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2; 106 typedef cl_mem(CL_API_CALL *PFN_clCreatePipe)( 107 cl_context /* context */, cl_mem_flags /* flags */, 108 cl_uint /* pipe_packet_size */, cl_uint /* pipe_max_packets */, 109 const cl_pipe_properties * /* properties */, 110 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0; 111 typedef cl_int(CL_API_CALL *PFN_clRetainMemObject)(cl_mem /* memobj */) 112 CL_API_SUFFIX__VERSION_1_0; 113 typedef cl_int(CL_API_CALL *PFN_clReleaseMemObject)(cl_mem /* memobj */) 114 CL_API_SUFFIX__VERSION_1_0; 115 typedef cl_int(CL_API_CALL *PFN_clGetSupportedImageFormats)( 116 cl_context /* context */, cl_mem_flags /* flags */, 117 cl_mem_object_type /* image_type */, cl_uint /* num_entries */, 118 cl_image_format * /* image_formats */, 119 cl_uint * /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0; 120 typedef cl_int(CL_API_CALL *PFN_clGetMemObjectInfo)( 121 cl_mem /* memobj */, cl_mem_info /* param_name */, 122 size_t /* param_value_size */, void * /* param_value */, 123 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 124 typedef cl_int(CL_API_CALL *PFN_clGetImageInfo)( 125 cl_mem /* image */, cl_image_info /* param_name */, 126 size_t /* param_value_size */, void * /* param_value */, 127 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 128 typedef cl_int(CL_API_CALL *PFN_clGetPipeInfo)( 129 cl_mem /* pipe */, cl_pipe_info /* param_name */, 130 size_t /* param_value_size */, void * /* param_value */, 131 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0; 132 typedef cl_int(CL_API_CALL *PFN_clSetMemObjectDestructorCallback)( 133 cl_mem /* memobj */, 134 void(CL_CALLBACK * /*pfn_notify*/)(cl_mem /* memobj */, 135 void * /*user_data*/), 136 void * /*user_data */) CL_API_SUFFIX__VERSION_1_1; 137 typedef void *(CL_API_CALL *PFN_clSVMAlloc)( 138 cl_context /* context */, cl_svm_mem_flags /* flags */, size_t /* size */, 139 cl_uint /* alignment */)CL_API_SUFFIX__VERSION_2_0; 140 typedef void(CL_API_CALL *PFN_clSVMFree)(cl_context /* context */, 141 void * /* svm_pointer */) 142 CL_API_SUFFIX__VERSION_2_0; 143 typedef cl_sampler(CL_API_CALL *PFN_clCreateSamplerWithProperties)( 144 cl_context /* context */, 145 const cl_sampler_properties * /* normalized_coords */, 146 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0; 147 typedef cl_int(CL_API_CALL *PFN_clRetainSampler)(cl_sampler /* sampler */) 148 CL_API_SUFFIX__VERSION_1_0; 149 typedef cl_int(CL_API_CALL *PFN_clReleaseSampler)(cl_sampler /* sampler */) 150 CL_API_SUFFIX__VERSION_1_0; 151 typedef cl_int(CL_API_CALL *PFN_clGetSamplerInfo)( 152 cl_sampler /* sampler */, cl_sampler_info /* param_name */, 153 size_t /* param_value_size */, void * /* param_value */, 154 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 155 typedef cl_program(CL_API_CALL *PFN_clCreateProgramWithSource)( 156 cl_context /* context */, cl_uint /* count */, const char ** /* strings */, 157 const size_t * /* lengths */, 158 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; 159 typedef cl_program(CL_API_CALL *PFN_clCreateProgramWithBinary)( 160 cl_context /* context */, cl_uint /* num_devices */, 161 const cl_device_id * /* device_list */, const size_t * /* lengths */, 162 const unsigned char ** /* binaries */, cl_int * /* binary_status */, 163 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; 164 typedef cl_program(CL_API_CALL *PFN_clCreateProgramWithBuiltInKernels)( 165 cl_context /* context */, cl_uint /* num_devices */, 166 const cl_device_id * /* device_list */, const char * /* kernel_names */, 167 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2; 168 typedef cl_int(CL_API_CALL *PFN_clRetainProgram)(cl_program /* program */) 169 CL_API_SUFFIX__VERSION_1_0; 170 typedef cl_int(CL_API_CALL *PFN_clReleaseProgram)(cl_program /* program */) 171 CL_API_SUFFIX__VERSION_1_0; 172 typedef cl_int(CL_API_CALL *PFN_clBuildProgram)( 173 cl_program /* program */, cl_uint /* num_devices */, 174 const cl_device_id * /* device_list */, const char * /* options */, 175 void(CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, 176 void * /* user_data */), 177 void * /* user_data */) CL_API_SUFFIX__VERSION_1_0; 178 typedef cl_int(CL_API_CALL *PFN_clCompileProgram)( 179 cl_program /* program */, cl_uint /* num_devices */, 180 const cl_device_id * /* device_list */, const char * /* options */, 181 cl_uint /* num_input_headers */, const cl_program * /* input_headers */, 182 const char ** /* header_include_names */, 183 void(CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, 184 void * /* user_data */), 185 void * /* user_data */) CL_API_SUFFIX__VERSION_1_2; 186 typedef cl_program(CL_API_CALL *PFN_clLinkProgram)( 187 cl_context /* context */, cl_uint /* num_devices */, 188 const cl_device_id * /* device_list */, const char * /* options */, 189 cl_uint /* num_input_programs */, const cl_program * /* input_programs */, 190 void(CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, 191 void * /* user_data */), 192 void * /* user_data */, 193 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2; 194 typedef cl_int(CL_API_CALL *PFN_clUnloadPlatformCompiler)( 195 cl_platform_id /* platform */) CL_API_SUFFIX__VERSION_1_2; 196 typedef cl_int(CL_API_CALL *PFN_clGetProgramInfo)( 197 cl_program /* program */, cl_program_info /* param_name */, 198 size_t /* param_value_size */, void * /* param_value */, 199 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 200 typedef cl_int(CL_API_CALL *PFN_clGetProgramBuildInfo)( 201 cl_program /* program */, cl_device_id /* device */, 202 cl_program_build_info /* param_name */, size_t /* param_value_size */, 203 void * /* param_value */, 204 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 205 typedef cl_kernel(CL_API_CALL *PFN_clCreateKernel)( 206 cl_program /* program */, const char * /* kernel_name */, 207 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; 208 typedef cl_int(CL_API_CALL *PFN_clCreateKernelsInProgram)( 209 cl_program /* program */, cl_uint /* num_kernels */, 210 cl_kernel * /* kernels */, 211 cl_uint * /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0; 212 typedef cl_int(CL_API_CALL *PFN_clRetainKernel)(cl_kernel /* kernel */) 213 CL_API_SUFFIX__VERSION_1_0; 214 typedef cl_int(CL_API_CALL *PFN_clReleaseKernel)(cl_kernel /* kernel */) 215 CL_API_SUFFIX__VERSION_1_0; 216 typedef cl_int(CL_API_CALL *PFN_clSetKernelArg)( 217 cl_kernel /* kernel */, cl_uint /* arg_index */, size_t /* arg_size */, 218 const void * /* arg_value */) CL_API_SUFFIX__VERSION_1_0; 219 typedef cl_int(CL_API_CALL *PFN_clSetKernelArgSVMPointer)( 220 cl_kernel /* kernel */, cl_uint /* arg_index */, 221 const void * /* arg_value */) CL_API_SUFFIX__VERSION_2_0; 222 typedef cl_int(CL_API_CALL *PFN_clSetKernelExecInfo)( 223 cl_kernel /* kernel */, cl_kernel_exec_info /* param_name */, 224 size_t /* param_value_size */, 225 const void * /* param_value */) CL_API_SUFFIX__VERSION_2_0; 226 typedef cl_int(CL_API_CALL *PFN_clGetKernelInfo)( 227 cl_kernel /* kernel */, cl_kernel_info /* param_name */, 228 size_t /* param_value_size */, void * /* param_value */, 229 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 230 typedef cl_int(CL_API_CALL *PFN_clGetKernelArgInfo)( 231 cl_kernel /* kernel */, cl_uint /* arg_indx */, 232 cl_kernel_arg_info /* param_name */, size_t /* param_value_size */, 233 void * /* param_value */, 234 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_2; 235 typedef cl_int(CL_API_CALL *PFN_clGetKernelWorkGroupInfo)( 236 cl_kernel /* kernel */, cl_device_id /* device */, 237 cl_kernel_work_group_info /* param_name */, size_t /* param_value_size */, 238 void * /* param_value */, 239 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 240 typedef cl_int(CL_API_CALL *PFN_clWaitForEvents)( 241 cl_uint /* num_events */, 242 const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0; 243 typedef cl_int(CL_API_CALL *PFN_clGetEventInfo)( 244 cl_event /* event */, cl_event_info /* param_name */, 245 size_t /* param_value_size */, void * /* param_value */, 246 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 247 typedef cl_event(CL_API_CALL *PFN_clCreateUserEvent)(cl_context /* context */, 248 cl_int * /* errcode_ret */) 249 CL_API_SUFFIX__VERSION_1_1; 250 typedef cl_int(CL_API_CALL *PFN_clRetainEvent)(cl_event /* event */) 251 CL_API_SUFFIX__VERSION_1_0; 252 typedef cl_int(CL_API_CALL *PFN_clReleaseEvent)(cl_event /* event */) 253 CL_API_SUFFIX__VERSION_1_0; 254 typedef cl_int(CL_API_CALL *PFN_clSetUserEventStatus)( 255 cl_event /* event */, 256 cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1; 257 typedef cl_int(CL_API_CALL *PFN_clSetEventCallback)( 258 cl_event /* event */, cl_int /* command_exec_callback_type */, 259 void(CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *), 260 void * /* user_data */) CL_API_SUFFIX__VERSION_1_1; 261 typedef cl_int(CL_API_CALL *PFN_clGetEventProfilingInfo)( 262 cl_event /* event */, cl_profiling_info /* param_name */, 263 size_t /* param_value_size */, void * /* param_value */, 264 size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; 265 typedef cl_int(CL_API_CALL *PFN_clFlush)(cl_command_queue /* command_queue */) 266 CL_API_SUFFIX__VERSION_1_0; 267 typedef cl_int(CL_API_CALL *PFN_clFinish)(cl_command_queue /* command_queue */) 268 CL_API_SUFFIX__VERSION_1_0; 269 typedef cl_int(CL_API_CALL *PFN_clEnqueueReadBuffer)( 270 cl_command_queue /* command_queue */, cl_mem /* buffer */, 271 cl_bool /* blocking_read */, size_t /* offset */, size_t /* size */, 272 void * /* ptr */, cl_uint /* num_events_in_wait_list */, 273 const cl_event * /* event_wait_list */, 274 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 275 typedef cl_int(CL_API_CALL *PFN_clEnqueueReadBufferRect)( 276 cl_command_queue /* command_queue */, cl_mem /* buffer */, 277 cl_bool /* blocking_read */, const size_t * /* buffer_offset */, 278 const size_t * /* host_offset */, const size_t * /* region */, 279 size_t /* buffer_row_pitch */, size_t /* buffer_slice_pitch */, 280 size_t /* host_row_pitch */, size_t /* host_slice_pitch */, 281 void * /* ptr */, cl_uint /* num_events_in_wait_list */, 282 const cl_event * /* event_wait_list */, 283 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1; 284 typedef cl_int(CL_API_CALL *PFN_clEnqueueWriteBuffer)( 285 cl_command_queue /* command_queue */, cl_mem /* buffer */, 286 cl_bool /* blocking_write */, size_t /* offset */, size_t /* size */, 287 const void * /* ptr */, cl_uint /* num_events_in_wait_list */, 288 const cl_event * /* event_wait_list */, 289 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 290 typedef cl_int(CL_API_CALL *PFN_clEnqueueWriteBufferRect)( 291 cl_command_queue /* command_queue */, cl_mem /* buffer */, 292 cl_bool /* blocking_write */, const size_t * /* buffer_offset */, 293 const size_t * /* host_offset */, const size_t * /* region */, 294 size_t /* buffer_row_pitch */, size_t /* buffer_slice_pitch */, 295 size_t /* host_row_pitch */, size_t /* host_slice_pitch */, 296 const void * /* ptr */, cl_uint /* num_events_in_wait_list */, 297 const cl_event * /* event_wait_list */, 298 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1; 299 typedef cl_int(CL_API_CALL *PFN_clEnqueueFillBuffer)( 300 cl_command_queue /* command_queue */, cl_mem /* buffer */, 301 const void * /* pattern */, size_t /* pattern_size */, size_t /* offset */, 302 size_t /* size */, cl_uint /* num_events_in_wait_list */, 303 const cl_event * /* event_wait_list */, 304 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_2; 305 typedef cl_int(CL_API_CALL *PFN_clEnqueueCopyBuffer)( 306 cl_command_queue /* command_queue */, cl_mem /* src_buffer */, 307 cl_mem /* dst_buffer */, size_t /* src_offset */, size_t /* dst_offset */, 308 size_t /* size */, cl_uint /* num_events_in_wait_list */, 309 const cl_event * /* event_wait_list */, 310 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 311 typedef cl_int(CL_API_CALL *PFN_clEnqueueCopyBufferRect)( 312 cl_command_queue /* command_queue */, cl_mem /* src_buffer */, 313 cl_mem /* dst_buffer */, const size_t * /* src_origin */, 314 const size_t * /* dst_origin */, const size_t * /* region */, 315 size_t /* src_row_pitch */, size_t /* src_slice_pitch */, 316 size_t /* dst_row_pitch */, size_t /* dst_slice_pitch */, 317 cl_uint /* num_events_in_wait_list */, 318 const cl_event * /* event_wait_list */, 319 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1; 320 typedef cl_int(CL_API_CALL *PFN_clEnqueueReadImage)( 321 cl_command_queue /* command_queue */, cl_mem /* image */, 322 cl_bool /* blocking_read */, const size_t * /* origin[3] */, 323 const size_t * /* region[3] */, size_t /* row_pitch */, 324 size_t /* slice_pitch */, void * /* ptr */, 325 cl_uint /* num_events_in_wait_list */, 326 const cl_event * /* event_wait_list */, 327 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 328 typedef cl_int(CL_API_CALL *PFN_clEnqueueWriteImage)( 329 cl_command_queue /* command_queue */, cl_mem /* image */, 330 cl_bool /* blocking_write */, const size_t * /* origin[3] */, 331 const size_t * /* region[3] */, size_t /* input_row_pitch */, 332 size_t /* input_slice_pitch */, const void * /* ptr */, 333 cl_uint /* num_events_in_wait_list */, 334 const cl_event * /* event_wait_list */, 335 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 336 typedef cl_int(CL_API_CALL *PFN_clEnqueueFillImage)( 337 cl_command_queue /* command_queue */, cl_mem /* image */, 338 const void * /* fill_color */, const size_t * /* origin[3] */, 339 const size_t * /* region[3] */, cl_uint /* num_events_in_wait_list */, 340 const cl_event * /* event_wait_list */, 341 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_2; 342 typedef cl_int(CL_API_CALL *PFN_clEnqueueCopyImage)( 343 cl_command_queue /* command_queue */, cl_mem /* src_image */, 344 cl_mem /* dst_image */, const size_t * /* src_origin[3] */, 345 const size_t * /* dst_origin[3] */, const size_t * /* region[3] */, 346 cl_uint /* num_events_in_wait_list */, 347 const cl_event * /* event_wait_list */, 348 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 349 typedef cl_int(CL_API_CALL *PFN_clEnqueueCopyImageToBuffer)( 350 cl_command_queue /* command_queue */, cl_mem /* src_image */, 351 cl_mem /* dst_buffer */, const size_t * /* src_origin[3] */, 352 const size_t * /* region[3] */, size_t /* dst_offset */, 353 cl_uint /* num_events_in_wait_list */, 354 const cl_event * /* event_wait_list */, 355 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 356 typedef cl_int(CL_API_CALL *PFN_clEnqueueCopyBufferToImage)( 357 cl_command_queue /* command_queue */, cl_mem /* src_buffer */, 358 cl_mem /* dst_image */, size_t /* src_offset */, 359 const size_t * /* dst_origin[3] */, const size_t * /* region[3] */, 360 cl_uint /* num_events_in_wait_list */, 361 const cl_event * /* event_wait_list */, 362 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 363 typedef void *(CL_API_CALL *PFN_clEnqueueMapBuffer)( 364 cl_command_queue /* command_queue */, cl_mem /* buffer */, 365 cl_bool /* blocking_map */, cl_map_flags /* map_flags */, 366 size_t /* offset */, size_t /* size */, 367 cl_uint /* num_events_in_wait_list */, 368 const cl_event * /* event_wait_list */, cl_event * /* event */, 369 cl_int * /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0; 370 typedef void *(CL_API_CALL *PFN_clEnqueueMapImage)( 371 cl_command_queue /* command_queue */, cl_mem /* image */, 372 cl_bool /* blocking_map */, cl_map_flags /* map_flags */, 373 const size_t * /* origin[3] */, const size_t * /* region[3] */, 374 size_t * /* image_row_pitch */, size_t * /* image_slice_pitch */, 375 cl_uint /* num_events_in_wait_list */, 376 const cl_event * /* event_wait_list */, cl_event * /* event */, 377 cl_int * /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0; 378 typedef cl_int(CL_API_CALL *PFN_clEnqueueUnmapMemObject)( 379 cl_command_queue /* command_queue */, cl_mem /* memobj */, 380 void * /* mapped_ptr */, cl_uint /* num_events_in_wait_list */, 381 const cl_event * /* event_wait_list */, 382 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 383 typedef cl_int(CL_API_CALL *PFN_clEnqueueMigrateMemObjects)( 384 cl_command_queue /* command_queue */, cl_uint /* num_mem_objects */, 385 const cl_mem * /* mem_objects */, cl_mem_migration_flags /* flags */, 386 cl_uint /* num_events_in_wait_list */, 387 const cl_event * /* event_wait_list */, 388 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_2; 389 typedef cl_int(CL_API_CALL *PFN_clEnqueueNDRangeKernel)( 390 cl_command_queue /* command_queue */, cl_kernel /* kernel */, 391 cl_uint /* work_dim */, const size_t * /* global_work_offset */, 392 const size_t * /* global_work_size */, const size_t * /* local_work_size */, 393 cl_uint /* num_events_in_wait_list */, 394 const cl_event * /* event_wait_list */, 395 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 396 typedef cl_int(CL_API_CALL *PFN_clEnqueueNativeKernel)( 397 cl_command_queue /* command_queue */, 398 void(CL_CALLBACK * /*user_func*/)(void *), void * /* args */, 399 size_t /* cb_args */, cl_uint /* num_mem_objects */, 400 const cl_mem * /* mem_list */, const void ** /* args_mem_loc */, 401 cl_uint /* num_events_in_wait_list */, 402 const cl_event * /* event_wait_list */, 403 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 404 typedef cl_int(CL_API_CALL *PFN_clEnqueueMarkerWithWaitList)( 405 cl_command_queue /* command_queue */, cl_uint /* num_events_in_wait_list */, 406 const cl_event * /* event_wait_list */, 407 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_2; 408 typedef cl_int(CL_API_CALL *PFN_clEnqueueBarrierWithWaitList)( 409 cl_command_queue /* command_queue */, cl_uint /* num_events_in_wait_list */, 410 const cl_event * /* event_wait_list */, 411 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_2; 412 typedef cl_int(CL_API_CALL *PFN_clEnqueueSVMFree)( 413 cl_command_queue /* command_queue */, cl_uint /* num_svm_pointers */, 414 void *[] /* svm_pointers[] */, 415 void(CL_CALLBACK * /*pfn_free_func*/)(cl_command_queue /* queue */, 416 cl_uint /* num_svm_pointers */, 417 void *[] /* svm_pointers[] */, 418 void * /* user_data */), 419 void * /* user_data */, cl_uint /* num_events_in_wait_list */, 420 const cl_event * /* event_wait_list */, 421 cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; 422 typedef cl_int(CL_API_CALL *PFN_clEnqueueSVMMemcpy)( 423 cl_command_queue /* command_queue */, cl_bool /* blocking_copy */, 424 void * /* dst_ptr */, const void * /* src_ptr */, size_t /* size */, 425 cl_uint /* num_events_in_wait_list */, 426 const cl_event * /* event_wait_list */, 427 cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; 428 typedef cl_int(CL_API_CALL *PFN_clEnqueueSVMMemFill)( 429 cl_command_queue /* command_queue */, void * /* svm_ptr */, 430 const void * /* pattern */, size_t /* pattern_size */, size_t /* size */, 431 cl_uint /* num_events_in_wait_list */, 432 const cl_event * /* event_wait_list */, 433 cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; 434 typedef cl_int(CL_API_CALL *PFN_clEnqueueSVMMap)( 435 cl_command_queue /* command_queue */, cl_bool /* blocking_map */, 436 cl_map_flags /* flags */, void * /* svm_ptr */, size_t /* size */, 437 cl_uint /* num_events_in_wait_list */, 438 const cl_event * /* event_wait_list */, 439 cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; 440 typedef cl_int(CL_API_CALL *PFN_clEnqueueSVMUnmap)( 441 cl_command_queue /* command_queue */, void * /* svm_ptr */, 442 cl_uint /* num_events_in_wait_list */, 443 const cl_event * /* event_wait_list */, 444 cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; 445 typedef void *(CL_API_CALL *PFN_clGetExtensionFunctionAddressForPlatform)( 446 cl_platform_id /* platform */, 447 const char * /* func_name */)CL_API_SUFFIX__VERSION_1_2; 448 typedef cl_mem(CL_API_CALL *PFN_clCreateImage2D)( 449 cl_context /* context */, cl_mem_flags /* flags */, 450 const cl_image_format * /* image_format */, size_t /* image_width */, 451 size_t /* image_height */, size_t /* image_row_pitch */, 452 void * /* host_ptr */, cl_int * /* errcode_ret */); 453 typedef cl_mem(CL_API_CALL *PFN_clCreateImage3D)( 454 cl_context /* context */, cl_mem_flags /* flags */, 455 const cl_image_format * /* image_format */, size_t /* image_width */, 456 size_t /* image_height */, size_t /* image_depth */, 457 size_t /* image_row_pitch */, size_t /* image_slice_pitch */, 458 void * /* host_ptr */, cl_int * /* errcode_ret */); 459 typedef cl_int(CL_API_CALL *PFN_clEnqueueMarker)( 460 cl_command_queue /* command_queue */, cl_event * /* event */); 461 typedef cl_int(CL_API_CALL *PFN_clEnqueueWaitForEvents)( 462 cl_command_queue /* command_queue */, cl_uint /* num_events */, 463 const cl_event * /* event_list */); 464 typedef cl_int(CL_API_CALL *PFN_clEnqueueBarrier)( 465 cl_command_queue /* command_queue */); 466 typedef cl_int(CL_API_CALL *PFN_clUnloadCompiler)(); 467 typedef void *(CL_API_CALL *PFN_clGetExtensionFunctionAddress)( 468 const char * /* func_name */); 469 typedef cl_command_queue(CL_API_CALL *PFN_clCreateCommandQueue)( 470 cl_context /* context */, cl_device_id /* device */, 471 cl_command_queue_properties /* properties */, cl_int * /* errcode_ret */); 472 typedef cl_sampler(CL_API_CALL *PFN_clCreateSampler)( 473 cl_context /* context */, cl_bool /* normalized_coords */, 474 cl_addressing_mode /* addressing_mode */, cl_filter_mode /* filter_mode */, 475 cl_int * /* errcode_ret */); 476 typedef cl_int(CL_API_CALL *PFN_clEnqueueTask)( 477 cl_command_queue /* command_queue */, cl_kernel /* kernel */, 478 cl_uint /* num_events_in_wait_list */, 479 const cl_event * /* event_wait_list */, cl_event * /* event */); 480 481 // OpenGL sharing 482 typedef cl_mem(CL_API_CALL *PFN_clCreateFromGLBuffer)(cl_context, cl_mem_flags, 483 cl_GLuint, int *); 484 typedef cl_mem(CL_API_CALL *PFN_clCreateFromGLTexture)( 485 cl_context /* context */, cl_mem_flags /* flags */, cl_GLenum /* target */, 486 cl_GLint /* miplevel */, cl_GLuint /* texture */, 487 cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2; 488 typedef cl_int(CL_API_CALL *PFN_clEnqueueAcquireGLObjects)( 489 cl_command_queue /* command_queue */, cl_uint /* num_objects */, 490 const cl_mem * /* mem_objects */, cl_uint /* num_events_in_wait_list */, 491 const cl_event * /* event_wait_list */, cl_event * /* event */); 492 typedef cl_int(CL_API_CALL *PFN_clEnqueueReleaseGLObjects)( 493 cl_command_queue /* command_queue */, cl_uint /* num_objects */, 494 const cl_mem * /* mem_objects */, cl_uint /* num_events_in_wait_list */, 495 const cl_event * /* event_wait_list */, 496 cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; 497 498 // cl_khr_egl_event extension 499 500 // CLeglDisplayKHR is an opaque handle to an EGLDisplay 501 typedef void *CLeglDisplayKHR; 502 503 // CLeglSyncKHR is an opaque handle to an EGLSync object 504 typedef void *CLeglSyncKHR; 505 506 typedef cl_event(CL_API_CALL *PFN_clCreateEventFromEGLSyncKHR)( 507 cl_context /* context */, CLeglSyncKHR /* sync */, 508 CLeglDisplayKHR /* display */, cl_int * /* errcode_ret */); 509 510 // EGL sharing 511 typedef cl_mem(CL_API_CALL *PFN_clCreateFromEGLImageKHR)( 512 cl_context /*context*/, CLeglDisplayKHR /*display*/, 513 CLeglImageKHR /*image*/, cl_mem_flags /*flags*/, 514 const cl_egl_image_properties_khr * /*properties*/, 515 cl_int * /*errcode_ret*/); 516 typedef cl_int(CL_API_CALL *PFN_clEnqueueAcquireEGLObjectsKHR)( 517 cl_command_queue /*command_queue*/, cl_uint /*num_objects*/, 518 const cl_mem * /*mem_objects*/, cl_uint /*num_events_in_wait_list*/, 519 const cl_event * /*event_wait_list*/, cl_event * /*event*/); 520 typedef cl_int(CL_API_CALL *PFN_clEnqueueReleaseEGLObjectsKHR)( 521 cl_command_queue /*command_queue*/, cl_uint /*num_objects*/, 522 const cl_mem * /*mem_objects*/, cl_uint /*num_events_in_wait_list*/, 523 const cl_event * /*event_wait_list*/, cl_event * /*event*/); 524 525 // cl_khr_command_buffer 526 typedef cl_command_buffer_khr(CL_API_CALL *PFN_clCreateCommandBufferKHR)( 527 cl_uint /*num_queues*/, const cl_command_queue * /*queues*/, 528 const cl_command_buffer_properties_khr * /*properties*/, 529 cl_int * /*errcode_ret*/); 530 531 typedef cl_int(CL_API_CALL *PFN_clRetainCommandBufferKHR)( 532 cl_command_buffer_khr /*command_buffer*/); 533 534 typedef cl_int(CL_API_CALL *PFN_clReleaseCommandBufferKHR)( 535 cl_command_buffer_khr /*command_buffer*/); 536 537 typedef cl_int(CL_API_CALL *PFN_clFinalizeCommandBufferKHR)( 538 cl_command_buffer_khr /*command_buffer*/); 539 540 typedef cl_int(CL_API_CALL *PFN_clEnqueueCommandBufferKHR)( 541 cl_uint /*num_queues*/, cl_command_queue * /*queues*/, 542 cl_command_buffer_khr /*command_buffer*/, 543 cl_uint /*num_events_in_wait_list*/, const cl_event * /*event_wait_list*/, 544 cl_event * /*event*/); 545 546 typedef cl_int(CL_API_CALL *PFN_clCommandNDRangeKernelKHR)( 547 cl_command_buffer_khr /*command_buffer*/, 548 cl_command_queue /*command_queue*/, 549 const cl_ndrange_kernel_command_properties_khr * /*properties*/, 550 cl_kernel /*kernel*/, cl_uint /*work_dim*/, 551 const size_t * /*global_work_offset*/, const size_t * /*global_work_size*/, 552 const size_t * /*local_work_size*/, 553 cl_uint /*num_sync_points_in_wait_list*/, 554 const cl_sync_point_khr * /*sync_point_wait_list*/, 555 cl_sync_point_khr * /*sync_point*/, 556 cl_mutable_command_khr * /*mutable_handle*/); 557 558 typedef cl_int(CL_API_CALL *PFN_clGetCommandBufferInfoKHR)( 559 cl_command_buffer_khr /*command_buffer*/, 560 cl_command_buffer_info_khr /*param_name*/, size_t /*param_value_size*/, 561 void * /*param_value*/, size_t * /*param_value_size_ret*/); 562 563 extern PFN_clGetPlatformIDs clGetPlatformIDs; 564 extern PFN_clGetPlatformInfo clGetPlatformInfo; 565 extern PFN_clGetDeviceIDs clGetDeviceIDs; 566 extern PFN_clGetDeviceInfo clGetDeviceInfo; 567 extern PFN_clCreateSubDevices clCreateSubDevices; 568 extern PFN_clRetainDevice clRetainDevice; 569 extern PFN_clReleaseDevice clReleaseDevice; 570 extern PFN_clCreateContext clCreateContext; 571 extern PFN_clCreateContextFromType clCreateContextFromType; 572 extern PFN_clRetainContext clRetainContext; 573 extern PFN_clReleaseContext clReleaseContext; 574 extern PFN_clGetContextInfo clGetContextInfo; 575 extern PFN_clCreateCommandQueueWithProperties 576 clCreateCommandQueueWithProperties; 577 extern PFN_clRetainCommandQueue clRetainCommandQueue; 578 extern PFN_clReleaseCommandQueue clReleaseCommandQueue; 579 extern PFN_clGetCommandQueueInfo clGetCommandQueueInfo; 580 extern PFN_clCreateBuffer clCreateBuffer; 581 extern PFN_clCreateSubBuffer clCreateSubBuffer; 582 extern PFN_clCreateImage clCreateImage; 583 extern PFN_clCreatePipe clCreatePipe; 584 extern PFN_clRetainMemObject clRetainMemObject; 585 extern PFN_clReleaseMemObject clReleaseMemObject; 586 extern PFN_clGetSupportedImageFormats clGetSupportedImageFormats; 587 extern PFN_clGetMemObjectInfo clGetMemObjectInfo; 588 extern PFN_clGetImageInfo clGetImageInfo; 589 extern PFN_clGetPipeInfo clGetPipeInfo; 590 extern PFN_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback; 591 extern PFN_clSVMAlloc clSVMAlloc; 592 extern PFN_clSVMFree clSVMFree; 593 extern PFN_clCreateSamplerWithProperties clCreateSamplerWithProperties; 594 extern PFN_clRetainSampler clRetainSampler; 595 extern PFN_clReleaseSampler clReleaseSampler; 596 extern PFN_clGetSamplerInfo clGetSamplerInfo; 597 extern PFN_clCreateProgramWithSource clCreateProgramWithSource; 598 extern PFN_clCreateProgramWithBinary clCreateProgramWithBinary; 599 extern PFN_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels; 600 extern PFN_clRetainProgram clRetainProgram; 601 extern PFN_clReleaseProgram clReleaseProgram; 602 extern PFN_clBuildProgram clBuildProgram; 603 extern PFN_clCompileProgram clCompileProgram; 604 extern PFN_clLinkProgram clLinkProgram; 605 extern PFN_clUnloadPlatformCompiler clUnloadPlatformCompiler; 606 extern PFN_clGetProgramInfo clGetProgramInfo; 607 extern PFN_clGetProgramBuildInfo clGetProgramBuildInfo; 608 extern PFN_clCreateKernel clCreateKernel; 609 extern PFN_clCreateKernelsInProgram clCreateKernelsInProgram; 610 extern PFN_clRetainKernel clRetainKernel; 611 extern PFN_clReleaseKernel clReleaseKernel; 612 extern PFN_clSetKernelArg clSetKernelArg; 613 extern PFN_clSetKernelArgSVMPointer clSetKernelArgSVMPointer; 614 extern PFN_clSetKernelExecInfo clSetKernelExecInfo; 615 extern PFN_clGetKernelInfo clGetKernelInfo; 616 extern PFN_clGetKernelArgInfo clGetKernelArgInfo; 617 extern PFN_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo; 618 extern PFN_clWaitForEvents clWaitForEvents; 619 extern PFN_clGetEventInfo clGetEventInfo; 620 extern PFN_clCreateUserEvent clCreateUserEvent; 621 extern PFN_clRetainEvent clRetainEvent; 622 extern PFN_clReleaseEvent clReleaseEvent; 623 extern PFN_clSetUserEventStatus clSetUserEventStatus; 624 extern PFN_clSetEventCallback clSetEventCallback; 625 extern PFN_clGetEventProfilingInfo clGetEventProfilingInfo; 626 extern PFN_clFlush clFlush; 627 extern PFN_clFinish clFinish; 628 extern PFN_clEnqueueReadBuffer clEnqueueReadBuffer; 629 extern PFN_clEnqueueReadBufferRect clEnqueueReadBufferRect; 630 extern PFN_clEnqueueWriteBuffer clEnqueueWriteBuffer; 631 extern PFN_clEnqueueWriteBufferRect clEnqueueWriteBufferRect; 632 extern PFN_clEnqueueFillBuffer clEnqueueFillBuffer; 633 extern PFN_clEnqueueCopyBuffer clEnqueueCopyBuffer; 634 extern PFN_clEnqueueCopyBufferRect clEnqueueCopyBufferRect; 635 extern PFN_clEnqueueReadImage clEnqueueReadImage; 636 extern PFN_clEnqueueWriteImage clEnqueueWriteImage; 637 extern PFN_clEnqueueFillImage clEnqueueFillImage; 638 extern PFN_clEnqueueCopyImage clEnqueueCopyImage; 639 extern PFN_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer; 640 extern PFN_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage; 641 extern PFN_clEnqueueMapBuffer clEnqueueMapBuffer; 642 extern PFN_clEnqueueMapImage clEnqueueMapImage; 643 extern PFN_clEnqueueUnmapMemObject clEnqueueUnmapMemObject; 644 extern PFN_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects; 645 extern PFN_clEnqueueNDRangeKernel clEnqueueNDRangeKernel; 646 extern PFN_clEnqueueNativeKernel clEnqueueNativeKernel; 647 extern PFN_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList; 648 extern PFN_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList; 649 extern PFN_clEnqueueSVMFree clEnqueueSVMFree; 650 extern PFN_clEnqueueSVMMemcpy clEnqueueSVMMemcpy; 651 extern PFN_clEnqueueSVMMemFill clEnqueueSVMMemFill; 652 extern PFN_clEnqueueSVMMap clEnqueueSVMMap; 653 extern PFN_clEnqueueSVMUnmap clEnqueueSVMUnmap; 654 extern PFN_clGetExtensionFunctionAddressForPlatform 655 clGetExtensionFunctionAddressForPlatform; 656 extern PFN_clCreateImage2D clCreateImage2D; 657 extern PFN_clCreateImage3D clCreateImage3D; 658 extern PFN_clEnqueueMarker clEnqueueMarker; 659 extern PFN_clEnqueueWaitForEvents clEnqueueWaitForEvents; 660 extern PFN_clEnqueueBarrier clEnqueueBarrier; 661 extern PFN_clUnloadCompiler clUnloadCompiler; 662 extern PFN_clGetExtensionFunctionAddress clGetExtensionFunctionAddress; 663 extern PFN_clCreateCommandQueue clCreateCommandQueue; 664 extern PFN_clCreateSampler clCreateSampler; 665 extern PFN_clEnqueueTask clEnqueueTask; 666 667 // OpenGL sharing 668 extern PFN_clCreateFromGLBuffer clCreateFromGLBuffer; 669 extern PFN_clCreateFromGLTexture clCreateFromGLTexture; 670 extern PFN_clEnqueueAcquireGLObjects clEnqueueAcquireGLObjects; 671 extern PFN_clEnqueueReleaseGLObjects clEnqueueReleaseGLObjects; 672 673 // cl_khr_egl_event extension 674 extern PFN_clCreateEventFromEGLSyncKHR clCreateEventFromEGLSyncKHR; 675 676 // EGL sharing 677 extern PFN_clCreateFromEGLImageKHR clCreateFromEGLImageKHR; 678 extern PFN_clEnqueueAcquireEGLObjectsKHR clEnqueueAcquireEGLObjectsKHR; 679 extern PFN_clEnqueueReleaseEGLObjectsKHR clEnqueueReleaseEGLObjectsKHR; 680 681 // cl_khr_command_buffer extension 682 extern PFN_clCreateCommandBufferKHR clCreateCommandBufferKHR; 683 extern PFN_clRetainCommandBufferKHR clRetainCommandBufferKHR; 684 extern PFN_clReleaseCommandBufferKHR clReleaseCommandBufferKHR; 685 extern PFN_clFinalizeCommandBufferKHR clFinalizeCommandBufferKHR; 686 extern PFN_clEnqueueCommandBufferKHR clEnqueueCommandBufferKHR; 687 extern PFN_clCommandNDRangeKernelKHR clCommandNDRangeKernelKHR; 688 extern PFN_clGetCommandBufferInfoKHR clGetCommandBufferInfoKHR; 689 690 // For convenient image creation 691 // It uses clCreateImage if it available (clCreateImage available since cl 1.2) 692 // otherwise it will use legacy clCreateImage2D 693 cl_mem CreateImage2DLegacy(cl_context context, cl_mem_flags flags, 694 const cl_image_format *image_format, 695 const cl_image_desc *image_desc, void *host_ptr, 696 cl_int *errcode_ret); 697 698 // It uses clCreateImage if it available (clCreateImage available since cl 1.2) 699 // otherwise it will use legacy clCreateImage3D 700 cl_mem CreateImage3DLegacy(cl_context context, cl_mem_flags flags, 701 const cl_image_format *image_format, 702 const cl_image_desc *image_desc, void *host_ptr, 703 cl_int *errcode_ret); 704 705 } // namespace cl 706 } // namespace gpu 707 } // namespace tflite 708 709 #endif // TENSORFLOW_LITE_DELEGATES_GPU_CL_OPENCL_WRAPPER_H_ 710