opencl-bindings 1.0.0pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6a2a39de40dd57f9441d6da9894bc715a9c18718
4
+ data.tar.gz: 1c2df968aa6128ffa56e8cdaa579cf8a7a4c481f
5
+ SHA512:
6
+ metadata.gz: 1bc4c3f5d0cac798970453ce8af577e950073884dfd98c94d21ccd2fa0df4e1f1d9bc8a90b86c9439966f80439bfb7213753d2330b65fbd303419fc638ef3734
7
+ data.tar.gz: ed0e08663cde64ca257b9eb26513329e25456f88fdbc37094e10cfff2d57366d29f8d904471d6427be68e7a88da0e7832a662e1e73ba4bfd514abe817b298545
data/ChangeLog ADDED
@@ -0,0 +1,43 @@
1
+ 2015-11-21 vaiorabbit <http://twitter.com/vaiorabbit>
2
+
3
+ * sample/QJulia/qjulia_clu.rb: Added.
4
+ * sample/Particle/gl_particle_animation_clu.rb: Added.
5
+ * sample/hello_clu.rb: Added.
6
+
7
+ 2015-11-17 vaiorabbit <http://twitter.com/vaiorabbit>
8
+
9
+ * lib/opencl_ext.rb: Added some symbols for APPLE extensions.
10
+ * lib/opencl.rb (CL_STRUCT_IMAGE_FORMAT, CL_STRUCT_IMAGE_DESC): Added structs for clGetSupportedImageFormats.
11
+ * sample/util/clu.rb: Simple wrapper.
12
+
13
+ 2015-11-14 vaiorabbit <http://twitter.com/vaiorabbit>
14
+
15
+ * lib/opencl.rb (extern): A new argument 'func_addr' added. (On Windows, extern fails on some ext functions regardless of the result of 'clGetExtensionFunctionAddressForPlatform')
16
+
17
+ 2015-11-12 vaiorabbit <http://twitter.com/vaiorabbit>
18
+
19
+ * sample/QJulia: Added.
20
+
21
+ 2015-11-11 vaiorabbit <http://twitter.com/vaiorabbit>
22
+
23
+ * sample/Particle: Added.
24
+
25
+ 2015-11-08 vaiorabbit <http://twitter.com/vaiorabbit>
26
+
27
+ * lib/opencl_gl_ext.rb: Added.
28
+
29
+ 2015-11-07 vaiorabbit <http://twitter.com/vaiorabbit>
30
+
31
+ * lib/opencl_gl.rb: Added.
32
+
33
+ 2015-11-05 vaiorabbit <http://twitter.com/vaiorabbit>
34
+
35
+ * sample/add_numbers: Added.
36
+
37
+ 2015-11-03 vaiorabbit <http://twitter.com/vaiorabbit>
38
+
39
+ * sample: Added.
40
+
41
+ 2015-10-25 vaiorabbit <http://twitter.com/vaiorabbit>
42
+
43
+ * (Announce) First release.
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ Ruby-OpenCL : Yet another OpenCL wrapper for Ruby
2
+ Copyright (c) 2015 vaiorabbit <http://twitter.com/vaiorabbit>
3
+
4
+ This software is provided 'as-is', without any express or implied
5
+ warranty. In no event will the authors be held liable for any damages
6
+ arising from the use of this software.
7
+
8
+ Permission is granted to anyone to use this software for any purpose,
9
+ including commercial applications, and to alter it and redistribute it
10
+ freely, subject to the following restrictions:
11
+
12
+ 1. The origin of this software must not be misrepresented; you must not
13
+ claim that you wrote the original software. If you use this software
14
+ in a product, an acknowledgment in the product documentation would be
15
+ appreciated but is not required.
16
+
17
+ 2. Altered source versions must be plainly marked as such, and must not be
18
+ misrepresented as being the original software.
19
+
20
+ 3. This notice may not be removed or altered from any source
21
+ distribution.
data/README.md ADDED
@@ -0,0 +1,84 @@
1
+ <!-- -*- mode:markdown; coding:utf-8; -*- -->
2
+
3
+ # Yet another OpenCL wrapper for Ruby #
4
+
5
+ A Ruby binding for OpenCL 1.2
6
+
7
+ * Created : 2015-10-25
8
+ * Last modified : 2015-11-21
9
+
10
+
11
+ ## Features ##
12
+
13
+ * Based on Fiddle (One of the Ruby standard libraries that wraps libffi)
14
+ * You don't need to build C extension library
15
+
16
+ * Interoperability with OpenGL
17
+ * My OpenGL gem (opengl-bindings ( https://github.com/vaiorabbit/ruby-opengl ) version 1.5.2 and later) provides some platform-specific APIs essential for context sharing.
18
+ * 'opengl-bindings' is also based on Fiddle.
19
+ * Supported Platforms: Windows, Mac OS X and Linux (X Window)
20
+ * See 'createContextWithGLInterop (sample/util/clu.rb)' for details.
21
+
22
+
23
+ ## Prerequisites ##
24
+
25
+ * Fiddle
26
+ * A libffi wrapper
27
+ * Standard library since Ruby 2.0.0
28
+ * I recommend you to use Ruby 2.1.2 and later, which fixed Fiddle's memory leak issue (https://bugs.ruby-lang.org/issues/9599).
29
+
30
+ ### For sample ###
31
+
32
+ Use GLFW or GLUT for creating windows and OpenGL rendering contexts.
33
+
34
+ * GLFW
35
+ * http://www.glfw.org/
36
+ * http://www.glfw.org/download.html
37
+
38
+ * freeglut
39
+ * http://freeglut.sourceforge.net
40
+ * http://freeglut.sourceforge.net/index.php#download
41
+
42
+
43
+ ## Installation ##
44
+
45
+ Via RubyGems ( https://rubygems.org/gems/opencl-bindings ):
46
+
47
+ $ gem install opencl-bindings
48
+
49
+ Or grab all library codes (`lib/*.rb') and use them by adding as one of the load paths like:
50
+
51
+ $ ruby -I ./lib your_app.rb
52
+
53
+
54
+ ## How to use ##
55
+
56
+ See sample/hello.rb.
57
+
58
+ To get more samples, please visit:
59
+ https://github.com/vaiorabbit/ruby-opencl
60
+
61
+
62
+ ## License ##
63
+
64
+ The zlib/libpng License ( http://opensource.org/licenses/Zlib ).
65
+
66
+ Copyright (c) 2015 vaiorabbit <http://twitter.com/vaiorabbit>
67
+
68
+ This software is provided 'as-is', without any express or implied
69
+ warranty. In no event will the authors be held liable for any damages
70
+ arising from the use of this software.
71
+
72
+ Permission is granted to anyone to use this software for any purpose,
73
+ including commercial applications, and to alter it and redistribute it
74
+ freely, subject to the following restrictions:
75
+
76
+ 1. The origin of this software must not be misrepresented; you must not
77
+ claim that you wrote the original software. If you use this software in a
78
+ product, an acknowledgment in the product documentation would be
79
+ appreciated but is not required.
80
+
81
+ 2. Altered source versions must be plainly marked as such, and must not be
82
+ misrepresented as being the original software.
83
+
84
+ 3. This notice may not be removed or altered from any source distribution.
data/lib/opencl.rb ADDED
@@ -0,0 +1,1347 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'fiddle/import'
3
+
4
+ # A Ruby binding for OpenCL 1.2
5
+
6
+ # Ref.: /Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/OpenCL.framework/Headers
7
+ # : $ nm -gU /System/Library/Frameworks/OpenCL.framework/OpenCL
8
+
9
+ module OpenCL
10
+
11
+ extend Fiddle::Importer
12
+
13
+ #
14
+ # Fiddle's default 'extern' stores all methods into local variable '@func_map', that makes difficult to 'include OpenCL'.
15
+ # So I override it and replace '@func_map' into 'CL_FUNCTIONS_MAP'.
16
+ # Ref.: /lib/ruby/2.0.0/fiddle/import.rb
17
+ #
18
+ CL_FUNCTIONS_MAP = {}
19
+
20
+ @cl_dll = nil
21
+
22
+ # Ref.: CALL_TYPE_TO_ABI (Fiddle::Importer)
23
+ def call_sym_to_abi(sym)
24
+ if sym == :stdcall && const_defined?(Fiddle::STDCALL)
25
+ Fiddle::Function::STDCALL
26
+ else
27
+ Fiddle::Function::DEFAULT
28
+ end
29
+ end
30
+ private :call_sym_to_abi
31
+
32
+ def self.extern(signature, *opts, func_addr: nil)
33
+ symname, ctype, argtype = parse_signature(signature, @type_alias)
34
+ opt = parse_bind_options(opts)
35
+ f = (func_addr == nil) ? import_function(symname, ctype, argtype, opt[:call_type]) : Fiddle::Function.new(func_addr, argtype, ctype, call_sym_to_abi(opt[:call_type]), name: symname)
36
+
37
+ name = symname.gsub(/@.+/,'')
38
+ CL_FUNCTIONS_MAP[name] = f
39
+ begin
40
+ /^(.+?):(\d+)/ =~ caller.first
41
+ file, line = $1, $2.to_i
42
+ rescue
43
+ file, line = __FILE__, __LINE__+3
44
+ end
45
+ args_str="*args"
46
+ module_eval(<<-EOS, file, line)
47
+ def #{name}(*args, &block)
48
+ CL_FUNCTIONS_MAP['#{name}'].call(*args,&block)
49
+ end
50
+ EOS
51
+ module_function(name)
52
+ f
53
+ end
54
+
55
+ # define (from cl_platform.h)
56
+
57
+ # Macro names and corresponding values defined by OpenCL
58
+
59
+ CL_CHAR_BIT = 8
60
+ CL_SCHAR_MAX = 127
61
+ CL_SCHAR_MIN = (-127-1)
62
+ CL_CHAR_MAX = CL_SCHAR_MAX
63
+ CL_CHAR_MIN = CL_SCHAR_MIN
64
+ CL_UCHAR_MAX = 255
65
+ CL_SHRT_MAX = 32767
66
+ CL_SHRT_MIN = (-32767-1)
67
+ CL_USHRT_MAX = 65535
68
+ CL_INT_MAX = 2147483647
69
+ CL_INT_MIN = (-2147483647-1)
70
+ CL_UINT_MAX = 0xffffffff
71
+ CL_LONG_MAX = 0x7FFFFFFFFFFFFFFF
72
+ CL_LONG_MIN = (-0x7FFFFFFFFFFFFFFF - 1)
73
+ CL_ULONG_MAX = 0xFFFFFFFFFFFFFFFF
74
+
75
+ CL_FLT_DIG = 6
76
+ CL_FLT_MANT_DIG = 24
77
+ CL_FLT_MAX_10_EXP = +38
78
+ CL_FLT_MAX_EXP = +128
79
+ CL_FLT_MIN_10_EXP = -37
80
+ CL_FLT_MIN_EXP = -125
81
+ CL_FLT_RADIX = 2
82
+ CL_FLT_MAX = 3.4028234663852886e+38 # 0x1.fffffep127f, Math.ldexp(0x1fffffe, 127 - 4 * 6)
83
+ CL_FLT_MIN = 1.1754943508222875e-38 # 0x1.0p-126f, Math.ldexp(1.0, -126)
84
+ CL_FLT_EPSILON = 1.1920928955078125e-07 # 0x1.0p-23f, Math.ldexp(1.0, -23)
85
+
86
+ CL_DBL_DIG = 15
87
+ CL_DBL_MANT_DIG = 53
88
+ CL_DBL_MAX_10_EXP = +308
89
+ CL_DBL_MAX_EXP = +1024
90
+ CL_DBL_MIN_10_EXP = -307
91
+ CL_DBL_MIN_EXP = -1021
92
+ CL_DBL_RADIX = 2
93
+ CL_DBL_MAX = 1.7976931348623157e+308 # 0x1.fffffffffffffp1023, Math.ldexp(0x1fffffffffffff, 1023 - 4 * 13)
94
+ CL_DBL_MIN = 2.2250738585072014e-308 # 0x1.0p-1022, Math.ldexp(1.0, -1022)
95
+ CL_DBL_EPSILON = 2.220446049250313e-16 # 0x1.0p-52, Math.ldexp(1.0, -52)
96
+
97
+ CL_M_E = 2.718281828459045090796
98
+ CL_M_LOG2E = 1.442695040888963387005
99
+ CL_M_LOG10E = 0.434294481903251816668
100
+ CL_M_LN2 = 0.693147180559945286227
101
+ CL_M_LN10 = 2.302585092994045901094
102
+ CL_M_PI = 3.141592653589793115998
103
+ CL_M_PI_2 = 1.570796326794896557999
104
+ CL_M_PI_4 = 0.785398163397448278999
105
+ CL_M_1_PI = 0.318309886183790691216
106
+ CL_M_2_PI = 0.636619772367581382433
107
+ CL_M_2_SQRTPI = 1.128379167095512558561
108
+ CL_M_SQRT2 = 1.414213562373095145475
109
+ CL_M_SQRT1_2 = 0.707106781186547572737
110
+
111
+ CL_M_E_F = 2.71828174591064
112
+ CL_M_LOG2E_F = 1.44269502162933
113
+ CL_M_LOG10E_F = 0.43429449200630
114
+ CL_M_LN2_F = 0.69314718246460
115
+ CL_M_LN10_F = 2.30258512496948
116
+ CL_M_PI_F = 3.14159274101257
117
+ CL_M_PI_2_F = 1.57079637050629
118
+ CL_M_PI_4_F = 0.78539818525314
119
+ CL_M_1_PI_F = 0.31830987334251
120
+ CL_M_2_PI_F = 0.63661974668503
121
+ CL_M_2_SQRTPI_F = 1.12837922573090
122
+ CL_M_SQRT2_F = 1.41421353816986
123
+ CL_M_SQRT1_2_F = 0.70710676908493
124
+
125
+ CL_HUGE_VALF = 1e50
126
+ CL_HUGE_VAL = 1e500
127
+ CL_MAXFLOAT = CL_FLT_MAX
128
+ CL_INFINITY = CL_HUGE_VALF
129
+ CL_NAN = Float::NAN # (CL_INFINITY - CL_INFINITY)
130
+
131
+ # define (from cl.h)
132
+
133
+ # Error Codes
134
+
135
+ CL_SUCCESS = 0
136
+ CL_DEVICE_NOT_FOUND = -1
137
+ CL_DEVICE_NOT_AVAILABLE = -2
138
+ CL_COMPILER_NOT_AVAILABLE = -3
139
+ CL_MEM_OBJECT_ALLOCATION_FAILURE = -4
140
+ CL_OUT_OF_RESOURCES = -5
141
+ CL_OUT_OF_HOST_MEMORY = -6
142
+ CL_PROFILING_INFO_NOT_AVAILABLE = -7
143
+ CL_MEM_COPY_OVERLAP = -8
144
+ CL_IMAGE_FORMAT_MISMATCH = -9
145
+ CL_IMAGE_FORMAT_NOT_SUPPORTED = -10
146
+ CL_BUILD_PROGRAM_FAILURE = -11
147
+ CL_MAP_FAILURE = -12
148
+ CL_MISALIGNED_SUB_BUFFER_OFFSET = -13
149
+ CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST = -14
150
+ CL_COMPILE_PROGRAM_FAILURE = -15
151
+ CL_LINKER_NOT_AVAILABLE = -16
152
+ CL_LINK_PROGRAM_FAILURE = -17
153
+ CL_DEVICE_PARTITION_FAILED = -18
154
+ CL_KERNEL_ARG_INFO_NOT_AVAILABLE = -19
155
+
156
+ CL_INVALID_VALUE = -30
157
+ CL_INVALID_DEVICE_TYPE = -31
158
+ CL_INVALID_PLATFORM = -32
159
+ CL_INVALID_DEVICE = -33
160
+ CL_INVALID_CONTEXT = -34
161
+ CL_INVALID_QUEUE_PROPERTIES = -35
162
+ CL_INVALID_COMMAND_QUEUE = -36
163
+ CL_INVALID_HOST_PTR = -37
164
+ CL_INVALID_MEM_OBJECT = -38
165
+ CL_INVALID_IMAGE_FORMAT_DESCRIPTOR = -39
166
+ CL_INVALID_IMAGE_SIZE = -40
167
+ CL_INVALID_SAMPLER = -41
168
+ CL_INVALID_BINARY = -42
169
+ CL_INVALID_BUILD_OPTIONS = -43
170
+ CL_INVALID_PROGRAM = -44
171
+ CL_INVALID_PROGRAM_EXECUTABLE = -45
172
+ CL_INVALID_KERNEL_NAME = -46
173
+ CL_INVALID_KERNEL_DEFINITION = -47
174
+ CL_INVALID_KERNEL = -48
175
+ CL_INVALID_ARG_INDEX = -49
176
+ CL_INVALID_ARG_VALUE = -50
177
+ CL_INVALID_ARG_SIZE = -51
178
+ CL_INVALID_KERNEL_ARGS = -52
179
+ CL_INVALID_WORK_DIMENSION = -53
180
+ CL_INVALID_WORK_GROUP_SIZE = -54
181
+ CL_INVALID_WORK_ITEM_SIZE = -55
182
+ CL_INVALID_GLOBAL_OFFSET = -56
183
+ CL_INVALID_EVENT_WAIT_LIST = -57
184
+ CL_INVALID_EVENT = -58
185
+ CL_INVALID_OPERATION = -59
186
+ CL_INVALID_GL_OBJECT = -60
187
+ CL_INVALID_BUFFER_SIZE = -61
188
+ CL_INVALID_MIP_LEVEL = -62
189
+ CL_INVALID_GLOBAL_WORK_SIZE = -63
190
+ CL_INVALID_PROPERTY = -64
191
+ CL_INVALID_IMAGE_DESCRIPTOR = -65
192
+ CL_INVALID_COMPILER_OPTIONS = -66
193
+ CL_INVALID_LINKER_OPTIONS = -67
194
+ CL_INVALID_DEVICE_PARTITION_COUNT = -68
195
+
196
+ # OpenCL Version
197
+ CL_VERSION_1_0 = 1
198
+ CL_VERSION_1_1 = 1
199
+ CL_VERSION_1_2 = 1
200
+
201
+ # cl_bool
202
+ CL_FALSE = 0
203
+ CL_TRUE = 1
204
+ CL_BLOCKING = CL_TRUE
205
+ CL_NON_BLOCKING = CL_FALSE
206
+
207
+ # cl_platform_info
208
+ CL_PLATFORM_PROFILE = 0x0900
209
+ CL_PLATFORM_VERSION = 0x0901
210
+ CL_PLATFORM_NAME = 0x0902
211
+ CL_PLATFORM_VENDOR = 0x0903
212
+ CL_PLATFORM_EXTENSIONS = 0x0904
213
+
214
+ # cl_device_type - bitfield
215
+ CL_DEVICE_TYPE_DEFAULT = (1 << 0)
216
+ CL_DEVICE_TYPE_CPU = (1 << 1)
217
+ CL_DEVICE_TYPE_GPU = (1 << 2)
218
+ CL_DEVICE_TYPE_ACCELERATOR = (1 << 3)
219
+ CL_DEVICE_TYPE_CUSTOM = (1 << 4)
220
+ CL_DEVICE_TYPE_ALL = 0xFFFFFFFF
221
+
222
+ # cl_device_info
223
+ CL_DEVICE_TYPE = 0x1000
224
+ CL_DEVICE_VENDOR_ID = 0x1001
225
+ CL_DEVICE_MAX_COMPUTE_UNITS = 0x1002
226
+ CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 0x1003
227
+ CL_DEVICE_MAX_WORK_GROUP_SIZE = 0x1004
228
+ CL_DEVICE_MAX_WORK_ITEM_SIZES = 0x1005
229
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR = 0x1006
230
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT = 0x1007
231
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT = 0x1008
232
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG = 0x1009
233
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT = 0x100A
234
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE = 0x100B
235
+ CL_DEVICE_MAX_CLOCK_FREQUENCY = 0x100C
236
+ CL_DEVICE_ADDRESS_BITS = 0x100D
237
+ CL_DEVICE_MAX_READ_IMAGE_ARGS = 0x100E
238
+ CL_DEVICE_MAX_WRITE_IMAGE_ARGS = 0x100F
239
+ CL_DEVICE_MAX_MEM_ALLOC_SIZE = 0x1010
240
+ CL_DEVICE_IMAGE2D_MAX_WIDTH = 0x1011
241
+ CL_DEVICE_IMAGE2D_MAX_HEIGHT = 0x1012
242
+ CL_DEVICE_IMAGE3D_MAX_WIDTH = 0x1013
243
+ CL_DEVICE_IMAGE3D_MAX_HEIGHT = 0x1014
244
+ CL_DEVICE_IMAGE3D_MAX_DEPTH = 0x1015
245
+ CL_DEVICE_IMAGE_SUPPORT = 0x1016
246
+ CL_DEVICE_MAX_PARAMETER_SIZE = 0x1017
247
+ CL_DEVICE_MAX_SAMPLERS = 0x1018
248
+ CL_DEVICE_MEM_BASE_ADDR_ALIGN = 0x1019
249
+ CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE = 0x101A
250
+ CL_DEVICE_SINGLE_FP_CONFIG = 0x101B
251
+ CL_DEVICE_GLOBAL_MEM_CACHE_TYPE = 0x101C
252
+ CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE = 0x101D
253
+ CL_DEVICE_GLOBAL_MEM_CACHE_SIZE = 0x101E
254
+ CL_DEVICE_GLOBAL_MEM_SIZE = 0x101F
255
+ CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE = 0x1020
256
+ CL_DEVICE_MAX_CONSTANT_ARGS = 0x1021
257
+ CL_DEVICE_LOCAL_MEM_TYPE = 0x1022
258
+ CL_DEVICE_LOCAL_MEM_SIZE = 0x1023
259
+ CL_DEVICE_ERROR_CORRECTION_SUPPORT = 0x1024
260
+ CL_DEVICE_PROFILING_TIMER_RESOLUTION = 0x1025
261
+ CL_DEVICE_ENDIAN_LITTLE = 0x1026
262
+ CL_DEVICE_AVAILABLE = 0x1027
263
+ CL_DEVICE_COMPILER_AVAILABLE = 0x1028
264
+ CL_DEVICE_EXECUTION_CAPABILITIES = 0x1029
265
+ CL_DEVICE_QUEUE_PROPERTIES = 0x102A
266
+ CL_DEVICE_NAME = 0x102B
267
+ CL_DEVICE_VENDOR = 0x102C
268
+ CL_DRIVER_VERSION = 0x102D
269
+ CL_DEVICE_PROFILE = 0x102E
270
+ CL_DEVICE_VERSION = 0x102F
271
+ CL_DEVICE_EXTENSIONS = 0x1030
272
+ CL_DEVICE_PLATFORM = 0x1031
273
+ CL_DEVICE_DOUBLE_FP_CONFIG = 0x1032
274
+ # 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG
275
+ CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF = 0x1034
276
+ CL_DEVICE_HOST_UNIFIED_MEMORY = 0x1035
277
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR = 0x1036
278
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT = 0x1037
279
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_INT = 0x1038
280
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG = 0x1039
281
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT = 0x103A
282
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE = 0x103B
283
+ CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF = 0x103C
284
+ CL_DEVICE_OPENCL_C_VERSION = 0x103D
285
+ CL_DEVICE_LINKER_AVAILABLE = 0x103E
286
+ CL_DEVICE_BUILT_IN_KERNELS = 0x103F
287
+ CL_DEVICE_IMAGE_MAX_BUFFER_SIZE = 0x1040
288
+ CL_DEVICE_IMAGE_MAX_ARRAY_SIZE = 0x1041
289
+ CL_DEVICE_PARENT_DEVICE = 0x1042
290
+ CL_DEVICE_PARTITION_MAX_SUB_DEVICES = 0x1043
291
+ CL_DEVICE_PARTITION_PROPERTIES = 0x1044
292
+ CL_DEVICE_PARTITION_AFFINITY_DOMAIN = 0x1045
293
+ CL_DEVICE_PARTITION_TYPE = 0x1046
294
+ CL_DEVICE_REFERENCE_COUNT = 0x1047
295
+ CL_DEVICE_PREFERRED_INTEROP_USER_SYNC = 0x1048
296
+ CL_DEVICE_PRINTF_BUFFER_SIZE = 0x1049
297
+ CL_DEVICE_IMAGE_PITCH_ALIGNMENT = 0x104A
298
+ CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT = 0x104B
299
+
300
+ # cl_device_fp_config - bitfield
301
+ CL_FP_DENORM = (1 << 0)
302
+ CL_FP_INF_NAN = (1 << 1)
303
+ CL_FP_ROUND_TO_NEAREST = (1 << 2)
304
+ CL_FP_ROUND_TO_ZERO = (1 << 3)
305
+ CL_FP_ROUND_TO_INF = (1 << 4)
306
+ CL_FP_FMA = (1 << 5)
307
+ CL_FP_SOFT_FLOAT = (1 << 6)
308
+ CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT = (1 << 7)
309
+
310
+ # cl_device_mem_cache_type
311
+ CL_NONE = 0x0
312
+ CL_READ_ONLY_CACHE = 0x1
313
+ CL_READ_WRITE_CACHE = 0x2
314
+
315
+ # cl_device_local_mem_type
316
+ CL_LOCAL = 0x1
317
+ CL_GLOBAL = 0x2
318
+
319
+ # cl_device_exec_capabilities - bitfield
320
+ CL_EXEC_KERNEL = (1 << 0)
321
+ CL_EXEC_NATIVE_KERNEL = (1 << 1)
322
+
323
+ # cl_command_queue_properties - bitfield
324
+ CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 << 0)
325
+ CL_QUEUE_PROFILING_ENABLE = (1 << 1)
326
+
327
+ # cl_context_info
328
+ CL_CONTEXT_REFERENCE_COUNT = 0x1080
329
+ CL_CONTEXT_DEVICES = 0x1081
330
+ CL_CONTEXT_PROPERTIES = 0x1082
331
+ CL_CONTEXT_NUM_DEVICES = 0x1083
332
+
333
+ # cl_context_properties
334
+ CL_CONTEXT_PLATFORM = 0x1084
335
+ CL_CONTEXT_INTEROP_USER_SYNC = 0x1085
336
+
337
+ # cl_device_partition_property
338
+ CL_DEVICE_PARTITION_EQUALLY = 0x1086
339
+ CL_DEVICE_PARTITION_BY_COUNTS = 0x1087
340
+ CL_DEVICE_PARTITION_BY_COUNTS_LIST_END = 0x0
341
+ CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN = 0x1088
342
+
343
+ # cl_device_affinity_domain
344
+ CL_DEVICE_AFFINITY_DOMAIN_NUMA = (1 << 0)
345
+ CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE = (1 << 1)
346
+ CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE = (1 << 2)
347
+ CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE = (1 << 3)
348
+ CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE = (1 << 4)
349
+ CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 << 5)
350
+
351
+ # cl_command_queue_info
352
+ CL_QUEUE_CONTEXT = 0x1090
353
+ CL_QUEUE_DEVICE = 0x1091
354
+ CL_QUEUE_REFERENCE_COUNT = 0x1092
355
+ CL_QUEUE_PROPERTIES = 0x1093
356
+
357
+ # cl_mem_flags - bitfield
358
+ CL_MEM_READ_WRITE = (1 << 0)
359
+ CL_MEM_WRITE_ONLY = (1 << 1)
360
+ CL_MEM_READ_ONLY = (1 << 2)
361
+ CL_MEM_USE_HOST_PTR = (1 << 3)
362
+ CL_MEM_ALLOC_HOST_PTR = (1 << 4)
363
+ CL_MEM_COPY_HOST_PTR = (1 << 5)
364
+ # reserved (1 << 6)
365
+ CL_MEM_HOST_WRITE_ONLY = (1 << 7)
366
+ CL_MEM_HOST_READ_ONLY = (1 << 8)
367
+ CL_MEM_HOST_NO_ACCESS = (1 << 9)
368
+
369
+ # cl_mem_migration_flags - bitfield
370
+ CL_MIGRATE_MEM_OBJECT_HOST = (1 << 0)
371
+ CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED = (1 << 1)
372
+
373
+ # cl_channel_order
374
+ CL_R = 0x10B0
375
+ CL_A = 0x10B1
376
+ CL_RG = 0x10B2
377
+ CL_RA = 0x10B3
378
+ CL_RGB = 0x10B4
379
+ CL_RGBA = 0x10B5
380
+ CL_BGRA = 0x10B6
381
+ CL_ARGB = 0x10B7
382
+ CL_INTENSITY = 0x10B8
383
+ CL_LUMINANCE = 0x10B9
384
+ CL_Rx = 0x10BA
385
+ CL_RGx = 0x10BB
386
+ CL_RGBx = 0x10BC
387
+ CL_DEPTH = 0x10BD
388
+ CL_DEPTH_STENCIL = 0x10BE
389
+
390
+ # cl_channel_type
391
+ CL_SNORM_INT8 = 0x10D0
392
+ CL_SNORM_INT16 = 0x10D1
393
+ CL_UNORM_INT8 = 0x10D2
394
+ CL_UNORM_INT16 = 0x10D3
395
+ CL_UNORM_SHORT_565 = 0x10D4
396
+ CL_UNORM_SHORT_555 = 0x10D5
397
+ CL_UNORM_INT_101010 = 0x10D6
398
+ CL_SIGNED_INT8 = 0x10D7
399
+ CL_SIGNED_INT16 = 0x10D8
400
+ CL_SIGNED_INT32 = 0x10D9
401
+ CL_UNSIGNED_INT8 = 0x10DA
402
+ CL_UNSIGNED_INT16 = 0x10DB
403
+ CL_UNSIGNED_INT32 = 0x10DC
404
+ CL_HALF_FLOAT = 0x10DD
405
+ CL_FLOAT = 0x10DE
406
+ CL_UNORM_INT24 = 0x10DF
407
+
408
+ # cl_mem_object_type
409
+ CL_MEM_OBJECT_BUFFER = 0x10F0
410
+ CL_MEM_OBJECT_IMAGE2D = 0x10F1
411
+ CL_MEM_OBJECT_IMAGE3D = 0x10F2
412
+ CL_MEM_OBJECT_IMAGE2D_ARRAY = 0x10F3
413
+ CL_MEM_OBJECT_IMAGE1D = 0x10F4
414
+ CL_MEM_OBJECT_IMAGE1D_ARRAY = 0x10F5
415
+ CL_MEM_OBJECT_IMAGE1D_BUFFER = 0x10F6
416
+
417
+ # cl_mem_info
418
+ CL_MEM_TYPE = 0x1100
419
+ CL_MEM_FLAGS = 0x1101
420
+ CL_MEM_SIZE = 0x1102
421
+ CL_MEM_HOST_PTR = 0x1103
422
+ CL_MEM_MAP_COUNT = 0x1104
423
+ CL_MEM_REFERENCE_COUNT = 0x1105
424
+ CL_MEM_CONTEXT = 0x1106
425
+ CL_MEM_ASSOCIATED_MEMOBJECT = 0x1107
426
+ CL_MEM_OFFSET = 0x1108
427
+
428
+ # cl_image_info
429
+ CL_IMAGE_FORMAT = 0x1110
430
+ CL_IMAGE_ELEMENT_SIZE = 0x1111
431
+ CL_IMAGE_ROW_PITCH = 0x1112
432
+ CL_IMAGE_SLICE_PITCH = 0x1113
433
+ CL_IMAGE_WIDTH = 0x1114
434
+ CL_IMAGE_HEIGHT = 0x1115
435
+ CL_IMAGE_DEPTH = 0x1116
436
+ CL_IMAGE_ARRAY_SIZE = 0x1117
437
+ CL_IMAGE_BUFFER = 0x1118
438
+ CL_IMAGE_NUM_MIP_LEVELS = 0x1119
439
+ CL_IMAGE_NUM_SAMPLES = 0x111A
440
+
441
+ # cl_addressing_mode
442
+ CL_ADDRESS_NONE = 0x1130
443
+ CL_ADDRESS_CLAMP_TO_EDGE = 0x1131
444
+ CL_ADDRESS_CLAMP = 0x1132
445
+ CL_ADDRESS_REPEAT = 0x1133
446
+ CL_ADDRESS_MIRRORED_REPEAT = 0x1134
447
+
448
+ # cl_filter_mode
449
+ CL_FILTER_NEAREST = 0x1140
450
+ CL_FILTER_LINEAR = 0x1141
451
+
452
+ # cl_sampler_info
453
+ CL_SAMPLER_REFERENCE_COUNT = 0x1150
454
+ CL_SAMPLER_CONTEXT = 0x1151
455
+ CL_SAMPLER_NORMALIZED_COORDS = 0x1152
456
+ CL_SAMPLER_ADDRESSING_MODE = 0x1153
457
+ CL_SAMPLER_FILTER_MODE = 0x1154
458
+
459
+ # cl_map_flags - bitfield
460
+ CL_MAP_READ = (1 << 0)
461
+ CL_MAP_WRITE = (1 << 1)
462
+ CL_MAP_WRITE_INVALIDATE_REGION = (1 << 2)
463
+
464
+ # cl_program_info
465
+ CL_PROGRAM_REFERENCE_COUNT = 0x1160
466
+ CL_PROGRAM_CONTEXT = 0x1161
467
+ CL_PROGRAM_NUM_DEVICES = 0x1162
468
+ CL_PROGRAM_DEVICES = 0x1163
469
+ CL_PROGRAM_SOURCE = 0x1164
470
+ CL_PROGRAM_BINARY_SIZES = 0x1165
471
+ CL_PROGRAM_BINARIES = 0x1166
472
+ CL_PROGRAM_NUM_KERNELS = 0x1167
473
+ CL_PROGRAM_KERNEL_NAMES = 0x1168
474
+
475
+ # cl_program_build_info
476
+ CL_PROGRAM_BUILD_STATUS = 0x1181
477
+ CL_PROGRAM_BUILD_OPTIONS = 0x1182
478
+ CL_PROGRAM_BUILD_LOG = 0x1183
479
+ CL_PROGRAM_BINARY_TYPE = 0x1184
480
+
481
+ # cl_program_binary_type
482
+ CL_PROGRAM_BINARY_TYPE_NONE = 0x0
483
+ CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT = 0x1
484
+ CL_PROGRAM_BINARY_TYPE_LIBRARY = 0x2
485
+ CL_PROGRAM_BINARY_TYPE_EXECUTABLE = 0x4
486
+
487
+ # cl_build_status
488
+ CL_BUILD_SUCCESS = 0
489
+ CL_BUILD_NONE = -1
490
+ CL_BUILD_ERROR = -2
491
+ CL_BUILD_IN_PROGRESS = -3
492
+
493
+ # cl_kernel_info
494
+ CL_KERNEL_FUNCTION_NAME = 0x1190
495
+ CL_KERNEL_NUM_ARGS = 0x1191
496
+ CL_KERNEL_REFERENCE_COUNT = 0x1192
497
+ CL_KERNEL_CONTEXT = 0x1193
498
+ CL_KERNEL_PROGRAM = 0x1194
499
+ CL_KERNEL_ATTRIBUTES = 0x1195
500
+
501
+ # cl_kernel_arg_info
502
+ CL_KERNEL_ARG_ADDRESS_QUALIFIER = 0x1196
503
+ CL_KERNEL_ARG_ACCESS_QUALIFIER = 0x1197
504
+ CL_KERNEL_ARG_TYPE_NAME = 0x1198
505
+ CL_KERNEL_ARG_TYPE_QUALIFIER = 0x1199
506
+ CL_KERNEL_ARG_NAME = 0x119A
507
+
508
+ # cl_kernel_arg_address_qualifier
509
+ CL_KERNEL_ARG_ADDRESS_GLOBAL = 0x119B
510
+ CL_KERNEL_ARG_ADDRESS_LOCAL = 0x119C
511
+ CL_KERNEL_ARG_ADDRESS_CONSTANT = 0x119D
512
+ CL_KERNEL_ARG_ADDRESS_PRIVATE = 0x119E
513
+
514
+ # cl_kernel_arg_access_qualifier
515
+ CL_KERNEL_ARG_ACCESS_READ_ONLY = 0x11A0
516
+ CL_KERNEL_ARG_ACCESS_WRITE_ONLY = 0x11A1
517
+ CL_KERNEL_ARG_ACCESS_READ_WRITE = 0x11A2
518
+ CL_KERNEL_ARG_ACCESS_NONE = 0x11A3
519
+
520
+ # cl_kernel_arg_type_qualifer
521
+ CL_KERNEL_ARG_TYPE_NONE = 0
522
+ CL_KERNEL_ARG_TYPE_CONST = (1 << 0)
523
+ CL_KERNEL_ARG_TYPE_RESTRICT = (1 << 1)
524
+ CL_KERNEL_ARG_TYPE_VOLATILE = (1 << 2)
525
+
526
+ # cl_kernel_work_group_info
527
+ CL_KERNEL_WORK_GROUP_SIZE = 0x11B0
528
+ CL_KERNEL_COMPILE_WORK_GROUP_SIZE = 0x11B1
529
+ CL_KERNEL_LOCAL_MEM_SIZE = 0x11B2
530
+ CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 0x11B3
531
+ CL_KERNEL_PRIVATE_MEM_SIZE = 0x11B4
532
+ CL_KERNEL_GLOBAL_WORK_SIZE = 0x11B5
533
+
534
+ # cl_event_info
535
+ CL_EVENT_COMMAND_QUEUE = 0x11D0
536
+ CL_EVENT_COMMAND_TYPE = 0x11D1
537
+ CL_EVENT_REFERENCE_COUNT = 0x11D2
538
+ CL_EVENT_COMMAND_EXECUTION_STATUS = 0x11D3
539
+ CL_EVENT_CONTEXT = 0x11D4
540
+
541
+ # cl_command_type
542
+ CL_COMMAND_NDRANGE_KERNEL = 0x11F0
543
+ CL_COMMAND_TASK = 0x11F1
544
+ CL_COMMAND_NATIVE_KERNEL = 0x11F2
545
+ CL_COMMAND_READ_BUFFER = 0x11F3
546
+ CL_COMMAND_WRITE_BUFFER = 0x11F4
547
+ CL_COMMAND_COPY_BUFFER = 0x11F5
548
+ CL_COMMAND_READ_IMAGE = 0x11F6
549
+ CL_COMMAND_WRITE_IMAGE = 0x11F7
550
+ CL_COMMAND_COPY_IMAGE = 0x11F8
551
+ CL_COMMAND_COPY_IMAGE_TO_BUFFER = 0x11F9
552
+ CL_COMMAND_COPY_BUFFER_TO_IMAGE = 0x11FA
553
+ CL_COMMAND_MAP_BUFFER = 0x11FB
554
+ CL_COMMAND_MAP_IMAGE = 0x11FC
555
+ CL_COMMAND_UNMAP_MEM_OBJECT = 0x11FD
556
+ CL_COMMAND_MARKER = 0x11FE
557
+ CL_COMMAND_ACQUIRE_GL_OBJECTS = 0x11FF
558
+ CL_COMMAND_RELEASE_GL_OBJECTS = 0x1200
559
+ CL_COMMAND_READ_BUFFER_RECT = 0x1201
560
+ CL_COMMAND_WRITE_BUFFER_RECT = 0x1202
561
+ CL_COMMAND_COPY_BUFFER_RECT = 0x1203
562
+ CL_COMMAND_USER = 0x1204
563
+ CL_COMMAND_BARRIER = 0x1205
564
+ CL_COMMAND_MIGRATE_MEM_OBJECTS = 0x1206
565
+ CL_COMMAND_FILL_BUFFER = 0x1207
566
+ CL_COMMAND_FILL_IMAGE = 0x1208
567
+
568
+ # command execution status
569
+ CL_COMPLETE = 0x0
570
+ CL_RUNNING = 0x1
571
+ CL_SUBMITTED = 0x2
572
+ CL_QUEUED = 0x3
573
+
574
+ # cl_buffer_create_type
575
+ CL_BUFFER_CREATE_TYPE_REGION = 0x1220
576
+
577
+ # cl_profiling_info
578
+ CL_PROFILING_COMMAND_QUEUED = 0x1280
579
+ CL_PROFILING_COMMAND_SUBMIT = 0x1281
580
+ CL_PROFILING_COMMAND_START = 0x1282
581
+ CL_PROFILING_COMMAND_END = 0x1283
582
+
583
+ # struct (from cl.h)
584
+
585
+ # struct cl_image_format
586
+ # - cl_channel_order image_channel_order;
587
+ # - cl_channel_type image_channel_data_type;
588
+ CL_STRUCT_IMAGE_FORMAT = struct(["unsigned int image_channel_order",
589
+ "unsigned int image_channel_data_type"])
590
+
591
+ # struct cl_image_desc
592
+ # - cl_mem_object_type image_type;
593
+ # - size_t image_width;
594
+ # - size_t image_height;
595
+ # - size_t image_depth;
596
+ # - size_t image_array_size;
597
+ # - size_t image_row_pitch;
598
+ # - size_t image_slice_pitch;
599
+ # - cl_uint num_mip_levels;
600
+ # - cl_uint num_samples;
601
+ # - cl_mem buffer;
602
+ CL_STRUCT_IMAGE_DESC = struct(["unsigned int image_type",
603
+ "size_t image_width",
604
+ "size_t image_height",
605
+ "size_t image_depth",
606
+ "size_t image_array_size",
607
+ "size_t image_row_pitch",
608
+ "size_t image_slice_pitch",
609
+ "unsigned int num_mip_levels",
610
+ "unsigned int num_samples",
611
+ "void* buffer"])
612
+
613
+ # struct cl_buffer_region
614
+ # - size_t origin;
615
+ # - size_t size;
616
+ CL_BUFFER_REGION = struct(["size_t origin",
617
+ "size_t size"])
618
+
619
+ @@cl_import_done = false
620
+
621
+ # Load native library.
622
+ def self.load_lib(libpath = nil)
623
+ @@cl_dll = dlopen(libpath) # Fiddle::Handle.new(libpath, Fiddle::Handle::RTLD_LAZY|Fiddle::Handle::RTLD_GLOBAL)
624
+ dlload(@@cl_dll)
625
+ import_symbols() unless @@cl_import_done
626
+ end
627
+
628
+ def self.import_functions_cl
629
+ # function (from cl.h)
630
+
631
+ # Platform API
632
+
633
+ # cl_uint : num_entries
634
+ # cl_platform_id* : platforms
635
+ # cl_uint* : num_platforms
636
+ extern 'cl_int clGetPlatformIDs(cl_uint, cl_platform_id*, cl_uint*)'
637
+
638
+ # cl_platform_id : platform
639
+ # cl_platform_info : param_name
640
+ # size_t : param_value_size
641
+ # void * : param_value
642
+ # size_t * : param_value_size_ret
643
+ extern 'cl_int clGetPlatformInfo(cl_platform_id, cl_platform_info, size_t, void*, size_t*)'
644
+
645
+ # Device APIs
646
+
647
+ # cl_platform_id : platform
648
+ # cl_device_type : device_type
649
+ # cl_uint : num_entries
650
+ # cl_device_id * : devices
651
+ # cl_uint * : num_devices
652
+ extern 'cl_int clGetDeviceIDs(cl_platform_id, cl_device_type, cl_uint, cl_device_id*, cl_uint*)'
653
+
654
+ # cl_device_id : device
655
+ # cl_device_info : param_name
656
+ # size_t : param_value_size
657
+ # void * : param_value
658
+ # size_t * : param_value_size_ret
659
+ extern 'cl_int clGetDeviceInfo(cl_device_id, cl_device_info, size_t, void*, size_t*)'
660
+
661
+ # cl_device_id : in_device
662
+ # const cl_device_partition_property * : properties
663
+ # cl_uint : num_devices
664
+ # cl_device_id * : out_devices
665
+ # cl_uint * : num_devices_ret
666
+ extern 'cl_int clCreateSubDevices(cl_device_id, const cl_device_partition_property*, cl_uint, cl_device_id*, cl_uint*)'
667
+
668
+ # cl_device_id : device
669
+ extern 'cl_int clRetainDevice(cl_device_id)'
670
+
671
+ # cl_device_id : device
672
+ extern 'cl_int clReleaseDevice(cl_device_id)'
673
+
674
+ # Context APIs
675
+
676
+ # cl_context_properties * : properties
677
+ # cl_uint : num_devices
678
+ # cl_device_id * : devices
679
+ # void * : pfn_notify(char *, void *, size_t, void *),
680
+ # void * : user_data
681
+ # cl_int * : errcode_ret
682
+ extern 'cl_context clCreateContext(cl_context_properties *, cl_uint, cl_device_id*, void*, void*, cl_int*)'
683
+
684
+ # cl_context_properties * : properties
685
+ # cl_device_type : device_type
686
+ # void * : pfn_notify(char *, void *, size_t, void *)
687
+ # void * : user_data
688
+ # cl_int * : errcode_ret
689
+ extern 'cl_context clCreateContextFromType(cl_context_properties*, cl_device_type, void*, void*, cl_int*)'
690
+
691
+ # cl_context : context
692
+ extern 'cl_int clRetainContext(cl_context)'
693
+
694
+ # cl_context : context
695
+ extern 'cl_int clReleaseContext(cl_context)'
696
+
697
+ # cl_context : context
698
+ # cl_context_info : param_name
699
+ # size_t : param_value_size
700
+ # void * : param_value
701
+ # size_t * : param_value_size_ret
702
+ extern 'cl_int clGetContextInfo(cl_context, cl_context_info, size_t, void*, size_t*)'
703
+
704
+ # Command Queue APIs
705
+
706
+ # cl_context : context
707
+ # cl_device_id : device
708
+ # cl_command_queue_properties : properties
709
+ # cl_int * : errcode_ret
710
+ extern 'cl_command_queue clCreateCommandQueue(cl_context, cl_device_id, cl_command_queue_properties, cl_int*)'
711
+
712
+ # cl_command_queue : command_queue
713
+ extern 'cl_int clRetainCommandQueue(cl_command_queue)'
714
+
715
+ # cl_command_queue : command_queue
716
+ extern 'cl_int clReleaseCommandQueue(cl_command_queue)'
717
+
718
+ # cl_command_queue : command_queue
719
+ # cl_command_queue_info : param_name
720
+ # size_t : param_value_size
721
+ # void * : param_value
722
+ # size_t * : param_value_size_ret
723
+ extern 'cl_int clGetCommandQueueInfo(cl_command_queue, cl_command_queue_info, size_t, void*, size_t*)'
724
+
725
+ # Memory Object APIs
726
+
727
+ # cl_context : context
728
+ # cl_mem_flags : flags
729
+ # size_t : size
730
+ # void * : host_ptr
731
+ # cl_int * : errcode_ret
732
+ extern 'cl_mem clCreateBuffer(cl_context, cl_mem_flags, size_t, void*, cl_int*)'
733
+
734
+ # cl_mem : buffer
735
+ # cl_mem_flags : flags
736
+ # cl_buffer_create_type : buffer_create_type
737
+ # const void * : buffer_create_info
738
+ # cl_int * : errcode_ret
739
+ extern 'cl_mem clCreateSubBuffer(cl_mem, cl_mem_flags, cl_buffer_create_type, const void *, cl_int *)'
740
+
741
+ # cl_context : context
742
+ # cl_mem_flags : flags
743
+ # const cl_image_format * : image_format
744
+ # const cl_image_desc * : image_desc
745
+ # void * : host_ptr
746
+ # cl_int * : errcode_ret
747
+ extern 'cl_mem clCreateImage(cl_context, cl_mem_flags, const cl_image_format*, const cl_image_desc*, void*, cl_int*)'
748
+
749
+ # cl_mem : memobj
750
+ extern 'cl_int clRetainMemObject(cl_mem)'
751
+
752
+ # cl_mem : memobj
753
+ extern 'cl_int clReleaseMemObject(cl_mem)'
754
+
755
+ # cl_context : context
756
+ # cl_mem_flags : flags
757
+ # cl_mem_object_type : image_type
758
+ # cl_uint : num_entries
759
+ # cl_image_format * : image_formats
760
+ # cl_uint * : num_image_formats
761
+ extern 'cl_int clGetSupportedImageFormats(cl_context, cl_mem_flags, cl_mem_object_type, cl_uint, cl_image_format*, cl_uint*)'
762
+
763
+ # cl_mem : memobj
764
+ # cl_mem_info : param_name
765
+ # size_t : param_value_size
766
+ # void * : param_value
767
+ # size_t * : param_value_size_ret
768
+ extern 'cl_int clGetMemObjectInfo(cl_mem, cl_mem_info, size_t, void*, size_t*)'
769
+
770
+ # cl_mem : memobj
771
+ # cl_image_info : param_name
772
+ # size_t : param_value_size
773
+ # void * : param_value
774
+ # size_t * : param_value_size_ret
775
+ extern 'cl_int clGetImageInfo(cl_mem, cl_image_info, size_t, void*, size_t*)'
776
+
777
+ # cl_mem : memobj
778
+ # void * : pfn_notify(cl_mem, void*)
779
+ # void * : user_data
780
+ extern 'cl_int clSetMemObjectDestructorCallback(cl_mem, void*, void*)'
781
+
782
+ # Sampler APIs
783
+
784
+ # cl_context : context
785
+ # cl_bool : normalized_coords
786
+ # cl_addressing_mode : addressing_mode
787
+ # cl_filter_mode : filter_mode
788
+ # cl_int * : errcode_ret
789
+ extern 'cl_sampler clCreateSampler(cl_context, cl_bool, cl_addressing_mode, cl_filter_mode, cl_int*)'
790
+
791
+ # cl_sampler : sampler
792
+ extern 'cl_int clRetainSampler(cl_sampler)'
793
+
794
+ # cl_sampler : sampler
795
+ extern 'cl_int clReleaseSampler(cl_sampler)'
796
+
797
+ # cl_sampler : sampler
798
+ # cl_sampler_info : param_name
799
+ # size_t : param_value_size
800
+ # void * : param_value
801
+ # size_t * : param_value_size_ret
802
+ extern 'cl_int clGetSamplerInfo(cl_sampler, cl_sampler_info, size_t, void*, size_t*)'
803
+
804
+ # Program Object APIs
805
+
806
+ # cl_context : context
807
+ # cl_uint : count
808
+ # const char ** : strings
809
+ # const size_t * : lengths
810
+ # cl_int * : errcode_ret
811
+ extern 'cl_program clCreateProgramWithSource(cl_context, cl_uint, const char **, const size_t *, cl_int *)'
812
+
813
+ # cl_context : context
814
+ # cl_uint : num_devices
815
+ # const cl_device_id * : device_list
816
+ # const size_t * : lengths
817
+ # const unsigned char ** : binaries
818
+ # cl_int * : binary_status
819
+ # cl_int * : errcode_ret
820
+ extern 'cl_program clCreateProgramWithBinary(cl_context, cl_uint, const cl_device_id *, const size_t *, const unsigned char **, cl_int *, cl_int *)'
821
+
822
+ # cl_context : context
823
+ # cl_uint : num_devices
824
+ # const cl_device_id * : device_list
825
+ # const char * : kernel_names
826
+ # cl_int * : errcode_ret
827
+ extern 'cl_program clCreateProgramWithBuiltInKernels(cl_context, cl_uint, const cl_device_id *, const char *, cl_int *)'
828
+
829
+ # cl_program : program
830
+ extern 'cl_int clRetainProgram(cl_program)'
831
+
832
+ # cl_program : program
833
+ extern 'cl_int clReleaseProgram(cl_program)'
834
+
835
+ # cl_program : program
836
+ # cl_uint : num_devices
837
+ # const cl_device_id * : device_list
838
+ # const char * : options
839
+ # void * : pfn_notify(cl_program, void*)
840
+ # void * : user_data
841
+ extern 'cl_int clBuildProgram(cl_program, cl_uint, const cl_device_id *, const char *, void *, void *)'
842
+
843
+ # cl_program : program
844
+ # cl_uint : num_devices
845
+ # const cl_device_id * : device_list
846
+ # const char * : options
847
+ # cl_uint : num_input_headers
848
+ # const cl_program * : input_headers
849
+ # const char ** : header_include_names
850
+ # void * : pfn_notify(cl_program, void*)
851
+ # void * : user_data
852
+ extern 'cl_int clCompileProgram(cl_program, cl_uint, const cl_device_id *, const char *, cl_uint, const cl_program *, const char **, void *, void *)'
853
+
854
+ # cl_context : context
855
+ # cl_uint : num_devices
856
+ # const cl_device_id * : device_list
857
+ # const char * : options
858
+ # cl_uint : num_input_programs
859
+ # const cl_program * : input_programs
860
+ # void * : pfn_notify(cl_program, void*)
861
+ # void * : user_data
862
+ # cl_int * : errcode_ret
863
+ extern 'cl_program clLinkProgram(cl_context, cl_uint, const cl_device_id *, const char *, cl_uint, const cl_program *, void *, void *, cl_int *)'
864
+
865
+
866
+ # cl_platform_id : platform
867
+ extern 'cl_int clUnloadPlatformCompiler(cl_platform_id)'
868
+
869
+ # cl_program : program
870
+ # cl_program_info : param_name
871
+ # size_t : param_value_size
872
+ # void * : param_value
873
+ # size_t * : param_value_size_ret
874
+ extern 'cl_int clGetProgramInfo(cl_program, cl_program_info, size_t, void *, size_t *)'
875
+
876
+ # cl_program : program
877
+ # cl_device_id : device
878
+ # cl_program_build_info : param_name
879
+ # size_t : param_value_size
880
+ # void * : param_value
881
+ # size_t * : param_value_size_ret
882
+ extern 'cl_int clGetProgramBuildInfo(cl_program, cl_device_id, cl_program_build_info, size_t, void *, size_t *)'
883
+
884
+ # Kernel Object APIs
885
+
886
+ # cl_program : program
887
+ # const char * : kernel_name
888
+ # cl_int * : errcode_ret
889
+ extern 'cl_kernel clCreateKernel(cl_program, const char *, cl_int *)'
890
+
891
+ # cl_program : program
892
+ # cl_uint : num_kernels
893
+ # cl_kernel * : kernels
894
+ # cl_uint * : num_kernels_ret
895
+ extern 'cl_int clCreateKernelsInProgram(cl_program, cl_uint, cl_kernel *, cl_uint *)'
896
+
897
+ # cl_kernel : kernel
898
+ extern 'cl_int clRetainKernel(cl_kernel)'
899
+
900
+ # cl_kernel : kernel
901
+ extern 'cl_int clReleaseKernel(cl_kernel)'
902
+
903
+ # cl_kernel : kernel
904
+ # cl_uint : arg_index
905
+ # size_t : arg_size
906
+ # const void * : arg_value
907
+ extern 'cl_int clSetKernelArg(cl_kernel, cl_uint, size_t, const void *)'
908
+
909
+ # cl_kernel : kernel
910
+ # cl_kernel_info : param_name
911
+ # size_t : param_value_size
912
+ # void * : param_value
913
+ # size_t * : param_value_size_ret
914
+ extern 'cl_int clGetKernelInfo(cl_kernel, cl_kernel_info, size_t, void *, size_t *)'
915
+
916
+ # cl_kernel : kernel
917
+ # cl_uint : arg_indx
918
+ # cl_kernel_arg_info : param_name
919
+ # size_t : param_value_size
920
+ # void * : param_value
921
+ # size_t * : param_value_size_ret
922
+ extern 'cl_int clGetKernelArgInfo(cl_kernel, cl_uint, cl_kernel_arg_info, size_t, void *, size_t *)'
923
+
924
+ # cl_kernel : kernel
925
+ # cl_device_id : device
926
+ # cl_kernel_work_group_info : param_name
927
+ # size_t : param_value_size
928
+ # void * : param_value
929
+ # size_t * : param_value_size_ret
930
+ extern 'cl_int clGetKernelWorkGroupInfo(cl_kernel, cl_device_id, cl_kernel_work_group_info, size_t, void *, size_t *)'
931
+
932
+ # Event Object APIs
933
+
934
+ # cl_uint : num_events
935
+ # const cl_event * : event_list
936
+ extern 'cl_int clWaitForEvents(cl_uint, const cl_event *)'
937
+
938
+ # cl_event : event
939
+ # cl_event_info : param_name
940
+ # size_t : param_value_size
941
+ # void * : param_value
942
+ # size_t * : param_value_size_ret
943
+ extern 'cl_int clGetEventInfo(cl_event, cl_event_info, size_t, void *, size_t *)'
944
+
945
+ # cl_context : context
946
+ # cl_int * : errcode_ret
947
+ extern 'cl_event clCreateUserEvent(cl_context, cl_int *)'
948
+
949
+ # cl_event : event
950
+ extern 'cl_int clRetainEvent(cl_event)'
951
+
952
+ # cl_event : event
953
+ extern 'cl_int clReleaseEvent(cl_event)'
954
+
955
+ # cl_event : event
956
+ # cl_int : execution_status
957
+ extern 'cl_int clSetUserEventStatus(cl_event, cl_int)'
958
+
959
+ # cl_event : event
960
+ # cl_int : command_exec_callback_type
961
+ # void * : pfn_notify(cl_event, cl_int, void)
962
+ # void * : user_data
963
+ extern 'cl_int clSetEventCallback(cl_event, cl_int, void *, void *)'
964
+
965
+ # Profiling APIs
966
+
967
+ # cl_event : event
968
+ # cl_profiling_info : param_name
969
+ # size_t : param_value_size
970
+ # void * : param_value
971
+ # size_t * : param_value_size_ret
972
+ extern 'cl_int clGetEventProfilingInfo(cl_event, cl_profiling_info, size_t, void *, size_t *)'
973
+
974
+ # Flush and Finish APIs
975
+
976
+ # cl_command_queue : command_queue
977
+ extern 'cl_int clFlush(cl_command_queue)'
978
+
979
+ # cl_command_queue : command_queue
980
+ extern 'cl_int clFinish(cl_command_queue)'
981
+
982
+ # Enqueued Commands APIs
983
+
984
+ # cl_command_queue : command_queue
985
+ # cl_mem : buffer
986
+ # cl_bool : blocking_read
987
+ # size_t : offset
988
+ # size_t : size
989
+ # void * : ptr
990
+ # cl_uint : num_events_in_wait_list
991
+ # const cl_event * : event_wait_list
992
+ # cl_event * : event
993
+ extern 'cl_int clEnqueueReadBuffer(cl_command_queue, cl_mem, cl_bool, size_t, size_t, void *, cl_uint, const cl_event *, cl_event *)'
994
+
995
+ # cl_command_queue : command_queue
996
+ # cl_mem : buffer
997
+ # cl_bool : blocking_read
998
+ # const size_t * : buffer_offset
999
+ # const size_t * : host_offset
1000
+ # const size_t * : region
1001
+ # size_t : buffer_row_pitch
1002
+ # size_t : buffer_slice_pitch
1003
+ # size_t : host_row_pitch
1004
+ # size_t : host_slice_pitch
1005
+ # void * : ptr
1006
+ # cl_uint : num_events_in_wait_list
1007
+ # const cl_event * : event_wait_list
1008
+ # cl_event * : event
1009
+ extern 'cl_int clEnqueueReadBufferRect(cl_command_queue, cl_mem, cl_bool, const size_t *, const size_t *, const size_t *, size_t, size_t, size_t, size_t, void *,cl_uint, const cl_event *, cl_event *)'
1010
+
1011
+ # cl_command_queue : command_queue
1012
+ # cl_mem : buffer
1013
+ # cl_bool : blocking_write
1014
+ # size_t : offset
1015
+ # size_t : size
1016
+ # const void * : ptr
1017
+ # cl_uint : num_events_in_wait_list
1018
+ # const cl_event * : event_wait_list
1019
+ # cl_event * : event
1020
+ extern 'cl_int clEnqueueWriteBuffer(cl_command_queue, cl_mem, cl_bool, size_t, size_t, const void *, cl_uint, const cl_event *, cl_event *)'
1021
+
1022
+ # cl_command_queue : command_queue
1023
+ # cl_mem : buffer
1024
+ # cl_bool : blocking_write
1025
+ # const size_t * : buffer_offset
1026
+ # const size_t * : host_offset
1027
+ # const size_t * : region
1028
+ # size_t : buffer_row_pitch
1029
+ # size_t : buffer_slice_pitch
1030
+ # size_t : host_row_pitch
1031
+ # size_t : host_slice_pitch
1032
+ # const void * : ptr
1033
+ # cl_uint : num_events_in_wait_list
1034
+ # const cl_event * : event_wait_list
1035
+ # cl_event * : event
1036
+ extern 'cl_int clEnqueueWriteBufferRect(cl_command_queue, cl_mem, cl_bool, const size_t *, const size_t *, const size_t *, size_t, size_t, size_t, size_t, const void *, cl_uint, const cl_event *, cl_event *)'
1037
+
1038
+ # cl_command_queue : command_queue
1039
+ # cl_mem : buffer
1040
+ # const void * : pattern
1041
+ # size_t : pattern_size
1042
+ # size_t : offset
1043
+ # size_t : size
1044
+ # cl_uint : num_events_in_wait_list
1045
+ # const cl_event * : event_wait_list
1046
+ # cl_event * : event
1047
+ extern 'cl_int clEnqueueFillBuffer(cl_command_queue, cl_mem, const void *, size_t, size_t, size_t, cl_uint, const cl_event *, cl_event *)'
1048
+
1049
+ # cl_command_queue : command_queue
1050
+ # cl_mem : src_buffer
1051
+ # cl_mem : dst_buffer
1052
+ # size_t : src_offset
1053
+ # size_t : dst_offset
1054
+ # size_t : size
1055
+ # cl_uint : num_events_in_wait_list
1056
+ # const cl_event * : event_wait_list
1057
+ # cl_event * : event
1058
+ extern 'cl_int clEnqueueCopyBuffer(cl_command_queue, cl_mem, cl_mem, size_t, size_t, size_t, cl_uint, const cl_event *, cl_event *)'
1059
+
1060
+ # cl_command_queue : command_queue
1061
+ # cl_mem : src_buffer
1062
+ # cl_mem : dst_buffer
1063
+ # const size_t * : src_origin
1064
+ # const size_t * : dst_origin
1065
+ # const size_t * : region
1066
+ # size_t : src_row_pitch
1067
+ # size_t : src_slice_pitch
1068
+ # size_t : dst_row_pitch
1069
+ # size_t : dst_slice_pitch
1070
+ # cl_uint : num_events_in_wait_list
1071
+ # const cl_event * : event_wait_list
1072
+ # cl_event * : event
1073
+ extern 'cl_int clEnqueueCopyBufferRect(cl_command_queue, cl_mem, cl_mem, const size_t *, const size_t *, const size_t *, size_t, size_t, size_t, size_t, cl_uint, const cl_event *, cl_event *)'
1074
+
1075
+ # cl_command_queue : command_queue
1076
+ # cl_mem : image
1077
+ # cl_bool : blocking_read
1078
+ # const size_t * : origin[3]
1079
+ # const size_t * : region[3]
1080
+ # size_t : row_pitch
1081
+ # size_t : slice_pitch
1082
+ # void * : ptr
1083
+ # cl_uint : num_events_in_wait_list
1084
+ # const cl_event * : event_wait_list
1085
+ # cl_event * : event
1086
+ extern 'cl_int clEnqueueReadImage(cl_command_queue, cl_mem, cl_bool, const size_t *, const size_t *, size_t, size_t, void *, cl_uint, const cl_event *, cl_event *)'
1087
+
1088
+ # cl_command_queue : command_queue
1089
+ # cl_mem : image
1090
+ # cl_bool : blocking_write
1091
+ # const size_t * : origin[3]
1092
+ # const size_t * : region[3]
1093
+ # size_t : input_row_pitch
1094
+ # size_t : input_slice_pitch
1095
+ # const void * : ptr
1096
+ # cl_uint : num_events_in_wait_list
1097
+ # const cl_event * : event_wait_list
1098
+ # cl_event * : event
1099
+ extern 'cl_int clEnqueueWriteImage(cl_command_queue, cl_mem, cl_bool, const size_t *, const size_t *, size_t, size_t, const void *, cl_uint,const cl_event *, cl_event *)'
1100
+
1101
+ # cl_command_queue : command_queue
1102
+ # cl_mem : image
1103
+ # const void * : fill_color
1104
+ # const size_t * : origin[3]
1105
+ # const size_t * : region[3]
1106
+ # cl_uint : num_events_in_wait_list
1107
+ # const cl_event * : event_wait_list
1108
+ # cl_event * : event
1109
+ extern 'cl_int clEnqueueFillImage(cl_command_queue, cl_mem, const void *, const size_t *, const size_t *, cl_uint, const cl_event *, cl_event *)'
1110
+
1111
+ # cl_command_queue : command_queue
1112
+ # cl_mem : src_image
1113
+ # cl_mem : dst_image
1114
+ # const size_t * : src_origin[3]
1115
+ # const size_t * : dst_origin[3]
1116
+ # const size_t * : region[3]
1117
+ # cl_uint : num_events_in_wait_list
1118
+ # const cl_event * : event_wait_list
1119
+ # cl_event * : event
1120
+ extern 'cl_int clEnqueueCopyImage(cl_command_queue, cl_mem, cl_mem, const size_t *, const size_t *, const size_t *, cl_uint, const cl_event *, cl_event *)'
1121
+
1122
+ # cl_command_queue : command_queue
1123
+ # cl_mem : src_image
1124
+ # cl_mem : dst_buffer
1125
+ # const size_t * : src_origin[3]
1126
+ # const size_t * : region[3]
1127
+ # size_t : dst_offset
1128
+ # cl_uint : num_events_in_wait_list
1129
+ # const cl_event * : event_wait_list
1130
+ # cl_event * : event
1131
+ extern 'cl_int clEnqueueCopyImageToBuffer(cl_command_queue, cl_mem, cl_mem, const size_t *, const size_t *, size_t, cl_uint, const cl_event *, cl_event *)'
1132
+
1133
+ # cl_command_queue : command_queue
1134
+ # cl_mem : src_buffer
1135
+ # cl_mem : dst_image
1136
+ # size_t : src_offset
1137
+ # const size_t * : dst_origin[3]
1138
+ # const size_t * : region[3]
1139
+ # cl_uint : num_events_in_wait_list
1140
+ # const cl_event * : event_wait_list
1141
+ # cl_event * : event
1142
+ extern 'cl_int clEnqueueCopyBufferToImage(cl_command_queue, cl_mem, cl_mem, size_t, const size_t *, const size_t *, cl_uint, const cl_event *, cl_event *)'
1143
+
1144
+ # cl_command_queue : command_queue
1145
+ # cl_mem : buffer
1146
+ # cl_bool : blocking_map
1147
+ # cl_map_flags : map_flags
1148
+ # size_t : offset
1149
+ # size_t : size
1150
+ # cl_uint : num_events_in_wait_list
1151
+ # const cl_event * : event_wait_list
1152
+ # cl_event * : event
1153
+ # cl_int * : errcode_ret
1154
+ extern 'void * clEnqueueMapBuffer(cl_command_queue, cl_mem, cl_bool, cl_map_flags, size_t, size_t, cl_uint, const cl_event *, cl_event *, cl_int *)'
1155
+
1156
+ # cl_command_queue : command_queue
1157
+ # cl_mem : image
1158
+ # cl_bool : blocking_map
1159
+ # cl_map_flags : map_flags
1160
+ # const size_t * : origin[3]
1161
+ # const size_t * : region[3]
1162
+ # size_t * : image_row_pitch
1163
+ # size_t * : image_slice_pitch
1164
+ # cl_uint : num_events_in_wait_list
1165
+ # const cl_event * : event_wait_list
1166
+ # cl_event * : event
1167
+ # cl_int * : errcode_ret
1168
+ extern 'void * clEnqueueMapImage(cl_command_queue, cl_mem, cl_bool, cl_map_flags, const size_t *, const size_t *, size_t *, size_t *, cl_uint, const cl_event *, cl_event *, cl_int *)'
1169
+
1170
+ # cl_command_queue : command_queue
1171
+ # cl_mem : memobj
1172
+ # void * : mapped_ptr
1173
+ # cl_uint : num_events_in_wait_list
1174
+ # const cl_event * : event_wait_list
1175
+ # cl_event * : event
1176
+ extern 'cl_int clEnqueueUnmapMemObject(cl_command_queue, cl_mem, void *, cl_uint, const cl_event *, cl_event *)'
1177
+
1178
+ # cl_command_queue : command_queue
1179
+ # cl_uint : num_mem_objects
1180
+ # const cl_mem * : mem_objects
1181
+ # cl_mem_migration_flags : flags
1182
+ # cl_uint : num_events_in_wait_list
1183
+ # const cl_event * : event_wait_list
1184
+ # cl_event * : event
1185
+ extern 'cl_int clEnqueueMigrateMemObjects(cl_command_queue, cl_uint, const cl_mem *, cl_mem_migration_flags, cl_uint, const cl_event *, cl_event *)'
1186
+
1187
+ # cl_command_queue : command_queue
1188
+ # cl_kernel : kernel
1189
+ # cl_uint : work_dim
1190
+ # const size_t * : global_work_offset
1191
+ # const size_t * : global_work_size
1192
+ # const size_t * : local_work_size
1193
+ # cl_uint : num_events_in_wait_list
1194
+ # const cl_event * : event_wait_list
1195
+ # cl_event * : event
1196
+ extern 'cl_int clEnqueueNDRangeKernel(cl_command_queue, cl_kernel, cl_uint, const size_t *, const size_t *, const size_t *, cl_uint, const cl_event *, cl_event *)'
1197
+
1198
+ # cl_command_queue : command_queue
1199
+ # cl_kernel : kernel
1200
+ # cl_uint : num_events_in_wait_list
1201
+ # const cl_event * : event_wait_list
1202
+ # cl_event * : event
1203
+ extern 'cl_int clEnqueueTask(cl_command_queue, cl_kernel, cl_uint, const cl_event *, cl_event *)'
1204
+
1205
+ # cl_command_queue : command_queue
1206
+ # void * : user_func(void *)
1207
+ # void * : args
1208
+ # size_t : cb_args
1209
+ # cl_uint : num_mem_objects
1210
+ # const cl_mem * : mem_list
1211
+ # const void ** : args_mem_loc
1212
+ # cl_uint : num_events_in_wait_list
1213
+ # const cl_event * : event_wait_list
1214
+ # cl_event * : event
1215
+ extern 'cl_int clEnqueueNativeKernel(cl_command_queue, void *, void *, size_t, cl_uint, const cl_mem *, const void **, cl_uint, const cl_event *, cl_event *)'
1216
+
1217
+ # cl_command_queue : command_queue
1218
+ # cl_uint : num_events_in_wait_list
1219
+ # const cl_event * : event_wait_list
1220
+ # cl_event * : event
1221
+ extern 'cl_int clEnqueueMarkerWithWaitList(cl_command_queue, cl_uint, const cl_event *, cl_event *)'
1222
+
1223
+ # cl_command_queue : command_queue
1224
+ # cl_uint : num_events_in_wait_list
1225
+ # const cl_event * : event_wait_list
1226
+ # cl_event * : event
1227
+ extern 'cl_int clEnqueueBarrierWithWaitList(cl_command_queue, cl_uint, const cl_event *, cl_event *)'
1228
+
1229
+ # Extension function access
1230
+ #
1231
+ # Returns the extension function address for the given function name,
1232
+ # or NULL if a valid function can not be found. The client must
1233
+ # check to make sure the address is not NULL, before using or
1234
+ # calling the returned function address.
1235
+
1236
+ # cl_platform_id : platform
1237
+ # const char * : func_name
1238
+ extern 'void * clGetExtensionFunctionAddressForPlatform(cl_platform_id, const char *)'
1239
+ end
1240
+
1241
+ def self.import_symbols
1242
+ # type (from cl_platform.h)
1243
+
1244
+ # scalar types
1245
+ typealias 'cl_char', 'char'
1246
+ typealias 'cl_uchar', 'unsigned char'
1247
+ typealias 'cl_short', 'short'
1248
+ typealias 'cl_ushort', 'unsigned short'
1249
+ typealias 'cl_int', 'int'
1250
+ typealias 'cl_uint', 'unsigned int'
1251
+ typealias 'cl_long', 'long'
1252
+ typealias 'cl_ulong', 'unsigned long'
1253
+
1254
+ typealias 'cl_half', 'unsigned short'
1255
+ typealias 'cl_float', 'float'
1256
+ typealias 'cl_double', 'double'
1257
+
1258
+ typealias 'cl_GLuint', 'unsigned int'
1259
+ typealias 'cl_GLint', 'int'
1260
+ typealias 'cl_GLenum', 'unsigned int'
1261
+
1262
+ # type (from cl.h)
1263
+
1264
+ # opaque pointers
1265
+ typealias 'cl_platform_id', 'void*'
1266
+ typealias 'cl_device_id', 'void*'
1267
+ typealias 'cl_context', 'void*'
1268
+ typealias 'cl_command_queue', 'void*'
1269
+ typealias 'cl_mem', 'void*'
1270
+ typealias 'cl_program', 'void*'
1271
+ typealias 'cl_kernel', 'void*'
1272
+ typealias 'cl_event', 'void*'
1273
+ typealias 'cl_sampler', 'void*'
1274
+
1275
+ # aliases
1276
+ typealias 'cl_bool', 'cl_uint'
1277
+ typealias 'cl_bitfield', 'cl_ulong'
1278
+ typealias 'cl_device_type', 'cl_bitfield'
1279
+ typealias 'cl_platform_info', 'cl_uint'
1280
+ typealias 'cl_device_info', 'cl_uint'
1281
+ typealias 'cl_device_fp_config', 'cl_bitfield'
1282
+ typealias 'cl_device_mem_cache_type', 'cl_uint'
1283
+ typealias 'cl_device_local_mem_type', 'cl_uint'
1284
+ typealias 'cl_device_exec_capabilities', 'cl_bitfield'
1285
+ typealias 'cl_command_queue_properties', 'cl_bitfield'
1286
+ typealias 'cl_device_partition_property', 'intptr_t'
1287
+ typealias 'cl_device_affinity_domain', 'cl_bitfield'
1288
+
1289
+ typealias 'cl_context_properties', 'intptr_t'
1290
+ typealias 'cl_context_info', 'cl_uint'
1291
+ typealias 'cl_command_queue_info', 'cl_uint'
1292
+ typealias 'cl_channel_order', 'cl_uint'
1293
+ typealias 'cl_channel_type', 'cl_uint'
1294
+ typealias 'cl_mem_flags', 'cl_bitfield'
1295
+ typealias 'cl_mem_object_type', 'cl_uint'
1296
+ typealias 'cl_mem_info', 'cl_uint'
1297
+ typealias 'cl_mem_migration_flags', 'cl_bitfield'
1298
+ typealias 'cl_image_info', 'cl_uint'
1299
+ typealias 'cl_buffer_create_type', 'cl_uint'
1300
+ typealias 'cl_addressing_mode', 'cl_uint'
1301
+ typealias 'cl_filter_mode', 'cl_uint'
1302
+ typealias 'cl_sampler_info', 'cl_uint'
1303
+ typealias 'cl_map_flags', 'cl_bitfield'
1304
+ typealias 'cl_program_info', 'cl_uint'
1305
+ typealias 'cl_program_build_info', 'cl_uint'
1306
+ typealias 'cl_program_binary_type', 'cl_uint'
1307
+ typealias 'cl_build_status', 'cl_int'
1308
+ typealias 'cl_kernel_info', 'cl_uint'
1309
+ typealias 'cl_kernel_arg_info', 'cl_uint'
1310
+ typealias 'cl_kernel_arg_address_qualifier', 'cl_uint'
1311
+ typealias 'cl_kernel_arg_access_qualifier', 'cl_uint'
1312
+ typealias 'cl_kernel_arg_type_qualifier', 'cl_bitfield'
1313
+ typealias 'cl_kernel_work_group_info', 'cl_uint'
1314
+ typealias 'cl_event_info', 'cl_uint'
1315
+ typealias 'cl_command_type', 'cl_uint'
1316
+ typealias 'cl_profiling_info', 'cl_uint'
1317
+
1318
+ self.import_functions_cl()
1319
+
1320
+ @@cl_import_done = true
1321
+ end
1322
+
1323
+ end
1324
+
1325
+ =begin
1326
+ Ruby-OpenCL : Yet another OpenCL wrapper for Ruby
1327
+ Copyright (c) 2015 vaiorabbit <http://twitter.com/vaiorabbit>
1328
+
1329
+ This software is provided 'as-is', without any express or implied
1330
+ warranty. In no event will the authors be held liable for any damages
1331
+ arising from the use of this software.
1332
+
1333
+ Permission is granted to anyone to use this software for any purpose,
1334
+ including commercial applications, and to alter it and redistribute it
1335
+ freely, subject to the following restrictions:
1336
+
1337
+ 1. The origin of this software must not be misrepresented; you must not
1338
+ claim that you wrote the original software. If you use this software
1339
+ in a product, an acknowledgment in the product documentation would be
1340
+ appreciated but is not required.
1341
+
1342
+ 2. Altered source versions must be plainly marked as such, and must not be
1343
+ misrepresented as being the original software.
1344
+
1345
+ 3. This notice may not be removed or altered from any source
1346
+ distribution.
1347
+ =end