1/*******************************************************************************
2 * Copyright (c) 2018 The Khronos Group Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and/or associated documentation files (the
6 * "Materials"), to deal in the Materials without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Materials, and to
9 * permit persons to whom the Materials are furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Materials.
14 *
15 * MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
16 * KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
17 * SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
18 * https://www.khronos.org/registry/
19 *
20 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
27 ******************************************************************************/
28
29#ifndef __CL_VERSION_H
30#define __CL_VERSION_H
31
32/* Detect which version to target */
33#if !defined(CL_TARGET_OPENCL_VERSION)
34#pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
35#define CL_TARGET_OPENCL_VERSION 220
36#endif
37#if CL_TARGET_OPENCL_VERSION != 100 && \
38 CL_TARGET_OPENCL_VERSION != 110 && \
39 CL_TARGET_OPENCL_VERSION != 120 && \
40 CL_TARGET_OPENCL_VERSION != 200 && \
41 CL_TARGET_OPENCL_VERSION != 210 && \
42 CL_TARGET_OPENCL_VERSION != 220
43#pragma message("cl_version: CL_TARGET_OPENCL_VERSION is not a valid value (100, 110, 120, 200, 210, 220). Defaulting to 220 (OpenCL 2.2)")
44#undef CL_TARGET_OPENCL_VERSION
45#define CL_TARGET_OPENCL_VERSION 220
46#endif
47
48
49/* OpenCL Version */
50#if CL_TARGET_OPENCL_VERSION >= 220 && !defined(CL_VERSION_2_2)
51#define CL_VERSION_2_2 1
52#endif
53#if CL_TARGET_OPENCL_VERSION >= 210 && !defined(CL_VERSION_2_1)
54#define CL_VERSION_2_1 1
55#endif
56#if CL_TARGET_OPENCL_VERSION >= 200 && !defined(CL_VERSION_2_0)
57#define CL_VERSION_2_0 1
58#endif
59#if CL_TARGET_OPENCL_VERSION >= 120 && !defined(CL_VERSION_1_2)
60#define CL_VERSION_1_2 1
61#endif
62#if CL_TARGET_OPENCL_VERSION >= 110 && !defined(CL_VERSION_1_1)
63#define CL_VERSION_1_1 1
64#endif
65#if CL_TARGET_OPENCL_VERSION >= 100 && !defined(CL_VERSION_1_0)
66#define CL_VERSION_1_0 1
67#endif
68
69/* Allow deprecated APIs for older OpenCL versions. */
70#if CL_TARGET_OPENCL_VERSION <= 210 && !defined(CL_USE_DEPRECATED_OPENCL_2_1_APIS)
71#define CL_USE_DEPRECATED_OPENCL_2_1_APIS
72#endif
73#if CL_TARGET_OPENCL_VERSION <= 200 && !defined(CL_USE_DEPRECATED_OPENCL_2_0_APIS)
74#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
75#endif
76#if CL_TARGET_OPENCL_VERSION <= 120 && !defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
77#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
78#endif
79#if CL_TARGET_OPENCL_VERSION <= 110 && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
80#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
81#endif
82#if CL_TARGET_OPENCL_VERSION <= 100 && !defined(CL_USE_DEPRECATED_OPENCL_1_0_APIS)
83#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
84#endif
85
86#endif /* __CL_VERSION_H */
87