/*
 * Copyright (c) 2016 The Khronos Group Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software source and associated documentation files (the "Materials"),
 * to deal in the Materials without restriction, including without limitation
 * the rights to use, copy, modify, compile, merge, publish, distribute,
 * sublicense, and/or sell copies of the Materials, and to permit persons to
 * whom the Materials are furnished to do so, subject the following terms and
 * conditions:
 *
 * All modifications to the Materials used to create a binary that is
 * distributed to third parties shall be provided to Khronos with an
 * unrestricted license to use for the purposes of implementing bug fixes and
 * enhancements to the Materials;
 *
 * If the binary is used as part of an OpenCL(TM) implementation, whether binary
 * is distributed together with or separately to that implementation, then
 * recipient must become an OpenCL Adopter and follow the published OpenCL
 * conformance process for that implementation, details at:
 * http://www.khronos.org/conformance/;
 *
 * The above copyright notice, the OpenCL trademark license, and this permission
 * notice shall be included in all copies or substantial portions of the
 * Materials.
 *
 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN
 * THE MATERIALS.
 *
 * OpenCL is a trademark of Apple Inc. used under license by Khronos.
 */

OPENCL_1.0 {
    global:
        clBuildProgram;
        clCreateBuffer;
        clCreateCommandQueue;
        clCreateContext;
        clCreateContextFromType;
        clCreateFromGLBuffer;
        clCreateFromGLRenderbuffer;
        clCreateFromGLTexture2D;
        clCreateFromGLTexture3D;
        clCreateImage2D;
        clCreateImage3D;
        clCreateKernel;
        clCreateKernelsInProgram;
        clCreateProgramWithBinary;
        clCreateProgramWithSource;
        clCreateSampler;
        clEnqueueAcquireGLObjects;
        clEnqueueBarrier;
        clEnqueueCopyBuffer;
        clEnqueueCopyBufferToImage;
        clEnqueueCopyImage;
        clEnqueueCopyImageToBuffer;
        clEnqueueMapBuffer;
        clEnqueueMapImage;
        clEnqueueMarker;
        clEnqueueNDRangeKernel;
        clEnqueueNativeKernel;
        clEnqueueReadBuffer;
        clEnqueueReadImage;
        clEnqueueReleaseGLObjects;
        clEnqueueTask;
        clEnqueueUnmapMemObject;
        clEnqueueWaitForEvents;
        clEnqueueWriteBuffer;
        clEnqueueWriteImage;
        clFinish;
        clFlush;
        clGetCommandQueueInfo;
        clGetContextInfo;
        clGetDeviceIDs;
        clGetDeviceInfo;
        clGetEventInfo;
        clGetEventProfilingInfo;
        clGetExtensionFunctionAddress;
        clGetGLObjectInfo;
        clGetGLTextureInfo;
        clGetImageInfo;
        clGetKernelInfo;
        clGetKernelWorkGroupInfo;
        clGetMemObjectInfo;
        clGetPlatformIDs;
        clGetPlatformInfo;
        clGetProgramBuildInfo;
        clGetProgramInfo;
        clGetSamplerInfo;
        clGetSupportedImageFormats;
        clReleaseCommandQueue;
        clReleaseContext;
        clReleaseEvent;
        clReleaseKernel;
        clReleaseMemObject;
        clReleaseProgram;
        clReleaseSampler;
        clRetainCommandQueue;
        clRetainContext;
        clRetainEvent;
        clRetainKernel;
        clRetainMemObject;
        clRetainProgram;
        clRetainSampler;
        clSetCommandQueueProperty;
        clSetKernelArg;
        clUnloadCompiler;
        clWaitForEvents;

    local:
        /* Everything else is local to ICD. */
        *;
};

OPENCL_1.1 {
    global:
        clCreateSubBuffer;
        clCreateUserEvent;
        clEnqueueCopyBufferRect;
        clEnqueueReadBufferRect;
        clEnqueueWriteBufferRect;
        clSetEventCallback;
        clSetMemObjectDestructorCallback;
        clSetUserEventStatus;
} OPENCL_1.0;

OPENCL_1.2 {
    global:
        clCompileProgram;
        clCreateFromGLTexture;
        clCreateImage;
        clCreateProgramWithBuiltInKernels;
        clCreateSubDevices;
        clEnqueueBarrierWithWaitList;
        clEnqueueFillBuffer;
        clEnqueueFillImage;
        clEnqueueMarkerWithWaitList;
        clEnqueueMigrateMemObjects;
        clGetExtensionFunctionAddressForPlatform;
        clGetKernelArgInfo;
        clLinkProgram;
        clReleaseDevice;
        clRetainDevice;
        clUnloadPlatformCompiler;
} OPENCL_1.1;

OPENCL_2.0 {
    global:
        clCreateCommandQueueWithProperties;
        clCreatePipe;
        clGetPipeInfo;
        clSVMAlloc;
        clSVMFree;
        clEnqueueSVMFree;
        clEnqueueSVMMemcpy;
        clEnqueueSVMMemFill;
        clEnqueueSVMMap;
        clEnqueueSVMUnmap;
        clCreateSamplerWithProperties;
        clSetKernelArgSVMPointer;
        clSetKernelExecInfo;
} OPENCL_1.2;

OPENCL_2.1 {
    global:
        clCloneKernel;
        clCreateProgramWithIL;
        clEnqueueSVMMigrateMem;
        clGetDeviceAndHostTimer;
        clGetHostTimer;
        clGetKernelSubGroupInfo;
        clSetDefaultDeviceCommandQueue;
} OPENCL_2.0;

