OpenCL.Platform.pas 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. //
  2. // The graphics platform GLScene https://github.com/glscene
  3. //
  4. unit OpenCL.Platform;
  5. (*
  6. Conversion of OpenCL header file: cl_platform.h to CL_Platform.pas,
  7. from http://www.khronos.org/registry/cl/.
  8. *)
  9. (****************************************************************************
  10. * Copyright (c) 2008-2020 The Khronos Group Inc.
  11. *
  12. * Permission is hereby granted, free of charge, to any person obtaining a
  13. * copy of this software and/or associated documentation files (the
  14. * "Materials"), to deal in the Materials without restriction, including
  15. * without limitation the rights to use, copy, modify, merge, publish,
  16. * distribute, sublicense, and/or sell copies of the Materials, and to
  17. * permit persons to whom the Materials are furnished to do so, subject to
  18. * the following conditions:
  19. *
  20. * The above copyright notice and this permission notice shall be included
  21. * in all copies or substantial portions of the Materials.
  22. *
  23. * MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
  24. * KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
  25. * SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
  26. * https://www.khronos.org/registry/
  27. *
  28. * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  29. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  30. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  31. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  32. * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  33. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  34. * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
  35. **************************************************************************)
  36. interface
  37. {$IFDEF MSWINDOWS}
  38. {$DEFINE CL_APT_ENTRY}
  39. const
  40. CL_APT_CALL = 'stdcall';
  41. CL_CALLBACK = 'stdcall';
  42. {$ENDIF}
  43. (*
  44. * Deprecation flags refer to the last version of the header in which the
  45. * feature was not deprecated.
  46. *
  47. * E.g. VERSION_1_1_DEPRECATED means the feature is present in 1.1 without
  48. * deprecation but is deprecated in versions later than 1.1.
  49. *)
  50. {$IFDEF WIN32}
  51. (* scalar types *)
  52. type
  53. Tcl_char = ShortInt;
  54. Tcl_uchar = Byte;
  55. Tcl_short = SmallInt;
  56. Tcl_ushort = Word;
  57. Tcl_int = LongInt;
  58. Tcl_uint = LongWord;
  59. Tcl_long = Int64;
  60. Tcl_ulong = UInt64;
  61. Tcl_half = Word;
  62. Tcl_float = Single;
  63. Tcl_double = Double;
  64. Pcl_char = ^Tcl_char;
  65. Pcl_uchar = ^Tcl_uchar;
  66. Pcl_short = ^Tcl_short;
  67. Pcl_ushort = ^Tcl_ushort;
  68. Pcl_int = ^Tcl_int;
  69. Pcl_uint = ^Tcl_uint;
  70. Pcl_long = ^Tcl_long;
  71. Pcl_ulong = ^Tcl_ulong;
  72. Pcl_half = ^Tcl_half;
  73. Pcl_float = ^Tcl_float;
  74. Pcl_double = ^Tcl_double;
  75. Tsize_t = NativeUInt;
  76. Psize_t = ^Tsize_t;
  77. intptr_t = NativeUInt;
  78. Pintptr_t = ^intptr_t;
  79. (* Macro names and corresponding values defined by OpenCL *)
  80. const
  81. CL_CHAR_BIT = 8;
  82. CL_SCHAR_MAX = 127;
  83. CL_SCHAR_MIN = (-127 - 1);
  84. CL_CHAR_MAX = CL_SCHAR_MAX;
  85. CL_CHAR_MIN = CL_SCHAR_MIN;
  86. CL_UCHAR_MAX = 255;
  87. CL_SHRT_MAX = 32767;
  88. CL_SHRT_MIN = (-32767 - 1);
  89. CL_USHRT_MAX = 65535;
  90. CL_INT_MAX = 2147483647;
  91. CL_INT_MIN = (-2147483647 - 1);
  92. CL_UINT_MAX = $FFFFFFFF;
  93. CL_LONG_MAX = $7FFFFFFFFFFFFFFF;
  94. CL_LONG_MIN = -$7FFFFFFFFFFFFFFF - 1;
  95. CL_ULONG_MAX = $FFFFFFFFFFFFFFFF;
  96. CL_FLT_DIG = 6;
  97. CL_FLT_MANT_DIG = 24;
  98. CL_FLT_MAX_10_EXP = +38;
  99. CL_FLT_MAX_EXP = +128;
  100. CL_FLT_MIN_10_EXP = -37;
  101. CL_FLT_MIN_EXP = -125;
  102. CL_FLT_RADIX = 2;
  103. CL_FLT_MAX = 1.7E38; // 0x1.fffffep127f;
  104. CL_FLT_MIN = 1.17E-38; // 0x1.0p-126f;
  105. CL_FLT_EPSILON = 1.0E-7; // 0x1.0p-23f;
  106. CL_DBL_DIG = 15;
  107. CL_DBL_MANT_DIG = 53;
  108. CL_DBL_MAX_10_EXP = +308;
  109. CL_DBL_MAX_EXP = +1024;
  110. CL_DBL_MIN_10_EXP = -307;
  111. CL_DBL_MIN_EXP = -1021;
  112. CL_DBL_RADIX = 2;
  113. CL_DBL_MAX = 8.98E307; // 0x1.fffffffffffffp1023;
  114. CL_DBL_MIN = 2.2E-308; // 0x1.0p-1022;
  115. CL_DBL_EPSILON = 2.2E-16; // 0x1.0p-52;
  116. CL_M_E = 2.718281828459045090796;
  117. CL_M_LOG2E = 1.442695040888963387005;
  118. CL_M_LOG10E = 0.434294481903251816668;
  119. CL_M_LN2 = 0.693147180559945286227;
  120. CL_M_LN10 = 2.302585092994045901094;
  121. CL_M_PI = 3.141592653589793115998;
  122. CL_M_PI_2 = 1.570796326794896557999;
  123. CL_M_PI_4 = 0.785398163397448278999;
  124. CL_M_1_PI = 0.318309886183790691216;
  125. CL_M_2_PI = 0.636619772367581382433;
  126. CL_M_2_SQRTPI = 1.128379167095512558561;
  127. CL_M_SQRT2 = 1.414213562373095145475;
  128. CL_M_SQRT1_2 = 0.707106781186547572737;
  129. CL_M_E_F = 2.71828174591064;
  130. CL_M_LOG2E_F = 1.44269502162933;
  131. CL_M_LOG10E_F = 0.43429449200630;
  132. CL_M_LN2_F = 0.69314718246460;
  133. CL_M_LN10_F = 2.30258512496948;
  134. CL_M_PI_F = 3.14159274101257;
  135. CL_M_PI_2_F = 1.57079637050629;
  136. CL_M_PI_4_F = 0.78539818525314;
  137. CL_M_1_PI_F = 0.31830987334251;
  138. CL_M_2_PI_F = 0.63661974668503;
  139. CL_M_2_SQRTPI_F = 1.12837922573090;
  140. CL_M_SQRT2_F = 1.41421353816986;
  141. CL_M_SQRT1_2_F = 0.70710676908493;
  142. CL_NAN = 0; //(CL_INFINITY - CL_INFINITY);
  143. CL_HUGE_VALF = 1.0E50;
  144. CL_HUGE_VAL = 1.0E500;
  145. CL_MAXFLOAT = CL_FLT_MAX;
  146. CL_INFINITY = CL_HUGE_VALF;
  147. {$ELSE}
  148. type
  149. (* scalar types *)
  150. Tcl_char = ShortInt;
  151. Pcl_char = ^Tcl_char;
  152. Tcl_uchar = Byte;
  153. Pcl_uchar = ^Tcl_uchar;
  154. Tcl_short = SmallInt;
  155. Pcl_short = ^Tcl_short;
  156. Tcl_ushort = Word;
  157. Pcl_ushort = ^Tcl_ushort;
  158. Tcl_int = LongInt;
  159. Pcl_int = ^Tcl_int;
  160. Tcl_uint = LongWord;
  161. Pcl_uint = ^Tcl_uint;
  162. Tcl_long = Int64;
  163. Pcl_long = ^Tcl_long;
  164. Tcl_ulong = UInt64;
  165. Pcl_ulong = ^Tcl_ulong;
  166. Tcl_half = Word;
  167. Pcl_half = ^Tcl_half;
  168. Tcl_float = Single;
  169. Pcl_float = ^Tcl_float;
  170. Tcl_double = Double;
  171. Pcl_double = ^Tcl_double;
  172. Tsize_t = NativeUInt;
  173. Psize_t = ^Tsize_t;
  174. intptr_t = NativeUInt;
  175. Pintptr_t = ^intptr_t;
  176. (* Macro names and corresponding values defined by OpenCL *)
  177. const
  178. CL_CHAR_BIT = 8;
  179. CL_SCHAR_MAX = 127;
  180. CL_SCHAR_MIN = (-127 - 1);
  181. CL_CHAR_MAX = CL_SCHAR_MAX;
  182. CL_CHAR_MIN = CL_SCHAR_MIN;
  183. CL_UCHAR_MAX = 255;
  184. CL_SHRT_MAX = 32767;
  185. CL_SHRT_MIN = (-32767 - 1);
  186. CL_USHRT_MAX = 65535;
  187. CL_INT_MAX = 2147483647;
  188. CL_INT_MIN = (-2147483647 - 1);
  189. CL_UINT_MAX = $FFFFFFFF;
  190. CL_LONG_MAX = $7FFFFFFFFFFFFFFF;
  191. CL_LONG_MIN = -$7FFFFFFFFFFFFFFF - 1;
  192. CL_ULONG_MAX = $FFFFFFFFFFFFFFFF;
  193. CL_FLT_DIG = 6;
  194. CL_FLT_MANT_DIG = 24;
  195. CL_FLT_MAX_10_EXP = +38;
  196. CL_FLT_MAX_EXP = +128;
  197. CL_FLT_MIN_10_EXP = -37;
  198. CL_FLT_MIN_EXP = -125;
  199. CL_FLT_RADIX = 2;
  200. CL_FLT_MAX = 1.7E38;
  201. CL_FLT_MIN = 1.17E-38;
  202. CL_FLT_EPSILON = 1.0E-7;
  203. CL_DBL_DIG = 15;
  204. CL_DBL_MANT_DIG = 53;
  205. CL_DBL_MAX_10_EXP = +308;
  206. CL_DBL_MAX_EXP = +1024;
  207. CL_DBL_MIN_10_EXP = -307;
  208. CL_DBL_MIN_EXP = -1021;
  209. CL_DBL_RADIX = 2;
  210. CL_DBL_MAX = 8.98E307; // 0x1.fffffffffffffp1023;
  211. CL_DBL_MIN = 2.2E-308; // 0x1.0p-1022;
  212. CL_DBL_EPSILON = 2.2E-16; // 0x1.0p-52;
  213. CL_M_E = 2.718281828459045090796;
  214. CL_M_LOG2E = 1.442695040888963387005;
  215. CL_M_LOG10E = 0.434294481903251816668;
  216. CL_M_LN2 = 0.693147180559945286227;
  217. CL_M_LN10 = 2.302585092994045901094;
  218. CL_M_PI = 3.141592653589793115998;
  219. CL_M_PI_2 = 1.570796326794896557999;
  220. CL_M_PI_4 = 0.785398163397448278999;
  221. CL_M_1_PI = 0.318309886183790691216;
  222. CL_M_2_PI = 0.636619772367581382433;
  223. CL_M_2_SQRTPI = 1.128379167095512558561;
  224. CL_M_SQRT2 = 1.414213562373095145475;
  225. CL_M_SQRT1_2 = 0.707106781186547572737;
  226. CL_M_E_F = 2.71828174591064;
  227. CL_M_LOG2E_F = 1.44269502162933;
  228. CL_M_LOG10E_F = 0.43429449200630;
  229. CL_M_LN2_F = 0.69314718246460;
  230. CL_M_LN10_F = 2.30258512496948;
  231. CL_M_PI_F = 3.14159274101257;
  232. CL_M_PI_2_F = 1.57079637050629;
  233. CL_M_PI_4_F = 0.78539818525314;
  234. CL_M_1_PI_F = 0.31830987334251;
  235. CL_M_2_PI_F = 0.63661974668503;
  236. CL_M_2_SQRTPI_F = 1.12837922573090;
  237. CL_M_SQRT2_F = 1.41421353816986;
  238. CL_M_SQRT1_2_F = 0.70710676908493;
  239. {$ENDIF}
  240. (*
  241. * Vector types
  242. *
  243. * Note: OpenCL requires that all types be naturally aligned.
  244. * This means that vector types must be naturally aligned.
  245. * For example, a vector of four floats must be aligned to
  246. * a 16 byte boundary (calculated as 4 * the natural 4-byte
  247. * alignment of the float). The alignment qualifiers here
  248. * will only function properly if your compiler supports them
  249. * and if you don't actively work to defeat them. For example,
  250. * in order for a cl_float4 to be 16 byte aligned in a struct,
  251. * the start of the struct must itself be 16-byte aligned.
  252. *
  253. * Maintaining proper alignment is the user's responsibility.
  254. *)
  255. type
  256. Tcl_char2 = array [0 .. 1] of Tcl_char;
  257. Tcl_char4 = array [0 .. 3] of Tcl_char;
  258. Tcl_char8 = array [0 .. 7] of Tcl_char;
  259. Tcl_char16 = array [0 .. 15] of Tcl_char;
  260. Tcl_uchar2 = array [0 .. 1] of Tcl_uchar;
  261. Tcl_uchar4 = array [0 .. 3] of Tcl_uchar;
  262. Tcl_uchar8 = array [0 .. 7] of Tcl_uchar;
  263. Tcl_uchar16 = array [0 .. 15] of Tcl_uchar;
  264. Tcl_short2 = array [0 .. 1] of Tcl_short;
  265. Tcl_short4 = array [0 .. 3] of Tcl_short;
  266. Tcl_short8 = array [0 .. 7] of Tcl_short;
  267. Tcl_short16 = array [0 .. 15] of Tcl_short;
  268. Tcl_ushort2 = array [0 .. 1] of Tcl_ushort;
  269. Tcl_ushort4 = array [0 .. 3] of Tcl_ushort;
  270. Tcl_ushort8 = array [0 .. 7] of Tcl_ushort;
  271. Tcl_ushort16 = array [0 .. 15] of Tcl_ushort;
  272. Tcl_int2 = array [0 .. 1] of Tcl_int;
  273. Tcl_int4 = array [0 .. 3] of Tcl_int;
  274. Tcl_int8 = array [0 .. 7] of Tcl_int;
  275. Tcl_int16 = array [0 .. 15] of Tcl_int;
  276. Tcl_uint2 = array [0 .. 1] of Tcl_uint;
  277. Tcl_uint4 = array [0 .. 3] of Tcl_uint;
  278. Tcl_uint8 = array [0 .. 7] of Tcl_uint;
  279. Tcl_uint16 = array [0 .. 15] of Tcl_uint;
  280. Tcl_long2 = array [0 .. 1] of Tcl_long;
  281. Tcl_long4 = array [0 .. 3] of Tcl_long;
  282. Tcl_long8 = array [0 .. 7] of Tcl_long;
  283. Tcl_long16 = array [0 .. 15] of Tcl_long;
  284. Tcl_ulong2 = array [0 .. 1] of Tcl_ulong;
  285. Tcl_ulong4 = array [0 .. 3] of Tcl_ulong;
  286. Tcl_ulong8 = array [0 .. 7] of Tcl_ulong;
  287. Tcl_ulong16 = array [0 .. 15] of Tcl_ulong;
  288. Tcl_float2 = array [0 .. 1] of Tcl_float;
  289. Tcl_float4 = array [0 .. 3] of Tcl_float;
  290. Tcl_float8 = array [0 .. 7] of Tcl_float;
  291. Tcl_float16 = array [0 .. 15] of Tcl_float;
  292. Tcl_double2 = array [0 .. 1] of Tcl_double;
  293. Tcl_double4 = array [0 .. 3] of Tcl_double;
  294. Tcl_double8 = array [0 .. 7] of Tcl_double;
  295. Tcl_double16 = array [0 .. 15] of Tcl_double;
  296. // There are no vector types for half
  297. implementation
  298. end.