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 extern PFN_clGetPlatformIDs clGetPlatformIDs; 526 extern PFN_clGetPlatformInfo clGetPlatformInfo; 527 extern PFN_clGetDeviceIDs clGetDeviceIDs; 528 extern PFN_clGetDeviceInfo clGetDeviceInfo; 529 extern PFN_clCreateSubDevices clCreateSubDevices; 530 extern PFN_clRetainDevice clRetainDevice; 531 extern PFN_clReleaseDevice clReleaseDevice; 532 extern PFN_clCreateContext clCreateContext; 533 extern PFN_clCreateContextFromType clCreateContextFromType; 534 extern PFN_clRetainContext clRetainContext; 535 extern PFN_clReleaseContext clReleaseContext; 536 extern PFN_clGetContextInfo clGetContextInfo; 537 extern PFN_clCreateCommandQueueWithProperties 538 clCreateCommandQueueWithProperties; 539 extern PFN_clRetainCommandQueue clRetainCommandQueue; 540 extern PFN_clReleaseCommandQueue clReleaseCommandQueue; 541 extern PFN_clGetCommandQueueInfo clGetCommandQueueInfo; 542 extern PFN_clCreateBuffer clCreateBuffer; 543 extern PFN_clCreateSubBuffer clCreateSubBuffer; 544 extern PFN_clCreateImage clCreateImage; 545 extern PFN_clCreatePipe clCreatePipe; 546 extern PFN_clRetainMemObject clRetainMemObject; 547 extern PFN_clReleaseMemObject clReleaseMemObject; 548 extern PFN_clGetSupportedImageFormats clGetSupportedImageFormats; 549 extern PFN_clGetMemObjectInfo clGetMemObjectInfo; 550 extern PFN_clGetImageInfo clGetImageInfo; 551 extern PFN_clGetPipeInfo clGetPipeInfo; 552 extern PFN_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback; 553 extern PFN_clSVMAlloc clSVMAlloc; 554 extern PFN_clSVMFree clSVMFree; 555 extern PFN_clCreateSamplerWithProperties clCreateSamplerWithProperties; 556 extern PFN_clRetainSampler clRetainSampler; 557 extern PFN_clReleaseSampler clReleaseSampler; 558 extern PFN_clGetSamplerInfo clGetSamplerInfo; 559 extern PFN_clCreateProgramWithSource clCreateProgramWithSource; 560 extern PFN_clCreateProgramWithBinary clCreateProgramWithBinary; 561 extern PFN_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels; 562 extern PFN_clRetainProgram clRetainProgram; 563 extern PFN_clReleaseProgram clReleaseProgram; 564 extern PFN_clBuildProgram clBuildProgram; 565 extern PFN_clCompileProgram clCompileProgram; 566 extern PFN_clLinkProgram clLinkProgram; 567 extern PFN_clUnloadPlatformCompiler clUnloadPlatformCompiler; 568 extern PFN_clGetProgramInfo clGetProgramInfo; 569 extern PFN_clGetProgramBuildInfo clGetProgramBuildInfo; 570 extern PFN_clCreateKernel clCreateKernel; 571 extern PFN_clCreateKernelsInProgram clCreateKernelsInProgram; 572 extern PFN_clRetainKernel clRetainKernel; 573 extern PFN_clReleaseKernel clReleaseKernel; 574 extern PFN_clSetKernelArg clSetKernelArg; 575 extern PFN_clSetKernelArgSVMPointer clSetKernelArgSVMPointer; 576 extern PFN_clSetKernelExecInfo clSetKernelExecInfo; 577 extern PFN_clGetKernelInfo clGetKernelInfo; 578 extern PFN_clGetKernelArgInfo clGetKernelArgInfo; 579 extern PFN_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo; 580 extern PFN_clWaitForEvents clWaitForEvents; 581 extern PFN_clGetEventInfo clGetEventInfo; 582 extern PFN_clCreateUserEvent clCreateUserEvent; 583 extern PFN_clRetainEvent clRetainEvent; 584 extern PFN_clReleaseEvent clReleaseEvent; 585 extern PFN_clSetUserEventStatus clSetUserEventStatus; 586 extern PFN_clSetEventCallback clSetEventCallback; 587 extern PFN_clGetEventProfilingInfo clGetEventProfilingInfo; 588 extern PFN_clFlush clFlush; 589 extern PFN_clFinish clFinish; 590 extern PFN_clEnqueueReadBuffer clEnqueueReadBuffer; 591 extern PFN_clEnqueueReadBufferRect clEnqueueReadBufferRect; 592 extern PFN_clEnqueueWriteBuffer clEnqueueWriteBuffer; 593 extern PFN_clEnqueueWriteBufferRect clEnqueueWriteBufferRect; 594 extern PFN_clEnqueueFillBuffer clEnqueueFillBuffer; 595 extern PFN_clEnqueueCopyBuffer clEnqueueCopyBuffer; 596 extern PFN_clEnqueueCopyBufferRect clEnqueueCopyBufferRect; 597 extern PFN_clEnqueueReadImage clEnqueueReadImage; 598 extern PFN_clEnqueueWriteImage clEnqueueWriteImage; 599 extern PFN_clEnqueueFillImage clEnqueueFillImage; 600 extern PFN_clEnqueueCopyImage clEnqueueCopyImage; 601 extern PFN_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer; 602 extern PFN_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage; 603 extern PFN_clEnqueueMapBuffer clEnqueueMapBuffer; 604 extern PFN_clEnqueueMapImage clEnqueueMapImage; 605 extern PFN_clEnqueueUnmapMemObject clEnqueueUnmapMemObject; 606 extern PFN_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects; 607 extern PFN_clEnqueueNDRangeKernel clEnqueueNDRangeKernel; 608 extern PFN_clEnqueueNativeKernel clEnqueueNativeKernel; 609 extern PFN_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList; 610 extern PFN_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList; 611 extern PFN_clEnqueueSVMFree clEnqueueSVMFree; 612 extern PFN_clEnqueueSVMMemcpy clEnqueueSVMMemcpy; 613 extern PFN_clEnqueueSVMMemFill clEnqueueSVMMemFill; 614 extern PFN_clEnqueueSVMMap clEnqueueSVMMap; 615 extern PFN_clEnqueueSVMUnmap clEnqueueSVMUnmap; 616 extern PFN_clGetExtensionFunctionAddressForPlatform 617 clGetExtensionFunctionAddressForPlatform; 618 extern PFN_clCreateImage2D clCreateImage2D; 619 extern PFN_clCreateImage3D clCreateImage3D; 620 extern PFN_clEnqueueMarker clEnqueueMarker; 621 extern PFN_clEnqueueWaitForEvents clEnqueueWaitForEvents; 622 extern PFN_clEnqueueBarrier clEnqueueBarrier; 623 extern PFN_clUnloadCompiler clUnloadCompiler; 624 extern PFN_clGetExtensionFunctionAddress clGetExtensionFunctionAddress; 625 extern PFN_clCreateCommandQueue clCreateCommandQueue; 626 extern PFN_clCreateSampler clCreateSampler; 627 extern PFN_clEnqueueTask clEnqueueTask; 628 629 // OpenGL sharing 630 extern PFN_clCreateFromGLBuffer clCreateFromGLBuffer; 631 extern PFN_clCreateFromGLTexture clCreateFromGLTexture; 632 extern PFN_clEnqueueAcquireGLObjects clEnqueueAcquireGLObjects; 633 extern PFN_clEnqueueReleaseGLObjects clEnqueueReleaseGLObjects; 634 635 // cl_khr_egl_event extension 636 extern PFN_clCreateEventFromEGLSyncKHR clCreateEventFromEGLSyncKHR; 637 638 // EGL sharing 639 extern PFN_clCreateFromEGLImageKHR clCreateFromEGLImageKHR; 640 extern PFN_clEnqueueAcquireEGLObjectsKHR clEnqueueAcquireEGLObjectsKHR; 641 extern PFN_clEnqueueReleaseEGLObjectsKHR clEnqueueReleaseEGLObjectsKHR; 642 643 // For convenient image creation 644 // It uses clCreateImage if it available (clCreateImage available since cl 1.2) 645 // otherwise it will use legacy clCreateImage2D 646 cl_mem CreateImage2DLegacy(cl_context context, cl_mem_flags flags, 647 const cl_image_format *image_format, 648 const cl_image_desc *image_desc, void *host_ptr, 649 cl_int *errcode_ret); 650 651 // It uses clCreateImage if it available (clCreateImage available since cl 1.2) 652 // otherwise it will use legacy clCreateImage3D 653 cl_mem CreateImage3DLegacy(cl_context context, cl_mem_flags flags, 654 const cl_image_format *image_format, 655 const cl_image_desc *image_desc, void *host_ptr, 656 cl_int *errcode_ret); 657 658 } // namespace cl 659 } // namespace gpu 660 } // namespace tflite 661 662 #endif // TENSORFLOW_LITE_DELEGATES_GPU_CL_OPENCL_WRAPPER_H_ 663