OpenCL.Import.pas 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575
  1. //
  2. // The graphics platform GLScene https://github.com/glscene
  3. //
  4. unit OpenCL.Import;
  5. (*
  6. Conversion of OpenCL cl.h header file into CL.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. uses
  38. Winapi.Windows,
  39. OpenCL.Platform;
  40. const
  41. {$IFDEF MSWINDOWS}
  42. LibOpenCL = 'OpenCL.dll';
  43. {$ELSE}
  44. LibOpenCL = 'OpenCL.so';
  45. {$ENDIF}
  46. type
  47. T_cl_platform_id = record end;
  48. Tcl_platform_id = ^T_cl_platform_id;
  49. Pcl_platform_id = ^Tcl_platform_id;
  50. T_cl_device_id = record end;
  51. Tcl_device_id = ^T_cl_device_id;
  52. Pcl_device_id = ^Tcl_device_id;
  53. T_cl_context = record end;
  54. Tcl_context = ^T_cl_context;
  55. Pcl_context = ^Tcl_context;
  56. T_cl_command_queue = record end;
  57. Tcl_command_queue = ^T_cl_command_queue;
  58. Pcl_command_queue = ^Tcl_command_queue;
  59. T_cl_mem = record end;
  60. Tcl_mem = ^T_cl_mem;
  61. Pcl_mem = ^Tcl_mem;
  62. T_cl_program = record end;
  63. Tcl_program = ^T_cl_program;
  64. Pcl_program = ^Tcl_program;
  65. T_cl_kernel = record end;
  66. Tcl_kernel = ^T_cl_kernel;
  67. Pcl_kernel = ^Tcl_kernel;
  68. T_cl_event = record end;
  69. Tcl_event = ^T_cl_event;
  70. Pcl_event = ^Tcl_event;
  71. T_cl_sampler = record end;
  72. Tcl_sampler = ^T_cl_sampler;
  73. Pcl_sampler = ^Tcl_sampler;
  74. Tcl_bool = Tcl_uint; //* WARNING! Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. *//
  75. Pcl_bool = ^Tcl_bool;
  76. Tcl_bitfield = Tcl_ulong;
  77. Pcl_bitfield = ^Tcl_bitfield;
  78. Tcl_device_type = Tcl_bitfield;
  79. Pcl_device_type = ^Tcl_device_type;
  80. Tcl_platform_info = Tcl_uint;
  81. Pcl_platform_info = ^Tcl_platform_info;
  82. Tcl_device_info = Tcl_uint;
  83. Pcl_device_info = ^Tcl_device_info;
  84. Tcl_device_fp_config = Tcl_bitfield;
  85. Pcl_device_fp_config = ^Tcl_device_fp_config;
  86. Tcl_device_mem_cache_type = Tcl_uint;
  87. Pcl_device_mem_cache_type = ^Tcl_device_mem_cache_type;
  88. Tcl_device_local_mem_type = Tcl_uint;
  89. Pcl_device_local_mem_type = ^Tcl_device_local_mem_type;
  90. Tcl_device_exec_capabilities = Tcl_bitfield;
  91. Pcl_device_exec_capabilities = ^Tcl_device_exec_capabilities;
  92. Tcl_device_svm_capabilities = Tcl_bitfield;
  93. Pcl_device_svm_capabilities = ^Tcl_device_svm_capabilities;
  94. Tcl_command_queue_properties = Tcl_bitfield;
  95. Pcl_command_queue_properties = ^Tcl_command_queue_properties;
  96. Tcl_device_partition_property = intptr_t;
  97. Pcl_device_partition_property = ^Tcl_device_partition_property;
  98. Tcl_device_affinity_domain = Tcl_bitfield;
  99. Pcl_device_affinity_domain = ^Tcl_device_affinity_domain;
  100. Tcl_context_properties = intptr_t;
  101. Pcl_context_properties = ^Tcl_context_properties;
  102. Tcl_context_info = Tcl_uint;
  103. Pcl_context_info = ^Tcl_context_info;
  104. Tcl_queue_properties = Tcl_bitfield;
  105. Pcl_queue_properties = ^Tcl_queue_properties;
  106. Tcl_command_queue_info = Tcl_uint;
  107. Pcl_command_queue_info = ^Tcl_command_queue_info;
  108. Tcl_channel_order = Tcl_uint;
  109. Pcl_channel_order = ^Tcl_channel_order;
  110. Tcl_channel_type = Tcl_uint;
  111. Pcl_channel_type = ^Tcl_channel_type;
  112. Tcl_mem_flags = Tcl_bitfield;
  113. Pcl_mem_flags = ^Tcl_mem_flags;
  114. Tcl_svm_mem_flags = Tcl_bitfield;
  115. Pcl_svm_mem_flags = ^Tcl_svm_mem_flags;
  116. Tcl_mem_object_type = Tcl_uint;
  117. Pcl_mem_object_type = ^Tcl_mem_object_type;
  118. Tcl_mem_info = Tcl_uint;
  119. Pcl_mem_info = ^Tcl_mem_info;
  120. Tcl_mem_migration_flag = Tcl_bitfield;
  121. Pcl_mem_migration_flag = ^Tcl_mem_migration_flag;
  122. Tcl_image_info = Tcl_uint;
  123. Pcl_image_info = ^Tcl_image_info;
  124. Tcl_buffer_create_type = Tcl_uint;
  125. Pcl_buffer_create_type = ^Tcl_buffer_create_type;
  126. Tcl_addressing_mode = Tcl_uint;
  127. Pcl_addressing_mode = ^Tcl_addressing_mode;
  128. Tcl_filter_mode = Tcl_uint;
  129. Pcl_filter_mode = ^Tcl_filter_mode;
  130. Tcl_sampler_info = Tcl_uint;
  131. Pcl_sampler_info = ^Tcl_sampler_info;
  132. Tcl_map_flags = Tcl_bitfield;
  133. Pcl_map_flags = ^Tcl_map_flags;
  134. Tcl_pipe_properties = intptr_t;
  135. Pcl_pipe_properties = ^Tcl_pipe_properties;
  136. Tcl_pipe_info = Tcl_uint;
  137. Pcl_pipe_info = ^Tcl_pipe_info;
  138. Tcl_program_info = Tcl_uint;
  139. Pcl_program_info = ^Tcl_program_info;
  140. Tcl_program_build_info = Tcl_uint;
  141. Pcl_program_build_info = ^Tcl_program_build_info;
  142. Tcl_program_binary_type = Tcl_uint;
  143. Pcl_program_binary_type = ^Tcl_program_binary_type;
  144. Tcl_build_status = Tcl_int;
  145. Pcl_build_status = ^Tcl_build_status;
  146. Tcl_kernel_info = Tcl_uint;
  147. Pcl_kernel_info = ^Tcl_kernel_info;
  148. Tcl_kernel_arg_info = Tcl_uint;
  149. Pcl_kernel_arg_info = ^Tcl_kernel_arg_info;
  150. Tcl_kernel_arg_address_qualifier = Tcl_uint;
  151. Pcl_kernel_arg_address_qualifier = ^Tcl_kernel_arg_address_qualifier;
  152. Tcl_kernel_arg_access_qualifier = Tcl_uint;
  153. Pcl_kernel_arg_access_qualifier = ^Tcl_kernel_arg_access_qualifier;
  154. Tcl_kernel_arg_type_qualifier = Tcl_bitfield;
  155. Pcl_kernel_arg_type_qualifier = ^Tcl_kernel_arg_type_qualifier;
  156. Tcl_kernel_work_group_info = Tcl_uint;
  157. Pcl_kernel_work_group_info = ^Tcl_kernel_work_group_info;
  158. Tcl_kernel_sub_group_info = Tcl_uint;
  159. Pcl_kernel_sub_group_info = ^Tcl_kernel_sub_group_info;
  160. Tcl_event_info = Tcl_uint;
  161. Pcl_event_info = ^Tcl_event_info;
  162. Tcl_command_type = Tcl_uint;
  163. Pcl_command_type = ^Tcl_command_type;
  164. Tcl_profiling_info = Tcl_uint;
  165. Pcl_profiling_info = ^Tcl_profiling_info;
  166. Tcl_sampler_properties = Tcl_bitfield;
  167. Pcl_sampler_properties = ^Tcl_sampler_properties;
  168. Tcl_kernel_exec_info = Tcl_uint;
  169. Pcl_kernel_exec_info = ^Tcl_kernel_exec_info;
  170. type
  171. Tcl_image_format = packed record
  172. image_channel_order: Tcl_channel_order;
  173. image_channel_data_type: Tcl_channel_type;
  174. end;
  175. Pcl_image_format = ^Tcl_image_format;
  176. Tcl_image_desc = packed record
  177. image_type: Tcl_mem_object_type;
  178. image_width: NativeUInt;
  179. image_height: NativeUInt;
  180. image_depth: NativeUInt;
  181. image_array_size: NativeUInt;
  182. image_row_pitch: NativeUInt;
  183. image_slice_pitch: NativeUInt;
  184. num_mip_levels: Tcl_uint;
  185. num_samples: Tcl_uint;
  186. case Word of
  187. 1: (buffer: Pcl_mem;);
  188. 2: (mem_object: Pcl_mem;);
  189. end;
  190. Pcl_image_desc = ^Tcl_image_desc;
  191. Tcl_buffer_region = packed record
  192. origin: NativeUInt;
  193. size: NativeUInt;
  194. end;
  195. Pcl_buffer_region = ^Tcl_buffer_region;
  196. (******************************************************************************)
  197. (* Error Codes *)
  198. const
  199. CL_SUCCESS = 0;
  200. CL_DEVICE_NOT_FOUND = -1;
  201. CL_DEVICE_NOT_AVAILABLE = -2;
  202. CL_COMPILER_NOT_AVAILABLE = -3;
  203. CL_MEM_OBJECT_ALLOCATION_FAILURE = -4;
  204. CL_OUT_OF_RESOURCES = -5;
  205. CL_OUT_OF_HOST_MEMORY = -6;
  206. CL_PROFILING_INFO_NOT_AVAILABLE = -7;
  207. CL_MEM_COPY_OVERLAP = -8;
  208. CL_IMAGE_FORMAT_MISMATCH = -9;
  209. CL_IMAGE_FORMAT_NOT_SUPPORTED = -10;
  210. CL_BUILD_PROGRAM_FAILURE = -11;
  211. CL_MAP_FAILURE = -12;
  212. CL_MISALIGNED_SUB_BUFFER_OFFSET = -13;
  213. CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST = -14;
  214. CL_COMPILE_PROGRAM_FAILURE = -15;
  215. CL_LINKER_NOT_AVAILABLE = -16;
  216. CL_LINK_PROGRAM_FAILURE = -17;
  217. CL_DEVICE_PARTITION_FAILED = -18;
  218. CL_KERNEL_ARG_INFO_NOT_AVAILABLE = -19;
  219. CL_INVALID_VALUE = -30;
  220. CL_INVALID_DEVICE_TYPE = -31;
  221. CL_INVALID_PLATFORM = -32;
  222. CL_INVALID_DEVICE = -33;
  223. CL_INVALID_CONTEXT = -34;
  224. CL_INVALID_QUEUE_PROPERTIES = -35;
  225. CL_INVALID_COMMAND_QUEUE = -36;
  226. CL_INVALID_HOST_PTR = -37;
  227. CL_INVALID_MEM_OBJECT = -38;
  228. CL_INVALID_IMAGE_FORMAT_DESCRIPTOR = -39;
  229. CL_INVALID_IMAGE_SIZE = -40;
  230. CL_INVALID_SAMPLER = -41;
  231. CL_INVALID_BINARY = -42;
  232. CL_INVALID_BUILD_OPTIONS = -43;
  233. CL_INVALID_PROGRAM = -44;
  234. CL_INVALID_PROGRAM_EXECUTABLE = -45;
  235. CL_INVALID_KERNEL_NAME = -46;
  236. CL_INVALID_KERNEL_DEFINITION = -47;
  237. CL_INVALID_KERNEL = -48;
  238. CL_INVALID_ARG_INDEX = -49;
  239. CL_INVALID_ARG_VALUE = -50;
  240. CL_INVALID_ARG_SIZE = -51;
  241. CL_INVALID_KERNEL_ARGS = -52;
  242. CL_INVALID_WORK_DIMENSION = -53;
  243. CL_INVALID_WORK_GROUP_SIZE = -54;
  244. CL_INVALID_WORK_ITEM_SIZE = -55;
  245. CL_INVALID_GLOBAL_OFFSET = -56;
  246. CL_INVALID_EVENT_WAIT_LIST = -57;
  247. CL_INVALID_EVENT = -58;
  248. CL_INVALID_OPERATION = -59;
  249. CL_INVALID_GL_OBJECT = -60;
  250. CL_INVALID_BUFFER_SIZE = -61;
  251. CL_INVALID_MIP_LEVEL = -62;
  252. CL_INVALID_GLOBAL_WORK_SIZE = -63;
  253. CL_INVALID_PROPERTY = -64;
  254. CL_INVALID_IMAGE_DESCRIPTOR = -65;
  255. CL_INVALID_COMPILER_OPTIONS = -66;
  256. CL_INVALID_LINKER_OPTIONS = -67;
  257. CL_INVALID_DEVICE_PARTITION_COUNT = -68;
  258. CL_INVALID_PIPE_SIZE = -69;
  259. CL_INVALID_DEVICE_QUEUE = -70;
  260. CL_INVALID_SPEC_ID = -71;
  261. CL_MAX_SIZE_RESTRICTION_EXCEEDED = -72;
  262. (* OpenCL Version *)
  263. CL_VERSION_1_0 = 1;
  264. CL_VERSION_1_1 = 1;
  265. CL_VERSION_1_2 = 1;
  266. CL_VERSION_2_0 = 1;
  267. CL_VERSION_2_1 = 1;
  268. CL_VERSION_2_2 = 1;
  269. (* cl_bool *)
  270. CL_FALSE = 0;
  271. CL_TRUE = 1;
  272. CL_BLOCKING = CL_TRUE;
  273. CL_NON_BLOCKING = CL_FALSE;
  274. (* cl_platform_info *)
  275. CL_PLATFORM_PROFILE = $0900;
  276. CL_PLATFORM_VERSION = $0901;
  277. CL_PLATFORM_NAME = $0902;
  278. CL_PLATFORM_VENDOR = $0903;
  279. CL_PLATFORM_EXTENSIONS = $0904;
  280. CL_PLATFORM_HOST_TIMER_RESOLUTION = $0905;
  281. (* cl_device_type - bitfield *)
  282. CL_DEVICE_TYPE_DEFAULT = (1 shl 0);
  283. CL_DEVICE_TYPE_CPU = (1 shl 1);
  284. CL_DEVICE_TYPE_GPU = (1 shl 2);
  285. CL_DEVICE_TYPE_ACCELERATOR = (1 shl 3);
  286. CL_DEVICE_TYPE_CUSTOM = (1 shl 4);
  287. CL_DEVICE_TYPE_ALL = $FFFFFFFF;
  288. (* cl_device_info *)
  289. CL_DEVICE_TYPE = $1000;
  290. CL_DEVICE_VENDOR_ID = $1001;
  291. CL_DEVICE_MAX_COMPUTE_UNITS = $1002;
  292. CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = $1003;
  293. CL_DEVICE_MAX_WORK_GROUP_SIZE = $1004;
  294. CL_DEVICE_MAX_WORK_ITEM_SIZES = $1005;
  295. CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR = $1006;
  296. CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT = $1007;
  297. CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT = $1008;
  298. CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG = $1009;
  299. CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT = $100A;
  300. CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE = $100B;
  301. CL_DEVICE_MAX_CLOCK_FREQUENCY = $100C;
  302. CL_DEVICE_ADDRESS_BITS = $100D;
  303. CL_DEVICE_MAX_READ_IMAGE_ARGS = $100E;
  304. CL_DEVICE_MAX_WRITE_IMAGE_ARGS = $100F;
  305. CL_DEVICE_MAX_MEM_ALLOC_SIZE = $1010;
  306. CL_DEVICE_IMAGE2D_MAX_WIDTH = $1011;
  307. CL_DEVICE_IMAGE2D_MAX_HEIGHT = $1012;
  308. CL_DEVICE_IMAGE3D_MAX_WIDTH = $1013;
  309. CL_DEVICE_IMAGE3D_MAX_HEIGHT = $1014;
  310. CL_DEVICE_IMAGE3D_MAX_DEPTH = $1015;
  311. CL_DEVICE_IMAGE_SUPPORT = $1016;
  312. CL_DEVICE_MAX_PARAMETER_SIZE = $1017;
  313. CL_DEVICE_MAX_SAMPLERS = $1018;
  314. CL_DEVICE_MEM_BASE_ADDR_ALIGN = $1019;
  315. CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE = $101A;
  316. CL_DEVICE_SINGLE_FP_CONFIG = $101B;
  317. CL_DEVICE_GLOBAL_MEM_CACHE_TYPE = $101C;
  318. CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE = $101D;
  319. CL_DEVICE_GLOBAL_MEM_CACHE_SIZE = $101E;
  320. CL_DEVICE_GLOBAL_MEM_SIZE = $101F;
  321. CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE = $1020;
  322. CL_DEVICE_MAX_CONSTANT_ARGS = $1021;
  323. CL_DEVICE_LOCAL_MEM_TYPE = $1022;
  324. CL_DEVICE_LOCAL_MEM_SIZE = $1023;
  325. CL_DEVICE_ERROR_CORRECTION_SUPPORT = $1024;
  326. CL_DEVICE_PROFILING_TIMER_RESOLUTION = $1025;
  327. CL_DEVICE_ENDIAN_LITTLE = $1026;
  328. CL_DEVICE_AVAILABLE = $1027;
  329. CL_DEVICE_COMPILER_AVAILABLE = $1028;
  330. CL_DEVICE_EXECUTION_CAPABILITIES = $1029;
  331. CL_DEVICE_QUEUE_PROPERTIES = $102A; (* deprecated *)
  332. CL_DEVICE_QUEUE_ON_HOST_PROPERTIES = $102A;
  333. CL_DEVICE_NAME = $102B;
  334. CL_DEVICE_VENDOR = $102C;
  335. CL_DRIVER_VERSION = $102D;
  336. CL_DEVICE_PROFILE = $102E;
  337. CL_DEVICE_VERSION = $102F;
  338. CL_DEVICE_EXTENSIONS = $1030;
  339. CL_DEVICE_PLATFORM = $1031;
  340. CL_DEVICE_DOUBLE_FP_CONFIG = $1032;
  341. CL_DEVICE_HALF_FP_CONFIG = $1033;
  342. CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF = $1034;
  343. CL_DEVICE_HOST_UNIFIED_MEMORY = $1035; (* deprecated *)
  344. CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR = $1036;
  345. CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT = $1037;
  346. CL_DEVICE_NATIVE_VECTOR_WIDTH_INT = $1038;
  347. CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG = $1039;
  348. CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT = $103A;
  349. CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE = $103B;
  350. CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF = $103C;
  351. CL_DEVICE_OPENCL_C_VERSION = $103D;
  352. CL_DEVICE_LINKER_AVAILABLE = $103E;
  353. CL_DEVICE_BUILT_IN_KERNELS = $103F;
  354. CL_DEVICE_IMAGE_MAX_BUFFER_SIZE = $1040;
  355. CL_DEVICE_IMAGE_MAX_ARRAY_SIZE = $1041;
  356. CL_DEVICE_PARENT_DEVICE = $1042;
  357. CL_DEVICE_PARTITION_MAX_SUB_DEVICES = $1043;
  358. CL_DEVICE_PARTITION_PROPERTIES = $1044;
  359. CL_DEVICE_PARTITION_AFFINITY_DOMAIN = $1045;
  360. CL_DEVICE_PARTITION_TYPE = $1046;
  361. CL_DEVICE_REFERENCE_COUNT = $1047;
  362. CL_DEVICE_PREFERRED_INTEROP_USER_SYNC = $1048;
  363. CL_DEVICE_PRINTF_BUFFER_SIZE = $1049;
  364. CL_DEVICE_IMAGE_PITCH_ALIGNMENT = $104A;
  365. CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT = $104B;
  366. CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS = $104C;
  367. CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE = $104D;
  368. CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES = $104E;
  369. CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE = $104F;
  370. CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE = $1050;
  371. CL_DEVICE_MAX_ON_DEVICE_QUEUES = $1051;
  372. CL_DEVICE_MAX_ON_DEVICE_EVENTS = $1052;
  373. CL_DEVICE_SVM_CAPABILITIES = $1053;
  374. CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE = $1054;
  375. CL_DEVICE_MAX_PIPE_ARGS = $1055;
  376. CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS = $1056;
  377. CL_DEVICE_PIPE_MAX_PACKET_SIZE = $1057;
  378. CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT = $1058;
  379. CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT = $1059;
  380. CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT = $105A;
  381. CL_DEVICE_IL_VERSION = $105B;
  382. CL_DEVICE_MAX_NUM_SUB_GROUPS = $105C;
  383. CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS = $105D;
  384. (* cl_device_fp_config - bitfield *)
  385. CL_FP_DENORM = (1 shl 0);
  386. CL_FP_INF_NAN = (1 shl 1);
  387. CL_FP_ROUND_TO_NEAREST = (1 shl 2);
  388. CL_FP_ROUND_TO_ZERO = (1 shl 3);
  389. CL_FP_ROUND_TO_INF = (1 shl 4);
  390. CL_FP_FMA = (1 shl 5);
  391. CL_FP_SOFT_FLOAT = (1 shl 6);
  392. CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT = (1 shl 7);
  393. (* cl_device_mem_cache_type *)
  394. CL_NONE = $0;
  395. CL_READ_ONLY_CACHE = $1;
  396. CL_READ_WRITE_CACHE = $2;
  397. (* cl_device_local_mem_type *)
  398. CL_LOCAL = $1;
  399. CL_GLOBAL = $2;
  400. (* cl_device_exec_capabilities - bitfield *)
  401. CL_EXEC_KERNEL = (1 shl 0);
  402. CL_EXEC_NATIVE_KERNEL = (1 shl 1);
  403. (* cl_command_queue_properties - bitfield *)
  404. CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 shl 0);
  405. CL_QUEUE_PROFILING_ENABLE = (1 shl 1);
  406. CL_QUEUE_ON_DEVICE = (1 shl 2);
  407. CL_QUEUE_ON_DEVICE_DEFAULT = (1 shl 3);
  408. (* cl_context_info *)
  409. CL_CONTEXT_REFERENCE_COUNT = $1080;
  410. CL_CONTEXT_DEVICES = $1081;
  411. CL_CONTEXT_PROPERTIES = $1082;
  412. CL_CONTEXT_NUM_DEVICES = $1083;
  413. (* cl_context_properties *)
  414. CL_CONTEXT_PLATFORM = $1084;
  415. CL_CONTEXT_INTEROP_USER_SYNC = $1085;
  416. (* cl_device_partition_property *)
  417. CL_DEVICE_PARTITION_EQUALLY = $1086;
  418. CL_DEVICE_PARTITION_BY_COUNTS = $1087;
  419. CL_DEVICE_PARTITION_BY_COUNTS_LIST_END = $0;
  420. CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN = $1088;
  421. (* cl_device_affinity_domain *)
  422. CL_DEVICE_AFFINITY_DOMAIN_NUMA = (1 shl 0);
  423. CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE = (1 shl 1);
  424. CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE = (1 shl 2);
  425. CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE = (1 shl 3);
  426. CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE = (1 shl 4);
  427. CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 shl 5);
  428. (* cl_device_svm_capabilities *)
  429. CL_DEVICE_SVM_COARSE_GRAIN_BUFFER = (1 shl 0);
  430. CL_DEVICE_SVM_FINE_GRAIN_BUFFER = (1 shl 1);
  431. CL_DEVICE_SVM_FINE_GRAIN_SYSTEM = (1 shl 2);
  432. CL_DEVICE_SVM_ATOMICS = (1 shl 3);
  433. (* cl_command_queue_info *)
  434. CL_QUEUE_CONTEXT = $1090;
  435. CL_QUEUE_DEVICE = $1091;
  436. CL_QUEUE_REFERENCE_COUNT = $1092;
  437. CL_QUEUE_PROPERTIES = $1093;
  438. CL_QUEUE_SIZE = $1094;
  439. CL_QUEUE_DEVICE_DEFAULT = $1095;
  440. (* cl_mem_flags - bitfield *)
  441. CL_MEM_READ_WRITE = (1 shl 0);
  442. CL_MEM_WRITE_ONLY = (1 shl 1);
  443. CL_MEM_READ_ONLY = (1 shl 2);
  444. CL_MEM_USE_HOST_PTR = (1 shl 3);
  445. CL_MEM_ALLOC_HOST_PTR = (1 shl 4);
  446. CL_MEM_COPY_HOST_PTR = (1 shl 5);
  447. (* reserved (1 shl 6); *)
  448. CL_MEM_HOST_WRITE_ONLY = (1 shl 7);
  449. CL_MEM_HOST_READ_ONLY = (1 shl 8);
  450. CL_MEM_HOST_NO_ACCESS = (1 shl 9);
  451. CL_MEM_SVM_FINE_GRAIN_BUFFER = (1 shl 10); (* used by cl_svm_mem_flags only *)
  452. CL_MEM_SVM_ATOMICS = (1 shl 11); (* used by cl_svm_mem_flags only *)
  453. CL_MEM_KERNEL_READ_AND_WRITE = (1 shl 12);
  454. (* cl_mem_migration_flags - bitfield *)
  455. CL_MIGRATE_MEM_OBJECT_HOST = (1 shl 0);
  456. CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED = (1 shl 1);
  457. (* cl_channel_order *)
  458. CL_R = $10B0;
  459. CL_A = $10B1;
  460. CL_RG = $10B2;
  461. CL_RA = $10B3;
  462. CL_RGB = $10B4;
  463. CL_RGBA = $10B5;
  464. CL_BGRA = $10B6;
  465. CL_ARGB = $10B7;
  466. CL_INTENSITY = $10B8;
  467. CL_LUMINANCE = $10B9;
  468. CL_Rx = $10BA;
  469. CL_RGx = $10BB;
  470. CL_RGBx = $10BC;
  471. CL_DEPTH = $10BD;
  472. CL_DEPTH_STENCIL = $10BE;
  473. CL_sRGB = $10BF;
  474. CL_sRGBx = $10C0;
  475. CL_sRGBA = $10C1;
  476. CL_sBGRA = $10C2;
  477. CL_ABGR = $10C3;
  478. //* cl_channel_type *//
  479. CL_SNORM_INT8 = $10D0;
  480. CL_SNORM_INT16 = $10D1;
  481. CL_UNORM_INT8 = $10D2;
  482. CL_UNORM_INT16 = $10D3;
  483. CL_UNORM_SHORT_565 = $10D4;
  484. CL_UNORM_SHORT_555 = $10D5;
  485. CL_UNORM_INT_101010 = $10D6;
  486. CL_SIGNED_INT8 = $10D7;
  487. CL_SIGNED_INT16 = $10D8;
  488. CL_SIGNED_INT32 = $10D9;
  489. CL_UNSIGNED_INT8 = $10DA;
  490. CL_UNSIGNED_INT16 = $10DB;
  491. CL_UNSIGNED_INT32 = $10DC;
  492. CL_HALF_FLOAT = $10DD;
  493. CL_FLOAT = $10DE;
  494. CL_UNORM_INT24 = $10DF;
  495. CL_UNORM_INT_101010_2 = $10E0;
  496. (* cl_mem_object_type *)
  497. CL_MEM_OBJECT_BUFFER = $10F0;
  498. CL_MEM_OBJECT_IMAGE2D = $10F1;
  499. CL_MEM_OBJECT_IMAGE3D = $10F2;
  500. CL_MEM_OBJECT_IMAGE2D_ARRAY = $10F3;
  501. CL_MEM_OBJECT_IMAGE1D = $10F4;
  502. CL_MEM_OBJECT_IMAGE1D_ARRAY = $10F5;
  503. CL_MEM_OBJECT_IMAGE1D_BUFFER = $10F6;
  504. CL_MEM_OBJECT_PIPE = $10F7;
  505. (* cl_mem_info *)
  506. CL_MEM_TYPE = $1100;
  507. CL_MEM_FLAGS = $1101;
  508. CL_MEM_SIZE = $1102;
  509. CL_MEM_HOST_PTR = $1103;
  510. CL_MEM_MAP_COUNT = $1104;
  511. CL_MEM_REFERENCE_COUNT = $1105;
  512. CL_MEM_CONTEXT = $1106;
  513. CL_MEM_ASSOCIATED_MEMOBJECT = $1107;
  514. CL_MEM_OFFSET = $1108;
  515. CL_MEM_USES_SVM_POINTER = $1109;
  516. (* cl_image_info *)
  517. CL_IMAGE_FORMAT = $1110;
  518. CL_IMAGE_ELEMENT_SIZE = $1111;
  519. CL_IMAGE_ROW_PITCH = $1112;
  520. CL_IMAGE_SLICE_PITCH = $1113;
  521. CL_IMAGE_WIDTH = $1114;
  522. CL_IMAGE_HEIGHT = $1115;
  523. CL_IMAGE_DEPTH = $1116;
  524. CL_IMAGE_ARRAY_SIZE = $1117;
  525. CL_IMAGE_BUFFER = $1118;
  526. CL_IMAGE_NUM_MIP_LEVELS = $1119;
  527. CL_IMAGE_NUM_SAMPLES = $111A;
  528. (* cl_pipe_info *)
  529. CL_PIPE_PACKET_SIZE = $1120;
  530. CL_PIPE_MAX_PACKETS = $1121;
  531. (* cl_addressing_mode *)
  532. CL_ADDRESS_NONE = $1130;
  533. CL_ADDRESS_CLAMP_TO_EDGE = $1131;
  534. CL_ADDRESS_CLAMP = $1132;
  535. CL_ADDRESS_REPEAT = $1133;
  536. CL_ADDRESS_MIRRORED_REPEAT = $1134;
  537. (* cl_filter_mode *)
  538. CL_FILTER_NEAREST = $1140;
  539. CL_FILTER_LINEAR = $1141;
  540. (* cl_sampler_info *)
  541. CL_SAMPLER_REFERENCE_COUNT = $1150;
  542. CL_SAMPLER_CONTEXT = $1151;
  543. CL_SAMPLER_NORMALIZED_COORDS = $1152;
  544. CL_SAMPLER_ADDRESSING_MODE = $1153;
  545. CL_SAMPLER_FILTER_MODE = $1154;
  546. CL_SAMPLER_MIP_FILTER_MODE = $1155;
  547. CL_SAMPLER_LOD_MIN = $1156;
  548. CL_SAMPLER_LOD_MAX = $1157;
  549. (* cl_map_flags - bitfield *)
  550. CL_MAP_READ = (1 shl 0);
  551. CL_MAP_WRITE = (1 shl 1);
  552. CL_MAP_WRITE_INVALIDATE_REGION = (1 shl 2);
  553. (* cl_program_info *)
  554. CL_PROGRAM_REFERENCE_COUNT = $1160;
  555. CL_PROGRAM_CONTEXT = $1161;
  556. CL_PROGRAM_NUM_DEVICES = $1162;
  557. CL_PROGRAM_DEVICES = $1163;
  558. CL_PROGRAM_SOURCE = $1164;
  559. CL_PROGRAM_BINARY_SIZES = $1165;
  560. CL_PROGRAM_BINARIES = $1166;
  561. CL_PROGRAM_NUM_KERNELS = $1167;
  562. CL_PROGRAM_KERNEL_NAMES = $1168;
  563. CL_PROGRAM_IL = $1169;
  564. CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT = $116A;
  565. CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT = $116B;
  566. (* cl_program_build_info *)
  567. CL_PROGRAM_BUILD_STATUS = $1181;
  568. CL_PROGRAM_BUILD_OPTIONS = $1182;
  569. CL_PROGRAM_BUILD_LOG = $1183;
  570. CL_PROGRAM_BINARY_TYPE = $1184;
  571. CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE = $1185;
  572. (* cl_program_binary_type *)
  573. CL_PROGBRAM_BINARY_TYPE_NONE = $0;
  574. CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT = $1;
  575. CL_PROGRAM_BINARY_TYPE_LIBRARY = $2;
  576. CL_PROGRAM_BINARY_TYPE_EXECUTABLE = $4;
  577. (* cl_build_status *)
  578. CL_BUILD_SUCCESS = 0;
  579. CL_BUILD_NONE = -1;
  580. CL_BUILD_ERROR = -2;
  581. CL_BUILD_IN_PROGRESS = -3;
  582. (* cl_kernel_info *)
  583. CL_KERNEL_FUNCTION_NAME = $1190;
  584. CL_KERNEL_NUM_ARGS = $1191;
  585. CL_KERNEL_REFERENCE_COUNT = $1192;
  586. CL_KERNEL_CONTEXT = $1193;
  587. CL_KERNEL_PROGRAM = $1194;
  588. CL_KERNEL_ATTRIBUTES = $1195;
  589. CL_KERNEL_MAX_NUM_SUB_GROUPS = $11B9;
  590. CL_KERNEL_COMPILE_NUM_SUB_GROUPS = $11BA;
  591. (* cl_kernel_arg_info *)
  592. CL_KERNEL_ARG_ADDRESS_QUALIFIER = $1196;
  593. CL_KERNEL_ARG_ACCESS_QUALIFIER = $1197;
  594. CL_KERNEL_ARG_TYPE_NAME = $1198;
  595. CL_KERNEL_ARG_TYPE_QUALIFIER = $1199;
  596. CL_KERNEL_ARG_NAME = $119A;
  597. (* cl_kernel_arg_address_qualifier *)
  598. CL_KERNEL_ARG_ADDRESS_GLOBAL = $119B;
  599. CL_KERNEL_ARG_ADDRESS_LOCAL = $119C;
  600. CL_KERNEL_ARG_ADDRESS_CONSTANT = $119D;
  601. CL_KERNEL_ARG_ADDRESS_PRIVATE = $119E;
  602. (* cl_kernel_arg_access_qualifier *)
  603. CL_KERNEL_ARG_ACCESS_READ_ONLY = $11A0;
  604. CL_KERNEL_ARG_ACCESS_WRITE_ONLY = $11A1;
  605. CL_KERNEL_ARG_ACCESS_READ_WRITE = $11A2;
  606. CL_KERNEL_ARG_ACCESS_NONE = $11A3;
  607. (* cl_kernel_arg_type_qualifer *)
  608. CL_KERNEL_ARG_TYPE_NONE = 0;
  609. CL_KERNEL_ARG_TYPE_CONST = (1 shl 0);
  610. CL_KERNEL_ARG_TYPE_RESTRICT = (1 shl 1);
  611. CL_KERNEL_ARG_TYPE_VOLATILE = (1 shl 2);
  612. CL_KERNEL_ARG_TYPE_PIPE = (1 shl 3);
  613. (* cl_kernel_work_group_info *)
  614. CL_KERNEL_WORK_GROUP_SIZE = $11B0;
  615. CL_KERNEL_COMPILE_WORK_GROUP_SIZE = $11B1;
  616. CL_KERNEL_LOCAL_MEM_SIZE = $11B2;
  617. CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE = $11B3;
  618. CL_KERNEL_PRIVATE_MEM_SIZE = $11B4;
  619. CL_KERNEL_GLOBAL_WORK_SIZE = $11B5;
  620. (* cl_kernel_sub_group_info *)
  621. CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE = $2033;
  622. CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE = $2034;
  623. CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT = $11B8;
  624. (* cl_kernel_exec_info *)
  625. CL_KERNEL_EXEC_INFO_SVM_PTRS = $11B6;
  626. CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM = $11B7;
  627. (* cl_event_info *)
  628. CL_EVENT_COMMAND_QUEUE = $11D0;
  629. CL_EVENT_COMMAND_TYPE = $11D1;
  630. CL_EVENT_REFERENCE_COUNT = $11D2;
  631. CL_EVENT_COMMAND_EXECUTION_STATUS = $11D3;
  632. CL_EVENT_CONTEXT = $11D4;
  633. (* cl_command_type *)
  634. CL_COMMAND_NDRANGE_KERNEL = $11F0;
  635. CL_COMMAND_TASK = $11F1;
  636. CL_COMMAND_NATIVE_KERNEL = $11F2;
  637. CL_COMMAND_READ_BUFFER = $11F3;
  638. CL_COMMAND_WRITE_BUFFER = $11F4;
  639. CL_COMMAND_COPY_BUFFER = $11F5;
  640. CL_COMMAND_READ_IMAGE = $11F6;
  641. CL_COMMAND_WRITE_IMAGE = $11F7;
  642. CL_COMMAND_COPY_IMAGE = $11F8;
  643. CL_COMMAND_COPY_IMAGE_TO_BUFFER = $11F9;
  644. CL_COMMAND_COPY_BUFFER_TO_IMAGE = $11FA;
  645. CL_COMMAND_MAP_BUFFER = $11FB;
  646. CL_COMMAND_MAP_IMAGE = $11FC;
  647. CL_COMMAND_UNMAP_MEM_OBJECT = $11FD;
  648. CL_COMMAND_MARKER = $11FE;
  649. CL_COMMAND_ACQUIRE_GL_OBJECTS = $11FF;
  650. CL_COMMAND_RELEASE_GL_OBJECTS = $1200;
  651. CL_COMMAND_READ_BUFFER_RECT = $1201;
  652. CL_COMMAND_WRITE_BUFFER_RECT = $1202;
  653. CL_COMMAND_COPY_BUFFER_RECT = $1203;
  654. CL_COMMAND_USER = $1204;
  655. CL_COMMAND_BARRIER = $1205;
  656. CL_COMMAND_MIGRATE_MEM_OBJECTS = $1206;
  657. CL_COMMAND_FILL_BUFFER = $1207;
  658. CL_COMMAND_FILL_IMAGE = $1208;
  659. CL_COMMAND_SVM_FREE = $1209;
  660. CL_COMMAND_SVM_MEMCPY = $120A;
  661. CL_COMMAND_SVM_MEMFILL = $120B;
  662. CL_COMMAND_SVM_MAP = $120C;
  663. CL_COMMAND_SVM_UNMAP = $120D;
  664. (* command execution status *)
  665. CL_COMPLETE = $0;
  666. CL_RUNNING = $1;
  667. CL_SUBMITTED = $2;
  668. CL_QUEUED = $3;
  669. (* cl_buffer_create_type *)
  670. CL_BUFFER_CREATE_TYPE_REGION = $1220;
  671. (* cl_profiling_info *)
  672. CL_PROFILING_COMMAND_QUEUED = $1280;
  673. CL_PROFILING_COMMAND_SUBMIT = $1281;
  674. CL_PROFILING_COMMAND_START = $1282;
  675. CL_PROFILING_COMMAND_END = $1283;
  676. CL_PROFILING_COMMAND_COMPLETE = $1284;
  677. (*************************************************************************)
  678. (*** Functions ***)
  679. (*************************************************************************)
  680. (* Platform API *)
  681. function clGetPlatformIDs(num_entries: Tcl_uint;
  682. platforms: Pcl_platform_id;
  683. num_platforms: Pcl_uint): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  684. stdcall; external LibOpenCL;
  685. function clGetPlatformInfo(cl_platform: Tcl_platform_id;
  686. param_name: Tcl_platform_info;
  687. param_value_size: NativeUInt;
  688. param_value: Pointer;
  689. param_value_size_ret: Psize_t): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  690. stdcall; external LibOpenCL;
  691. //* Device APIs *//
  692. function clGetDeviceIDs(_platform: Pcl_platform_id;
  693. device_type: Tcl_device_type;
  694. num_entries: Tcl_uint;
  695. devices: Pcl_device_id;
  696. num_devices: Pcl_uint): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  697. stdcall; external LibOpenCL;
  698. function clGetDeviceInfo(device: Pcl_device_id;
  699. param_name: Tcl_device_info;
  700. param_value_size: NativeUInt;
  701. param_value: Pointer;
  702. param_value_size_ret: Psize_t): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  703. stdcall; external LibOpenCL;
  704. function clCreateSubDevices(in_device: Pcl_device_id;
  705. properties: Pcl_device_partition_property;
  706. num_devices: Tcl_uint;
  707. out_devices: Pcl_device_id;
  708. num_devices_ret: Pcl_uint): Tcl_int; // CL_API_SUFFIX__VERSION_1_2
  709. stdcall; external LibOpenCL;
  710. function clRetainDevice(device : Pcl_device_id): Tcl_int; // CL_API_SUFFIX__VERSION_1_2
  711. stdcall; external LibOpenCL;
  712. function clReleaseDevice(device : Pcl_device_id): Tcl_int; // CL_API_SUFFIX__VERSION_1_2
  713. stdcall; external LibOpenCL;
  714. function clSetDefaultDeviceCommandQueue(context: Pcl_context;
  715. device: Pcl_device_id;
  716. command_queue: Pcl_command_queue): Tcl_int; //CL_API_SUFFIX__VERSION_2_1
  717. stdcall; external LibOpenCL;
  718. function clGetDeviceAndHostTimer(device: Pcl_device_id;
  719. device_timestamp: Pcl_ulong;
  720. host_timestamp: Pcl_ulong): Tcl_int; //CL_API_SUFFIX__VERSION_2_1
  721. stdcall; external LibOpenCL;
  722. function clGetHostTimer(device: Pcl_device_id;
  723. host_timestamp: Pcl_ulong): Tcl_int; //CL_API_SUFFIX__VERSION_2_1
  724. stdcall; external LibOpenCL;
  725. //* Context APIs *//
  726. type
  727. Tcl_context_notify = procedure(errinfo: PAnsiChar;
  728. private_info: Pointer;
  729. size: NativeUInt;
  730. user_data: Pointer);
  731. stdcall;
  732. function clCreateContext(properties: Pcl_context_properties;
  733. num_devices: Tcl_uint;
  734. devices: Pcl_device_id;
  735. pfn_notify: Tcl_context_notify; {const char *, const void *, size_t, void *}
  736. user_data: Pointer;
  737. errcode_ret: Pcl_int): Pcl_context; // CL_API_SUFFIX__VERSION_1_0
  738. stdcall; external LibOpenCL;
  739. function clCreateContextFromType(properties: Pcl_context_properties;
  740. device_type: Tcl_device_type;
  741. pfn_notify: Tcl_context_notify; {const char *, const void *, size_t, void *}
  742. user_data: Pointer;
  743. errcode_ret: Pcl_int): Pcl_context; //CL_API_SUFFIX__VERSION_1_0
  744. stdcall; external LibOpenCL;
  745. function clRetainContext(context: Pcl_context): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  746. stdcall; external LibOpenCL;
  747. function clReleaseContext(context: Pcl_context): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  748. stdcall; external LibOpenCL;
  749. function clGetContextInfo(context: Pcl_context;
  750. param_name: Tcl_context_info;
  751. param_value_size: NativeUInt;
  752. param_value: Pointer;
  753. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  754. stdcall; external LibOpenCL;
  755. //* Command Queue APIs *//
  756. function clCreateCommandQueue(context: Pcl_context;
  757. device: Pcl_device_id;
  758. properties: Tcl_command_queue_properties;
  759. errcode_ret: Pcl_int): Pcl_command_queue; //CL_API_SUFFIX__VERSION_2_0
  760. stdcall; external LibOpenCL;
  761. function clRetainCommandQueue(command_queue: Pcl_command_queue): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  762. stdcall; external LibOpenCL;
  763. function clReleaseCommandQueue(command_queue: Pcl_command_queue): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  764. stdcall; external LibOpenCL;
  765. function clGetCommandQueueInfo(command_queue: Pcl_command_queue;
  766. param_name: Tcl_command_queue_info;
  767. param_value_size: NativeUInt;
  768. param_value: Pointer;
  769. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  770. stdcall; external LibOpenCL;
  771. //* Memory Object APIs *//
  772. function clCreateBuffer(context: Pcl_context;
  773. flags: Tcl_mem_flags;
  774. size: NativeUInt;
  775. host_ptr: Pointer;
  776. errcode_ret: Pcl_int): Pcl_mem; //CL_API_SUFFIX__VERSION_1_0
  777. stdcall; external LibOpenCL;
  778. function clCreateSubBuffer(buffer: Pcl_mem;
  779. flags: Tcl_mem_flags;
  780. buffer_create_type: Tcl_buffer_create_type;
  781. buffer_create_info: Pointer;
  782. errcode_ret: Pcl_int): Pcl_mem; //CL_API_SUFFIX__VERSION_1_1
  783. stdcall; external LibOpenCL;
  784. function clCreateImage(context: Pcl_context;
  785. flags: Tcl_mem_flags;
  786. image_format: Pcl_image_format;
  787. image_desc: Pcl_image_desc;
  788. host_ptr: Pointer;
  789. errcode_ret: Pcl_int): Pcl_mem; //CL_API_SUFFIX__VERSION_1_2
  790. stdcall; external LibOpenCL;
  791. function clCreatePipe(context: Pcl_context;
  792. flags: Tcl_mem_flags;
  793. pipe_packet_size: Tcl_uint;
  794. pipe_max_packets: Tcl_uint;
  795. properties: Pcl_pipe_properties;
  796. errcode_ret: Pcl_int): Pcl_mem; //CL_API_SUFFIX__VERSION_2_0
  797. stdcall; external LibOpenCL;
  798. function clRetainMemObject(memobj: Pcl_mem): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  799. stdcall; external LibOpenCL;
  800. function clReleaseMemObject(memobj: Pcl_mem): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  801. stdcall; external LibOpenCL;
  802. function clGetSupportedImageFormats(context: Pcl_context;
  803. flags: Tcl_mem_flags;
  804. image_type: Tcl_mem_object_type;
  805. num_entries: Tcl_uint;
  806. image_formats: Pcl_image_format;
  807. num_image_formats: Pcl_uint): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  808. stdcall; external LibOpenCL;
  809. function clGetMemObjectInfo(memobj: Pcl_mem;
  810. param_name: Tcl_mem_info;
  811. param_value_size: NativeUInt;
  812. param_value: Pointer;
  813. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  814. stdcall; external LibOpenCL;
  815. function clGetImageInfo(image: Pcl_mem;
  816. param_name: Tcl_image_info;
  817. param_value_size: NativeUInt;
  818. param_value: Pointer;
  819. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  820. stdcall; external LibOpenCL;
  821. function clGetPipeInfo(pipe: Pcl_mem;
  822. param_name: Tcl_pipe_info;
  823. param_value_size: NativeUInt;
  824. param_value: Pointer;
  825. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_2_0
  826. stdcall; external LibOpenCL;
  827. type
  828. Tcl_destructor_notify = procedure(memobj: Pcl_mem;
  829. user_data: Pointer);
  830. stdcall;
  831. function clSetMemObjectDestructorCallback(memobj: Pcl_mem;
  832. pfn_notify: Tcl_destructor_notify; //( cl_mem /* memobj */, void* /*user_data*/),
  833. user_data: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_1_1
  834. stdcall; external LibOpenCL;
  835. //* SVM Allocation APIs *//
  836. function clSVMAlloc(context: Pcl_context;
  837. flags: Tcl_svm_mem_flags;
  838. size: NativeUInt;
  839. alignment: Tcl_uint): Pointer; //CL_API_SUFFIX__VERSION_2_0
  840. stdcall; external LibOpenCL;
  841. procedure clSVMFree(context: Pcl_context;
  842. svm_pointer: Pointer); //CL_API_SUFFIX__VERSION_2_0
  843. stdcall; external LibOpenCL;
  844. //* Sampler APIs *//
  845. function clCreateSamplerWithProperties(context: Pcl_context;
  846. normalized_coords: Pcl_sampler_properties;
  847. addressing_mode: Tcl_addressing_mode;
  848. errcode_ret: Pcl_int): Pcl_sampler; //CL_API_SUFFIX__VERSION_2_0
  849. stdcall; external LibOpenCL;
  850. function clRetainSampler(sampler: Pcl_sampler): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  851. stdcall; external LibOpenCL;
  852. function clReleaseSampler(sampler: Pcl_sampler): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  853. stdcall; external LibOpenCL;
  854. function clGetSamplerInfo(sampler: Pcl_sampler;
  855. param_name: Tcl_sampler_info;
  856. param_value_size: NativeUInt;
  857. param_value: Pointer;
  858. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  859. stdcall; external LibOpenCL;
  860. (* Program Object APIs *)
  861. function clCreateProgramWithSource(context: Pcl_context;
  862. count: Tcl_uint;
  863. strings: PPAnsiChar;
  864. lengths: Psize_t;
  865. errcode_ret: Pcl_int): Pcl_program; //CL_API_SUFFIX__VERSION_1_0
  866. stdcall; external LibOpenCL;
  867. function clCreateProgramWithBinary(context: Pcl_context;
  868. num_devices: Tcl_uint;
  869. device_list: Pcl_device_id;
  870. lengths: Psize_t;
  871. binaries: PByte;
  872. binary_status: Pcl_int;
  873. errcode_ret: Pcl_int): Pcl_program; //CL_API_SUFFIX__VERSION_1_0
  874. stdcall; external LibOpenCL;
  875. function clCreateProgramWithBuiltInKernels(context: Pcl_context;
  876. num_devices: Tcl_uint;
  877. device_list: Pcl_device_id;
  878. kernel_names: Pcl_char;
  879. errcode_ret: Pcl_int): Pcl_program; //CL_API_SUFFIX__VERSION_1_2
  880. stdcall; external LibOpenCL;
  881. function clCreateProgramWithIL(context: Pcl_context;
  882. il: Pointer;
  883. length: NativeUInt;
  884. errcode_ret: Pcl_int): Pcl_program; //CL_API_SUFFIX__VERSION_2_1
  885. stdcall; external LibOpenCL;
  886. function clRetainProgram(_program: Pcl_program): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  887. stdcall; external LibOpenCL;
  888. function clReleaseProgram(_program: Pcl_program): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  889. stdcall; external LibOpenCL;
  890. type
  891. Tcl_programbuilt_notify = procedure(_program: Pcl_program;
  892. user_data: Pointer);
  893. stdcall;
  894. function clBuildProgram(_program: Pcl_program;
  895. num_devices: Tcl_uint;
  896. device_list: Pcl_device_id;
  897. options: Pcl_char;
  898. pfn_notify: Tcl_programbuilt_notify;
  899. user_data: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  900. stdcall; external LibOpenCL;
  901. function clCompileProgram(_program: Pcl_program;
  902. num_devices: Tcl_uint;
  903. device_list: Pcl_device_id;
  904. options: Pcl_char;
  905. num_input_headers: Tcl_uint;
  906. input_headers: Pcl_program;
  907. header_include_names: PPAnsiChar;
  908. pfn_notify: Tcl_programbuilt_notify;
  909. user_data: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  910. stdcall; external LibOpenCL;
  911. function clLinkProgram(context: Pcl_context;
  912. num_devices: Tcl_uint;
  913. device_list: Pcl_device_id;
  914. options: Pcl_char;
  915. num_input_programs: Pcl_uint;
  916. input_programs: Pcl_program;
  917. pfn_notify: Tcl_programbuilt_notify; //(cl_program /* program */, void * /* user_data */)
  918. user_data: Pointer;
  919. errcode_ret: Pcl_int): Pcl_program; //CL_API_SUFFIX__VERSION_1_2
  920. stdcall; external LibOpenCL;
  921. function clUnloadPlatformCompiler: Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  922. stdcall; external LibOpenCL;
  923. function clGetProgramInfo(_program: Pcl_program;
  924. param_name: Tcl_program_info;
  925. param_value_size: NativeUInt;
  926. param_value: Pointer;
  927. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  928. stdcall; external LibOpenCL;
  929. function clGetProgramBuildInfo(_program: Pcl_program;
  930. device: Pcl_device_id;
  931. param_name: Tcl_program_build_info;
  932. param_value_size: NativeUInt;
  933. param_value: Pointer;
  934. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  935. stdcall; external LibOpenCL;
  936. (* Kernel Object APIs *)
  937. function clCreateKernel(_program: Pcl_program;
  938. kernel_name: PAnsiChar;
  939. errcode_ret: Pcl_int): Pcl_kernel; //CL_API_SUFFIX__VERSION_1_0
  940. stdcall; external LibOpenCL;
  941. function clCreateKernelsInProgram(_program: Pcl_program;
  942. num_kernels: Tcl_uint;
  943. kernels: Pcl_kernel;
  944. num_kernels_ret: Pcl_uint): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  945. stdcall; external LibOpenCL;
  946. function clCloneKernel(source_kernel: Pcl_kernel;
  947. errocode_ret: Pcl_int): Tcl_int; //CL_API_SUFFIX__VERSION_2_1
  948. stdcall; external LibOpenCL;
  949. function clRetainKernel(kernel: Pcl_kernel): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  950. stdcall; external LibOpenCL;
  951. function clReleaseKernel(kernel: Pcl_kernel): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  952. stdcall; external LibOpenCL;
  953. function clSetKernelArg(kernel: Pcl_kernel;
  954. arg_index: Tcl_uint;
  955. arg_size: NativeUInt;
  956. arg_value: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  957. stdcall; external LibOpenCL;
  958. function clSetKernelArgSVMPointer(kernel: Pcl_kernel;
  959. arg_index: Tcl_uint;
  960. arg_value: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_2_0
  961. stdcall; external LibOpenCL;
  962. function clSetKernelExecInfo(kernel: Pcl_kernel;
  963. param_name: Tcl_kernel_exec_info;
  964. param_value_size: NativeUInt;
  965. param_value: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_2_0
  966. stdcall; external LibOpenCL;
  967. function clGetKernelInfo(kernel: Pcl_kernel;
  968. param_name: Tcl_kernel_info;
  969. param_value_size: NativeUInt;
  970. param_value: Pointer;
  971. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  972. stdcall; external LibOpenCL;
  973. function clGetKernelArgInfo(kernel: Pcl_kernel;
  974. arg_indx: Tcl_uint;
  975. param_name: Tcl_kernel_arg_info;
  976. param_value_size: NativeUInt;
  977. param_value: Pointer;
  978. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  979. stdcall; external LibOpenCL;
  980. function clGetKernelWorkGroupInfo(kernel: Pcl_kernel;
  981. device: Pcl_device_id;
  982. param_name: Tcl_kernel_work_group_info;
  983. param_value_size: NativeUInt;
  984. param_value: Pointer;
  985. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  986. stdcall; external LibOpenCL;
  987. function clGetKernelSubGroupInfo(kernel: Pcl_kernel;
  988. device: Pcl_device_id;
  989. param_name: Tcl_kernel_sub_group_info;
  990. input_value_size: NativeUInt;
  991. input_value: Pointer;
  992. param_value_size: NativeUInt;
  993. param_value: Pointer;
  994. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  995. stdcall; external LibOpenCL;
  996. //* Event Object APIs *//
  997. function clWaitForEvents(num_events: Tcl_uint;
  998. event_list: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  999. stdcall; external LibOpenCL;
  1000. function clGetEventInfo(event: Pcl_event;
  1001. param_name: Tcl_event_info;
  1002. param_value_size: NativeUInt;
  1003. param_value: Pointer;
  1004. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1005. stdcall; external LibOpenCL;
  1006. function clCreateUserEvent(context: Pcl_context;
  1007. errcode_ret: Pcl_int): Pcl_event; //CL_API_SUFFIX__VERSION_1_1
  1008. stdcall; external LibOpenCL;
  1009. function clRetainEvent(event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1010. stdcall; external LibOpenCL;
  1011. function clReleaseEvent(event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1012. stdcall; external LibOpenCL;
  1013. function clSetUserEventStatus(event: Pcl_event;
  1014. execution_status: Tcl_int): Tcl_int; //CL_API_SUFFIX__VERSION_1_1
  1015. stdcall; external LibOpenCL;
  1016. type
  1017. Tcl_event_notify = procedure(event: Pcl_event;
  1018. num_event: Tcl_int;
  1019. user_data: Pointer);
  1020. stdcall;
  1021. function clSetEventCallback(event: Pcl_event;
  1022. command_exec_callback_type: Tcl_int;
  1023. pfn_notify: Tcl_event_notify;
  1024. user_data: Pointer): Tcl_int; //CL_API_SUFFIX__VERSION_1_1
  1025. stdcall; external LibOpenCL;
  1026. (* Profiling APIs *)
  1027. function clGetEventProfilingInfo(event: Pcl_event;
  1028. param_name: Tcl_profiling_info;
  1029. param_value_size: NativeUInt;
  1030. param_value: Pointer;
  1031. param_value_size_ret: Psize_t): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1032. stdcall; external LibOpenCL;
  1033. //* Flush and Finish APIs *//
  1034. function clFlush(command_queue: Pcl_command_queue): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1035. stdcall; external LibOpenCL;
  1036. function clFinish(command_queue: Pcl_command_queue): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1037. stdcall; external LibOpenCL;
  1038. //* Enqueued Commands APIs *//
  1039. function clEnqueueReadBuffer(command_queue: Pcl_command_queue;
  1040. buffer: Pcl_mem;
  1041. blocking_read: Tcl_bool;
  1042. offset: NativeUInt;
  1043. size: NativeUInt;
  1044. ptr: Pointer;
  1045. num_events_in_wait_list: Tcl_uint;
  1046. event_wait_list: Pcl_event;
  1047. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1048. stdcall; external LibOpenCL;
  1049. function clEnqueueReadBufferRect(command_queue: Pcl_command_queue;
  1050. buffer: Pcl_mem;
  1051. blocking_read: Tcl_bool;
  1052. buffer_offset: Psize_t;
  1053. host_offset: Psize_t;
  1054. region: Psize_t;
  1055. buffer_row_pitch: NativeUInt;
  1056. buffer_slice_pitch: NativeUInt;
  1057. host_row_pitch: NativeUInt;
  1058. host_slice_pitch: NativeUInt;
  1059. ptr: Pointer;
  1060. num_events_in_wait_list: Tcl_uint;
  1061. event_wait_list: Pcl_event;
  1062. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_1
  1063. stdcall; external LibOpenCL;
  1064. function clEnqueueWriteBuffer(command_queue: Pcl_command_queue;
  1065. buffer: Pcl_mem;
  1066. blocking_write: Tcl_bool;
  1067. offset: NativeUInt;
  1068. size: NativeUInt;
  1069. ptr: Pointer;
  1070. num_events_in_wait_list: Tcl_uint;
  1071. event_wait_list: Pcl_event;
  1072. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1073. stdcall; external LibOpenCL;
  1074. function clEnqueueWriteBufferRect(command_queue: Pcl_command_queue;
  1075. buffer: Pcl_mem;
  1076. blocking_write: Tcl_bool;
  1077. buffer_offset: Psize_t;
  1078. host_offset: Psize_t;
  1079. region: Psize_t;
  1080. buffer_row_pitch: NativeUInt;
  1081. buffer_slice_pitch: NativeUInt;
  1082. host_row_pitch: NativeUInt;
  1083. host_slice_pitch: NativeUInt;
  1084. ptr: Pointer;
  1085. num_events_in_wait_list: Tcl_uint;
  1086. event_wait_list: Pcl_event;
  1087. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_1
  1088. stdcall; external LibOpenCL;
  1089. function clEnqueueFillBuffer(command_queue: Pcl_command_queue;
  1090. buffer: Pcl_mem;
  1091. pattern: Pointer;
  1092. pattern_size: NativeUInt;
  1093. offset: NativeUInt;
  1094. size: NativeUInt;
  1095. num_events_in_wait_list: Tcl_uint;
  1096. event_wait_list: Pcl_event;
  1097. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  1098. stdcall; external LibOpenCL;
  1099. function clEnqueueCopyBuffer(command_queue: Pcl_command_queue;
  1100. src_buffer: Pcl_mem;
  1101. dst_buffer: Pcl_mem;
  1102. src_offset: NativeUInt;
  1103. dst_offset: NativeUInt;
  1104. size: NativeUInt;
  1105. num_events_in_wait_list: Tcl_uint;
  1106. event_wait_list: Pcl_event;
  1107. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1108. stdcall; external LibOpenCL;
  1109. function clEnqueueCopyBufferRect(command_queue: Pcl_command_queue;
  1110. src_buffer: Pcl_mem;
  1111. dst_buffer: Pcl_mem;
  1112. src_offset: NativeUInt;
  1113. dst_offset: NativeUInt;
  1114. region: NativeUInt;
  1115. src_row_pitch: NativeUInt;
  1116. src_slice_pitch: NativeUInt;
  1117. dst_row_pitch: NativeUInt;
  1118. dst_slice_pitch: NativeUInt;
  1119. num_events_in_wait_list: Tcl_uint;
  1120. event_wait_list: Pcl_event;
  1121. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_1
  1122. stdcall; external LibOpenCL;
  1123. function clEnqueueReadImage(command_queue: Pcl_command_queue;
  1124. image: Pcl_mem;
  1125. blocking_read: Tcl_bool;
  1126. origin: Psize_t; // x3
  1127. region: Psize_t; // x3
  1128. row_pitch: NativeUInt;
  1129. slice_pitch: NativeUInt;
  1130. ptr: Pointer;
  1131. num_events_in_wait_list: Tcl_uint;
  1132. event_wait_list: Pcl_event;
  1133. event: Pcl_event): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  1134. stdcall; external LibOpenCL;
  1135. function clEnqueueWriteImage(command_queue: Pcl_command_queue;
  1136. image: Pcl_mem;
  1137. blocking_write: Tcl_bool;
  1138. origin: Psize_t; // x3
  1139. region: Psize_t; // x3
  1140. input_row_pitch: NativeUInt;
  1141. input_slice_pitch: NativeUInt;
  1142. ptr: Pointer;
  1143. num_events_in_wait_list: Tcl_uint;
  1144. event_wait_list: Pcl_event;
  1145. event: Pcl_event): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  1146. stdcall; external LibOpenCL;
  1147. function clEnqueueFillImage(command_queue: Pcl_command_queue;
  1148. image: Pcl_mem;
  1149. fill_color: Pointer;
  1150. origin: Psize_t; //x3
  1151. region: Psize_t; //x3
  1152. num_events_in_wait_list: Tcl_uint;
  1153. event_wait_list: Pcl_event;
  1154. event: Pcl_event): Tcl_int; // CL_API_SUFFIX__VERSION_1_2
  1155. stdcall; external LibOpenCL;
  1156. function clEnqueueCopyImage(command_queue: Pcl_command_queue;
  1157. src_image: Pcl_mem;
  1158. dst_image: Pcl_mem;
  1159. src_origin: Psize_t; //x3
  1160. dst_origin: Psize_t; //x3
  1161. region: Psize_t; //x3
  1162. num_events_in_wait_list: Tcl_uint;
  1163. event_wait_list: Pcl_event;
  1164. event: Pcl_event): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  1165. stdcall; external LibOpenCL;
  1166. function clEnqueueCopyImageToBuffer(command_queue: Pcl_command_queue;
  1167. src_image: Pcl_mem;
  1168. dst_buffer: Pcl_mem;
  1169. src_origin: Psize_t; //x3
  1170. region: Psize_t; //x3
  1171. dst_offset: NativeUInt;
  1172. num_events_in_wait_list: Tcl_uint;
  1173. event_wait_list: Pcl_event;
  1174. event: Pcl_event): Tcl_int; // CL_API_SUFFIX__VERSION_1_0
  1175. stdcall; external LibOpenCL;
  1176. function clEnqueueCopyBufferToImage(command_queue: Pcl_command_queue;
  1177. src_buffer: Pcl_mem;
  1178. dst_image: Pcl_mem;
  1179. src_offset: NativeUInt;
  1180. dst_origin: Psize_t; //x3
  1181. region: Psize_t; //x3
  1182. num_events_in_wait_list: Tcl_uint;
  1183. event_wait_list: Pcl_event;
  1184. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1185. stdcall; external LibOpenCL;
  1186. function clEnqueueMapBuffer(command_queue: Pcl_command_queue;
  1187. buffer: Pcl_mem;
  1188. blocking_map: Pcl_bool;
  1189. map_flags: Tcl_map_flags;
  1190. offset: NativeUInt;
  1191. cb: NativeUInt;
  1192. num_events_in_wait_list: Tcl_uint;
  1193. event_wait_list: Pcl_event;
  1194. event: Pcl_event;
  1195. errcode_ret: Pcl_int): Pointer; //CL_API_SUFFIX__VERSION_1_0
  1196. stdcall; external LibOpenCL;
  1197. function clEnqueueMapImage(command_queue: Pcl_command_queue;
  1198. image: Pcl_mem;
  1199. blocking_map: Tcl_bool;
  1200. map_flags: Tcl_map_flags;
  1201. origin: Psize_t; //x3
  1202. region: Psize_t; //x3
  1203. image_row_pitch: Psize_t;
  1204. image_slice_pitch: Psize_t;
  1205. num_events_in_wait_list: Tcl_uint;
  1206. event_wait_list: Pcl_event;
  1207. event: Pcl_event;
  1208. errcode_ret: Pcl_int): Pointer; //CL_API_SUFFIX__VERSION_1_0
  1209. stdcall; external LibOpenCL;
  1210. function clEnqueueUnmapMemObject(command_queue: Pcl_command_queue;
  1211. memobj: Pcl_mem;
  1212. mapped_ptr: Pointer;
  1213. num_events_in_wait_list: Tcl_uint;
  1214. event_wait_list: Pcl_event;
  1215. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1216. stdcall; external LibOpenCL;
  1217. function clEnqueueMigrateMemObjects(command_queue: Pcl_command_queue;
  1218. num_mem_objects: Tcl_uint;
  1219. mem_objects: Pcl_mem;
  1220. flags: Tcl_mem_flags;
  1221. num_events_in_wait_list: Tcl_uint;
  1222. event_wait_list: Pcl_event;
  1223. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  1224. stdcall; external LibOpenCL;
  1225. function clEnqueueNDRangeKernel(command_queue: Pcl_command_queue;
  1226. kernel: Pcl_kernel;
  1227. work_dim: Tcl_uint;
  1228. global_work_offset: Psize_t;
  1229. global_work_size: Psize_t;
  1230. local_work_size: Psize_t;
  1231. num_events_in_wait_list: Tcl_uint;
  1232. event_wait_list: Pcl_event;
  1233. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1234. stdcall; external LibOpenCL;
  1235. type
  1236. Tcl_EnqueueNativeKernel = procedure();
  1237. stdcall;
  1238. function clEnqueueNativeKernel(command_queue: Pcl_command_queue;
  1239. user_func: Tcl_EnqueueNativeKernel;
  1240. args: Pointer;
  1241. cb_args: NativeUInt;
  1242. num_mem_objects: Tcl_uint;
  1243. mem_list: Pcl_mem;
  1244. args_mem_loc: PPointer;
  1245. num_events_in_wait_list: Tcl_uint;
  1246. event_wait_list: Pcl_event;
  1247. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1248. stdcall; external LibOpenCL;
  1249. function clEnqueueMarkerWithWaitList(command_queue: Pcl_command_queue;
  1250. num_events_in_wait_list: Tcl_uint;
  1251. event_wait_list: Pcl_event;
  1252. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  1253. stdcall; external LibOpenCL;
  1254. function clEnqueueBarrierWithWaitList(command_queue: Pcl_command_queue;
  1255. num_events_in_wait_list: Tcl_uint;
  1256. event_wait_list: Pcl_event;
  1257. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_2
  1258. stdcall; external LibOpenCL;
  1259. type
  1260. Tcl_EnqueueSVM_fn = procedure();
  1261. stdcall;
  1262. function clEnqueueSVMFree(command_queue: Pcl_command_queue;
  1263. num_svm_pointers: Tcl_uint;
  1264. args: Pointer;
  1265. pfn_free_func: Tcl_EnqueueSVM_fn;
  1266. user_data: Pointer;
  1267. mem_list: Pcl_mem;
  1268. args_mem_loc: PPointer;
  1269. num_events_in_wait_list: Tcl_uint;
  1270. event_wait_list: Pcl_event;
  1271. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_1_0
  1272. stdcall; external LibOpenCL;
  1273. function clEnqueueSVMMemcpy(command_queue: Pcl_command_queue;
  1274. num_svm_pointers: Tcl_uint;
  1275. args: Pointer;
  1276. user_data: Pointer;
  1277. mem_list: Pcl_mem;
  1278. args_mem_loc: PPointer;
  1279. num_events_in_wait_list: Tcl_uint;
  1280. event_wait_list: Pcl_event;
  1281. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_2_0
  1282. stdcall; external LibOpenCL;
  1283. function clEnqueueSVMMap(command_queue: Pcl_command_queue;
  1284. num_svm_pointers: Tcl_uint;
  1285. args: Pointer;
  1286. user_data: Pointer;
  1287. mem_list: Pcl_mem;
  1288. args_mem_loc: PPointer;
  1289. num_events_in_wait_list: Tcl_uint;
  1290. event_wait_list: Pcl_event;
  1291. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_2_0
  1292. stdcall; external LibOpenCL;
  1293. function clEnqueueSVMUnmap(command_queue: Pcl_command_queue;
  1294. svm_ptr: Pointer;
  1295. num_events_in_wait_list: Tcl_uint;
  1296. event_wait_list: Pcl_event;
  1297. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_2_0
  1298. stdcall; external LibOpenCL;
  1299. function clEnqueueSVMmigrateMem(command_queue: Pcl_command_queue;
  1300. num_svm_pointers: Tcl_uint;
  1301. svm_pointers: PPointer;
  1302. sizes: Psize_t;
  1303. flags: Tcl_mem_flags; //cl_mem_migration_flags;
  1304. num_events_in_wait_list: Tcl_uint;
  1305. event_wait_list: Pcl_event;
  1306. event: Pcl_event): Tcl_int; //CL_API_SUFFIX__VERSION_2_1
  1307. stdcall; external LibOpenCL;
  1308. function clEnqueueWaitForEvents(command_queue: Pcl_command_queue;
  1309. num_events: Tcl_uint;
  1310. event_list: Pcl_event): Tcl_int;
  1311. stdcall; external LibOpenCL;
  1312. function clEnqueueBarrier(command_queue: Pcl_command_queue): Tcl_int;
  1313. stdcall; external LibOpenCL;
  1314. //* Extension function access
  1315. //*
  1316. //* Returns the extension function address for the given function name,
  1317. //* or NULL if a valid function can not be found. The client must
  1318. //* check to make sure the address is not NULL, before using or
  1319. //* calling the returned function address.
  1320. //*
  1321. function clGetExtensionFunctionAddressForPlatform(_platform: Pcl_platform_id;
  1322. func_name: Pcl_char): Pointer; //CL_API_SUFFIX__VERSION_1_2
  1323. stdcall; external LibOpenCL;
  1324. //* Deprecated OpenCL 1.1 APIs *//
  1325. // clCreateImage2D();
  1326. // clCreateImage3D();
  1327. // clEnqueueMarker();
  1328. // clEnqueueWaitForEvents();
  1329. // clEnqueueBarrier();
  1330. // clUnloadCompiler();
  1331. // clGetExtensionFunctionAddress();
  1332. //* Deprecated OpenCL 2.0 APIs *//
  1333. // clCreateCommandQueue();
  1334. // clCreateSampler();
  1335. // clEnqueueTask();
  1336. //-------------------------------------------------------------------------
  1337. function InitOpenCL: Boolean;
  1338. procedure CloseOpenCL;
  1339. function InitFromLibraryOpenCL(const CLName: WideString): Boolean;
  1340. function IsInitializedOpenCL: Boolean;
  1341. //---------------------------------------------------------------------
  1342. implementation
  1343. //---------------------------------------------------------------------
  1344. const
  1345. INVALID_MODULEHANDLE = 0;
  1346. // ************** Windows specific ********************
  1347. {$IFDEF MSWINDOWS}
  1348. var
  1349. CLHandle: HINST;
  1350. {$ENDIF}
  1351. // ************** UNIX specific ********************
  1352. {$IFDEF UNIX}
  1353. var
  1354. CLHandle: TLibHandle;
  1355. {$ENDIF}
  1356. //---------------------------------------------------
  1357. function GetProcAddressOpenCL(ProcName: PAnsiChar): Pointer;
  1358. begin
  1359. result := GetProcAddress(Cardinal(CLHandle), ProcName);
  1360. end;
  1361. function InitOpenCL: Boolean;
  1362. begin
  1363. if CLHandle = INVALID_MODULEHANDLE then
  1364. Result := InitFromLibraryOpenCL(LibOpenCL)
  1365. else
  1366. Result := True;
  1367. end;
  1368. procedure CloseOpenCL;
  1369. begin
  1370. if CLHandle <> INVALID_MODULEHANDLE then
  1371. begin
  1372. FreeLibrary(Cardinal(CLHandle));
  1373. CLHandle := INVALID_MODULEHANDLE;
  1374. end;
  1375. end;
  1376. function InitFromLibraryOpenCL(const CLName: WideString): Boolean;
  1377. begin
  1378. Result := False;
  1379. CloseOpenCL;
  1380. CLHandle := LoadLibraryW(PWideChar(CLName));
  1381. if CLHandle = INVALID_MODULEHANDLE then
  1382. Exit;
  1383. Result := True;
  1384. end;
  1385. function IsInitializedOpenCL: Boolean;
  1386. begin
  1387. Result := (CLHandle <> INVALID_MODULEHANDLE);
  1388. end;
  1389. end.