opencl_ruby_ffi 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +22 -0
- data/lib/opencl_ruby_ffi.rb +18 -0
- data/lib/opencl_ruby_ffi/Arithmetic_gen.rb +3566 -0
- data/lib/opencl_ruby_ffi/Buffer.rb +84 -0
- data/lib/opencl_ruby_ffi/CommandQueue.rb +1544 -0
- data/lib/opencl_ruby_ffi/Context.rb +326 -0
- data/lib/opencl_ruby_ffi/Device.rb +188 -0
- data/lib/opencl_ruby_ffi/Event.rb +152 -0
- data/lib/opencl_ruby_ffi/Image.rb +270 -0
- data/lib/opencl_ruby_ffi/Kernel.rb +183 -0
- data/lib/opencl_ruby_ffi/Mem.rb +131 -0
- data/lib/opencl_ruby_ffi/Platform.rb +119 -0
- data/lib/opencl_ruby_ffi/Program.rb +245 -0
- data/lib/opencl_ruby_ffi/Sampler.rb +51 -0
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base.rb +320 -0
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base_gen.rb +1826 -0
- data/opencl_ruby_ffi.gemspec +16 -0
- metadata +110 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
module OpenCL
|
2
|
+
|
3
|
+
# Creates a Sampler
|
4
|
+
#
|
5
|
+
# ==== Attributes
|
6
|
+
#
|
7
|
+
# * +context+ - Context the created Sampler will be associated to
|
8
|
+
# * +normalized_coords+ - a :cl_bool specifying if the image coordinates are normalized
|
9
|
+
# * +addressing_mode+ - a :cl_addressing_mode specifying how out-of-range image coordinates are handled when reading from an image
|
10
|
+
# * +filter_mode+ - a :cl_filter_mode specifying the type of filter that must be applied when reading an image
|
11
|
+
def self.create_sampler( context, normalized_coords, addressing_mode, filter_mode )
|
12
|
+
error = FFI::MemoryPointer::new( :cl_int )
|
13
|
+
sampler_ptr = OpenCL.clCreateSampler( context, normalized_coords, addressing_mode, filter_mode, error )
|
14
|
+
OpenCL.error_check(error.read_cl_int)
|
15
|
+
OpenCL::Sampler::new(sampler_ptr, false)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Maps the cl_smapler object of OpenCL
|
19
|
+
class Sampler
|
20
|
+
|
21
|
+
# Returns the context associated with the Sampler
|
22
|
+
def context
|
23
|
+
ptr = FFI::MemoryPointer.new( Context )
|
24
|
+
error = OpenCL.clGetSamplerInfo(self, Sampler::CONTEXT, Context.size, ptr, nil)
|
25
|
+
OpenCL.error_check(error)
|
26
|
+
return OpenCL::Context::new( ptr.read_pointer )
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# :method: reference_count()
|
31
|
+
# returns the reference counter of the Sampler
|
32
|
+
eval OpenCL.get_info("Sampler", :cl_uint, "REFERENCE_COUNT")
|
33
|
+
|
34
|
+
##
|
35
|
+
# :method: normalized_coords()
|
36
|
+
# returns if the Sampler uses normalized coords
|
37
|
+
eval OpenCL.get_info("Sampler", :cl_bool, "NORMALIZED_COORDS")
|
38
|
+
|
39
|
+
##
|
40
|
+
# :method: addressing_mode()
|
41
|
+
# returns an AddressingMode representing the addressing mode used by the Sampler
|
42
|
+
eval OpenCL.get_info("Sampler", :cl_addressing_mode, "ADDRESSING_MODE")
|
43
|
+
|
44
|
+
##
|
45
|
+
# :method: filter_mode()
|
46
|
+
# returns a FilterMode representing the filtering mode used by the Sampler
|
47
|
+
eval OpenCL.get_info("Sampler", :cl_filter_mode, "FILTER_MODE")
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,320 @@
|
|
1
|
+
module FFI
|
2
|
+
class Pointer
|
3
|
+
alias_method :orig_method_missing, :method_missing
|
4
|
+
# if a missing write_type, read_type, get_array_of_type can transitively get a replacement, an alias is created and the method is called
|
5
|
+
def method_missing(m, *a, &b)
|
6
|
+
if m.to_s.match("read_")
|
7
|
+
type = m.to_s.sub("read_","")
|
8
|
+
type = FFI.find_type(type.to_sym)
|
9
|
+
type, _ = FFI::TypeDefs.find do |(name, t)|
|
10
|
+
Pointer.method_defined?("read_#{name}") if t == type
|
11
|
+
end
|
12
|
+
eval "alias :#{m} :read_#{type}" if type
|
13
|
+
return eval "read_#{type}( *a, &b)" if type
|
14
|
+
elsif m.to_s.match ("write_")
|
15
|
+
type = m.to_s.sub("write_","")
|
16
|
+
type = FFI.find_type(type.to_sym)
|
17
|
+
type, _ = FFI::TypeDefs.find do |(name, t)|
|
18
|
+
Pointer.method_defined?("write_#{name}") if t == type
|
19
|
+
end
|
20
|
+
eval "alias :#{m} :write_#{type}" if type
|
21
|
+
return eval "write_#{type}( *a, &b)" if type
|
22
|
+
elsif m.to_s.match ("get_array_of_")
|
23
|
+
type = m.to_s.sub("get_array_of_","")
|
24
|
+
type = FFI.find_type(type.to_sym)
|
25
|
+
type, _ = FFI::TypeDefs.find do |(name, t)|
|
26
|
+
Pointer.method_defined?("get_array_of_#{name}") if t == type
|
27
|
+
end
|
28
|
+
eval "alias :#{m} :get_array_of_#{type}" if type
|
29
|
+
return eval "get_array_of_#{type}( *a, &b)" if type
|
30
|
+
end
|
31
|
+
orig_method_missing m, *a, &b
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Maps the OpenCL API using FFI.
|
38
|
+
module OpenCL
|
39
|
+
@@type_converter = {
|
40
|
+
:cl_device_type => OpenCL::Device::Type,
|
41
|
+
:cl_device_fp_config => OpenCL::Device::FPConfig,
|
42
|
+
:cl_device_mem_cache_type => OpenCL::Device::MemCacheType,
|
43
|
+
:cl_device_local_mem_type => OpenCL::Device::LocalMemType,
|
44
|
+
:cl_device_exec_capabilities => OpenCL::Device::ExecCapabilities,
|
45
|
+
:cl_command_queue_properties => OpenCL::CommandQueue::Properties,
|
46
|
+
:cl_device_affinity_domain => OpenCL::Device::AffinityDomain,
|
47
|
+
:cl_channel_order => OpenCL::ChannelOrder,
|
48
|
+
:cl_channel_type => OpenCL::ChannelType,
|
49
|
+
:cl_mem_flags => OpenCL::Mem::Flags,
|
50
|
+
:cl_mem_object_type => OpenCL::Mem::Type,
|
51
|
+
:cl_mem_migration_flags => OpenCL::Mem::MigrationFlags,
|
52
|
+
:cl_addressing_mode => OpenCL::AddressingMode,
|
53
|
+
:cl_filter_mode => OpenCL::FilterMode,
|
54
|
+
:cl_map_flags => OpenCL::MapFlags,
|
55
|
+
:cl_program_binary_type => OpenCL::Program::BinaryType,
|
56
|
+
:cl_kernel_arg_address_qualifier => OpenCL::Kernel::Arg::AddressQualifier,
|
57
|
+
:cl_kernel_arg_access_qualifier => OpenCL::Kernel::Arg::AccessQualifier,
|
58
|
+
:cl_kernel_arg_type_qualifier => OpenCL::Kernel::Arg::TypeQualifier,
|
59
|
+
:cl_command_type => OpenCL::CommandType,
|
60
|
+
:cl_build_status => OpenCL::BuildStatus
|
61
|
+
}
|
62
|
+
@@callbacks = []
|
63
|
+
|
64
|
+
# Converts a type from a symbol to an OpenCL class if a convertion is found
|
65
|
+
def self.convert_type(type)
|
66
|
+
return @@type_converter[type]
|
67
|
+
end
|
68
|
+
|
69
|
+
class FFI::Struct
|
70
|
+
|
71
|
+
# alias initialize in order to call it from another function from a child class
|
72
|
+
alias_method :parent_initialize, :initialize
|
73
|
+
end
|
74
|
+
|
75
|
+
# Maps the :cl_image_fomat type of OpenCL
|
76
|
+
class ImageFormat < FFI::Struct
|
77
|
+
layout :image_channel_order, :cl_channel_order,
|
78
|
+
:image_channel_data_type, :cl_channel_type
|
79
|
+
|
80
|
+
# Creates a new ImageFormat from an image channel order and data type
|
81
|
+
def initialize( image_channel_order, image_channel_data_type )
|
82
|
+
super()
|
83
|
+
self[:image_channel_order] = image_channel_order
|
84
|
+
self[:image_channel_data_type] = image_channel_data_type
|
85
|
+
end
|
86
|
+
|
87
|
+
# Returns a new ChannelOrder corresponding to the ImageFormat internal value
|
88
|
+
def channel_order
|
89
|
+
return OpenCL::ChannelOrder::new(self[:image_channel_order])
|
90
|
+
end
|
91
|
+
|
92
|
+
# Sets the ImageFormat internal value for the image channel order
|
93
|
+
def channel_order=(order)
|
94
|
+
return self[:image_channel_order] = order
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns a new ChannelType corresponding to the ImageFormat internal value
|
98
|
+
def channel_data_type
|
99
|
+
return OpenCL::convert_type(:cl_channel_type)::new(self[:image_channel_data_type])
|
100
|
+
end
|
101
|
+
|
102
|
+
# Sets the ImageFormat internal value for the image channel data type
|
103
|
+
def channel_data_type=(data_type)
|
104
|
+
return self[:image_channel_data_type] = data_type
|
105
|
+
end
|
106
|
+
|
107
|
+
# Returns a String containing a user friendly representation of the ImageFormat
|
108
|
+
def to_s
|
109
|
+
return "{ #{self.channel_order}, #{self.channel_data_type} }"
|
110
|
+
end
|
111
|
+
|
112
|
+
# A workaroud to call the parent initialize from another function (from_pointer)
|
113
|
+
def parent_initialize(ptr)
|
114
|
+
super(ptr)
|
115
|
+
end
|
116
|
+
|
117
|
+
# Creates a new ImageFormat using an FFI::Pointer, fonctionality was lost when initialize was defined
|
118
|
+
def self.from_pointer( ptr )
|
119
|
+
object = allocate
|
120
|
+
object.parent_initialize( ptr )
|
121
|
+
object
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# Map the :cl_image_desc type of OpenCL
|
126
|
+
class ImageDesc < FFI::Struct
|
127
|
+
layout :image_type, :cl_mem_object_type,
|
128
|
+
:image_width, :size_t,
|
129
|
+
:image_height, :size_t,
|
130
|
+
:image_depth, :size_t,
|
131
|
+
:image_array_size, :size_t,
|
132
|
+
:image_row_pitch, :size_t,
|
133
|
+
:image_slice_pitch, :size_t,
|
134
|
+
:num_mip_levels, :cl_uint,
|
135
|
+
:num_samples, :cl_uint,
|
136
|
+
:buffer, Mem
|
137
|
+
|
138
|
+
# Creates anew ImageDesc using the values provided by the user
|
139
|
+
def initialize( image_type, image_width, image_height, image_depth, image_array_size, image_row_pitch, image_slice_pitch, num_mip_levels, num_samples, buffer )
|
140
|
+
super()
|
141
|
+
self[:image_type] = image_type
|
142
|
+
self[:image_width] = image_width
|
143
|
+
self[:image_height] = image_height
|
144
|
+
self[:image_depth] = image_depth
|
145
|
+
self[:image_array_size] = image_array_size
|
146
|
+
self[:image_row_pitch] = image_row_pitch
|
147
|
+
self[:image_slice_pitch] = image_slice_pitch
|
148
|
+
self[:num_mip_levels] = num_mip_levels
|
149
|
+
self[:num_samples] = num_samples
|
150
|
+
self[:buffer] = buffer
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Maps the :cl_buffer_region type of OpenCL
|
155
|
+
class BufferRegion < FFI::Struct
|
156
|
+
layout :origin, :size_t,
|
157
|
+
:size, :size_t
|
158
|
+
|
159
|
+
# Creates a new BufferRegion using the value provided by the user
|
160
|
+
def initialize( origin, sz )
|
161
|
+
super()
|
162
|
+
self[:origin] = origin
|
163
|
+
self[:size] = sz
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# Extracts the :flags named option from the hash given and returns the flags value
|
168
|
+
def self.get_flags( options )
|
169
|
+
flags = 0
|
170
|
+
if options[:flags] then
|
171
|
+
if options[:flags].respond_to?(:each) then
|
172
|
+
options[:flags].each { |f| flags = flags | f }
|
173
|
+
else
|
174
|
+
flags = options[:flags]
|
175
|
+
end
|
176
|
+
end
|
177
|
+
return flags
|
178
|
+
end
|
179
|
+
|
180
|
+
# Extracts the :event_wait_list named option from the hash given and returns a tuple containing the number of events and a pointer to those events
|
181
|
+
def self.get_event_wait_list( options )
|
182
|
+
num_events = 0
|
183
|
+
events = nil
|
184
|
+
if options[:event_wait_list] then
|
185
|
+
num_events = options[:event_wait_list].length
|
186
|
+
if num_events > 0 then
|
187
|
+
events = FFI::MemoryPointer.new( Event, num_events )
|
188
|
+
options[:event_wait_list].each_with_index { |e, i|
|
189
|
+
events[i].write_pointer(e)
|
190
|
+
}
|
191
|
+
end
|
192
|
+
end
|
193
|
+
return [ num_events, events ]
|
194
|
+
end
|
195
|
+
|
196
|
+
# Extracts the :properties named option (for a CommandQueue) from the hash given and returns the properties values
|
197
|
+
def self.get_command_queue_properties( options )
|
198
|
+
properties = nil
|
199
|
+
if options[:properties] then
|
200
|
+
if options[:properties].respond_to?(:each) then
|
201
|
+
options[:properties].each { |f| properties = properties | f }
|
202
|
+
else
|
203
|
+
properties = options[:properties]
|
204
|
+
end
|
205
|
+
end
|
206
|
+
return properties
|
207
|
+
end
|
208
|
+
|
209
|
+
# Extracts the origin_symbol and region_symbol named options for image from the given hash. Returns the read (or detemined suitable) origin and region in a tuple
|
210
|
+
def self.get_origin_region( image, options, origin_symbol, region_symbol )
|
211
|
+
origin = FFI::MemoryPointer.new( :size_t, 3 )
|
212
|
+
(0..2).each { |i| origin[i].write_size_t(0) }
|
213
|
+
if options[origin_symbol] then
|
214
|
+
options[origin_symbol].each_with_index { |e, i|
|
215
|
+
origin[i].write_size_t(e)
|
216
|
+
}
|
217
|
+
end
|
218
|
+
region = FFI::MemoryPointer.new( :size_t, 3 )
|
219
|
+
(0..2).each { |i| region[i].write_size_t(1) }
|
220
|
+
if options[region_symbol] then
|
221
|
+
options[region_symbol].each_with_index { |e, i|
|
222
|
+
region[i].write_size_t(e)
|
223
|
+
}
|
224
|
+
else
|
225
|
+
region[0].write_size_t( image.width - origin[0].read_size_t )
|
226
|
+
if image.type == OpenCL::Mem::IMAGE1D_ARRAY then
|
227
|
+
region[1].write_size_t( image.array_size - origin[1].read_size_t )
|
228
|
+
else
|
229
|
+
region[1].write_size_t( image.height ? image.height - origin[1].read_size_t : 1 )
|
230
|
+
end
|
231
|
+
if image.type == OpenCL::Mem::IMAGE2D_ARRAY then
|
232
|
+
region[2].write_size_t( image.array_size - origin[2].read_size_t )
|
233
|
+
else
|
234
|
+
region[2].write_size_t( image.depth ? image.depth - origin[2].read_size_t : 1 )
|
235
|
+
end
|
236
|
+
end
|
237
|
+
return [origin, region]
|
238
|
+
end
|
239
|
+
|
240
|
+
# Extracts the :properties named option (for a Context) from the hash given and returns an FFI:Pointer to a 0 terminated list of properties
|
241
|
+
def self.get_context_properties( options )
|
242
|
+
properties = nil
|
243
|
+
if options[:properties] then
|
244
|
+
properties = FFI::MemoryPointer.new( :cl_context_properties, options[:properties].length + 1 )
|
245
|
+
options[:properties].each_with_index { |e,i|
|
246
|
+
properties[i].write_cl_context_properties(e)
|
247
|
+
}
|
248
|
+
properties[options[:properties].length].write_cl_context_properties(0)
|
249
|
+
end
|
250
|
+
return properties
|
251
|
+
end
|
252
|
+
|
253
|
+
# checks if a :cl_int corresponds to an Error code and raises the apropriate OpenCL::Error
|
254
|
+
def self.error_check(errcode)
|
255
|
+
raise OpenCL::Error::new(OpenCL::Error.get_error_string(errcode)) if errcode != SUCCESS
|
256
|
+
end
|
257
|
+
|
258
|
+
# Generates a new method for klass that use the apropriate clGetKlassInfo, to read an Array of element of the given type. The info queried is specified by name.
|
259
|
+
def self.get_info_array(klass, type, name)
|
260
|
+
klass_name = klass
|
261
|
+
klass_name = "MemObject" if klass == "Mem"
|
262
|
+
s = <<EOF
|
263
|
+
def #{name.downcase}
|
264
|
+
ptr1 = FFI::MemoryPointer.new( :size_t, 1)
|
265
|
+
error = OpenCL.clGet#{klass_name}Info(self, #{klass}::#{name}, 0, nil, ptr1)
|
266
|
+
OpenCL.error_check(error)
|
267
|
+
EOF
|
268
|
+
if ( klass == "Device" and name == "PARTITION_TYPE" ) or ( klass == "Context" and name == "PROPERTIES" ) then
|
269
|
+
s+= <<EOF
|
270
|
+
return [] if ptr1.read_size_t == 0
|
271
|
+
EOF
|
272
|
+
end
|
273
|
+
s += <<EOF
|
274
|
+
ptr2 = FFI::MemoryPointer.new( ptr1.read_size_t )
|
275
|
+
error = OpenCL.clGet#{klass_name}Info(self, #{klass}::#{name}, ptr1.read_size_t, ptr2, nil)
|
276
|
+
OpenCL.error_check(error)
|
277
|
+
arr = ptr2.get_array_of_#{type}(0, ptr1.read_size_t/ FFI.find_type(:#{type}).size)
|
278
|
+
EOF
|
279
|
+
if ( klass == "Device" and ( name == "PARTITION_TYPE" or name == "PARTITION_PROPERTIES" ) ) or ( klass == "Context" and name == "PROPERTIES" ) then
|
280
|
+
s+= <<EOF
|
281
|
+
return arr.reject! { |e| e == 0 }
|
282
|
+
end
|
283
|
+
EOF
|
284
|
+
else
|
285
|
+
s+= <<EOF
|
286
|
+
return arr
|
287
|
+
end
|
288
|
+
EOF
|
289
|
+
end
|
290
|
+
return s
|
291
|
+
end
|
292
|
+
|
293
|
+
# Generates a new method for klass that use the apropriate clGetKlassInfo, to read an element of the given type. The info queried is specified by name.
|
294
|
+
def self.get_info(klass, type, name)
|
295
|
+
klass_name = klass
|
296
|
+
klass_name = "MemObject" if klass == "Mem"
|
297
|
+
s = <<EOF
|
298
|
+
def #{name.downcase}
|
299
|
+
ptr1 = FFI::MemoryPointer.new( :size_t, 1)
|
300
|
+
error = OpenCL.clGet#{klass_name}Info(self, #{klass}::#{name}, 0, nil, ptr1)
|
301
|
+
OpenCL.error_check(error)
|
302
|
+
ptr2 = FFI::MemoryPointer.new( ptr1.read_size_t )
|
303
|
+
error = OpenCL.clGet#{klass_name}Info(self, #{klass}::#{name}, ptr1.read_size_t, ptr2, nil)
|
304
|
+
OpenCL.error_check(error)
|
305
|
+
EOF
|
306
|
+
if(OpenCL::convert_type(type)) then
|
307
|
+
s += <<EOF
|
308
|
+
return OpenCL::convert_type(:#{type})::new(ptr2.read_#{type})
|
309
|
+
end
|
310
|
+
EOF
|
311
|
+
else
|
312
|
+
s += <<EOF
|
313
|
+
return ptr2.read_#{type}
|
314
|
+
end
|
315
|
+
EOF
|
316
|
+
end
|
317
|
+
return s
|
318
|
+
end
|
319
|
+
|
320
|
+
end
|
@@ -0,0 +1,1826 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
module OpenCL
|
4
|
+
extend FFI::Library
|
5
|
+
ffi_lib "libOpenCL.so"
|
6
|
+
#:stopdoc:
|
7
|
+
SUCCESS = 0
|
8
|
+
DEVICE_NOT_FOUND = -1
|
9
|
+
DEVICE_NOT_AVAILABLE = -2
|
10
|
+
COMPILER_NOT_AVAILABLE = -3
|
11
|
+
MEM_OBJECT_ALLOCATION_FAILURE = -4
|
12
|
+
OUT_OF_RESOURCES = -5
|
13
|
+
OUT_OF_HOST_MEMORY = -6
|
14
|
+
PROFILING_INFO_NOT_AVAILABLE = -7
|
15
|
+
MEM_COPY_OVERLAP = -8
|
16
|
+
IMAGE_FORMAT_MISMATCH = -9
|
17
|
+
IMAGE_FORMAT_NOT_SUPPORTED = -10
|
18
|
+
BUILD_PROGRAM_FAILURE = -11
|
19
|
+
MAP_FAILURE = -12
|
20
|
+
MISALIGNED_SUB_BUFFER_OFFSET = -13
|
21
|
+
EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST = -14
|
22
|
+
COMPILE_PROGRAM_FAILURE = -15
|
23
|
+
LINKER_NOT_AVAILABLE = -16
|
24
|
+
LINK_PROGRAM_FAILURE = -17
|
25
|
+
DEVICE_PARTITION_FAILED = -18
|
26
|
+
KERNEL_ARG_INFO_NOT_AVAILABLE = -19
|
27
|
+
INVALID_VALUE = -30
|
28
|
+
INVALID_DEVICE_TYPE = -31
|
29
|
+
INVALID_PLATFORM = -32
|
30
|
+
INVALID_DEVICE = -33
|
31
|
+
INVALID_CONTEXT = -34
|
32
|
+
INVALID_QUEUE_PROPERTIES = -35
|
33
|
+
INVALID_COMMAND_QUEUE = -36
|
34
|
+
INVALID_HOST_PTR = -37
|
35
|
+
INVALID_MEM_OBJECT = -38
|
36
|
+
INVALID_IMAGE_FORMAT_DESCRIPTOR = -39
|
37
|
+
INVALID_IMAGE_SIZE = -40
|
38
|
+
INVALID_SAMPLER = -41
|
39
|
+
INVALID_BINARY = -42
|
40
|
+
INVALID_BUILD_OPTIONS = -43
|
41
|
+
INVALID_PROGRAM = -44
|
42
|
+
INVALID_PROGRAM_EXECUTABLE = -45
|
43
|
+
INVALID_KERNEL_NAME = -46
|
44
|
+
INVALID_KERNEL_DEFINITION = -47
|
45
|
+
INVALID_KERNEL = -48
|
46
|
+
INVALID_ARG_INDEX = -49
|
47
|
+
INVALID_ARG_VALUE = -50
|
48
|
+
INVALID_ARG_SIZE = -51
|
49
|
+
INVALID_KERNEL_ARGS = -52
|
50
|
+
INVALID_WORK_DIMENSION = -53
|
51
|
+
INVALID_WORK_GROUP_SIZE = -54
|
52
|
+
INVALID_WORK_ITEM_SIZE = -55
|
53
|
+
INVALID_GLOBAL_OFFSET = -56
|
54
|
+
INVALID_EVENT_WAIT_LIST = -57
|
55
|
+
INVALID_EVENT = -58
|
56
|
+
INVALID_OPERATION = -59
|
57
|
+
INVALID_GL_OBJECT = -60
|
58
|
+
INVALID_BUFFER_SIZE = -61
|
59
|
+
INVALID_MIP_LEVEL = -62
|
60
|
+
INVALID_GLOBAL_WORK_SIZE = -63
|
61
|
+
INVALID_PROPERTY = -64
|
62
|
+
INVALID_IMAGE_DESCRIPTOR = -65
|
63
|
+
INVALID_COMPILER_OPTIONS = -66
|
64
|
+
INVALID_LINKER_OPTIONS = -67
|
65
|
+
INVALID_DEVICE_PARTITION_COUNT = -68
|
66
|
+
VERSION_1_0 = 1
|
67
|
+
VERSION_1_1 = 1
|
68
|
+
VERSION_1_2 = 1
|
69
|
+
FALSE = 0
|
70
|
+
TRUE = 1
|
71
|
+
BLOCKING = TRUE
|
72
|
+
NON_BLOCKING = FALSE
|
73
|
+
PLATFORM_PROFILE = 0x0900
|
74
|
+
PLATFORM_VERSION = 0x0901
|
75
|
+
PLATFORM_NAME = 0x0902
|
76
|
+
PLATFORM_VENDOR = 0x0903
|
77
|
+
PLATFORM_EXTENSIONS = 0x0904
|
78
|
+
DEVICE_TYPE_DEFAULT = (1 << 0)
|
79
|
+
DEVICE_TYPE_CPU = (1 << 1)
|
80
|
+
DEVICE_TYPE_GPU = (1 << 2)
|
81
|
+
DEVICE_TYPE_ACCELERATOR = (1 << 3)
|
82
|
+
DEVICE_TYPE_CUSTOM = (1 << 4)
|
83
|
+
DEVICE_TYPE_ALL = 0xFFFFFFFF
|
84
|
+
DEVICE_TYPE = 0x1000
|
85
|
+
DEVICE_VENDOR_ID = 0x1001
|
86
|
+
DEVICE_MAX_COMPUTE_UNITS = 0x1002
|
87
|
+
DEVICE_MAX_WORK_ITEM_DIMENSIONS = 0x1003
|
88
|
+
DEVICE_MAX_WORK_GROUP_SIZE = 0x1004
|
89
|
+
DEVICE_MAX_WORK_ITEM_SIZES = 0x1005
|
90
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_CHAR = 0x1006
|
91
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_SHORT = 0x1007
|
92
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_INT = 0x1008
|
93
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_LONG = 0x1009
|
94
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT = 0x100A
|
95
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE = 0x100B
|
96
|
+
DEVICE_MAX_CLOCK_FREQUENCY = 0x100C
|
97
|
+
DEVICE_ADDRESS_BITS = 0x100D
|
98
|
+
DEVICE_MAX_READ_IMAGE_ARGS = 0x100E
|
99
|
+
DEVICE_MAX_WRITE_IMAGE_ARGS = 0x100F
|
100
|
+
DEVICE_MAX_MEM_ALLOC_SIZE = 0x1010
|
101
|
+
DEVICE_IMAGE2D_MAX_WIDTH = 0x1011
|
102
|
+
DEVICE_IMAGE2D_MAX_HEIGHT = 0x1012
|
103
|
+
DEVICE_IMAGE3D_MAX_WIDTH = 0x1013
|
104
|
+
DEVICE_IMAGE3D_MAX_HEIGHT = 0x1014
|
105
|
+
DEVICE_IMAGE3D_MAX_DEPTH = 0x1015
|
106
|
+
DEVICE_IMAGE_SUPPORT = 0x1016
|
107
|
+
DEVICE_MAX_PARAMETER_SIZE = 0x1017
|
108
|
+
DEVICE_MAX_SAMPLERS = 0x1018
|
109
|
+
DEVICE_MEM_BASE_ADDR_ALIGN = 0x1019
|
110
|
+
DEVICE_MIN_DATA_TYPE_ALIGN_SIZE = 0x101A
|
111
|
+
DEVICE_SINGLE_FP_CONFIG = 0x101B
|
112
|
+
DEVICE_GLOBAL_MEM_CACHE_TYPE = 0x101C
|
113
|
+
DEVICE_GLOBAL_MEM_CACHELINE_SIZE = 0x101D
|
114
|
+
DEVICE_GLOBAL_MEM_CACHE_SIZE = 0x101E
|
115
|
+
DEVICE_GLOBAL_MEM_SIZE = 0x101F
|
116
|
+
DEVICE_MAX_CONSTANT_BUFFER_SIZE = 0x1020
|
117
|
+
DEVICE_MAX_CONSTANT_ARGS = 0x1021
|
118
|
+
DEVICE_LOCAL_MEM_TYPE = 0x1022
|
119
|
+
DEVICE_LOCAL_MEM_SIZE = 0x1023
|
120
|
+
DEVICE_ERROR_CORRECTION_SUPPORT = 0x1024
|
121
|
+
DEVICE_PROFILING_TIMER_RESOLUTION = 0x1025
|
122
|
+
DEVICE_ENDIAN_LITTLE = 0x1026
|
123
|
+
DEVICE_AVAILABLE = 0x1027
|
124
|
+
DEVICE_COMPILER_AVAILABLE = 0x1028
|
125
|
+
DEVICE_EXECUTION_CAPABILITIES = 0x1029
|
126
|
+
DEVICE_QUEUE_PROPERTIES = 0x102A
|
127
|
+
DEVICE_NAME = 0x102B
|
128
|
+
DEVICE_VENDOR = 0x102C
|
129
|
+
DRIVER_VERSION = 0x102D
|
130
|
+
DEVICE_PROFILE = 0x102E
|
131
|
+
DEVICE_VERSION = 0x102F
|
132
|
+
DEVICE_EXTENSIONS = 0x1030
|
133
|
+
DEVICE_PLATFORM = 0x1031
|
134
|
+
DEVICE_DOUBLE_FP_CONFIG = 0x1032
|
135
|
+
DEVICE_PREFERRED_VECTOR_WIDTH_HALF = 0x1034
|
136
|
+
DEVICE_HOST_UNIFIED_MEMORY = 0x1035
|
137
|
+
DEVICE_NATIVE_VECTOR_WIDTH_CHAR = 0x1036
|
138
|
+
DEVICE_NATIVE_VECTOR_WIDTH_SHORT = 0x1037
|
139
|
+
DEVICE_NATIVE_VECTOR_WIDTH_INT = 0x1038
|
140
|
+
DEVICE_NATIVE_VECTOR_WIDTH_LONG = 0x1039
|
141
|
+
DEVICE_NATIVE_VECTOR_WIDTH_FLOAT = 0x103A
|
142
|
+
DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE = 0x103B
|
143
|
+
DEVICE_NATIVE_VECTOR_WIDTH_HALF = 0x103C
|
144
|
+
DEVICE_OPENCL_C_VERSION = 0x103D
|
145
|
+
DEVICE_LINKER_AVAILABLE = 0x103E
|
146
|
+
DEVICE_BUILT_IN_KERNELS = 0x103F
|
147
|
+
DEVICE_IMAGE_MAX_BUFFER_SIZE = 0x1040
|
148
|
+
DEVICE_IMAGE_MAX_ARRAY_SIZE = 0x1041
|
149
|
+
DEVICE_PARENT_DEVICE = 0x1042
|
150
|
+
DEVICE_PARTITION_MAX_SUB_DEVICES = 0x1043
|
151
|
+
DEVICE_PARTITION_PROPERTIES = 0x1044
|
152
|
+
DEVICE_PARTITION_AFFINITY_DOMAIN = 0x1045
|
153
|
+
DEVICE_PARTITION_TYPE = 0x1046
|
154
|
+
DEVICE_REFERENCE_COUNT = 0x1047
|
155
|
+
DEVICE_PREFERRED_INTEROP_USER_SYNC = 0x1048
|
156
|
+
DEVICE_PRINTF_BUFFER_SIZE = 0x1049
|
157
|
+
DEVICE_IMAGE_PITCH_ALIGNMENT = 0x104A
|
158
|
+
DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT = 0x104B
|
159
|
+
FP_DENORM = (1 << 0)
|
160
|
+
FP_INF_NAN = (1 << 1)
|
161
|
+
FP_ROUND_TO_NEAREST = (1 << 2)
|
162
|
+
FP_ROUND_TO_ZERO = (1 << 3)
|
163
|
+
FP_ROUND_TO_INF = (1 << 4)
|
164
|
+
FP_FMA = (1 << 5)
|
165
|
+
FP_SOFT_FLOAT = (1 << 6)
|
166
|
+
FP_CORRECTLY_ROUNDED_DIVIDE_SQRT = (1 << 7)
|
167
|
+
NONE = 0x0
|
168
|
+
READ_ONLY_CACHE = 0x1
|
169
|
+
READ_WRITE_CACHE = 0x2
|
170
|
+
LOCAL = 0x1
|
171
|
+
GLOBAL = 0x2
|
172
|
+
EXEC_KERNEL = (1 << 0)
|
173
|
+
EXEC_NATIVE_KERNEL = (1 << 1)
|
174
|
+
QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 << 0)
|
175
|
+
QUEUE_PROFILING_ENABLE = (1 << 1)
|
176
|
+
CONTEXT_REFERENCE_COUNT = 0x1080
|
177
|
+
CONTEXT_DEVICES = 0x1081
|
178
|
+
CONTEXT_PROPERTIES = 0x1082
|
179
|
+
CONTEXT_NUM_DEVICES = 0x1083
|
180
|
+
CONTEXT_PLATFORM = 0x1084
|
181
|
+
CONTEXT_INTEROP_USER_SYNC = 0x1085
|
182
|
+
DEVICE_PARTITION_EQUALLY = 0x1086
|
183
|
+
DEVICE_PARTITION_BY_COUNTS = 0x1087
|
184
|
+
DEVICE_PARTITION_BY_COUNTS_LIST_END = 0x0
|
185
|
+
DEVICE_PARTITION_BY_AFFINITY_DOMAIN = 0x1088
|
186
|
+
DEVICE_AFFINITY_DOMAIN_NUMA = (1 << 0)
|
187
|
+
DEVICE_AFFINITY_DOMAIN_L4_CACHE = (1 << 1)
|
188
|
+
DEVICE_AFFINITY_DOMAIN_L3_CACHE = (1 << 2)
|
189
|
+
DEVICE_AFFINITY_DOMAIN_L2_CACHE = (1 << 3)
|
190
|
+
DEVICE_AFFINITY_DOMAIN_L1_CACHE = (1 << 4)
|
191
|
+
DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 << 5)
|
192
|
+
QUEUE_CONTEXT = 0x1090
|
193
|
+
QUEUE_DEVICE = 0x1091
|
194
|
+
QUEUE_REFERENCE_COUNT = 0x1092
|
195
|
+
QUEUE_PROPERTIES = 0x1093
|
196
|
+
MEM_READ_WRITE = (1 << 0)
|
197
|
+
MEM_WRITE_ONLY = (1 << 1)
|
198
|
+
MEM_READ_ONLY = (1 << 2)
|
199
|
+
MEM_USE_HOST_PTR = (1 << 3)
|
200
|
+
MEM_ALLOC_HOST_PTR = (1 << 4)
|
201
|
+
MEM_COPY_HOST_PTR = (1 << 5)
|
202
|
+
MEM_HOST_WRITE_ONLY = (1 << 7)
|
203
|
+
MEM_HOST_READ_ONLY = (1 << 8)
|
204
|
+
MEM_HOST_NO_ACCESS = (1 << 9)
|
205
|
+
MIGRATE_MEM_OBJECT_HOST = (1 << 0)
|
206
|
+
MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED = (1 << 1)
|
207
|
+
R = 0x10B0
|
208
|
+
A = 0x10B1
|
209
|
+
RG = 0x10B2
|
210
|
+
RA = 0x10B3
|
211
|
+
RGB = 0x10B4
|
212
|
+
RGBA = 0x10B5
|
213
|
+
BGRA = 0x10B6
|
214
|
+
ARGB = 0x10B7
|
215
|
+
INTENSITY = 0x10B8
|
216
|
+
LUMINANCE = 0x10B9
|
217
|
+
Rx = 0x10BA
|
218
|
+
RGx = 0x10BB
|
219
|
+
RGBx = 0x10BC
|
220
|
+
DEPTH = 0x10BD
|
221
|
+
DEPTH_STENCIL = 0x10BE
|
222
|
+
SNORM_INT8 = 0x10D0
|
223
|
+
SNORM_INT16 = 0x10D1
|
224
|
+
UNORM_INT8 = 0x10D2
|
225
|
+
UNORM_INT16 = 0x10D3
|
226
|
+
UNORM_SHORT_565 = 0x10D4
|
227
|
+
UNORM_SHORT_555 = 0x10D5
|
228
|
+
UNORM_INT_101010 = 0x10D6
|
229
|
+
SIGNED_INT8 = 0x10D7
|
230
|
+
SIGNED_INT16 = 0x10D8
|
231
|
+
SIGNED_INT32 = 0x10D9
|
232
|
+
UNSIGNED_INT8 = 0x10DA
|
233
|
+
UNSIGNED_INT16 = 0x10DB
|
234
|
+
UNSIGNED_INT32 = 0x10DC
|
235
|
+
HALF_FLOAT = 0x10DD
|
236
|
+
FLOAT = 0x10DE
|
237
|
+
UNORM_INT24 = 0x10DF
|
238
|
+
MEM_OBJECT_BUFFER = 0x10F0
|
239
|
+
MEM_OBJECT_IMAGE2D = 0x10F1
|
240
|
+
MEM_OBJECT_IMAGE3D = 0x10F2
|
241
|
+
MEM_OBJECT_IMAGE2D_ARRAY = 0x10F3
|
242
|
+
MEM_OBJECT_IMAGE1D = 0x10F4
|
243
|
+
MEM_OBJECT_IMAGE1D_ARRAY = 0x10F5
|
244
|
+
MEM_OBJECT_IMAGE1D_BUFFER = 0x10F6
|
245
|
+
MEM_TYPE = 0x1100
|
246
|
+
MEM_FLAGS = 0x1101
|
247
|
+
MEM_SIZE = 0x1102
|
248
|
+
MEM_HOST_PTR = 0x1103
|
249
|
+
MEM_MAP_COUNT = 0x1104
|
250
|
+
MEM_REFERENCE_COUNT = 0x1105
|
251
|
+
MEM_CONTEXT = 0x1106
|
252
|
+
MEM_ASSOCIATED_MEMOBJECT = 0x1107
|
253
|
+
MEM_OFFSET = 0x1108
|
254
|
+
IMAGE_FORMAT = 0x1110
|
255
|
+
IMAGE_ELEMENT_SIZE = 0x1111
|
256
|
+
IMAGE_ROW_PITCH = 0x1112
|
257
|
+
IMAGE_SLICE_PITCH = 0x1113
|
258
|
+
IMAGE_WIDTH = 0x1114
|
259
|
+
IMAGE_HEIGHT = 0x1115
|
260
|
+
IMAGE_DEPTH = 0x1116
|
261
|
+
IMAGE_ARRAY_SIZE = 0x1117
|
262
|
+
IMAGE_BUFFER = 0x1118
|
263
|
+
IMAGE_NUM_MIP_LEVELS = 0x1119
|
264
|
+
IMAGE_NUM_SAMPLES = 0x111A
|
265
|
+
ADDRESS_NONE = 0x1130
|
266
|
+
ADDRESS_CLAMP_TO_EDGE = 0x1131
|
267
|
+
ADDRESS_CLAMP = 0x1132
|
268
|
+
ADDRESS_REPEAT = 0x1133
|
269
|
+
ADDRESS_MIRRORED_REPEAT = 0x1134
|
270
|
+
FILTER_NEAREST = 0x1140
|
271
|
+
FILTER_LINEAR = 0x1141
|
272
|
+
SAMPLER_REFERENCE_COUNT = 0x1150
|
273
|
+
SAMPLER_CONTEXT = 0x1151
|
274
|
+
SAMPLER_NORMALIZED_COORDS = 0x1152
|
275
|
+
SAMPLER_ADDRESSING_MODE = 0x1153
|
276
|
+
SAMPLER_FILTER_MODE = 0x1154
|
277
|
+
MAP_READ = (1 << 0)
|
278
|
+
MAP_WRITE = (1 << 1)
|
279
|
+
MAP_WRITE_INVALIDATE_REGION = (1 << 2)
|
280
|
+
PROGRAM_REFERENCE_COUNT = 0x1160
|
281
|
+
PROGRAM_CONTEXT = 0x1161
|
282
|
+
PROGRAM_NUM_DEVICES = 0x1162
|
283
|
+
PROGRAM_DEVICES = 0x1163
|
284
|
+
PROGRAM_SOURCE = 0x1164
|
285
|
+
PROGRAM_BINARY_SIZES = 0x1165
|
286
|
+
PROGRAM_BINARIES = 0x1166
|
287
|
+
PROGRAM_NUM_KERNELS = 0x1167
|
288
|
+
PROGRAM_KERNEL_NAMES = 0x1168
|
289
|
+
PROGRAM_BUILD_STATUS = 0x1181
|
290
|
+
PROGRAM_BUILD_OPTIONS = 0x1182
|
291
|
+
PROGRAM_BUILD_LOG = 0x1183
|
292
|
+
PROGRAM_BINARY_TYPE = 0x1184
|
293
|
+
PROGRAM_BINARY_TYPE_NONE = 0x0
|
294
|
+
PROGRAM_BINARY_TYPE_COMPILED_OBJECT = 0x1
|
295
|
+
PROGRAM_BINARY_TYPE_LIBRARY = 0x2
|
296
|
+
PROGRAM_BINARY_TYPE_EXECUTABLE = 0x4
|
297
|
+
BUILD_SUCCESS = 0
|
298
|
+
BUILD_NONE = -1
|
299
|
+
BUILD_ERROR = -2
|
300
|
+
BUILD_IN_PROGRESS = -3
|
301
|
+
KERNEL_FUNCTION_NAME = 0x1190
|
302
|
+
KERNEL_NUM_ARGS = 0x1191
|
303
|
+
KERNEL_REFERENCE_COUNT = 0x1192
|
304
|
+
KERNEL_CONTEXT = 0x1193
|
305
|
+
KERNEL_PROGRAM = 0x1194
|
306
|
+
KERNEL_ATTRIBUTES = 0x1195
|
307
|
+
KERNEL_ARG_ADDRESS_QUALIFIER = 0x1196
|
308
|
+
KERNEL_ARG_ACCESS_QUALIFIER = 0x1197
|
309
|
+
KERNEL_ARG_TYPE_NAME = 0x1198
|
310
|
+
KERNEL_ARG_TYPE_QUALIFIER = 0x1199
|
311
|
+
KERNEL_ARG_NAME = 0x119A
|
312
|
+
KERNEL_ARG_ADDRESS_GLOBAL = 0x119B
|
313
|
+
KERNEL_ARG_ADDRESS_LOCAL = 0x119C
|
314
|
+
KERNEL_ARG_ADDRESS_CONSTANT = 0x119D
|
315
|
+
KERNEL_ARG_ADDRESS_PRIVATE = 0x119E
|
316
|
+
KERNEL_ARG_ACCESS_READ_ONLY = 0x11A0
|
317
|
+
KERNEL_ARG_ACCESS_WRITE_ONLY = 0x11A1
|
318
|
+
KERNEL_ARG_ACCESS_READ_WRITE = 0x11A2
|
319
|
+
KERNEL_ARG_ACCESS_NONE = 0x11A3
|
320
|
+
KERNEL_ARG_TYPE_NONE = 0
|
321
|
+
KERNEL_ARG_TYPE_CONST = (1 << 0)
|
322
|
+
KERNEL_ARG_TYPE_RESTRICT = (1 << 1)
|
323
|
+
KERNEL_ARG_TYPE_VOLATILE = (1 << 2)
|
324
|
+
KERNEL_WORK_GROUP_SIZE = 0x11B0
|
325
|
+
KERNEL_COMPILE_WORK_GROUP_SIZE = 0x11B1
|
326
|
+
KERNEL_LOCAL_MEM_SIZE = 0x11B2
|
327
|
+
KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 0x11B3
|
328
|
+
KERNEL_PRIVATE_MEM_SIZE = 0x11B4
|
329
|
+
KERNEL_GLOBAL_WORK_SIZE = 0x11B5
|
330
|
+
EVENT_COMMAND_QUEUE = 0x11D0
|
331
|
+
EVENT_COMMAND_TYPE = 0x11D1
|
332
|
+
EVENT_REFERENCE_COUNT = 0x11D2
|
333
|
+
EVENT_COMMAND_EXECUTION_STATUS = 0x11D3
|
334
|
+
EVENT_CONTEXT = 0x11D4
|
335
|
+
COMMAND_NDRANGE_KERNEL = 0x11F0
|
336
|
+
COMMAND_TASK = 0x11F1
|
337
|
+
COMMAND_NATIVE_KERNEL = 0x11F2
|
338
|
+
COMMAND_READ_BUFFER = 0x11F3
|
339
|
+
COMMAND_WRITE_BUFFER = 0x11F4
|
340
|
+
COMMAND_COPY_BUFFER = 0x11F5
|
341
|
+
COMMAND_READ_IMAGE = 0x11F6
|
342
|
+
COMMAND_WRITE_IMAGE = 0x11F7
|
343
|
+
COMMAND_COPY_IMAGE = 0x11F8
|
344
|
+
COMMAND_COPY_IMAGE_TO_BUFFER = 0x11F9
|
345
|
+
COMMAND_COPY_BUFFER_TO_IMAGE = 0x11FA
|
346
|
+
COMMAND_MAP_BUFFER = 0x11FB
|
347
|
+
COMMAND_MAP_IMAGE = 0x11FC
|
348
|
+
COMMAND_UNMAP_MEM_OBJECT = 0x11FD
|
349
|
+
COMMAND_MARKER = 0x11FE
|
350
|
+
COMMAND_ACQUIRE_GL_OBJECTS = 0x11FF
|
351
|
+
COMMAND_RELEASE_GL_OBJECTS = 0x1200
|
352
|
+
COMMAND_READ_BUFFER_RECT = 0x1201
|
353
|
+
COMMAND_WRITE_BUFFER_RECT = 0x1202
|
354
|
+
COMMAND_COPY_BUFFER_RECT = 0x1203
|
355
|
+
COMMAND_USER = 0x1204
|
356
|
+
COMMAND_BARRIER = 0x1205
|
357
|
+
COMMAND_MIGRATE_MEM_OBJECTS = 0x1206
|
358
|
+
COMMAND_FILL_BUFFER = 0x1207
|
359
|
+
COMMAND_FILL_IMAGE = 0x1208
|
360
|
+
COMPLETE = 0x0
|
361
|
+
RUNNING = 0x1
|
362
|
+
SUBMITTED = 0x2
|
363
|
+
QUEUED = 0x3
|
364
|
+
BUFFER_CREATE_TYPE_REGION = 0x1220
|
365
|
+
PROFILING_COMMAND_QUEUED = 0x1280
|
366
|
+
PROFILING_COMMAND_SUBMIT = 0x1281
|
367
|
+
PROFILING_COMMAND_START = 0x1282
|
368
|
+
PROFILING_COMMAND_END = 0x1283
|
369
|
+
GL_OBJECT_BUFFER = 0x2000
|
370
|
+
GL_OBJECT_TEXTURE2D = 0x2001
|
371
|
+
GL_OBJECT_TEXTURE3D = 0x2002
|
372
|
+
GL_OBJECT_RENDERBUFFER = 0x2003
|
373
|
+
GL_OBJECT_TEXTURE2D_ARRAY = 0x200E
|
374
|
+
GL_OBJECT_TEXTURE1D = 0x200F
|
375
|
+
GL_OBJECT_TEXTURE1D_ARRAY = 0x2010
|
376
|
+
GL_OBJECT_TEXTURE_BUFFER = 0x2011
|
377
|
+
GL_TEXTURE_TARGET = 0x2004
|
378
|
+
GL_MIPMAP_LEVEL = 0x2005
|
379
|
+
GL_NUM_SAMPLES = 0x2012
|
380
|
+
cl_khr_gl_sharing = 1
|
381
|
+
INVALID_GL_SHAREGROUP_REFERENCE_KHR = -1000
|
382
|
+
CURRENT_DEVICE_FOR_GL_CONTEXT_KHR = 0x2006
|
383
|
+
DEVICES_FOR_GL_CONTEXT_KHR = 0x2007
|
384
|
+
GL_CONTEXT_KHR = 0x2008
|
385
|
+
EGL_DISPLAY_KHR = 0x2009
|
386
|
+
GLX_DISPLAY_KHR = 0x200A
|
387
|
+
WGL_HDC_KHR = 0x200B
|
388
|
+
CGL_SHAREGROUP_KHR = 0x200C
|
389
|
+
DEVICE_HALF_FP_CONFIG = 0x1033
|
390
|
+
cl_APPLE_SetMemObjectDestructor = 1
|
391
|
+
cl_APPLE_ContextLoggingFunctions = 1
|
392
|
+
cl_khr_icd = 1
|
393
|
+
PLATFORM_ICD_SUFFIX_KHR = 0x0920
|
394
|
+
PLATFORM_NOT_FOUND_KHR = -1001
|
395
|
+
CONTEXT_MEMORY_INITIALIZE_KHR = 0x200E
|
396
|
+
DEVICE_TERMINATE_CAPABILITY_KHR = 0x200F
|
397
|
+
CONTEXT_TERMINATE_KHR = 0x2010
|
398
|
+
cl_khr_terminate_context = 1
|
399
|
+
DEVICE_COMPUTE_CAPABILITY_MAJOR_NV = 0x4000
|
400
|
+
DEVICE_COMPUTE_CAPABILITY_MINOR_NV = 0x4001
|
401
|
+
DEVICE_REGISTERS_PER_BLOCK_NV = 0x4002
|
402
|
+
DEVICE_WARP_SIZE_NV = 0x4003
|
403
|
+
DEVICE_GPU_OVERLAP_NV = 0x4004
|
404
|
+
DEVICE_KERNEL_EXEC_TIMEOUT_NV = 0x4005
|
405
|
+
DEVICE_INTEGRATED_MEMORY_NV = 0x4006
|
406
|
+
cl_amd_device_memory_flags = 1
|
407
|
+
MEM_USE_PERSISTENT_MEM_AMD = (1 << 6)
|
408
|
+
DEVICE_MAX_ATOMIC_COUNTERS_EXT = 0x4032
|
409
|
+
DEVICE_PROFILING_TIMER_OFFSET_AMD = 0x4036
|
410
|
+
DEVICE_TOPOLOGY_AMD = 0x4037
|
411
|
+
DEVICE_BOARD_NAME_AMD = 0x4038
|
412
|
+
DEVICE_GLOBAL_FREE_MEMORY_AMD = 0x4039
|
413
|
+
DEVICE_SIMD_PER_COMPUTE_UNIT_AMD = 0x4040
|
414
|
+
DEVICE_SIMD_WIDTH_AMD = 0x4041
|
415
|
+
DEVICE_SIMD_INSTRUCTION_WIDTH_AMD = 0x4042
|
416
|
+
DEVICE_WAVEFRONT_WIDTH_AMD = 0x4043
|
417
|
+
DEVICE_GLOBAL_MEM_CHANNELS_AMD = 0x4044
|
418
|
+
DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD = 0x4045
|
419
|
+
DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD = 0x4046
|
420
|
+
DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD = 0x4047
|
421
|
+
DEVICE_LOCAL_MEM_BANKS_AMD = 0x4048
|
422
|
+
DEVICE_TOPOLOGY_TYPE_PCIE_AMD = 1
|
423
|
+
CONTEXT_OFFLINE_DEVICES_AMD = 0x403F
|
424
|
+
MEM_EXT_HOST_PTR_QCOM = (1 << 29)
|
425
|
+
DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM = 0x40A0
|
426
|
+
DEVICE_PAGE_SIZE_QCOM = 0x40A1
|
427
|
+
IMAGE_ROW_ALIGNMENT_QCOM = 0x40A2
|
428
|
+
IMAGE_SLICE_ALIGNMENT_QCOM = 0x40A3
|
429
|
+
MEM_HOST_UNCACHED_QCOM = 0x40A4
|
430
|
+
MEM_HOST_WRITEBACK_QCOM = 0x40A5
|
431
|
+
MEM_HOST_WRITETHROUGH_QCOM = 0x40A6
|
432
|
+
MEM_HOST_WRITE_COMBINING_QCOM = 0x40A7
|
433
|
+
MEM_ION_HOST_PTR_QCOM = 0x40A8
|
434
|
+
#:startdoc:
|
435
|
+
# Maps OpenCL logiczal Error Type, and is used to raise Errors
|
436
|
+
class Error < StandardError
|
437
|
+
@@codes = {}
|
438
|
+
@@codes[-1001] = 'PLATFORM_NOT_FOUND_KHR'
|
439
|
+
@@codes[-1000] = 'INVALID_GL_SHAREGROUP_REFERENCE_KHR'
|
440
|
+
@@codes[-3] = 'COMPILER_NOT_AVAILABLE'
|
441
|
+
@@codes[-2] = 'DEVICE_NOT_AVAILABLE'
|
442
|
+
@@codes[-1] = 'DEVICE_NOT_FOUND'
|
443
|
+
@@codes[-68] = 'INVALID_DEVICE_PARTITION_COUNT'
|
444
|
+
@@codes[-67] = 'INVALID_LINKER_OPTIONS'
|
445
|
+
@@codes[-66] = 'INVALID_COMPILER_OPTIONS'
|
446
|
+
@@codes[-65] = 'INVALID_IMAGE_DESCRIPTOR'
|
447
|
+
@@codes[-64] = 'INVALID_PROPERTY'
|
448
|
+
@@codes[-63] = 'INVALID_GLOBAL_WORK_SIZE'
|
449
|
+
@@codes[-62] = 'INVALID_MIP_LEVEL'
|
450
|
+
@@codes[-61] = 'INVALID_BUFFER_SIZE'
|
451
|
+
@@codes[-60] = 'INVALID_GL_OBJECT'
|
452
|
+
@@codes[-59] = 'INVALID_OPERATION'
|
453
|
+
@@codes[-58] = 'INVALID_EVENT'
|
454
|
+
@@codes[-57] = 'INVALID_EVENT_WAIT_LIST'
|
455
|
+
@@codes[-56] = 'INVALID_GLOBAL_OFFSET'
|
456
|
+
@@codes[-55] = 'INVALID_WORK_ITEM_SIZE'
|
457
|
+
@@codes[-54] = 'INVALID_WORK_GROUP_SIZE'
|
458
|
+
@@codes[-53] = 'INVALID_WORK_DIMENSION'
|
459
|
+
@@codes[-52] = 'INVALID_KERNEL_ARGS'
|
460
|
+
@@codes[-51] = 'INVALID_ARG_SIZE'
|
461
|
+
@@codes[-50] = 'INVALID_ARG_VALUE'
|
462
|
+
@@codes[-49] = 'INVALID_ARG_INDEX'
|
463
|
+
@@codes[-48] = 'INVALID_KERNEL'
|
464
|
+
@@codes[-47] = 'INVALID_KERNEL_DEFINITION'
|
465
|
+
@@codes[-46] = 'INVALID_KERNEL_NAME'
|
466
|
+
@@codes[-45] = 'INVALID_PROGRAM_EXECUTABLE'
|
467
|
+
@@codes[-44] = 'INVALID_PROGRAM'
|
468
|
+
@@codes[-43] = 'INVALID_BUILD_OPTIONS'
|
469
|
+
@@codes[-42] = 'INVALID_BINARY'
|
470
|
+
@@codes[-41] = 'INVALID_SAMPLER'
|
471
|
+
@@codes[-40] = 'INVALID_IMAGE_SIZE'
|
472
|
+
@@codes[-39] = 'INVALID_IMAGE_FORMAT_DESCRIPTOR'
|
473
|
+
@@codes[-38] = 'INVALID_MEM_OBJECT'
|
474
|
+
@@codes[-37] = 'INVALID_HOST_PTR'
|
475
|
+
@@codes[-36] = 'INVALID_COMMAND_QUEUE'
|
476
|
+
@@codes[-35] = 'INVALID_QUEUE_PROPERTIES'
|
477
|
+
@@codes[-34] = 'INVALID_CONTEXT'
|
478
|
+
@@codes[-33] = 'INVALID_DEVICE'
|
479
|
+
@@codes[-32] = 'INVALID_PLATFORM'
|
480
|
+
@@codes[-31] = 'INVALID_DEVICE_TYPE'
|
481
|
+
@@codes[-30] = 'INVALID_VALUE'
|
482
|
+
@@codes[-19] = 'KERNEL_ARG_INFO_NOT_AVAILABLE'
|
483
|
+
@@codes[-18] = 'DEVICE_PARTITION_FAILED'
|
484
|
+
@@codes[-17] = 'LINK_PROGRAM_FAILURE'
|
485
|
+
@@codes[-16] = 'LINKER_NOT_AVAILABLE'
|
486
|
+
@@codes[-15] = 'COMPILE_PROGRAM_FAILURE'
|
487
|
+
@@codes[-14] = 'EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST'
|
488
|
+
@@codes[-13] = 'MISALIGNED_SUB_BUFFER_OFFSET'
|
489
|
+
@@codes[-12] = 'MAP_FAILURE'
|
490
|
+
@@codes[-11] = 'BUILD_PROGRAM_FAILURE'
|
491
|
+
@@codes[-10] = 'IMAGE_FORMAT_NOT_SUPPORTED'
|
492
|
+
@@codes[-9] = 'IMAGE_FORMAT_MISMATCH'
|
493
|
+
@@codes[-8] = 'MEM_COPY_OVERLAP'
|
494
|
+
@@codes[-7] = 'PROFILING_INFO_NOT_AVAILABLE'
|
495
|
+
@@codes[-6] = 'OUT_OF_HOST_MEMORY'
|
496
|
+
@@codes[-5] = 'OUT_OF_RESOURCES'
|
497
|
+
@@codes[-4] = 'MEM_OBJECT_ALLOCATION_FAILURE'
|
498
|
+
# Returns a more descriptive String for the provided error code
|
499
|
+
def self.get_error_string(errcode)
|
500
|
+
return "OpenCL Error: #{@@codes[errcode]} (#{errcode})"
|
501
|
+
end
|
502
|
+
|
503
|
+
# Returns a string representing the name corresponding to the error code given
|
504
|
+
def self.get_name(errcode)
|
505
|
+
return @@codes[errcode]
|
506
|
+
end
|
507
|
+
end
|
508
|
+
FFI.typedef :int8, :cl_char
|
509
|
+
FFI.typedef :uint8, :cl_uchar
|
510
|
+
FFI.typedef :int16, :cl_short
|
511
|
+
FFI.typedef :uint16, :cl_ushort
|
512
|
+
FFI.typedef :int32, :cl_int
|
513
|
+
FFI.typedef :uint32, :cl_uint
|
514
|
+
FFI.typedef :int64, :cl_long
|
515
|
+
FFI.typedef :uint64, :cl_ulong
|
516
|
+
FFI.typedef :uint16, :cl_half
|
517
|
+
FFI.typedef :float, :cl_float
|
518
|
+
FFI.typedef :double, :cl_double
|
519
|
+
FFI.typedef :uint32, :cl_GLuint
|
520
|
+
FFI.typedef :int32, :cl_GLint
|
521
|
+
FFI.typedef :uint32, :cl_GLenum
|
522
|
+
FFI.typedef :cl_uint, :cl_bool
|
523
|
+
FFI.typedef :cl_ulong, :cl_bitfield
|
524
|
+
FFI.typedef :cl_bitfield, :cl_device_type
|
525
|
+
FFI.typedef :cl_uint, :cl_platform_info
|
526
|
+
FFI.typedef :cl_uint, :cl_device_info
|
527
|
+
FFI.typedef :cl_bitfield, :cl_device_fp_config
|
528
|
+
FFI.typedef :cl_uint, :cl_device_mem_cache_type
|
529
|
+
FFI.typedef :cl_uint, :cl_device_local_mem_type
|
530
|
+
FFI.typedef :cl_bitfield, :cl_device_exec_capabilities
|
531
|
+
FFI.typedef :cl_bitfield, :cl_command_queue_properties
|
532
|
+
FFI.typedef :pointer, :cl_device_partition_property
|
533
|
+
FFI.typedef :cl_bitfield, :cl_device_affinity_domain
|
534
|
+
FFI.typedef :pointer, :cl_context_properties
|
535
|
+
FFI.typedef :cl_uint, :cl_context_info
|
536
|
+
FFI.typedef :cl_uint, :cl_command_queue_info
|
537
|
+
FFI.typedef :cl_uint, :cl_channel_order
|
538
|
+
FFI.typedef :cl_uint, :cl_channel_type
|
539
|
+
FFI.typedef :cl_bitfield, :cl_mem_flags
|
540
|
+
FFI.typedef :cl_uint, :cl_mem_object_type
|
541
|
+
FFI.typedef :cl_uint, :cl_mem_info
|
542
|
+
FFI.typedef :cl_bitfield, :cl_mem_migration_flags
|
543
|
+
FFI.typedef :cl_uint, :cl_image_info
|
544
|
+
FFI.typedef :cl_uint, :cl_buffer_create_type
|
545
|
+
FFI.typedef :cl_uint, :cl_addressing_mode
|
546
|
+
FFI.typedef :cl_uint, :cl_filter_mode
|
547
|
+
FFI.typedef :cl_uint, :cl_sampler_info
|
548
|
+
FFI.typedef :cl_bitfield, :cl_map_flags
|
549
|
+
FFI.typedef :cl_uint, :cl_program_info
|
550
|
+
FFI.typedef :cl_uint, :cl_program_build_info
|
551
|
+
FFI.typedef :cl_uint, :cl_program_binary_type
|
552
|
+
FFI.typedef :cl_int, :cl_build_status
|
553
|
+
FFI.typedef :cl_uint, :cl_kernel_info
|
554
|
+
FFI.typedef :cl_uint, :cl_kernel_arg_info
|
555
|
+
FFI.typedef :cl_uint, :cl_kernel_arg_address_qualifier
|
556
|
+
FFI.typedef :cl_uint, :cl_kernel_arg_access_qualifier
|
557
|
+
FFI.typedef :cl_bitfield, :cl_kernel_arg_type_qualifier
|
558
|
+
FFI.typedef :cl_uint, :cl_kernel_work_group_info
|
559
|
+
FFI.typedef :cl_uint, :cl_event_info
|
560
|
+
FFI.typedef :cl_uint, :cl_command_type
|
561
|
+
FFI.typedef :cl_uint, :cl_profiling_info
|
562
|
+
FFI.typedef :cl_uint, :cl_gl_object_type
|
563
|
+
FFI.typedef :cl_uint, :cl_gl_texture_info
|
564
|
+
FFI.typedef :cl_uint, :cl_gl_platform_info
|
565
|
+
FFI.typedef :cl_uint, :cl_gl_context_info
|
566
|
+
# A parent class to represent OpenCL enums that use :cl_uint
|
567
|
+
class Enum
|
568
|
+
# extend FFI::DataConverter
|
569
|
+
# native_type :cl_uint
|
570
|
+
@@codes = {}
|
571
|
+
|
572
|
+
# Initializes an enum with the given val
|
573
|
+
def initialize( val )
|
574
|
+
OpenCL::check_error( OpenCL::INVALID_VALUE ) if not @@codes[val]
|
575
|
+
super()
|
576
|
+
@val = val
|
577
|
+
end
|
578
|
+
|
579
|
+
# Sets the internal value of the enum
|
580
|
+
def val=(v)
|
581
|
+
OpenCL::check_error( OpenCL::INVALID_VALUE ) if not @@codes[val]
|
582
|
+
@val = v
|
583
|
+
end
|
584
|
+
|
585
|
+
# Returns true if val corresponds to the enum value
|
586
|
+
def is?(val)
|
587
|
+
return true if @val == val
|
588
|
+
end
|
589
|
+
|
590
|
+
# Return true if val corresponds to the enum value
|
591
|
+
def ==(val)
|
592
|
+
return true if @val == val
|
593
|
+
end
|
594
|
+
|
595
|
+
# Returns a String corresponfing to the Enum value
|
596
|
+
def to_s
|
597
|
+
return "#{self.name}"
|
598
|
+
end
|
599
|
+
|
600
|
+
# Returns the integer representing the Enum value
|
601
|
+
def to_i
|
602
|
+
return @val
|
603
|
+
end
|
604
|
+
|
605
|
+
# #:stopdoc:
|
606
|
+
# def self.to_native(value, context)
|
607
|
+
# if value then
|
608
|
+
# return value.flags
|
609
|
+
# else
|
610
|
+
# return 0
|
611
|
+
# end
|
612
|
+
# end
|
613
|
+
#
|
614
|
+
# def self.from_native(value, context)
|
615
|
+
# new(value)
|
616
|
+
# end
|
617
|
+
#
|
618
|
+
# def self.size
|
619
|
+
# FFI::find_type(:cl_uint).size
|
620
|
+
# end
|
621
|
+
#
|
622
|
+
# def self.reference_required?
|
623
|
+
# return false
|
624
|
+
# end
|
625
|
+
# #:startdoc:
|
626
|
+
|
627
|
+
end
|
628
|
+
|
629
|
+
# A parent class to represent enums that use cl_int
|
630
|
+
class EnumInt < OpenCL::Enum
|
631
|
+
# extend FFI::DataConverter
|
632
|
+
# native_type :cl_int
|
633
|
+
end
|
634
|
+
|
635
|
+
# A parent class to represent OpenCL bitfields that use :cl_bitfield
|
636
|
+
class Bitfield
|
637
|
+
# extend FFI::DataConverter
|
638
|
+
# native_type :cl_bitfield
|
639
|
+
|
640
|
+
# Initializes a new Bitfield to val
|
641
|
+
def initialize( val = 0 )
|
642
|
+
super()
|
643
|
+
@val = val
|
644
|
+
end
|
645
|
+
|
646
|
+
# Returns true if flag is bitwise included in the Bitfield
|
647
|
+
def include?(flag)
|
648
|
+
return true if ( @val & flag ) == flag
|
649
|
+
return false
|
650
|
+
end
|
651
|
+
|
652
|
+
# Returns a String corresponfing to the Bitfield value
|
653
|
+
def to_s
|
654
|
+
return "#{self.names}"
|
655
|
+
end
|
656
|
+
|
657
|
+
# Returns the integer representing the Bitfield value
|
658
|
+
def to_i
|
659
|
+
return @val
|
660
|
+
end
|
661
|
+
|
662
|
+
# Returns the bitwise & operation between f and the internal Bitfield representation
|
663
|
+
def &(f)
|
664
|
+
return @val & f
|
665
|
+
end
|
666
|
+
|
667
|
+
# Returns the bitwise ^ operation between f and the internal Bitfield representation
|
668
|
+
def ^(f)
|
669
|
+
return @val ^ f
|
670
|
+
end
|
671
|
+
|
672
|
+
# Returns the bitwise | operation between f and the internal Bitfield representation
|
673
|
+
def |(f)
|
674
|
+
return @val | f
|
675
|
+
end
|
676
|
+
|
677
|
+
# Returns the internal representation of the Bitfield
|
678
|
+
def flags
|
679
|
+
return @val
|
680
|
+
end
|
681
|
+
|
682
|
+
# Setss the internal representation of the Bitfield to val
|
683
|
+
def flags=(val)
|
684
|
+
@val = val
|
685
|
+
end
|
686
|
+
|
687
|
+
# #:stopdoc:
|
688
|
+
# def self.to_native(value, context)
|
689
|
+
# if value then
|
690
|
+
# return value.flags
|
691
|
+
# else
|
692
|
+
# return 0
|
693
|
+
# end
|
694
|
+
# end
|
695
|
+
#
|
696
|
+
# def self.from_native(value, context)
|
697
|
+
# new(value)
|
698
|
+
# end
|
699
|
+
#
|
700
|
+
# def self.size
|
701
|
+
# FFI::find_type(:cl_bitfield).size
|
702
|
+
# end
|
703
|
+
#
|
704
|
+
# def self.reference_required?
|
705
|
+
# return false
|
706
|
+
# end
|
707
|
+
# #:startdoc:
|
708
|
+
|
709
|
+
end
|
710
|
+
class Platform < FFI::ManagedStruct
|
711
|
+
layout :dummy, :pointer
|
712
|
+
#:stopdoc:
|
713
|
+
PROFILE = 0x0900
|
714
|
+
VERSION = 0x0901
|
715
|
+
NAME = 0x0902
|
716
|
+
VENDOR = 0x0903
|
717
|
+
EXTENSIONS = 0x0904
|
718
|
+
ICD_SUFFIX_KHR = 0x0920
|
719
|
+
#:startdoc:
|
720
|
+
|
721
|
+
# Creates a new Platform and retains it if specified and aplicable
|
722
|
+
def initialize(ptr, retain = true)
|
723
|
+
super(ptr)
|
724
|
+
#STDERR.puts "Allocating Platform: #{ptr}"
|
725
|
+
end
|
726
|
+
|
727
|
+
# method called at Platform deletion, releases the object if aplicable
|
728
|
+
def self.release(ptr)
|
729
|
+
#STDERR.puts "Releasing Platform: #{ptr}"
|
730
|
+
end
|
731
|
+
end
|
732
|
+
|
733
|
+
class Device < FFI::ManagedStruct
|
734
|
+
layout :dummy, :pointer
|
735
|
+
#:stopdoc:
|
736
|
+
TYPE_DEFAULT = (1 << 0)
|
737
|
+
TYPE_CPU = (1 << 1)
|
738
|
+
TYPE_GPU = (1 << 2)
|
739
|
+
TYPE_ACCELERATOR = (1 << 3)
|
740
|
+
TYPE_CUSTOM = (1 << 4)
|
741
|
+
TYPE_ALL = 0xFFFFFFFF
|
742
|
+
TYPE = 0x1000
|
743
|
+
VENDOR_ID = 0x1001
|
744
|
+
MAX_COMPUTE_UNITS = 0x1002
|
745
|
+
MAX_WORK_ITEM_DIMENSIONS = 0x1003
|
746
|
+
MAX_WORK_GROUP_SIZE = 0x1004
|
747
|
+
MAX_WORK_ITEM_SIZES = 0x1005
|
748
|
+
PREFERRED_VECTOR_WIDTH_CHAR = 0x1006
|
749
|
+
PREFERRED_VECTOR_WIDTH_SHORT = 0x1007
|
750
|
+
PREFERRED_VECTOR_WIDTH_INT = 0x1008
|
751
|
+
PREFERRED_VECTOR_WIDTH_LONG = 0x1009
|
752
|
+
PREFERRED_VECTOR_WIDTH_FLOAT = 0x100A
|
753
|
+
PREFERRED_VECTOR_WIDTH_DOUBLE = 0x100B
|
754
|
+
MAX_CLOCK_FREQUENCY = 0x100C
|
755
|
+
ADDRESS_BITS = 0x100D
|
756
|
+
MAX_READ_IMAGE_ARGS = 0x100E
|
757
|
+
MAX_WRITE_IMAGE_ARGS = 0x100F
|
758
|
+
MAX_MEM_ALLOC_SIZE = 0x1010
|
759
|
+
IMAGE2D_MAX_WIDTH = 0x1011
|
760
|
+
IMAGE2D_MAX_HEIGHT = 0x1012
|
761
|
+
IMAGE3D_MAX_WIDTH = 0x1013
|
762
|
+
IMAGE3D_MAX_HEIGHT = 0x1014
|
763
|
+
IMAGE3D_MAX_DEPTH = 0x1015
|
764
|
+
IMAGE_SUPPORT = 0x1016
|
765
|
+
MAX_PARAMETER_SIZE = 0x1017
|
766
|
+
MAX_SAMPLERS = 0x1018
|
767
|
+
MEM_BASE_ADDR_ALIGN = 0x1019
|
768
|
+
MIN_DATA_TYPE_ALIGN_SIZE = 0x101A
|
769
|
+
SINGLE_FP_CONFIG = 0x101B
|
770
|
+
GLOBAL_MEM_CACHE_TYPE = 0x101C
|
771
|
+
GLOBAL_MEM_CACHELINE_SIZE = 0x101D
|
772
|
+
GLOBAL_MEM_CACHE_SIZE = 0x101E
|
773
|
+
GLOBAL_MEM_SIZE = 0x101F
|
774
|
+
MAX_CONSTANT_BUFFER_SIZE = 0x1020
|
775
|
+
MAX_CONSTANT_ARGS = 0x1021
|
776
|
+
LOCAL_MEM_TYPE = 0x1022
|
777
|
+
LOCAL_MEM_SIZE = 0x1023
|
778
|
+
ERROR_CORRECTION_SUPPORT = 0x1024
|
779
|
+
PROFILING_TIMER_RESOLUTION = 0x1025
|
780
|
+
ENDIAN_LITTLE = 0x1026
|
781
|
+
AVAILABLE = 0x1027
|
782
|
+
COMPILER_AVAILABLE = 0x1028
|
783
|
+
EXECUTION_CAPABILITIES = 0x1029
|
784
|
+
QUEUE_PROPERTIES = 0x102A
|
785
|
+
NAME = 0x102B
|
786
|
+
VENDOR = 0x102C
|
787
|
+
PROFILE = 0x102E
|
788
|
+
VERSION = 0x102F
|
789
|
+
EXTENSIONS = 0x1030
|
790
|
+
PLATFORM = 0x1031
|
791
|
+
DOUBLE_FP_CONFIG = 0x1032
|
792
|
+
PREFERRED_VECTOR_WIDTH_HALF = 0x1034
|
793
|
+
HOST_UNIFIED_MEMORY = 0x1035
|
794
|
+
NATIVE_VECTOR_WIDTH_CHAR = 0x1036
|
795
|
+
NATIVE_VECTOR_WIDTH_SHORT = 0x1037
|
796
|
+
NATIVE_VECTOR_WIDTH_INT = 0x1038
|
797
|
+
NATIVE_VECTOR_WIDTH_LONG = 0x1039
|
798
|
+
NATIVE_VECTOR_WIDTH_FLOAT = 0x103A
|
799
|
+
NATIVE_VECTOR_WIDTH_DOUBLE = 0x103B
|
800
|
+
NATIVE_VECTOR_WIDTH_HALF = 0x103C
|
801
|
+
OPENCL_C_VERSION = 0x103D
|
802
|
+
LINKER_AVAILABLE = 0x103E
|
803
|
+
BUILT_IN_KERNELS = 0x103F
|
804
|
+
IMAGE_MAX_BUFFER_SIZE = 0x1040
|
805
|
+
IMAGE_MAX_ARRAY_SIZE = 0x1041
|
806
|
+
PARENT_DEVICE = 0x1042
|
807
|
+
PARTITION_MAX_SUB_DEVICES = 0x1043
|
808
|
+
PARTITION_PROPERTIES = 0x1044
|
809
|
+
PARTITION_AFFINITY_DOMAIN = 0x1045
|
810
|
+
PARTITION_TYPE = 0x1046
|
811
|
+
REFERENCE_COUNT = 0x1047
|
812
|
+
PREFERRED_INTEROP_USER_SYNC = 0x1048
|
813
|
+
PRINTF_BUFFER_SIZE = 0x1049
|
814
|
+
IMAGE_PITCH_ALIGNMENT = 0x104A
|
815
|
+
IMAGE_BASE_ADDRESS_ALIGNMENT = 0x104B
|
816
|
+
PARTITION_EQUALLY = 0x1086
|
817
|
+
PARTITION_BY_COUNTS = 0x1087
|
818
|
+
PARTITION_BY_COUNTS_LIST_END = 0x0
|
819
|
+
PARTITION_BY_AFFINITY_DOMAIN = 0x1088
|
820
|
+
AFFINITY_DOMAIN_NUMA = (1 << 0)
|
821
|
+
AFFINITY_DOMAIN_L4_CACHE = (1 << 1)
|
822
|
+
AFFINITY_DOMAIN_L3_CACHE = (1 << 2)
|
823
|
+
AFFINITY_DOMAIN_L2_CACHE = (1 << 3)
|
824
|
+
AFFINITY_DOMAIN_L1_CACHE = (1 << 4)
|
825
|
+
AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 << 5)
|
826
|
+
HALF_FP_CONFIG = 0x1033
|
827
|
+
TERMINATE_CAPABILITY_KHR = 0x200F
|
828
|
+
COMPUTE_CAPABILITY_MAJOR_NV = 0x4000
|
829
|
+
COMPUTE_CAPABILITY_MINOR_NV = 0x4001
|
830
|
+
REGISTERS_PER_BLOCK_NV = 0x4002
|
831
|
+
WARP_SIZE_NV = 0x4003
|
832
|
+
GPU_OVERLAP_NV = 0x4004
|
833
|
+
KERNEL_EXEC_TIMEOUT_NV = 0x4005
|
834
|
+
INTEGRATED_MEMORY_NV = 0x4006
|
835
|
+
MAX_ATOMIC_COUNTERS_EXT = 0x4032
|
836
|
+
PROFILING_TIMER_OFFSET_AMD = 0x4036
|
837
|
+
TOPOLOGY_AMD = 0x4037
|
838
|
+
BOARD_NAME_AMD = 0x4038
|
839
|
+
GLOBAL_FREE_MEMORY_AMD = 0x4039
|
840
|
+
SIMD_PER_COMPUTE_UNIT_AMD = 0x4040
|
841
|
+
SIMD_WIDTH_AMD = 0x4041
|
842
|
+
SIMD_INSTRUCTION_WIDTH_AMD = 0x4042
|
843
|
+
WAVEFRONT_WIDTH_AMD = 0x4043
|
844
|
+
GLOBAL_MEM_CHANNELS_AMD = 0x4044
|
845
|
+
GLOBAL_MEM_CHANNEL_BANKS_AMD = 0x4045
|
846
|
+
GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD = 0x4046
|
847
|
+
LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD = 0x4047
|
848
|
+
LOCAL_MEM_BANKS_AMD = 0x4048
|
849
|
+
TOPOLOGY_TYPE_PCIE_AMD = 1
|
850
|
+
EXT_MEM_PADDING_IN_BYTES_QCOM = 0x40A0
|
851
|
+
PAGE_SIZE_QCOM = 0x40A1
|
852
|
+
#:startdoc:
|
853
|
+
|
854
|
+
# Creates a new Device and retains it if specified and aplicable
|
855
|
+
def initialize(ptr, retain = true)
|
856
|
+
super(ptr)
|
857
|
+
#STDERR.puts "Allocating Device: #{ptr}"
|
858
|
+
end
|
859
|
+
|
860
|
+
# method called at Device deletion, releases the object if aplicable
|
861
|
+
def self.release(ptr)
|
862
|
+
#STDERR.puts "Releasing Device: #{ptr}"
|
863
|
+
end
|
864
|
+
end
|
865
|
+
|
866
|
+
class Device
|
867
|
+
# Bitfield that maps the :cl_device_type type
|
868
|
+
class Type < OpenCL::Bitfield
|
869
|
+
#:stopdoc:
|
870
|
+
DEFAULT = (1 << 0)
|
871
|
+
CPU = (1 << 1)
|
872
|
+
GPU = (1 << 2)
|
873
|
+
ACCELERATOR = (1 << 3)
|
874
|
+
CUSTOM = (1 << 4)
|
875
|
+
ALL = 0xFFFFFFFF
|
876
|
+
#:startdoc:
|
877
|
+
# Returns an Array of String representing the different flags set
|
878
|
+
def names
|
879
|
+
fs = []
|
880
|
+
%w( DEFAULT CPU GPU ACCELERATOR CUSTOM ALL ).each { |f|
|
881
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
882
|
+
}
|
883
|
+
return fs
|
884
|
+
end
|
885
|
+
end
|
886
|
+
|
887
|
+
# Bitfield that maps the :cl_device_fp_config type
|
888
|
+
class FPConfig < OpenCL::Bitfield
|
889
|
+
#:stopdoc:
|
890
|
+
DENORM = (1 << 0)
|
891
|
+
INF_NAN = (1 << 1)
|
892
|
+
ROUND_TO_NEAREST = (1 << 2)
|
893
|
+
ROUND_TO_ZERO = (1 << 3)
|
894
|
+
ROUND_TO_INF = (1 << 4)
|
895
|
+
FMA = (1 << 5)
|
896
|
+
SOFT_FLOAT = (1 << 6)
|
897
|
+
CORRECTLY_ROUNDED_DIVIDE_SQRT = (1 << 7)
|
898
|
+
#:startdoc:
|
899
|
+
# Returns an Array of String representing the different flags set
|
900
|
+
def names
|
901
|
+
fs = []
|
902
|
+
%w( DENORM INF_NAN ROUND_TO_NEAREST ROUND_TO_ZERO ROUND_TO_INF FMA SOFT_FLOAT CORRECTLY_ROUNDED_DIVIDE_SQRT ).each { |f|
|
903
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
904
|
+
}
|
905
|
+
return fs
|
906
|
+
end
|
907
|
+
end
|
908
|
+
|
909
|
+
# Bitfield that maps the :cl_device_exec_capabilities type
|
910
|
+
class ExecCapabilities < OpenCL::Bitfield
|
911
|
+
#:stopdoc:
|
912
|
+
KERNEL = (1 << 0)
|
913
|
+
NATIVE_KERNEL = (1 << 1)
|
914
|
+
#:startdoc:
|
915
|
+
# Returns an Array of String representing the different flags set
|
916
|
+
def names
|
917
|
+
fs = []
|
918
|
+
%w( KERNEL NATIVE_KERNEL ).each { |f|
|
919
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
920
|
+
}
|
921
|
+
return fs
|
922
|
+
end
|
923
|
+
end
|
924
|
+
|
925
|
+
# Enum that maps the :cl_device_mem_cache_type type
|
926
|
+
class MemCacheType < OpenCL::Enum
|
927
|
+
#:stopdoc:
|
928
|
+
NONE = 0x0
|
929
|
+
READ_ONLY_CACHE = 0x1
|
930
|
+
READ_WRITE_CACHE = 0x2
|
931
|
+
@@codes[0x0] = 'NONE'
|
932
|
+
@@codes[0x1] = 'READ_ONLY_CACHE'
|
933
|
+
@@codes[0x2] = 'READ_WRITE_CACHE'
|
934
|
+
#:startdoc:
|
935
|
+
|
936
|
+
# Returns a String representing the Enum value name
|
937
|
+
def name
|
938
|
+
return @@codes[@val]
|
939
|
+
end
|
940
|
+
end
|
941
|
+
|
942
|
+
# Enum that maps the :cl_device_local_mem_type type
|
943
|
+
class LocalMemType < OpenCL::Enum
|
944
|
+
#:stopdoc:
|
945
|
+
LOCAL = 0x1
|
946
|
+
GLOBAL = 0x2
|
947
|
+
@@codes[0x1] = 'LOCAL'
|
948
|
+
@@codes[0x2] = 'GLOBAL'
|
949
|
+
#:startdoc:
|
950
|
+
|
951
|
+
# Returns a String representing the Enum value name
|
952
|
+
def name
|
953
|
+
return @@codes[@val]
|
954
|
+
end
|
955
|
+
end
|
956
|
+
|
957
|
+
# Bitfield that maps the :cl_device_affinity_domain type
|
958
|
+
class AffinityDomain < OpenCL::Bitfield
|
959
|
+
#:stopdoc:
|
960
|
+
NUMA = (1 << 0)
|
961
|
+
L4_CACHE = (1 << 1)
|
962
|
+
L3_CACHE = (1 << 2)
|
963
|
+
L2_CACHE = (1 << 3)
|
964
|
+
L1_CACHE = (1 << 4)
|
965
|
+
NEXT_PARTITIONABLE = (1 << 5)
|
966
|
+
#:startdoc:
|
967
|
+
# Returns an Array of String representing the different flags set
|
968
|
+
def names
|
969
|
+
fs = []
|
970
|
+
%w( NUMA L4_CACHE L3_CACHE L2_CACHE L1_CACHE NEXT_PARTITIONABLE ).each { |f|
|
971
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
972
|
+
}
|
973
|
+
return fs
|
974
|
+
end
|
975
|
+
end
|
976
|
+
|
977
|
+
end
|
978
|
+
class Context < FFI::ManagedStruct
|
979
|
+
layout :dummy, :pointer
|
980
|
+
#:stopdoc:
|
981
|
+
REFERENCE_COUNT = 0x1080
|
982
|
+
DEVICES = 0x1081
|
983
|
+
PROPERTIES = 0x1082
|
984
|
+
NUM_DEVICES = 0x1083
|
985
|
+
PLATFORM = 0x1084
|
986
|
+
INTEROP_USER_SYNC = 0x1085
|
987
|
+
MEMORY_INITIALIZE_KHR = 0x200E
|
988
|
+
TERMINATE_KHR = 0x2010
|
989
|
+
OFFLINE_DEVICES_AMD = 0x403F
|
990
|
+
#:startdoc:
|
991
|
+
|
992
|
+
# Creates a new Context and retains it if specified and aplicable
|
993
|
+
def initialize(ptr, retain = true)
|
994
|
+
super(ptr)
|
995
|
+
OpenCL.clRetainContext(ptr) if retain
|
996
|
+
#STDERR.puts "Allocating Context: #{ptr}"
|
997
|
+
end
|
998
|
+
|
999
|
+
# method called at Context deletion, releases the object if aplicable
|
1000
|
+
def self.release(ptr)
|
1001
|
+
#STDERR.puts "Releasing Context: #{ptr}"
|
1002
|
+
error = OpenCL.clReleaseContext(ptr)
|
1003
|
+
#STDERR.puts "Object released! #{error}"
|
1004
|
+
OpenCL.error_check( error )
|
1005
|
+
end
|
1006
|
+
end
|
1007
|
+
|
1008
|
+
class CommandQueue < FFI::ManagedStruct
|
1009
|
+
layout :dummy, :pointer
|
1010
|
+
#:stopdoc:
|
1011
|
+
OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 << 0)
|
1012
|
+
PROFILING_ENABLE = (1 << 1)
|
1013
|
+
CONTEXT = 0x1090
|
1014
|
+
DEVICE = 0x1091
|
1015
|
+
REFERENCE_COUNT = 0x1092
|
1016
|
+
PROPERTIES = 0x1093
|
1017
|
+
#:startdoc:
|
1018
|
+
|
1019
|
+
# Creates a new CommandQueue and retains it if specified and aplicable
|
1020
|
+
def initialize(ptr, retain = true)
|
1021
|
+
super(ptr)
|
1022
|
+
OpenCL.clRetainCommandQueue(ptr) if retain
|
1023
|
+
#STDERR.puts "Allocating CommandQueue: #{ptr}"
|
1024
|
+
end
|
1025
|
+
|
1026
|
+
# method called at CommandQueue deletion, releases the object if aplicable
|
1027
|
+
def self.release(ptr)
|
1028
|
+
#STDERR.puts "Releasing CommandQueue: #{ptr}"
|
1029
|
+
error = OpenCL.clReleaseCommandQueue(ptr)
|
1030
|
+
#STDERR.puts "Object released! #{error}"
|
1031
|
+
OpenCL.error_check( error )
|
1032
|
+
end
|
1033
|
+
end
|
1034
|
+
|
1035
|
+
class CommandQueue
|
1036
|
+
class Properties < OpenCL::Bitfield
|
1037
|
+
#:stopdoc:
|
1038
|
+
OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 << 0)
|
1039
|
+
PROFILING_ENABLE = (1 << 1)
|
1040
|
+
#:startdoc:
|
1041
|
+
# Returns an Array of String representing the different flags set
|
1042
|
+
def names
|
1043
|
+
fs = []
|
1044
|
+
%w( OUT_OF_ORDER_EXEC_MODE_ENABLE PROFILING_ENABLE ).each { |f|
|
1045
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
1046
|
+
}
|
1047
|
+
return fs
|
1048
|
+
end
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
end
|
1052
|
+
class Mem < FFI::ManagedStruct
|
1053
|
+
layout :dummy, :pointer
|
1054
|
+
#:stopdoc:
|
1055
|
+
READ_WRITE = (1 << 0)
|
1056
|
+
WRITE_ONLY = (1 << 1)
|
1057
|
+
READ_ONLY = (1 << 2)
|
1058
|
+
USE_HOST_PTR = (1 << 3)
|
1059
|
+
ALLOC_HOST_PTR = (1 << 4)
|
1060
|
+
COPY_HOST_PTR = (1 << 5)
|
1061
|
+
HOST_WRITE_ONLY = (1 << 7)
|
1062
|
+
HOST_READ_ONLY = (1 << 8)
|
1063
|
+
HOST_NO_ACCESS = (1 << 9)
|
1064
|
+
BUFFER = 0x10F0
|
1065
|
+
IMAGE2D = 0x10F1
|
1066
|
+
IMAGE3D = 0x10F2
|
1067
|
+
IMAGE2D_ARRAY = 0x10F3
|
1068
|
+
IMAGE1D = 0x10F4
|
1069
|
+
IMAGE1D_ARRAY = 0x10F5
|
1070
|
+
IMAGE1D_BUFFER = 0x10F6
|
1071
|
+
TYPE = 0x1100
|
1072
|
+
FLAGS = 0x1101
|
1073
|
+
SIZE = 0x1102
|
1074
|
+
HOST_PTR = 0x1103
|
1075
|
+
MAP_COUNT = 0x1104
|
1076
|
+
REFERENCE_COUNT = 0x1105
|
1077
|
+
CONTEXT = 0x1106
|
1078
|
+
ASSOCIATED_MEMOBJECT = 0x1107
|
1079
|
+
OFFSET = 0x1108
|
1080
|
+
USE_PERSISTENT_MEM_AMD = (1 << 6)
|
1081
|
+
EXT_HOST_PTR_QCOM = (1 << 29)
|
1082
|
+
HOST_UNCACHED_QCOM = 0x40A4
|
1083
|
+
HOST_WRITEBACK_QCOM = 0x40A5
|
1084
|
+
HOST_WRITETHROUGH_QCOM = 0x40A6
|
1085
|
+
HOST_WRITE_COMBINING_QCOM = 0x40A7
|
1086
|
+
ION_HOST_PTR_QCOM = 0x40A8
|
1087
|
+
#:startdoc:
|
1088
|
+
|
1089
|
+
# Creates a new Mem and retains it if specified and aplicable
|
1090
|
+
def initialize(ptr, retain = true)
|
1091
|
+
super(ptr)
|
1092
|
+
OpenCL.clRetainMemObject(ptr) if retain
|
1093
|
+
#STDERR.puts "Allocating Mem: #{ptr}"
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
# method called at Mem deletion, releases the object if aplicable
|
1097
|
+
def self.release(ptr)
|
1098
|
+
#STDERR.puts "Releasing Mem: #{ptr}"
|
1099
|
+
error = OpenCL.clReleaseMemObject(ptr)
|
1100
|
+
#STDERR.puts "Object released! #{error}"
|
1101
|
+
OpenCL.error_check( error )
|
1102
|
+
end
|
1103
|
+
end
|
1104
|
+
|
1105
|
+
class Mem
|
1106
|
+
# Bitfield that maps the :cl_mem_flags type
|
1107
|
+
class Flags < OpenCL::Bitfield
|
1108
|
+
#:stopdoc:
|
1109
|
+
READ_WRITE = (1 << 0)
|
1110
|
+
WRITE_ONLY = (1 << 1)
|
1111
|
+
READ_ONLY = (1 << 2)
|
1112
|
+
USE_HOST_PTR = (1 << 3)
|
1113
|
+
ALLOC_HOST_PTR = (1 << 4)
|
1114
|
+
COPY_HOST_PTR = (1 << 5)
|
1115
|
+
HOST_WRITE_ONLY = (1 << 7)
|
1116
|
+
HOST_READ_ONLY = (1 << 8)
|
1117
|
+
HOST_NO_ACCESS = (1 << 9)
|
1118
|
+
#:startdoc:
|
1119
|
+
# Returns an Array of String representing the different flags set
|
1120
|
+
def names
|
1121
|
+
fs = []
|
1122
|
+
%w( READ_WRITE WRITE_ONLY READ_ONLY USE_HOST_PTR ALLOC_HOST_PTR COPY_HOST_PTR HOST_WRITE_ONLY HOST_READ_ONLY HOST_NO_ACCESS ).each { |f|
|
1123
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
1124
|
+
}
|
1125
|
+
return fs
|
1126
|
+
end
|
1127
|
+
end
|
1128
|
+
|
1129
|
+
# Bitfield that maps the :cl_mem_migration_flags type
|
1130
|
+
class MigrationFlags < OpenCL::Bitfield
|
1131
|
+
#:stopdoc:
|
1132
|
+
HOST = (1 << 0)
|
1133
|
+
CONTENT_UNDEFINED = (1 << 1)
|
1134
|
+
#:startdoc:
|
1135
|
+
# Returns an Array of String representing the different flags set
|
1136
|
+
def names
|
1137
|
+
fs = []
|
1138
|
+
%w( HOST CONTENT_UNDEFINED ).each { |f|
|
1139
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
1140
|
+
}
|
1141
|
+
return fs
|
1142
|
+
end
|
1143
|
+
end
|
1144
|
+
|
1145
|
+
# Enum that maps the :cl_mem_object_type
|
1146
|
+
class Type < OpenCL::Enum
|
1147
|
+
#:stopdoc:
|
1148
|
+
BUFFER = 0x10F0
|
1149
|
+
IMAGE2D = 0x10F1
|
1150
|
+
IMAGE3D = 0x10F2
|
1151
|
+
IMAGE2D_ARRAY = 0x10F3
|
1152
|
+
IMAGE1D = 0x10F4
|
1153
|
+
IMAGE1D_ARRAY = 0x10F5
|
1154
|
+
IMAGE1D_BUFFER = 0x10F6
|
1155
|
+
@@codes[0x10F0] = 'BUFFER'
|
1156
|
+
@@codes[0x10F1] = 'IMAGE2D'
|
1157
|
+
@@codes[0x10F2] = 'IMAGE3D'
|
1158
|
+
@@codes[0x10F3] = 'IMAGE2D_ARRAY'
|
1159
|
+
@@codes[0x10F4] = 'IMAGE1D'
|
1160
|
+
@@codes[0x10F5] = 'IMAGE1D_ARRAY'
|
1161
|
+
@@codes[0x10F6] = 'IMAGE1D_BUFFER'
|
1162
|
+
#:startdoc:
|
1163
|
+
|
1164
|
+
# Returns a String representing the Enum value name
|
1165
|
+
def name
|
1166
|
+
return @@codes[@val]
|
1167
|
+
end
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
end
|
1171
|
+
class Program < FFI::ManagedStruct
|
1172
|
+
layout :dummy, :pointer
|
1173
|
+
#:stopdoc:
|
1174
|
+
REFERENCE_COUNT = 0x1160
|
1175
|
+
CONTEXT = 0x1161
|
1176
|
+
NUM_DEVICES = 0x1162
|
1177
|
+
DEVICES = 0x1163
|
1178
|
+
SOURCE = 0x1164
|
1179
|
+
BINARY_SIZES = 0x1165
|
1180
|
+
BINARIES = 0x1166
|
1181
|
+
NUM_KERNELS = 0x1167
|
1182
|
+
KERNEL_NAMES = 0x1168
|
1183
|
+
BUILD_STATUS = 0x1181
|
1184
|
+
BUILD_OPTIONS = 0x1182
|
1185
|
+
BUILD_LOG = 0x1183
|
1186
|
+
BINARY_TYPE = 0x1184
|
1187
|
+
BINARY_TYPE_NONE = 0x0
|
1188
|
+
BINARY_TYPE_COMPILED_OBJECT = 0x1
|
1189
|
+
BINARY_TYPE_LIBRARY = 0x2
|
1190
|
+
BINARY_TYPE_EXECUTABLE = 0x4
|
1191
|
+
#:startdoc:
|
1192
|
+
|
1193
|
+
# Creates a new Program and retains it if specified and aplicable
|
1194
|
+
def initialize(ptr, retain = true)
|
1195
|
+
super(ptr)
|
1196
|
+
OpenCL.clRetainProgram(ptr) if retain
|
1197
|
+
#STDERR.puts "Allocating Program: #{ptr}"
|
1198
|
+
end
|
1199
|
+
|
1200
|
+
# method called at Program deletion, releases the object if aplicable
|
1201
|
+
def self.release(ptr)
|
1202
|
+
#STDERR.puts "Releasing Program: #{ptr}"
|
1203
|
+
error = OpenCL.clReleaseProgram(ptr)
|
1204
|
+
#STDERR.puts "Object released! #{error}"
|
1205
|
+
OpenCL.error_check( error )
|
1206
|
+
end
|
1207
|
+
end
|
1208
|
+
|
1209
|
+
class Program
|
1210
|
+
# Enum that maps the :cl_program_binary_type type
|
1211
|
+
class BinaryType < OpenCL::Enum
|
1212
|
+
#:stopdoc:
|
1213
|
+
NONE = 0x0
|
1214
|
+
COMPILED_OBJECT = 0x1
|
1215
|
+
LIBRARY = 0x2
|
1216
|
+
EXECUTABLE = 0x4
|
1217
|
+
@@codes[0x0] = 'NONE'
|
1218
|
+
@@codes[0x1] = 'COMPILED_OBJECT'
|
1219
|
+
@@codes[0x2] = 'LIBRARY'
|
1220
|
+
@@codes[0x4] = 'EXECUTABLE'
|
1221
|
+
#:startdoc:
|
1222
|
+
|
1223
|
+
# Returns a String representing the Enum value name
|
1224
|
+
def name
|
1225
|
+
return @@codes[@val]
|
1226
|
+
end
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
end
|
1230
|
+
class Kernel < FFI::ManagedStruct
|
1231
|
+
layout :dummy, :pointer
|
1232
|
+
#:stopdoc:
|
1233
|
+
FUNCTION_NAME = 0x1190
|
1234
|
+
NUM_ARGS = 0x1191
|
1235
|
+
REFERENCE_COUNT = 0x1192
|
1236
|
+
CONTEXT = 0x1193
|
1237
|
+
PROGRAM = 0x1194
|
1238
|
+
ATTRIBUTES = 0x1195
|
1239
|
+
ARG_ADDRESS_QUALIFIER = 0x1196
|
1240
|
+
ARG_ACCESS_QUALIFIER = 0x1197
|
1241
|
+
ARG_TYPE_NAME = 0x1198
|
1242
|
+
ARG_TYPE_QUALIFIER = 0x1199
|
1243
|
+
ARG_NAME = 0x119A
|
1244
|
+
ARG_ADDRESS_GLOBAL = 0x119B
|
1245
|
+
ARG_ADDRESS_LOCAL = 0x119C
|
1246
|
+
ARG_ADDRESS_CONSTANT = 0x119D
|
1247
|
+
ARG_ADDRESS_PRIVATE = 0x119E
|
1248
|
+
ARG_ACCESS_READ_ONLY = 0x11A0
|
1249
|
+
ARG_ACCESS_WRITE_ONLY = 0x11A1
|
1250
|
+
ARG_ACCESS_READ_WRITE = 0x11A2
|
1251
|
+
ARG_ACCESS_NONE = 0x11A3
|
1252
|
+
ARG_TYPE_NONE = 0
|
1253
|
+
ARG_TYPE_CONST = (1 << 0)
|
1254
|
+
ARG_TYPE_RESTRICT = (1 << 1)
|
1255
|
+
ARG_TYPE_VOLATILE = (1 << 2)
|
1256
|
+
WORK_GROUP_SIZE = 0x11B0
|
1257
|
+
COMPILE_WORK_GROUP_SIZE = 0x11B1
|
1258
|
+
LOCAL_MEM_SIZE = 0x11B2
|
1259
|
+
PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 0x11B3
|
1260
|
+
PRIVATE_MEM_SIZE = 0x11B4
|
1261
|
+
GLOBAL_WORK_SIZE = 0x11B5
|
1262
|
+
#:startdoc:
|
1263
|
+
|
1264
|
+
# Creates a new Kernel and retains it if specified and aplicable
|
1265
|
+
def initialize(ptr, retain = true)
|
1266
|
+
super(ptr)
|
1267
|
+
OpenCL.clRetainKernel(ptr) if retain
|
1268
|
+
#STDERR.puts "Allocating Kernel: #{ptr}"
|
1269
|
+
end
|
1270
|
+
|
1271
|
+
# method called at Kernel deletion, releases the object if aplicable
|
1272
|
+
def self.release(ptr)
|
1273
|
+
#STDERR.puts "Releasing Kernel: #{ptr}"
|
1274
|
+
error = OpenCL.clReleaseKernel(ptr)
|
1275
|
+
#STDERR.puts "Object released! #{error}"
|
1276
|
+
OpenCL.error_check( error )
|
1277
|
+
end
|
1278
|
+
end
|
1279
|
+
|
1280
|
+
class Kernel
|
1281
|
+
# Maps the arg logical OpenCL objects
|
1282
|
+
class Arg
|
1283
|
+
#:stopdoc:
|
1284
|
+
ADDRESS_QUALIFIER = 0x1196
|
1285
|
+
ACCESS_QUALIFIER = 0x1197
|
1286
|
+
TYPE_NAME = 0x1198
|
1287
|
+
TYPE_QUALIFIER = 0x1199
|
1288
|
+
NAME = 0x119A
|
1289
|
+
ADDRESS_GLOBAL = 0x119B
|
1290
|
+
ADDRESS_LOCAL = 0x119C
|
1291
|
+
ADDRESS_CONSTANT = 0x119D
|
1292
|
+
ADDRESS_PRIVATE = 0x119E
|
1293
|
+
ACCESS_READ_ONLY = 0x11A0
|
1294
|
+
ACCESS_WRITE_ONLY = 0x11A1
|
1295
|
+
ACCESS_READ_WRITE = 0x11A2
|
1296
|
+
ACCESS_NONE = 0x11A3
|
1297
|
+
TYPE_NONE = 0
|
1298
|
+
TYPE_CONST = (1 << 0)
|
1299
|
+
TYPE_RESTRICT = (1 << 1)
|
1300
|
+
TYPE_VOLATILE = (1 << 2)
|
1301
|
+
#:startdoc:
|
1302
|
+
end
|
1303
|
+
|
1304
|
+
class Arg
|
1305
|
+
# Enum that maps the :cl_kernel_arg_address_qualifier type
|
1306
|
+
class AddressQualifier < OpenCL::Enum
|
1307
|
+
#:stopdoc:
|
1308
|
+
GLOBAL = 0x119B
|
1309
|
+
LOCAL = 0x119C
|
1310
|
+
CONSTANT = 0x119D
|
1311
|
+
PRIVATE = 0x119E
|
1312
|
+
@@codes[0x119B] = 'GLOBAL'
|
1313
|
+
@@codes[0x119C] = 'LOCAL'
|
1314
|
+
@@codes[0x119D] = 'CONSTANT'
|
1315
|
+
@@codes[0x119E] = 'PRIVATE'
|
1316
|
+
#:startdoc:
|
1317
|
+
|
1318
|
+
# Returns a String representing the Enum value name
|
1319
|
+
def name
|
1320
|
+
return @@codes[@val]
|
1321
|
+
end
|
1322
|
+
end
|
1323
|
+
|
1324
|
+
# Enum that maps the :cl_kernel_arg_access_qualifier type
|
1325
|
+
class AccessQualifier < OpenCL::Enum
|
1326
|
+
#:stopdoc:
|
1327
|
+
READ_ONLY = 0x11A0
|
1328
|
+
WRITE_ONLY = 0x11A1
|
1329
|
+
READ_WRITE = 0x11A2
|
1330
|
+
NONE = 0x11A3
|
1331
|
+
@@codes[0x11A0] = 'READ_ONLY'
|
1332
|
+
@@codes[0x11A1] = 'WRITE_ONLY'
|
1333
|
+
@@codes[0x11A2] = 'READ_WRITE'
|
1334
|
+
@@codes[0x11A3] = 'NONE'
|
1335
|
+
#:startdoc:
|
1336
|
+
|
1337
|
+
# Returns a String representing the Enum value name
|
1338
|
+
def name
|
1339
|
+
return @@codes[@val]
|
1340
|
+
end
|
1341
|
+
end
|
1342
|
+
|
1343
|
+
# Bitfield that maps the :cl_kernel_arg_type_qualifier type
|
1344
|
+
class TypeQualifier < OpenCL::Bitfield
|
1345
|
+
#:stopdoc:
|
1346
|
+
NONE = 0
|
1347
|
+
CONST = (1 << 0)
|
1348
|
+
RESTRICT = (1 << 1)
|
1349
|
+
VOLATILE = (1 << 2)
|
1350
|
+
#:startdoc:
|
1351
|
+
# Returns an Array of String representing the different flags set
|
1352
|
+
def names
|
1353
|
+
fs = []
|
1354
|
+
%w( NONE CONST RESTRICT VOLATILE ).each { |f|
|
1355
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
1356
|
+
}
|
1357
|
+
return fs
|
1358
|
+
end
|
1359
|
+
end
|
1360
|
+
|
1361
|
+
end
|
1362
|
+
end
|
1363
|
+
class Event < FFI::ManagedStruct
|
1364
|
+
layout :dummy, :pointer
|
1365
|
+
#:stopdoc:
|
1366
|
+
COMMAND_QUEUE = 0x11D0
|
1367
|
+
COMMAND_TYPE = 0x11D1
|
1368
|
+
REFERENCE_COUNT = 0x11D2
|
1369
|
+
COMMAND_EXECUTION_STATUS = 0x11D3
|
1370
|
+
CONTEXT = 0x11D4
|
1371
|
+
#:startdoc:
|
1372
|
+
|
1373
|
+
# Creates a new Event and retains it if specified and aplicable
|
1374
|
+
def initialize(ptr, retain = true)
|
1375
|
+
super(ptr)
|
1376
|
+
OpenCL.clRetainEvent(ptr) if retain
|
1377
|
+
#STDERR.puts "Allocating Event: #{ptr}"
|
1378
|
+
end
|
1379
|
+
|
1380
|
+
# method called at Event deletion, releases the object if aplicable
|
1381
|
+
def self.release(ptr)
|
1382
|
+
#STDERR.puts "Releasing Event: #{ptr}"
|
1383
|
+
error = OpenCL.clReleaseEvent(ptr)
|
1384
|
+
#STDERR.puts "Object released! #{error}"
|
1385
|
+
OpenCL.error_check( error )
|
1386
|
+
end
|
1387
|
+
end
|
1388
|
+
|
1389
|
+
class Sampler < FFI::ManagedStruct
|
1390
|
+
layout :dummy, :pointer
|
1391
|
+
#:stopdoc:
|
1392
|
+
REFERENCE_COUNT = 0x1150
|
1393
|
+
CONTEXT = 0x1151
|
1394
|
+
NORMALIZED_COORDS = 0x1152
|
1395
|
+
ADDRESSING_MODE = 0x1153
|
1396
|
+
FILTER_MODE = 0x1154
|
1397
|
+
#:startdoc:
|
1398
|
+
|
1399
|
+
# Creates a new Sampler and retains it if specified and aplicable
|
1400
|
+
def initialize(ptr, retain = true)
|
1401
|
+
super(ptr)
|
1402
|
+
OpenCL.clRetainSampler(ptr) if retain
|
1403
|
+
#STDERR.puts "Allocating Sampler: #{ptr}"
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
# method called at Sampler deletion, releases the object if aplicable
|
1407
|
+
def self.release(ptr)
|
1408
|
+
#STDERR.puts "Releasing Sampler: #{ptr}"
|
1409
|
+
error = OpenCL.clReleaseSampler(ptr)
|
1410
|
+
#STDERR.puts "Object released! #{error}"
|
1411
|
+
OpenCL.error_check( error )
|
1412
|
+
end
|
1413
|
+
end
|
1414
|
+
|
1415
|
+
class GLsync < FFI::ManagedStruct
|
1416
|
+
layout :dummy, :pointer
|
1417
|
+
#:stopdoc:
|
1418
|
+
|
1419
|
+
#:startdoc:
|
1420
|
+
|
1421
|
+
# Creates a new GLsync and retains it if specified and aplicable
|
1422
|
+
def initialize(ptr, retain = true)
|
1423
|
+
super(ptr)
|
1424
|
+
#STDERR.puts "Allocating GLsync: #{ptr}"
|
1425
|
+
end
|
1426
|
+
|
1427
|
+
# method called at GLsync deletion, releases the object if aplicable
|
1428
|
+
def self.release(ptr)
|
1429
|
+
#STDERR.puts "Releasing GLsync: #{ptr}"
|
1430
|
+
end
|
1431
|
+
end
|
1432
|
+
|
1433
|
+
# Enum that maps the :cl_channel_order type
|
1434
|
+
class ChannelOrder < OpenCL::Enum
|
1435
|
+
#:stopdoc:
|
1436
|
+
R = 0x10B0
|
1437
|
+
A = 0x10B1
|
1438
|
+
RG = 0x10B2
|
1439
|
+
RA = 0x10B3
|
1440
|
+
RGB = 0x10B4
|
1441
|
+
RGBA = 0x10B5
|
1442
|
+
BGRA = 0x10B6
|
1443
|
+
ARGB = 0x10B7
|
1444
|
+
INTENSITY = 0x10B8
|
1445
|
+
LUMINANCE = 0x10B9
|
1446
|
+
Rx = 0x10BA
|
1447
|
+
RGx = 0x10BB
|
1448
|
+
RGBx = 0x10BC
|
1449
|
+
DEPTH = 0x10BD
|
1450
|
+
DEPTH_STENCIL = 0x10BE
|
1451
|
+
@@codes[0x10B0] = 'R'
|
1452
|
+
@@codes[0x10B1] = 'A'
|
1453
|
+
@@codes[0x10B2] = 'RG'
|
1454
|
+
@@codes[0x10B3] = 'RA'
|
1455
|
+
@@codes[0x10B4] = 'RGB'
|
1456
|
+
@@codes[0x10B5] = 'RGBA'
|
1457
|
+
@@codes[0x10B6] = 'BGRA'
|
1458
|
+
@@codes[0x10B7] = 'ARGB'
|
1459
|
+
@@codes[0x10B8] = 'INTENSITY'
|
1460
|
+
@@codes[0x10B9] = 'LUMINANCE'
|
1461
|
+
@@codes[0x10BA] = 'Rx'
|
1462
|
+
@@codes[0x10BB] = 'RGx'
|
1463
|
+
@@codes[0x10BC] = 'RGBx'
|
1464
|
+
@@codes[0x10BD] = 'DEPTH'
|
1465
|
+
@@codes[0x10BE] = 'DEPTH_STENCIL'
|
1466
|
+
#:startdoc:
|
1467
|
+
|
1468
|
+
# Returns a String representing the Enum value name
|
1469
|
+
def name
|
1470
|
+
return @@codes[@val]
|
1471
|
+
end
|
1472
|
+
end
|
1473
|
+
|
1474
|
+
# Enum that maps the :cl_channel_type type
|
1475
|
+
class ChannelType < OpenCL::Enum
|
1476
|
+
#:stopdoc:
|
1477
|
+
SNORM_INT8 = 0x10D0
|
1478
|
+
SNORM_INT16 = 0x10D1
|
1479
|
+
UNORM_INT8 = 0x10D2
|
1480
|
+
UNORM_INT16 = 0x10D3
|
1481
|
+
UNORM_SHORT_565 = 0x10D4
|
1482
|
+
UNORM_SHORT_555 = 0x10D5
|
1483
|
+
UNORM_INT_101010 = 0x10D6
|
1484
|
+
SIGNED_INT8 = 0x10D7
|
1485
|
+
SIGNED_INT16 = 0x10D8
|
1486
|
+
SIGNED_INT32 = 0x10D9
|
1487
|
+
UNSIGNED_INT8 = 0x10DA
|
1488
|
+
UNSIGNED_INT16 = 0x10DB
|
1489
|
+
UNSIGNED_INT32 = 0x10DC
|
1490
|
+
HALF_FLOAT = 0x10DD
|
1491
|
+
FLOAT = 0x10DE
|
1492
|
+
UNORM_INT24 = 0x10DF
|
1493
|
+
@@codes[0x10D0] = 'SNORM_INT8'
|
1494
|
+
@@codes[0x10D1] = 'SNORM_INT16'
|
1495
|
+
@@codes[0x10D2] = 'UNORM_INT8'
|
1496
|
+
@@codes[0x10D3] = 'UNORM_INT16'
|
1497
|
+
@@codes[0x10D4] = 'UNORM_SHORT_565'
|
1498
|
+
@@codes[0x10D5] = 'UNORM_SHORT_555'
|
1499
|
+
@@codes[0x10D6] = 'UNORM_INT_101010'
|
1500
|
+
@@codes[0x10D7] = 'SIGNED_INT8'
|
1501
|
+
@@codes[0x10D8] = 'SIGNED_INT16'
|
1502
|
+
@@codes[0x10D9] = 'SIGNED_INT32'
|
1503
|
+
@@codes[0x10DA] = 'UNSIGNED_INT8'
|
1504
|
+
@@codes[0x10DB] = 'UNSIGNED_INT16'
|
1505
|
+
@@codes[0x10DC] = 'UNSIGNED_INT32'
|
1506
|
+
@@codes[0x10DD] = 'HALF_FLOAT'
|
1507
|
+
@@codes[0x10DE] = 'FLOAT'
|
1508
|
+
@@codes[0x10DF] = 'UNORM_INT24'
|
1509
|
+
#:startdoc:
|
1510
|
+
|
1511
|
+
# Returns a String representing the Enum value name
|
1512
|
+
def name
|
1513
|
+
return @@codes[@val]
|
1514
|
+
end
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
# Enum that maps the :cl_addressing_mode type
|
1518
|
+
class AddressingMode < OpenCL::Enum
|
1519
|
+
#:stopdoc:
|
1520
|
+
NONE = 0x1130
|
1521
|
+
CLAMP_TO_EDGE = 0x1131
|
1522
|
+
CLAMP = 0x1132
|
1523
|
+
REPEAT = 0x1133
|
1524
|
+
MIRRORED_REPEAT = 0x1134
|
1525
|
+
@@codes[0x1130] = 'NONE'
|
1526
|
+
@@codes[0x1131] = 'CLAMP_TO_EDGE'
|
1527
|
+
@@codes[0x1132] = 'CLAMP'
|
1528
|
+
@@codes[0x1133] = 'REPEAT'
|
1529
|
+
@@codes[0x1134] = 'MIRRORED_REPEAT'
|
1530
|
+
#:startdoc:
|
1531
|
+
|
1532
|
+
# Returns a String representing the Enum value name
|
1533
|
+
def name
|
1534
|
+
return @@codes[@val]
|
1535
|
+
end
|
1536
|
+
end
|
1537
|
+
|
1538
|
+
# Enum that maps the :cl_filter_mode type
|
1539
|
+
class FilterMode < OpenCL::Enum
|
1540
|
+
#:stopdoc:
|
1541
|
+
NEAREST = 0x1140
|
1542
|
+
LINEAR = 0x1141
|
1543
|
+
@@codes[0x1140] = 'NEAREST'
|
1544
|
+
@@codes[0x1141] = 'LINEAR'
|
1545
|
+
#:startdoc:
|
1546
|
+
|
1547
|
+
# Returns a String representing the Enum value name
|
1548
|
+
def name
|
1549
|
+
return @@codes[@val]
|
1550
|
+
end
|
1551
|
+
end
|
1552
|
+
|
1553
|
+
# Bitfield that maps the :cl_map_flags type
|
1554
|
+
class MapFlags < OpenCL::Bitfield
|
1555
|
+
#:stopdoc:
|
1556
|
+
READ = (1 << 0)
|
1557
|
+
WRITE = (1 << 1)
|
1558
|
+
WRITE_INVALIDATE_REGION = (1 << 2)
|
1559
|
+
#:startdoc:
|
1560
|
+
# Returns an Array of String representing the different flags set
|
1561
|
+
def names
|
1562
|
+
fs = []
|
1563
|
+
%w( READ WRITE WRITE_INVALIDATE_REGION ).each { |f|
|
1564
|
+
fs.push(f) if self.include?( self.class.const_get(f) )
|
1565
|
+
}
|
1566
|
+
return fs
|
1567
|
+
end
|
1568
|
+
end
|
1569
|
+
|
1570
|
+
# Enum that maps the :cl_command_type type
|
1571
|
+
class CommandType < OpenCL::Enum
|
1572
|
+
#:stopdoc:
|
1573
|
+
NDRANGE_KERNEL = 0x11F0
|
1574
|
+
TASK = 0x11F1
|
1575
|
+
NATIVE_KERNEL = 0x11F2
|
1576
|
+
READ_BUFFER = 0x11F3
|
1577
|
+
WRITE_BUFFER = 0x11F4
|
1578
|
+
COPY_BUFFER = 0x11F5
|
1579
|
+
READ_IMAGE = 0x11F6
|
1580
|
+
WRITE_IMAGE = 0x11F7
|
1581
|
+
COPY_IMAGE = 0x11F8
|
1582
|
+
COPY_IMAGE_TO_BUFFER = 0x11F9
|
1583
|
+
COPY_BUFFER_TO_IMAGE = 0x11FA
|
1584
|
+
MAP_BUFFER = 0x11FB
|
1585
|
+
MAP_IMAGE = 0x11FC
|
1586
|
+
UNMAP_MEM_OBJECT = 0x11FD
|
1587
|
+
MARKER = 0x11FE
|
1588
|
+
ACQUIRE_GL_OBJECTS = 0x11FF
|
1589
|
+
RELEASE_GL_OBJECTS = 0x1200
|
1590
|
+
READ_BUFFER_RECT = 0x1201
|
1591
|
+
WRITE_BUFFER_RECT = 0x1202
|
1592
|
+
COPY_BUFFER_RECT = 0x1203
|
1593
|
+
USER = 0x1204
|
1594
|
+
BARRIER = 0x1205
|
1595
|
+
MIGRATE_MEM_OBJECTS = 0x1206
|
1596
|
+
FILL_BUFFER = 0x1207
|
1597
|
+
FILL_IMAGE = 0x1208
|
1598
|
+
@@codes[0x11F0] = 'NDRANGE_KERNEL'
|
1599
|
+
@@codes[0x11F1] = 'TASK'
|
1600
|
+
@@codes[0x11F2] = 'NATIVE_KERNEL'
|
1601
|
+
@@codes[0x11F3] = 'READ_BUFFER'
|
1602
|
+
@@codes[0x11F4] = 'WRITE_BUFFER'
|
1603
|
+
@@codes[0x11F5] = 'COPY_BUFFER'
|
1604
|
+
@@codes[0x11F6] = 'READ_IMAGE'
|
1605
|
+
@@codes[0x11F7] = 'WRITE_IMAGE'
|
1606
|
+
@@codes[0x11F8] = 'COPY_IMAGE'
|
1607
|
+
@@codes[0x11F9] = 'COPY_IMAGE_TO_BUFFER'
|
1608
|
+
@@codes[0x11FA] = 'COPY_BUFFER_TO_IMAGE'
|
1609
|
+
@@codes[0x11FB] = 'MAP_BUFFER'
|
1610
|
+
@@codes[0x11FC] = 'MAP_IMAGE'
|
1611
|
+
@@codes[0x11FD] = 'UNMAP_MEM_OBJECT'
|
1612
|
+
@@codes[0x11FE] = 'MARKER'
|
1613
|
+
@@codes[0x11FF] = 'ACQUIRE_GL_OBJECTS'
|
1614
|
+
@@codes[0x1200] = 'RELEASE_GL_OBJECTS'
|
1615
|
+
@@codes[0x1201] = 'READ_BUFFER_RECT'
|
1616
|
+
@@codes[0x1202] = 'WRITE_BUFFER_RECT'
|
1617
|
+
@@codes[0x1203] = 'COPY_BUFFER_RECT'
|
1618
|
+
@@codes[0x1204] = 'USER'
|
1619
|
+
@@codes[0x1205] = 'BARRIER'
|
1620
|
+
@@codes[0x1206] = 'MIGRATE_MEM_OBJECTS'
|
1621
|
+
@@codes[0x1207] = 'FILL_BUFFER'
|
1622
|
+
@@codes[0x1208] = 'FILL_IMAGE'
|
1623
|
+
#:startdoc:
|
1624
|
+
|
1625
|
+
# Returns a String representing the Enum value name
|
1626
|
+
def name
|
1627
|
+
return @@codes[@val]
|
1628
|
+
end
|
1629
|
+
end
|
1630
|
+
|
1631
|
+
# Enum that maps the :cl_gl_object_type type
|
1632
|
+
class GLObjectType < OpenCL::Enum
|
1633
|
+
#:stopdoc:
|
1634
|
+
BUFFER = 0x2000
|
1635
|
+
TEXTURE2D = 0x2001
|
1636
|
+
TEXTURE3D = 0x2002
|
1637
|
+
RENDERBUFFER = 0x2003
|
1638
|
+
TEXTURE2D_ARRAY = 0x200E
|
1639
|
+
TEXTURE1D = 0x200F
|
1640
|
+
TEXTURE1D_ARRAY = 0x2010
|
1641
|
+
TEXTURE_BUFFER = 0x2011
|
1642
|
+
@@codes[0x2000] = 'BUFFER'
|
1643
|
+
@@codes[0x2001] = 'TEXTURE2D'
|
1644
|
+
@@codes[0x2002] = 'TEXTURE3D'
|
1645
|
+
@@codes[0x2003] = 'RENDERBUFFER'
|
1646
|
+
@@codes[0x200E] = 'TEXTURE2D_ARRAY'
|
1647
|
+
@@codes[0x200F] = 'TEXTURE1D'
|
1648
|
+
@@codes[0x2010] = 'TEXTURE1D_ARRAY'
|
1649
|
+
@@codes[0x2011] = 'TEXTURE_BUFFER'
|
1650
|
+
#:startdoc:
|
1651
|
+
|
1652
|
+
# Returns a String representing the Enum value name
|
1653
|
+
def name
|
1654
|
+
return @@codes[@val]
|
1655
|
+
end
|
1656
|
+
end
|
1657
|
+
|
1658
|
+
# Enum that maps the :cl_build_status type
|
1659
|
+
class BuildStatus < OpenCL::EnumInt
|
1660
|
+
#:stopdoc:
|
1661
|
+
SUCCESS = 0
|
1662
|
+
NONE = -1
|
1663
|
+
ERROR = -2
|
1664
|
+
IN_PROGRESS = -3
|
1665
|
+
@@codes[0] = 'SUCCESS'
|
1666
|
+
@@codes[-1] = 'NONE'
|
1667
|
+
@@codes[-2] = 'ERROR'
|
1668
|
+
@@codes[-3] = 'IN_PROGRESS'
|
1669
|
+
#:startdoc:
|
1670
|
+
|
1671
|
+
# Returns a String representing the Enum value name
|
1672
|
+
def name
|
1673
|
+
return @@codes[@val]
|
1674
|
+
end
|
1675
|
+
end
|
1676
|
+
|
1677
|
+
# Enum that maps the command execution status logical type
|
1678
|
+
class CommandExecutionStatus < OpenCL::EnumInt
|
1679
|
+
#:stopdoc:
|
1680
|
+
COMPLETE = 0x0
|
1681
|
+
RUNNING = 0x1
|
1682
|
+
SUBMITTED = 0x2
|
1683
|
+
QUEUED = 0x3
|
1684
|
+
@@codes[0x0] = 'COMPLETE'
|
1685
|
+
@@codes[0x1] = 'RUNNING'
|
1686
|
+
@@codes[0x2] = 'SUBMITTED'
|
1687
|
+
@@codes[0x3] = 'QUEUED'
|
1688
|
+
#:startdoc:
|
1689
|
+
|
1690
|
+
# Returns a String representing the Enum value name
|
1691
|
+
def name
|
1692
|
+
return @@codes[@val]
|
1693
|
+
end
|
1694
|
+
end
|
1695
|
+
|
1696
|
+
class Image < Mem
|
1697
|
+
layout :dummy, :pointer
|
1698
|
+
#:stopdoc:
|
1699
|
+
FORMAT_MISMATCH = -9
|
1700
|
+
FORMAT_NOT_SUPPORTED = -10
|
1701
|
+
FORMAT = 0x1110
|
1702
|
+
ELEMENT_SIZE = 0x1111
|
1703
|
+
ROW_PITCH = 0x1112
|
1704
|
+
SLICE_PITCH = 0x1113
|
1705
|
+
WIDTH = 0x1114
|
1706
|
+
HEIGHT = 0x1115
|
1707
|
+
DEPTH = 0x1116
|
1708
|
+
ARRAY_SIZE = 0x1117
|
1709
|
+
BUFFER = 0x1118
|
1710
|
+
NUM_MIP_LEVELS = 0x1119
|
1711
|
+
NUM_SAMPLES = 0x111A
|
1712
|
+
ROW_ALIGNMENT_QCOM = 0x40A2
|
1713
|
+
SLICE_ALIGNMENT_QCOM = 0x40A3
|
1714
|
+
#:startdoc:
|
1715
|
+
end
|
1716
|
+
attach_function :clGetPlatformIDs, [:cl_uint,:pointer,:pointer], :cl_int
|
1717
|
+
attach_function :clGetPlatformInfo, [Platform,:cl_platform_info,:size_t,:pointer,:pointer], :cl_int
|
1718
|
+
attach_function :clGetDeviceIDs, [Platform,:cl_device_type,:cl_uint,:pointer,:pointer], :cl_int
|
1719
|
+
attach_function :clGetDeviceInfo, [Device,:cl_device_info,:size_t,:pointer,:pointer], :cl_int
|
1720
|
+
attach_function :clCreateSubDevices, [Device,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1721
|
+
attach_function :clRetainDevice, [Device], :cl_int
|
1722
|
+
attach_function :clReleaseDevice, [Device], :cl_int
|
1723
|
+
callback :clCreateContext_notify, [:pointer,:pointer,:size_t,:pointer], :void
|
1724
|
+
attach_function :clCreateContext, [:pointer,:cl_uint,:pointer,:clCreateContext_notify,:pointer,:pointer], Context
|
1725
|
+
callback :clCreateContextFromType_notify, [:pointer,:pointer,:size_t,:pointer], :void
|
1726
|
+
attach_function :clCreateContextFromType, [:pointer,:cl_device_type,:clCreateContextFromType_notify,:pointer,:pointer], Context
|
1727
|
+
attach_function :clRetainContext, [Context], :cl_int
|
1728
|
+
attach_function :clReleaseContext, [Context], :cl_int
|
1729
|
+
attach_function :clGetContextInfo, [Context,:cl_context_info,:size_t,:pointer,:pointer], :cl_int
|
1730
|
+
attach_function :clCreateCommandQueue, [Context,Device,:cl_command_queue_properties,:pointer], CommandQueue
|
1731
|
+
attach_function :clRetainCommandQueue, [CommandQueue], :cl_int
|
1732
|
+
attach_function :clReleaseCommandQueue, [CommandQueue], :cl_int
|
1733
|
+
attach_function :clGetCommandQueueInfo, [CommandQueue,:cl_command_queue_info,:size_t,:pointer,:pointer], :cl_int
|
1734
|
+
attach_function :clCreateBuffer, [Context,:cl_mem_flags,:size_t,:pointer,:pointer], Mem
|
1735
|
+
attach_function :clCreateSubBuffer, [Mem,:cl_mem_flags,:cl_buffer_create_type,:pointer,:pointer], Mem
|
1736
|
+
attach_function :clCreateImage, [Context,:cl_mem_flags,:pointer,:pointer,:pointer,:pointer], Mem
|
1737
|
+
attach_function :clRetainMemObject, [Mem], :cl_int
|
1738
|
+
attach_function :clReleaseMemObject, [Mem], :cl_int
|
1739
|
+
attach_function :clGetSupportedImageFormats, [Context,:cl_mem_flags,:cl_mem_object_type,:cl_uint,:pointer,:pointer], :cl_int
|
1740
|
+
attach_function :clGetMemObjectInfo, [Mem,:cl_mem_info,:size_t,:pointer,:pointer], :cl_int
|
1741
|
+
attach_function :clGetImageInfo, [Mem,:cl_image_info,:size_t,:pointer,:pointer], :cl_int
|
1742
|
+
callback :clSetMemObjectDestructorCallback_notify, [Mem.by_ref,:pointer], :void
|
1743
|
+
attach_function :clSetMemObjectDestructorCallback, [Mem,:clSetMemObjectDestructorCallback_notify,:pointer], :cl_int
|
1744
|
+
attach_function :clCreateSampler, [Context,:cl_bool,:cl_addressing_mode,:cl_filter_mode,:pointer], Sampler
|
1745
|
+
attach_function :clRetainSampler, [Sampler], :cl_int
|
1746
|
+
attach_function :clReleaseSampler, [Sampler], :cl_int
|
1747
|
+
attach_function :clGetSamplerInfo, [Sampler,:cl_sampler_info,:size_t,:pointer,:pointer], :cl_int
|
1748
|
+
attach_function :clCreateProgramWithSource, [Context,:cl_uint,:pointer,:pointer,:pointer], Program
|
1749
|
+
attach_function :clCreateProgramWithBinary, [Context,:cl_uint,:pointer,:pointer,:pointer,:pointer,:pointer], Program
|
1750
|
+
attach_function :clCreateProgramWithBuiltInKernels, [Context,:cl_uint,:pointer,:pointer,:pointer], Program
|
1751
|
+
attach_function :clRetainProgram, [Program], :cl_int
|
1752
|
+
attach_function :clReleaseProgram, [Program], :cl_int
|
1753
|
+
callback :clBuildProgram_notify, [Program.by_ref,:pointer], :void
|
1754
|
+
attach_function :clBuildProgram, [Program,:cl_uint,:pointer,:pointer,:clBuildProgram_notify,:pointer], :cl_int
|
1755
|
+
callback :clCompileProgram_notify, [Program.by_ref,:pointer], :void
|
1756
|
+
attach_function :clCompileProgram, [Program,:cl_uint,:pointer,:pointer,:cl_uint,:pointer,:pointer,:clCompileProgram_notify,:pointer], :cl_int
|
1757
|
+
callback :clLinkProgram_notify, [Program.by_ref,:pointer], :void
|
1758
|
+
attach_function :clLinkProgram, [Context,:cl_uint,:pointer,:pointer,:cl_uint,:pointer,:clLinkProgram_notify,:pointer,:pointer], Program
|
1759
|
+
attach_function :clUnloadPlatformCompiler, [Platform], :cl_int
|
1760
|
+
attach_function :clGetProgramInfo, [Program,:cl_program_info,:size_t,:pointer,:pointer], :cl_int
|
1761
|
+
attach_function :clGetProgramBuildInfo, [Program,Device,:cl_program_build_info,:size_t,:pointer,:pointer], :cl_int
|
1762
|
+
attach_function :clCreateKernel, [Program,:pointer,:pointer], Kernel
|
1763
|
+
attach_function :clCreateKernelsInProgram, [Program,:cl_uint,:pointer,:pointer], :cl_int
|
1764
|
+
attach_function :clRetainKernel, [Kernel], :cl_int
|
1765
|
+
attach_function :clReleaseKernel, [Kernel], :cl_int
|
1766
|
+
attach_function :clSetKernelArg, [Kernel,:cl_uint,:size_t,:pointer], :cl_int
|
1767
|
+
attach_function :clGetKernelInfo, [Kernel,:cl_kernel_info,:size_t,:pointer,:pointer], :cl_int
|
1768
|
+
attach_function :clGetKernelArgInfo, [Kernel,:cl_uint,:cl_kernel_arg_info,:size_t,:pointer,:pointer], :cl_int
|
1769
|
+
attach_function :clGetKernelWorkGroupInfo, [Kernel,Device,:cl_kernel_work_group_info,:size_t,:pointer,:pointer], :cl_int
|
1770
|
+
attach_function :clWaitForEvents, [:cl_uint,:pointer], :cl_int
|
1771
|
+
attach_function :clGetEventInfo, [Event,:cl_event_info,:size_t,:pointer,:pointer], :cl_int
|
1772
|
+
attach_function :clCreateUserEvent, [Context,:pointer], Event
|
1773
|
+
attach_function :clRetainEvent, [Event], :cl_int
|
1774
|
+
attach_function :clReleaseEvent, [Event], :cl_int
|
1775
|
+
attach_function :clSetUserEventStatus, [Event,:cl_int], :cl_int
|
1776
|
+
callback :clSetEventCallback_notify, [Event.by_ref,:cl_int,:pointer], :void
|
1777
|
+
attach_function :clSetEventCallback, [Event,:cl_int,:clSetEventCallback_notify,:pointer], :cl_int
|
1778
|
+
attach_function :clGetEventProfilingInfo, [Event,:cl_profiling_info,:size_t,:pointer,:pointer], :cl_int
|
1779
|
+
attach_function :clFlush, [CommandQueue], :cl_int
|
1780
|
+
attach_function :clFinish, [CommandQueue], :cl_int
|
1781
|
+
attach_function :clEnqueueReadBuffer, [CommandQueue,Mem,:cl_bool,:size_t,:size_t,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1782
|
+
attach_function :clEnqueueReadBufferRect, [CommandQueue,Mem,:cl_bool,:pointer,:pointer,:pointer,:size_t,:size_t,:size_t,:size_t,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1783
|
+
attach_function :clEnqueueWriteBuffer, [CommandQueue,Mem,:cl_bool,:size_t,:size_t,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1784
|
+
attach_function :clEnqueueWriteBufferRect, [CommandQueue,Mem,:cl_bool,:pointer,:pointer,:pointer,:size_t,:size_t,:size_t,:size_t,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1785
|
+
attach_function :clEnqueueFillBuffer, [CommandQueue,Mem,:pointer,:size_t,:size_t,:size_t,:cl_uint,:pointer,:pointer], :cl_int
|
1786
|
+
attach_function :clEnqueueCopyBuffer, [CommandQueue,Mem,Mem,:size_t,:size_t,:size_t,:cl_uint,:pointer,:pointer], :cl_int
|
1787
|
+
attach_function :clEnqueueCopyBufferRect, [CommandQueue,Mem,Mem,:pointer,:pointer,:pointer,:size_t,:size_t,:size_t,:size_t,:cl_uint,:pointer,:pointer], :cl_int
|
1788
|
+
attach_function :clEnqueueReadImage, [CommandQueue,Mem,:cl_bool,:pointer,:pointer,:size_t,:size_t,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1789
|
+
attach_function :clEnqueueWriteImage, [CommandQueue,Mem,:cl_bool,:pointer,:pointer,:size_t,:size_t,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1790
|
+
attach_function :clEnqueueFillImage, [CommandQueue,Mem,:pointer,:pointer,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1791
|
+
attach_function :clEnqueueCopyImage, [CommandQueue,Mem,Mem,:pointer,:pointer,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1792
|
+
attach_function :clEnqueueCopyImageToBuffer, [CommandQueue,Mem,Mem,:pointer,:pointer,:size_t,:cl_uint,:pointer,:pointer], :cl_int
|
1793
|
+
attach_function :clEnqueueCopyBufferToImage, [CommandQueue,Mem,Mem,:size_t,:pointer,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1794
|
+
attach_function :clEnqueueMapBuffer, [CommandQueue,Mem,:cl_bool,:cl_map_flags,:size_t,:size_t,:cl_uint,:pointer,:pointer,:pointer], :pointer
|
1795
|
+
attach_function :clEnqueueMapImage, [CommandQueue,Mem,:cl_bool,:cl_map_flags,:pointer,:pointer,:pointer,:pointer,:cl_uint,:pointer,:pointer,:pointer], :pointer
|
1796
|
+
attach_function :clEnqueueUnmapMemObject, [CommandQueue,Mem,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1797
|
+
attach_function :clEnqueueMigrateMemObjects, [CommandQueue,:cl_uint,:pointer,:cl_mem_migration_flags,:cl_uint,:pointer,:pointer], :cl_int
|
1798
|
+
attach_function :clEnqueueNDRangeKernel, [CommandQueue,Kernel,:cl_uint,:pointer,:pointer,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1799
|
+
attach_function :clEnqueueTask, [CommandQueue,Kernel,:cl_uint,:pointer,:pointer], :cl_int
|
1800
|
+
callback :clEnqueueNativeKernel_notify, [:pointer], :void
|
1801
|
+
attach_function :clEnqueueNativeKernel, [CommandQueue,:clEnqueueNativeKernel_notify,:pointer,:size_t,:cl_uint,:pointer,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1802
|
+
attach_function :clEnqueueMarkerWithWaitList, [CommandQueue,:cl_uint,:pointer,:pointer], :cl_int
|
1803
|
+
attach_function :clEnqueueBarrierWithWaitList, [CommandQueue,:cl_uint,:pointer,:pointer], :cl_int
|
1804
|
+
attach_function :clGetExtensionFunctionAddressForPlatform, [Platform,:pointer], :pointer
|
1805
|
+
attach_function :clCreateImage2D, [Context,:cl_mem_flags,:pointer,:size_t,:size_t,:size_t,:pointer,:pointer], Mem
|
1806
|
+
attach_function :clCreateImage3D, [Context,:cl_mem_flags,:pointer,:size_t,:size_t,:size_t,:size_t,:size_t,:pointer,:pointer], Mem
|
1807
|
+
attach_function :clEnqueueMarker, [CommandQueue,:pointer], :cl_int
|
1808
|
+
attach_function :clEnqueueWaitForEvents, [CommandQueue,:cl_uint,:pointer], :cl_int
|
1809
|
+
attach_function :clEnqueueBarrier, [CommandQueue], :cl_int
|
1810
|
+
attach_function :clUnloadCompiler, [:void], :cl_int
|
1811
|
+
attach_function :clGetExtensionFunctionAddress, [:pointer], :pointer
|
1812
|
+
attach_function :clCreateFromGLBuffer, [Context,:cl_mem_flags,:cl_GLuint,:pointer], Mem
|
1813
|
+
attach_function :clCreateFromGLTexture, [Context,:cl_mem_flags,:cl_GLenum,:cl_GLint,:cl_GLuint,:pointer], Mem
|
1814
|
+
attach_function :clCreateFromGLRenderbuffer, [Context,:cl_mem_flags,:cl_GLuint,:pointer], Mem
|
1815
|
+
attach_function :clGetGLObjectInfo, [Mem,:pointer,:pointer], :cl_int
|
1816
|
+
attach_function :clGetGLTextureInfo, [Mem,:cl_gl_texture_info,:size_t,:pointer,:pointer], :cl_int
|
1817
|
+
attach_function :clEnqueueAcquireGLObjects, [CommandQueue,:cl_uint,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1818
|
+
attach_function :clEnqueueReleaseGLObjects, [CommandQueue,:cl_uint,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1819
|
+
attach_function :clCreateFromGLTexture2D, [Context,:cl_mem_flags,:cl_GLenum,:cl_GLint,:cl_GLuint,:pointer], Mem
|
1820
|
+
attach_function :clCreateFromGLTexture3D, [Context,:cl_mem_flags,:cl_GLenum,:cl_GLint,:cl_GLuint,:pointer], Mem
|
1821
|
+
attach_function :clGetGLContextInfoKHR, [:pointer,:cl_gl_context_info,:size_t,:pointer,:pointer], :cl_int
|
1822
|
+
attach_function :clReleaseDeviceEXT, [Device], :cl_int
|
1823
|
+
attach_function :clRetainDeviceEXT, [Device], :cl_int
|
1824
|
+
attach_function :clCreateSubDevicesEXT, [Device,:pointer,:cl_uint,:pointer,:pointer], :cl_int
|
1825
|
+
attach_function :clCreateEventFromGLsyncKHR, [Context,GLsync,:pointer], Event
|
1826
|
+
end
|