|
5 | 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
6 | 6 | //
|
7 | 7 | //===----------------------------------------------------------------------===//
|
| 8 | +// This file implements an OpenCL Plugin, which is comformant to the Plugin |
| 9 | +// Interface. The plugin implements a single function call which returns the |
| 10 | +// location of the Plugin Interface Function Pointers list. The order of the |
| 11 | +// functions is the same as the order of the functions declared in pi.h file. It |
| 12 | +// is important to adhere to this order, as the plugin interface assumes this |
| 13 | +// order when it computes the offset for a specific function. |
| 14 | + |
8 | 15 | #include "CL/opencl.h"
|
9 | 16 | #include <CL/sycl/detail/pi.h>
|
10 | 17 | #include <cassert>
|
|
19 | 26 | return cast<pi_result>(reterr); \
|
20 | 27 | }
|
21 | 28 |
|
| 29 | +std::string SupportedVersion = "Version 1.1"; |
| 30 | + |
22 | 31 | // Want all the needed casts be explicit, do not define conversion operators.
|
23 | 32 | template <class To, class From> To cast(From value) {
|
24 | 33 | // TODO: see if more sanity checks are possible.
|
@@ -270,91 +279,100 @@ pi_result OCL(piextGetDeviceFunctionPointer)(pi_device device,
|
270 | 279 | function_pointer_ret));
|
271 | 280 | }
|
272 | 281 |
|
| 282 | +// Plugin Interface Functions List. |
| 283 | +struct PluginInterfaceFunctions { |
273 | 284 | // TODO: Remove the 'OclPtr' extension used with the PI_APIs.
|
274 | 285 | // Forward calls to OpenCL RT.
|
275 | 286 | #define _PI_CL(pi_api, ocl_api) \
|
276 | 287 | decltype(::pi_api) *pi_api##OclPtr = cast<decltype(&::pi_api)>(&ocl_api);
|
277 | 288 |
|
278 |
| -// Platform |
279 |
| -_PI_CL(piPlatformsGet, OCL(piPlatformsGet)) |
280 |
| -_PI_CL(piPlatformGetInfo, clGetPlatformInfo) |
281 |
| -// Device |
282 |
| -_PI_CL(piDevicesGet, OCL(piDevicesGet)) |
283 |
| -_PI_CL(piDeviceGetInfo, clGetDeviceInfo) |
284 |
| -_PI_CL(piDevicePartition, clCreateSubDevices) |
285 |
| -_PI_CL(piDeviceRetain, clRetainDevice) |
286 |
| -_PI_CL(piDeviceRelease, clReleaseDevice) |
287 |
| -_PI_CL(piextDeviceSelectBinary, OCL(piextDeviceSelectBinary)) |
288 |
| -_PI_CL(piextGetDeviceFunctionPointer, OCL(piextGetDeviceFunctionPointer)) |
289 |
| -// Context |
290 |
| -_PI_CL(piContextCreate, clCreateContext) |
291 |
| -_PI_CL(piContextGetInfo, clGetContextInfo) |
292 |
| -_PI_CL(piContextRetain, clRetainContext) |
293 |
| -_PI_CL(piContextRelease, clReleaseContext) |
294 |
| -// Queue |
295 |
| -_PI_CL(piQueueCreate, OCL(piQueueCreate)) |
296 |
| -_PI_CL(piQueueGetInfo, clGetCommandQueueInfo) |
297 |
| -_PI_CL(piQueueFinish, clFinish) |
298 |
| -_PI_CL(piQueueRetain, clRetainCommandQueue) |
299 |
| -_PI_CL(piQueueRelease, clReleaseCommandQueue) |
300 |
| -// Memory |
301 |
| -_PI_CL(piMemBufferCreate, clCreateBuffer) |
302 |
| -_PI_CL(piMemImageCreate, clCreateImage) |
303 |
| -_PI_CL(piMemGetInfo, clGetMemObjectInfo) |
304 |
| -_PI_CL(piMemImageGetInfo, clGetImageInfo) |
305 |
| -_PI_CL(piMemRetain, clRetainMemObject) |
306 |
| -_PI_CL(piMemRelease, clReleaseMemObject) |
307 |
| -_PI_CL(piMemBufferPartition, clCreateSubBuffer) |
308 |
| -// Program |
309 |
| -_PI_CL(piProgramCreate, OCL(piProgramCreate)) |
310 |
| -_PI_CL(piclProgramCreateWithSource, clCreateProgramWithSource) |
311 |
| -_PI_CL(piclProgramCreateWithBinary, clCreateProgramWithBinary) |
312 |
| -_PI_CL(piProgramGetInfo, clGetProgramInfo) |
313 |
| -_PI_CL(piProgramCompile, clCompileProgram) |
314 |
| -_PI_CL(piProgramBuild, clBuildProgram) |
315 |
| -_PI_CL(piProgramLink, clLinkProgram) |
316 |
| -_PI_CL(piProgramGetBuildInfo, clGetProgramBuildInfo) |
317 |
| -_PI_CL(piProgramRetain, clRetainProgram) |
318 |
| -_PI_CL(piProgramRelease, clReleaseProgram) |
319 |
| -// Kernel |
320 |
| -_PI_CL(piKernelCreate, clCreateKernel) |
321 |
| -_PI_CL(piKernelSetArg, clSetKernelArg) |
322 |
| -_PI_CL(piKernelGetInfo, clGetKernelInfo) |
323 |
| -_PI_CL(piKernelGetGroupInfo, clGetKernelWorkGroupInfo) |
324 |
| -_PI_CL(piKernelGetSubGroupInfo, clGetKernelSubGroupInfo) |
325 |
| -_PI_CL(piKernelRetain, clRetainKernel) |
326 |
| -_PI_CL(piKernelRelease, clReleaseKernel) |
327 |
| -// Event |
328 |
| -_PI_CL(piEventCreate, clCreateUserEvent) |
329 |
| -_PI_CL(piEventGetInfo, clGetEventInfo) |
330 |
| -_PI_CL(piEventGetProfilingInfo, clGetEventProfilingInfo) |
331 |
| -_PI_CL(piEventsWait, clWaitForEvents) |
332 |
| -_PI_CL(piEventSetCallback, clSetEventCallback) |
333 |
| -_PI_CL(piEventSetStatus, clSetUserEventStatus) |
334 |
| -_PI_CL(piEventRetain, clRetainEvent) |
335 |
| -_PI_CL(piEventRelease, clReleaseEvent) |
336 |
| -// Sampler |
337 |
| -_PI_CL(piSamplerCreate, OCL(piSamplerCreate)) |
338 |
| -_PI_CL(piSamplerGetInfo, clGetSamplerInfo) |
339 |
| -_PI_CL(piSamplerRetain, clRetainSampler) |
340 |
| -_PI_CL(piSamplerRelease, clReleaseSampler) |
341 |
| -// Queue commands |
342 |
| -_PI_CL(piEnqueueKernelLaunch, clEnqueueNDRangeKernel) |
343 |
| -_PI_CL(piEnqueueNativeKernel, clEnqueueNativeKernel) |
344 |
| -_PI_CL(piEnqueueEventsWait, clEnqueueMarkerWithWaitList) |
345 |
| -_PI_CL(piEnqueueMemBufferRead, clEnqueueReadBuffer) |
346 |
| -_PI_CL(piEnqueueMemBufferReadRect, clEnqueueReadBufferRect) |
347 |
| -_PI_CL(piEnqueueMemBufferWrite, clEnqueueWriteBuffer) |
348 |
| -_PI_CL(piEnqueueMemBufferWriteRect, clEnqueueWriteBufferRect) |
349 |
| -_PI_CL(piEnqueueMemBufferCopy, clEnqueueCopyBuffer) |
350 |
| -_PI_CL(piEnqueueMemBufferCopyRect, clEnqueueCopyBufferRect) |
351 |
| -_PI_CL(piEnqueueMemBufferFill, clEnqueueFillBuffer) |
352 |
| -_PI_CL(piEnqueueMemImageRead, clEnqueueReadImage) |
353 |
| -_PI_CL(piEnqueueMemImageWrite, clEnqueueWriteImage) |
354 |
| -_PI_CL(piEnqueueMemImageCopy, clEnqueueCopyImage) |
355 |
| -_PI_CL(piEnqueueMemImageFill, clEnqueueFillImage) |
356 |
| -_PI_CL(piEnqueueMemBufferMap, clEnqueueMapBuffer) |
357 |
| -_PI_CL(piEnqueueMemUnmap, clEnqueueUnmapMemObject) |
| 289 | + // Platform |
| 290 | + _PI_CL(piPlatformsGet, OCL(piPlatformsGet)) |
| 291 | + _PI_CL(piPlatformGetInfo, clGetPlatformInfo) |
| 292 | + // Device |
| 293 | + _PI_CL(piDevicesGet, OCL(piDevicesGet)) |
| 294 | + _PI_CL(piDeviceGetInfo, clGetDeviceInfo) |
| 295 | + _PI_CL(piDevicePartition, clCreateSubDevices) |
| 296 | + _PI_CL(piDeviceRetain, clRetainDevice) |
| 297 | + _PI_CL(piDeviceRelease, clReleaseDevice) |
| 298 | + _PI_CL(piextDeviceSelectBinary, OCL(piextDeviceSelectBinary)) |
| 299 | + _PI_CL(piextGetDeviceFunctionPointer, OCL(piextGetDeviceFunctionPointer)) |
| 300 | + // Context |
| 301 | + _PI_CL(piContextCreate, clCreateContext) |
| 302 | + _PI_CL(piContextGetInfo, clGetContextInfo) |
| 303 | + _PI_CL(piContextRetain, clRetainContext) |
| 304 | + _PI_CL(piContextRelease, clReleaseContext) |
| 305 | + // Queue |
| 306 | + _PI_CL(piQueueCreate, OCL(piQueueCreate)) |
| 307 | + _PI_CL(piQueueGetInfo, clGetCommandQueueInfo) |
| 308 | + _PI_CL(piQueueFinish, clFinish) |
| 309 | + _PI_CL(piQueueRetain, clRetainCommandQueue) |
| 310 | + _PI_CL(piQueueRelease, clReleaseCommandQueue) |
| 311 | + // Memory |
| 312 | + _PI_CL(piMemBufferCreate, clCreateBuffer) |
| 313 | + _PI_CL(piMemImageCreate, clCreateImage) |
| 314 | + _PI_CL(piMemGetInfo, clGetMemObjectInfo) |
| 315 | + _PI_CL(piMemImageGetInfo, clGetImageInfo) |
| 316 | + _PI_CL(piMemRetain, clRetainMemObject) |
| 317 | + _PI_CL(piMemRelease, clReleaseMemObject) |
| 318 | + _PI_CL(piMemBufferPartition, clCreateSubBuffer) |
| 319 | + // Program |
| 320 | + _PI_CL(piProgramCreate, OCL(piProgramCreate)) |
| 321 | + _PI_CL(piclProgramCreateWithSource, clCreateProgramWithSource) |
| 322 | + _PI_CL(piclProgramCreateWithBinary, clCreateProgramWithBinary) |
| 323 | + _PI_CL(piProgramGetInfo, clGetProgramInfo) |
| 324 | + _PI_CL(piProgramCompile, clCompileProgram) |
| 325 | + _PI_CL(piProgramBuild, clBuildProgram) |
| 326 | + _PI_CL(piProgramLink, clLinkProgram) |
| 327 | + _PI_CL(piProgramGetBuildInfo, clGetProgramBuildInfo) |
| 328 | + _PI_CL(piProgramRetain, clRetainProgram) |
| 329 | + _PI_CL(piProgramRelease, clReleaseProgram) |
| 330 | + // Kernel |
| 331 | + _PI_CL(piKernelCreate, clCreateKernel) |
| 332 | + _PI_CL(piKernelSetArg, clSetKernelArg) |
| 333 | + _PI_CL(piKernelGetInfo, clGetKernelInfo) |
| 334 | + _PI_CL(piKernelGetGroupInfo, clGetKernelWorkGroupInfo) |
| 335 | + _PI_CL(piKernelGetSubGroupInfo, clGetKernelSubGroupInfo) |
| 336 | + _PI_CL(piKernelRetain, clRetainKernel) |
| 337 | + _PI_CL(piKernelRelease, clReleaseKernel) |
| 338 | + // Event |
| 339 | + _PI_CL(piEventCreate, clCreateUserEvent) |
| 340 | + _PI_CL(piEventGetInfo, clGetEventInfo) |
| 341 | + _PI_CL(piEventGetProfilingInfo, clGetEventProfilingInfo) |
| 342 | + _PI_CL(piEventsWait, clWaitForEvents) |
| 343 | + _PI_CL(piEventSetCallback, clSetEventCallback) |
| 344 | + _PI_CL(piEventSetStatus, clSetUserEventStatus) |
| 345 | + _PI_CL(piEventRetain, clRetainEvent) |
| 346 | + _PI_CL(piEventRelease, clReleaseEvent) |
| 347 | + // Sampler |
| 348 | + _PI_CL(piSamplerCreate, OCL(piSamplerCreate)) |
| 349 | + _PI_CL(piSamplerGetInfo, clGetSamplerInfo) |
| 350 | + _PI_CL(piSamplerRetain, clRetainSampler) |
| 351 | + _PI_CL(piSamplerRelease, clReleaseSampler) |
| 352 | + // Queue commands |
| 353 | + _PI_CL(piEnqueueKernelLaunch, clEnqueueNDRangeKernel) |
| 354 | + _PI_CL(piEnqueueNativeKernel, clEnqueueNativeKernel) |
| 355 | + _PI_CL(piEnqueueEventsWait, clEnqueueMarkerWithWaitList) |
| 356 | + _PI_CL(piEnqueueMemBufferRead, clEnqueueReadBuffer) |
| 357 | + _PI_CL(piEnqueueMemBufferReadRect, clEnqueueReadBufferRect) |
| 358 | + _PI_CL(piEnqueueMemBufferWrite, clEnqueueWriteBuffer) |
| 359 | + _PI_CL(piEnqueueMemBufferWriteRect, clEnqueueWriteBufferRect) |
| 360 | + _PI_CL(piEnqueueMemBufferCopy, clEnqueueCopyBuffer) |
| 361 | + _PI_CL(piEnqueueMemBufferCopyRect, clEnqueueCopyBufferRect) |
| 362 | + _PI_CL(piEnqueueMemBufferFill, clEnqueueFillBuffer) |
| 363 | + _PI_CL(piEnqueueMemImageRead, clEnqueueReadImage) |
| 364 | + _PI_CL(piEnqueueMemImageWrite, clEnqueueWriteImage) |
| 365 | + _PI_CL(piEnqueueMemImageCopy, clEnqueueCopyImage) |
| 366 | + _PI_CL(piEnqueueMemImageFill, clEnqueueFillImage) |
| 367 | + _PI_CL(piEnqueueMemBufferMap, clEnqueueMapBuffer) |
| 368 | + _PI_CL(piEnqueueMemUnmap, clEnqueueUnmapMemObject) |
| 369 | +} FunctionTable; |
| 370 | + |
| 371 | +void *initialize_pi_opencl(char *RetSuppVersion) { |
| 372 | + RetSuppVersion = strcpy((char *)malloc(strlen(SupportedVersion.c_str()) + 1), |
| 373 | + SupportedVersion.c_str()); |
| 374 | + return &FunctionTable; |
| 375 | +} |
358 | 376 |
|
359 | 377 | #undef _PI_CL
|
360 | 378 | }
|
0 commit comments