opencl_ruby_ffi 1.0.9 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1055,6 +1055,11 @@ module OpenCL
1055
1055
  include InnerGenerator
1056
1056
  end
1057
1057
 
1058
+ def inspect
1059
+ p = properties
1060
+ return "#<#{self.class.name}: -> #{device.inspect}#{ 0 != p.to_i ? " (#{p})" : ""}>"
1061
+ end
1062
+
1058
1063
  # Returns the Context associated to the CommandQueue
1059
1064
  def context
1060
1065
  ptr = FFI::MemoryPointer::new( Context )
@@ -1094,6 +1099,16 @@ module OpenCL
1094
1099
  # Returns the :cl_command_queue_properties used to create the CommandQueue
1095
1100
  eval get_info("CommandQueue", :cl_command_queue_properties, "PROPERTIES")
1096
1101
 
1102
+ ##
1103
+ # :method: priority_khr
1104
+ # Returns the :cl_queue_priority_khr used to create the CommandQueue (2.1 and cl_khr_priority_hints required)
1105
+ eval get_info("CommandQueue", :cl_queue_priority_khr, "PRIORITY_KHR")
1106
+
1107
+ ##
1108
+ # :method: throttle_khr
1109
+ # Returns the :cl_queue_throttle_khr used to create the CommandQueue (2.1 and cl_khr_throttle_hints required)
1110
+ eval get_info("CommandQueue", :cl_queue_throttle_khr, "THROTTLE_KHR")
1111
+
1097
1112
  # Enqueues a kernel as a task using the CommandQueue
1098
1113
  #
1099
1114
  # ==== Attributes
@@ -62,6 +62,10 @@ module OpenCL
62
62
  include InnerGenerator
63
63
  end
64
64
 
65
+ def inspect
66
+ return "#<#{self.class.name}: #{self.devices}>"
67
+ end
68
+
65
69
  ##
66
70
  # :method: reference_count
67
71
  # Returns the reference count of the Context
@@ -72,7 +76,31 @@ module OpenCL
72
76
  ##
73
77
  # :method: properties
74
78
  # the Array of :cl_context_properties used to create the Context
75
- eval get_info_array("Context", :cl_context_properties, "PROPERTIES")
79
+ def properties
80
+ ptr1 = FFI::MemoryPointer::new( :size_t, 1)
81
+ error = OpenCL.clGetContextInfo(self, PROPERTIES, 0, nil, ptr1)
82
+ error_check(error)
83
+ return [] if ptr1.read_size_t == 0
84
+ ptr2 = FFI::MemoryPointer::new( ptr1.read_size_t )
85
+ error = OpenCL.clGetContextInfo(self, PROPERTIES, ptr1.read_size_t, ptr2, nil)
86
+ error_check(error)
87
+ arr = ptr2.get_array_of_cl_context_properties(0, ptr1.read_size_t/ FFI.find_type(:cl_context_properties).size)
88
+ return arr if arr.length == 1 and arr[0].to_i == 0
89
+ arr_2 = []
90
+ while arr.length > 2 do
91
+ prop = arr.shift.to_i
92
+ arr_2.push Properties::new(prop)
93
+ return arr_2 if arr.length <= 0
94
+ if prop == Properties::PLATFORM then
95
+ arr_2.push Platform::new(arr.shift)
96
+ else
97
+ arr_2.push arr.shift.to_i
98
+ end
99
+ return arr_2 if arr.length <= 0
100
+ end
101
+ arr_2.push arr.shift.to_i if arr.length > 0
102
+ return arr_2
103
+ end
76
104
 
77
105
  # Returns the platform associated to the Context
78
106
  def platform
@@ -117,6 +145,7 @@ module OpenCL
117
145
  # * +:flags+ - a single or an Array of :cl_mem_flags specifying the flags to be used when creating the Buffer
118
146
  def supported_image_formats( image_type, options = {} )
119
147
  flags = get_flags( options )
148
+ flags = Mem::Flags::READ_WRITE if flags.to_i == 0 #ensure default READ_WRITE, Intel bug.
120
149
  num_image_formats = FFI::MemoryPointer::new( :cl_uint )
121
150
  error = OpenCL.clGetSupportedImageFormats( self, flags, image_type, 0, nil, num_image_formats )
122
151
  error_check(error)
@@ -54,6 +54,10 @@ module OpenCL
54
54
  include InnerGenerator
55
55
  end
56
56
 
57
+ def inspect
58
+ return "#<#{self.class.name}: #{name} (#{pointer.to_i})>"
59
+ end
60
+
57
61
  #:stopdoc:
58
62
  DRIVER_VERSION = 0x102D
59
63
  #:startdoc:
@@ -189,7 +193,17 @@ module OpenCL
189
193
  ##
190
194
  # :method: partition_properties()
191
195
  # Returns the list of partition types supported by the Device
192
- eval get_info_array("Device", :cl_device_partition_property, "PARTITION_PROPERTIES")
196
+ def partition_properties
197
+ ptr1 = FFI::MemoryPointer::new( :size_t, 1)
198
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_PROPERTIES, 0, nil, ptr1)
199
+ error_check(error)
200
+ ptr2 = FFI::MemoryPointer::new( ptr1.read_size_t )
201
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_PROPERTIES, ptr1.read_size_t, ptr2, nil)
202
+ error_check(error)
203
+ arr = ptr2.get_array_of_cl_device_partition_property(0, ptr1.read_size_t/ FFI.find_type(:cl_device_partition_property).size)
204
+ arr.reject! { |e| e.null? }
205
+ return arr.collect { |e| Partition::new(e.to_i) }
206
+ end
193
207
 
194
208
  ##
195
209
  # :method: svm_capabilities()
@@ -198,17 +212,38 @@ module OpenCL
198
212
 
199
213
  # Return an Array of partition properties names representing the partition type supported by the device
200
214
  def partition_properties_names
201
- prop_names = []
202
- props = self.partition_properties
203
- %w( PARTITION_EQUALLY PARTITION_BY_COUNTS PARTITION_BY_AFFINITY_DOMAIN ).each { |prop|
204
- prop_names.push(prop) if props.include?(Device.const_get(prop))
205
- }
215
+ self.partition_properties.collect { |p| p.name }
206
216
  end
207
217
 
208
218
  ##
209
219
  # :method: partition_type()
210
220
  # Returns a list of :cl_device_partition_property used to create the Device
211
- eval get_info_array("Device", :cl_device_partition_property, "PARTITION_TYPE")
221
+ def partition_type
222
+ ptr1 = FFI::MemoryPointer::new( :size_t, 1)
223
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_TYPE, 0, nil, ptr1)
224
+ error_check(error)
225
+ ptr2 = FFI::MemoryPointer::new( ptr1.read_size_t )
226
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_TYPE, ptr1.read_size_t, ptr2, nil)
227
+ error_check(error)
228
+ arr = ptr2.get_array_of_cl_device_partition_property(0, ptr1.read_size_t/ FFI.find_type(:cl_device_partition_property).size)
229
+ if arr.first.to_i == Partition::BY_NAMES_EXT then
230
+ arr_2 = []
231
+ arr_2.push(Partition::new(arr.first.to_i))
232
+ i = 1
233
+ return arr_2 if arr.length <= i
234
+ while arr[i].to_i - (0x1 << FFI::Pointer.size * 8) != Partition::BY_NAMES_LIST_END_EXT do
235
+ arr_2[i] = arr[i].to_i
236
+ i += 1
237
+ return arr_2 if arr.length <= i
238
+ end
239
+ arr_2[i] = Partition::new(Partition::BY_NAMES_LIST_END_EXT)
240
+ arr_2[i+1] = 0
241
+ return arr_2
242
+ else
243
+ return arr.collect { |e| Partition::new(e.to_i) }
244
+ end
245
+ end
246
+ #eval get_info_array("Device", :cl_device_partition_property, "PARTITION_TYPE")
212
247
 
213
248
  # Returns the Platform the Device belongs to
214
249
  def platform
@@ -73,6 +73,10 @@ module OpenCL
73
73
  include InnerGenerator
74
74
  end
75
75
 
76
+ def inspect
77
+ return "#<#{self.class.name}: #{command_type}>"
78
+ end
79
+
76
80
  # Returns the CommandQueue associated with the Event, if it exists
77
81
  def command_queue
78
82
  ptr = FFI::MemoryPointer::new( CommandQueue )
@@ -120,7 +120,7 @@ module OpenCL
120
120
  #
121
121
  # ==== Options
122
122
  #
123
- # * +:flags+ - a single or an Array of :cl_mem_flags specifying the flags to be used when creating the Image (default Mem::READ_WRITE)
123
+ # * +:flags+ - a single or an Array of :cl_mem_flags specifying the flags to be used when creating the Image
124
124
  def self.create_from_gl_render_buffer( context, renderbuffer, options = {} )
125
125
  flags = get_flags( options )
126
126
  error = FFI::MemoryPointer::new( :cl_int )
@@ -144,7 +144,7 @@ module OpenCL
144
144
  # ==== Options
145
145
  #
146
146
  # * +:miplevel+ - a :GLint specifying the mipmap level to be used (default 0)
147
- # * +:flags+ - a single or an Array of :cl_mem_flags specifying the flags to be used when creating the Image (default Mem::READ_WRITE)
147
+ # * +:flags+ - a single or an Array of :cl_mem_flags specifying the flags to be used when creating the Image
148
148
  def self.create_from_gl_texture( context, texture_target, texture, options = {} )
149
149
  if context.platform.version_number < 1.2 then
150
150
  error_check(INVALID_OPERATION)
@@ -220,6 +220,13 @@ module OpenCL
220
220
  # Maps the cl_mem OpenCL objects of type CL_MEM_OBJECT_IMAGE*
221
221
  class Image #< Mem
222
222
 
223
+ def inspect
224
+ h = height
225
+ d = depth
226
+ f = flags
227
+ return "#<#{self.class.name}: #{format.channel_order}, #{format.channel_data_type}, #{width}#{h != 0 ? "x#{h}" : ""}#{d != 0 ? "x#{d}" : ""} (#{size})#{f.to_i != 0 ? " (#{f})" : "" }>"
228
+ end
229
+
223
230
  ##
224
231
  # :method: element_size
225
232
  # Returns the element_size of the Image
@@ -51,6 +51,10 @@ module OpenCL
51
51
  include InnerGenerator
52
52
  end
53
53
 
54
+ def inspect
55
+ return "#<#{self.class.name}: #{name}>"
56
+ end
57
+
54
58
  # Maps the logical cl arg object
55
59
  class Arg
56
60
  include InnerInterface
@@ -26,6 +26,11 @@ module OpenCL
26
26
  include InnerGenerator
27
27
  end
28
28
 
29
+ def inspect
30
+ f = flags
31
+ return "#<#{self.class.name}: #{size}#{ 0 != f.to_i ? " (#{f})" : ""}>"
32
+ end
33
+
29
34
  # Returns the Context associated to the Mem
30
35
  def context
31
36
  ptr = FFI::MemoryPointer::new( Context )
@@ -27,7 +27,12 @@ module OpenCL
27
27
  class << self
28
28
  include InnerGenerator
29
29
  end
30
-
30
+
31
+ def inspect
32
+ f = flags
33
+ return "#<#{self.class.inspect}: #{packet_size}x#{max_packets}#{ 0 != f.to_i ? " (#{f})" : ""}>"
34
+ end
35
+
31
36
  ##
32
37
  # :method: packet_size
33
38
  # Returns the packet_size of the Pipe
@@ -77,6 +77,10 @@ module OpenCL
77
77
  include InnerGenerator
78
78
  end
79
79
 
80
+ def inspect
81
+ return "#<#{self.class.name}: #{self.name}>"
82
+ end
83
+
80
84
  ##
81
85
  # :method: icd_suffix_khr()
82
86
  # Returns a String containing the function name suffix used to identify extension functions to be directed to this platform by the ICD Loader
@@ -210,6 +210,15 @@ module OpenCL
210
210
  class << self
211
211
  include InnerGenerator
212
212
  end
213
+
214
+ def inspect
215
+ success = false
216
+ build_status.each { |d,s|
217
+ success |= true if s.to_i == BuildStatus::SUCCESS
218
+ }
219
+ return "#<#{self.class.name}: #{success ? kernel_names : ""}>"
220
+ end
221
+
213
222
  alias_method :orig_method_missing, :method_missing
214
223
 
215
224
  # Intercepts a call to a missing method and tries to see if it is defined as a Kernel inside
@@ -237,14 +246,18 @@ module OpenCL
237
246
 
238
247
  # Returns an Array of String representing the Kernel names inside the Program
239
248
  def kernel_names
240
- kernel_names_size = FFI::MemoryPointer::new( :size_t )
241
- error = OpenCL.clGetProgramInfo( self, KERNEL_NAMES, 0, nil, kernel_names_size)
242
- error_check(error)
243
- k_names = FFI::MemoryPointer::new( kernel_names_size.read_size_t )
244
- error = OpenCL.clGetProgramInfo( self, KERNEL_NAMES, kernel_names_size.read_size_t, k_names, nil)
245
- error_check(error)
246
- k_names_string = k_names.read_string
247
- return k_names_string.split(";")
249
+ if context.platform.version_number < 1.2 then
250
+ return kernels.collect(&:name)
251
+ else
252
+ kernel_names_size = FFI::MemoryPointer::new( :size_t )
253
+ error = OpenCL.clGetProgramInfo( self, KERNEL_NAMES, 0, nil, kernel_names_size)
254
+ error_check(error)
255
+ k_names = FFI::MemoryPointer::new( kernel_names_size.read_size_t )
256
+ error = OpenCL.clGetProgramInfo( self, KERNEL_NAMES, kernel_names_size.read_size_t, k_names, nil)
257
+ error_check(error)
258
+ k_names_string = k_names.read_string
259
+ return k_names_string.split(";")
260
+ end
248
261
  end
249
262
 
250
263
  # Returns the concatenated Program sources
@@ -15,6 +15,10 @@ module OpenCL
15
15
  @size = size
16
16
  end
17
17
 
18
+ def inspect
19
+ return "#<#{self.class.name}: #{@size}>"
20
+ end
21
+
18
22
  # creates a new SVMPointer relative to an existing one from an offset
19
23
  def +( offset )
20
24
  return SVMPointer::new( self.address + offset, @context, @size, @base )
@@ -29,30 +29,30 @@ module OpenCL
29
29
  prop_size += 2 if options[:mip_filter_mode]
30
30
  prop_size += 2 if options[:lod_min]
31
31
  prop_size += 2 if options[:lod_max]
32
- properties = FFI::MemoryPointer::new( :cl_sampler_properties)
33
- properties[0].write_cl_sampler_properties( Sampler::NORMALIZED_COORDS )
34
- properties[1].write_cl_sampler_properties( normalized_coords )
35
- properties[2].write_cl_sampler_properties( Sampler::ADDRESSING_MODE )
36
- properties[3].write_cl_sampler_properties( addressing_mode )
37
- properties[4].write_cl_sampler_properties( Sampler::FILTER_MODE )
38
- properties[5].write_cl_sampler_properties( filter_mode )
32
+ properties = FFI::MemoryPointer::new( :cl_sampler_info )
33
+ properties[0].write_cl_sampler_info( Sampler::NORMALIZED_COORDS )
34
+ properties[1].write_cl_bool( normalized_coords )
35
+ properties[2].write_cl_sampler_info( Sampler::ADDRESSING_MODE )
36
+ properties[3].write_cl_addressing_mode( addressing_mode )
37
+ properties[4].write_cl_sampler_info( Sampler::FILTER_MODE )
38
+ properties[5].write_cl_filter_mode( filter_mode )
39
39
  prop_indx = 6
40
40
  if options[:mip_filter_mode] then
41
- properties[prop_indx].write_cl_sampler_properties( Sampler::MIP_FILTER_MODE )
42
- properties[prop_indx+1].write_cl_sampler_properties( options[:mip_filter_mode] )
41
+ properties[prop_indx].write_cl_sampler_info( Sampler::MIP_FILTER_MODE )
42
+ properties[prop_indx+1].write_cl_filter_mode( options[:mip_filter_mode] )
43
43
  prop_indx += 2
44
44
  end
45
45
  if options[:lod_min] then
46
- properties[prop_indx].write_cl_sampler_properties( Sampler::LOD_MIN )
46
+ properties[prop_indx].write_cl_sampler_info( Sampler::LOD_MIN )
47
47
  properties[prop_indx+1].write_float( options[:lod_min] )
48
48
  prop_indx += 2
49
49
  end
50
50
  if options[:lod_max] then
51
- properties[prop_indx].write_cl_sampler_properties( Sampler::LOD_MAX )
51
+ properties[prop_indx].write_cl_sampler_info( Sampler::LOD_MAX )
52
52
  properties[prop_indx+1].write_float( options[:lod_max] )
53
53
  prop_indx += 2
54
54
  end
55
- properties[prop_indx].write_cl_sampler_properties( 0 )
55
+ properties[prop_indx].write_cl_sampler_info( 0 )
56
56
  sampler_ptr = clCreateSamplerWithProperties( context, properties, error )
57
57
  end
58
58
  error_check(error.read_cl_int)
@@ -67,6 +67,10 @@ module OpenCL
67
67
  include InnerGenerator
68
68
  end
69
69
 
70
+ def inspect
71
+ return "#<#{self.class.name}: #{addressing_mode} #{filter_mode} normalized: #{normalized_coords}>"
72
+ end
73
+
70
74
  # Returns the context associated with the Sampler
71
75
  def context
72
76
  ptr = FFI::MemoryPointer::new( Context )
@@ -51,6 +51,10 @@ module OpenCL
51
51
  layout :image_channel_order, :cl_channel_order,
52
52
  :image_channel_data_type, :cl_channel_type
53
53
 
54
+ def inspect
55
+ return "#<#{self.class.name}: #{channel_order} #{channel_data_type}>"
56
+ end
57
+
54
58
  # Creates a new ImageFormat from an image channel order and data type
55
59
  def initialize( image_channel_order, image_channel_data_type )
56
60
  super()
@@ -220,7 +224,7 @@ module OpenCL
220
224
  if options[:properties] then
221
225
  properties = FFI::MemoryPointer::new( :cl_context_properties, options[:properties].length + 1 )
222
226
  options[:properties].each_with_index { |e,i|
223
- properties[i].write_cl_context_properties(e)
227
+ properties[i].write_cl_context_properties(e.respond_to?(:to_ptr) ? e : e.to_i)
224
228
  }
225
229
  properties[options[:properties].length].write_cl_context_properties(0)
226
230
  end
@@ -259,6 +263,8 @@ module OpenCL
259
263
  :cl_device_local_mem_type => Device::LocalMemType,
260
264
  :cl_device_exec_capabilities => Device::ExecCapabilities,
261
265
  :cl_command_queue_properties => CommandQueue::Properties,
266
+ :cl_queue_priority_khr => CommandQueue::PriorityKHR,
267
+ :cl_queue_throttle_khr => CommandQueue::ThrottleKHR,
262
268
  :cl_device_affinity_domain => Device::AffinityDomain,
263
269
  :cl_device_svm_capabilities => Device::SVMCapabilities,
264
270
  :cl_channel_order => ChannelOrder,
@@ -289,6 +295,14 @@ module OpenCL
289
295
  private_constant :InnerInterface
290
296
  extend InnerInterface
291
297
 
298
+ class Enum
299
+ include InnerInterface
300
+ end
301
+
302
+ class Bitfield
303
+ include InnerInterface
304
+ end
305
+
292
306
  module InnerGenerator
293
307
 
294
308
  private
@@ -324,24 +338,10 @@ EOF
324
338
  ptr1 = FFI::MemoryPointer::new( :size_t, 1)
325
339
  error = OpenCL.clGet#{klass_name}Info(self, #{klass}::#{name}, 0, nil, ptr1)
326
340
  error_check(error)
327
- EOF
328
- if ( klass == "Device" and name == "PARTITION_TYPE" ) or ( klass == "Context" and name == "PROPERTIES" ) then
329
- s+= <<EOF
330
- return [] if ptr1.read_size_t == 0
331
- EOF
332
- end
333
- s += <<EOF
334
341
  ptr2 = FFI::MemoryPointer::new( ptr1.read_size_t )
335
342
  error = OpenCL.clGet#{klass_name}Info(self, #{klass}::#{name}, ptr1.read_size_t, ptr2, nil)
336
343
  error_check(error)
337
344
  arr = ptr2.get_array_of_#{type}(0, ptr1.read_size_t/ FFI.find_type(:#{type}).size)
338
- EOF
339
- if ( klass == "Device" and ( name == "PARTITION_TYPE" or name == "PARTITION_PROPERTIES" ) ) or ( klass == "Context" and name == "PROPERTIES" ) then
340
- s+= <<EOF
341
- arr.reject! { |e| e.null? }
342
- EOF
343
- end
344
- s+= <<EOF
345
345
  return arr
346
346
  end
347
347
  EOF
@@ -252,6 +252,7 @@ module OpenCL
252
252
  MEM_HOST_NO_ACCESS = (1 << 9)
253
253
  MEM_SVM_FINE_GRAIN_BUFFER = (1 << 10)
254
254
  MEM_SVM_ATOMICS = (1 << 11)
255
+ MEM_KERNEL_READ_AND_WRITE = (1 << 12)
255
256
  MIGRATE_MEM_OBJECT_HOST = (1 << 0)
256
257
  MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED = (1 << 1)
257
258
  R = 0x10B0
@@ -472,6 +473,10 @@ module OpenCL
472
473
  GLX_DISPLAY_KHR = 0x200A
473
474
  WGL_HDC_KHR = 0x200B
474
475
  CGL_SHAREGROUP_KHR = 0x200C
476
+ COMMAND_GL_FENCE_SYNC_OBJECT_KHR = 0x200D
477
+ COMMAND_EGL_FENCE_SYNC_OBJECT_KHR = 0x202F
478
+ COMMAND_ACQUIRE_EGL_OBJECTS_KHR = 0x202D
479
+ COMMAND_RELEASE_EGL_OBJECTS_KHR = 0x202E
475
480
  DEVICE_HALF_FP_CONFIG = 0x1033
476
481
  PLATFORM_ICD_SUFFIX_KHR = 0x0920
477
482
  PLATFORM_NOT_FOUND_KHR = -1001
@@ -508,6 +513,12 @@ module OpenCL
508
513
  QUEUE_THROTTLE_HIGH_KHR = (1<<0)
509
514
  QUEUE_THROTTLE_MED_KHR = (1<<1)
510
515
  QUEUE_THROTTLE_LOW_KHR = (1<<2)
516
+ COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR = 0x202B
517
+ COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR = 0x202C
518
+ COMMAND_ACQUIRE_D3D10_OBJECTS_KHR = 0x4017
519
+ COMMAND_RELEASE_D3D10_OBJECTS_KHR = 0x4018
520
+ COMMAND_ACQUIRE_D3D11_OBJECTS_KHR = 0x4020
521
+ COMMAND_RELEASE_D3D11_OBJECTS_KHR = 0x4021
511
522
  #:startdoc:
512
523
  # Parent claas to map OpenCL errors, and is used to raise unknown errors
513
524
  class Error < StandardError
@@ -543,6 +554,33 @@ module OpenCL
543
554
  return "#{@code}"
544
555
  end
545
556
 
557
+ # Represents the OpenCL CL_INVALID_PARTITION_NAME_EXT error
558
+ class INVALID_PARTITION_NAME_EXT
559
+
560
+ # Initilizes code to -1059
561
+ def initialize
562
+ super(-1059)
563
+ end
564
+
565
+ # Returns a string representing the name corresponding to the error classe
566
+ def self.name
567
+ return "INVALID_PARTITION_NAME_EXT"
568
+ end
569
+
570
+ # Returns a string representing the name corresponding to the error
571
+ def name
572
+ return "INVALID_PARTITION_NAME_EXT"
573
+ end
574
+
575
+ def self.code
576
+ return -1059
577
+ end
578
+
579
+ end
580
+
581
+ CLASSES[-1059] = INVALID_PARTITION_NAME_EXT
582
+ InvalidPartitionNameExt = INVALID_PARTITION_NAME_EXT
583
+
546
584
  # Represents the OpenCL CL_PLATFORM_NOT_FOUND_KHR error
547
585
  class PLATFORM_NOT_FOUND_KHR < Error
548
586
 
@@ -2345,22 +2383,27 @@ module OpenCL
2345
2383
  FFI.typedef :cl_uint, :cl_gl_texture_info
2346
2384
  FFI.typedef :cl_uint, :cl_gl_platform_info
2347
2385
  FFI.typedef :cl_uint, :cl_gl_context_info
2386
+ FFI.typedef :cl_uint, :cl_queue_priority_khr
2387
+ FFI.typedef :cl_uint, :cl_queue_throttle_khr
2348
2388
  # A parent class to represent OpenCL enums that use :cl_uint
2349
2389
  class Enum
2350
2390
  # extend FFI::DataConverter
2351
2391
  # native_type :cl_uint
2352
- @@codes = {}
2392
+ class << self
2393
+ attr_reader :codes
2394
+ end
2395
+ @codes = {}
2353
2396
 
2354
2397
  # Initializes an enum with the given val
2355
2398
  def initialize( val )
2356
- OpenCL::check_error( OpenCL::INVALID_VALUE ) if not @@codes[val]
2399
+ error_check( OpenCL::INVALID_VALUE ) if not self.class.codes[val]
2357
2400
  super()
2358
2401
  @val = val
2359
2402
  end
2360
2403
 
2361
2404
  # Sets the internal value of the enum
2362
2405
  def val=(v)
2363
- OpenCL::check_error( OpenCL::INVALID_VALUE ) if not @@codes[val]
2406
+ error_check( OpenCL::INVALID_VALUE ) if not self.class.codes[val]
2364
2407
  @val = v
2365
2408
  end
2366
2409
 
@@ -2374,11 +2417,27 @@ module OpenCL
2374
2417
  return true if @val == val
2375
2418
  end
2376
2419
 
2420
+ # Returns a String corresponding to the Enum description
2421
+ def inspect
2422
+ return "#<#{self.class.name}: #{self.name}>"
2423
+ end
2424
+
2377
2425
  # Returns a String corresponfing to the Enum value
2378
2426
  def to_s
2379
2427
  return "#{self.name}"
2380
2428
  end
2381
2429
 
2430
+ # Returns a String representing the Enum value name
2431
+ def name
2432
+ return self.class.codes[@val]
2433
+ end
2434
+
2435
+ # Enum should be considered an integer
2436
+ def coerce(other)
2437
+ return [other, FFI::Pointer::new(self.to_i)] if other.is_a?(FFI::Pointer)
2438
+ return [other, self.to_i]
2439
+ end
2440
+
2382
2441
  # Returns the integer representing the Enum value
2383
2442
  def to_i
2384
2443
  return @val
@@ -2436,9 +2495,14 @@ module OpenCL
2436
2495
  return false
2437
2496
  end
2438
2497
 
2498
+ # Returns a String corresponding to the Bitfield description
2499
+ def inspect
2500
+ return "#<#{self.class.name}: #{self}>"
2501
+ end
2502
+
2439
2503
  # Returns a String corresponfing to the Bitfield value
2440
2504
  def to_s
2441
- return "#{self.names}"
2505
+ return "#{self.names.join('|')}"
2442
2506
  end
2443
2507
 
2444
2508
  # Returns the integer representing the Bitfield value
@@ -2451,6 +2515,11 @@ module OpenCL
2451
2515
  return @val
2452
2516
  end
2453
2517
 
2518
+ # Bitfield should be considered an integer
2519
+ def coerce(other)
2520
+ return [other, self.to_i]
2521
+ end
2522
+
2454
2523
  # Returns the bitwise & operation between f and the internal Bitfield representation
2455
2524
  def &(f)
2456
2525
  return self.class::new( @val & f )
@@ -2696,6 +2765,23 @@ module OpenCL
2696
2765
  end
2697
2766
 
2698
2767
  class Device
2768
+ # Enum that maps the :cl_device_partition_property type
2769
+ class Partition < EnumInt
2770
+ EQUALLY = 0x1086
2771
+ BY_COUNTS = 0x1087
2772
+ BY_COUNTS_LIST_END = 0x0
2773
+ BY_AFFINITY_DOMAIN = 0x1088
2774
+ BY_NAMES_EXT = 0x4052
2775
+ BY_NAMES_LIST_END_EXT = -1
2776
+ @codes = {}
2777
+ @codes[0x1086] = 'EQUALLY'
2778
+ @codes[0x1087] = 'BY_COUNTS'
2779
+ @codes[0x0] = 'BY_COUNTS_LIST_END'
2780
+ @codes[0x1088] = 'BY_AFFINITY_DOMAIN'
2781
+ @codes[0x4052] = 'BY_NAMES_EXT'
2782
+ @codes[-1] = 'BY_NAMES_LIST_END_EXT'
2783
+ end
2784
+
2699
2785
  # Bitfield that maps the :cl_device_type type
2700
2786
  class Type < Bitfield
2701
2787
  DEFAULT = (1 << 0)
@@ -2753,25 +2839,19 @@ module OpenCL
2753
2839
  NONE = 0x0
2754
2840
  READ_ONLY_CACHE = 0x1
2755
2841
  READ_WRITE_CACHE = 0x2
2756
- @@codes[0x0] = 'NONE'
2757
- @@codes[0x1] = 'READ_ONLY_CACHE'
2758
- @@codes[0x2] = 'READ_WRITE_CACHE'
2759
- # Returns a String representing the Enum value name
2760
- def name
2761
- return @@codes[@val]
2762
- end
2842
+ @codes = {}
2843
+ @codes[0x0] = 'NONE'
2844
+ @codes[0x1] = 'READ_ONLY_CACHE'
2845
+ @codes[0x2] = 'READ_WRITE_CACHE'
2763
2846
  end
2764
2847
 
2765
2848
  # Enum that maps the :cl_device_local_mem_type type
2766
2849
  class LocalMemType < Enum
2767
2850
  LOCAL = 0x1
2768
2851
  GLOBAL = 0x2
2769
- @@codes[0x1] = 'LOCAL'
2770
- @@codes[0x2] = 'GLOBAL'
2771
- # Returns a String representing the Enum value name
2772
- def name
2773
- return @@codes[@val]
2774
- end
2852
+ @codes = {}
2853
+ @codes[0x1] = 'LOCAL'
2854
+ @codes[0x2] = 'GLOBAL'
2775
2855
  end
2776
2856
 
2777
2857
  # Bitfield that maps the :cl_device_affinity_domain type
@@ -2850,6 +2930,40 @@ module OpenCL
2850
2930
 
2851
2931
  end
2852
2932
 
2933
+ class Context
2934
+ class Properties < Enum
2935
+ PLATFORM = 0x1084
2936
+ INTEROP_USER_SYNC = 0x1085
2937
+ D3D10_DEVICE_KHR = 0x4014
2938
+ ADAPTER_D3D9_KHR = 0x2025
2939
+ ADAPTER_D3D9EX_KHR = 0x2026
2940
+ ADAPTER_DXVA_KHR = 0x2027
2941
+ GL_CONTEXT_KHR = 0x2008
2942
+ CGL_SHAREGROUP_KHR = 0x200C
2943
+ EGL_DISPLAY_KHR = 0x2009
2944
+ GLX_DISPLAY_KHR = 0x200A
2945
+ WGL_HDC_KHR = 0x200B
2946
+ D3D11_DEVICE_KHR = 0x401D
2947
+ MEMORY_INITIALIZE_KHR = 0x2030
2948
+ TERMINATE_KHR = 0x2032
2949
+ @codes = {}
2950
+ @codes[0x1084] = 'PLATFORM'
2951
+ @codes[0x1085] = 'INTEROP_USER_SYNC'
2952
+ @codes[0x4014] = 'D3D10_DEVICE_KHR'
2953
+ @codes[0x2025] = 'ADAPTER_D3D9_KHR'
2954
+ @codes[0x2026] = 'ADAPTER_D3D9EX_KHR'
2955
+ @codes[0x2027] = 'ADAPTER_DXVA_KHR'
2956
+ @codes[0x2008] = 'GL_CONTEXT_KHR'
2957
+ @codes[0x200C] = 'CGL_SHAREGROUP_KHR'
2958
+ @codes[0x2009] = 'EGL_DISPLAY_KHR'
2959
+ @codes[0x200A] = 'GLX_DISPLAY_KHR'
2960
+ @codes[0x200B] = 'WGL_HDC_KHR'
2961
+ @codes[0x401D] = 'D3D11_DEVICE_KHR'
2962
+ @codes[0x2030] = 'MEMORY_INITIALIZE_KHR'
2963
+ @codes[0x2032] = 'TERMINATE_KHR'
2964
+ end
2965
+ end
2966
+
2853
2967
  class CommandQueue < FFI::ManagedStruct
2854
2968
  layout :dummy, :pointer
2855
2969
  #:stopdoc:
@@ -2864,13 +2978,13 @@ module OpenCL
2864
2978
  SIZE = 0x1094
2865
2979
  DEVICE_DEFAULT = 0x1095
2866
2980
  PRIORITY_KHR = 0x1096
2867
- PRIORITY_HIGH_KHR = (1<<0)
2868
- PRIORITY_MED_KHR = (1<<1)
2869
- PRIORITY_LOW_KHR = (1<<2)
2981
+ PRIORITY_HIGH_KHR = (1 << 0)
2982
+ PRIORITY_MED_KHR = (1 << 1)
2983
+ PRIORITY_LOW_KHR = (1 << 2)
2870
2984
  THROTTLE_KHR = 0x1097
2871
- THROTTLE_HIGH_KHR = (1<<0)
2872
- THROTTLE_MED_KHR = (1<<1)
2873
- THROTTLE_LOW_KHR = (1<<2)
2985
+ THROTTLE_HIGH_KHR = (1 << 0)
2986
+ THROTTLE_MED_KHR = (1 << 1)
2987
+ THROTTLE_LOW_KHR = (1 << 2)
2874
2988
  # Creates a new CommandQueue and retains it if specified and aplicable
2875
2989
  def initialize(ptr, retain = true)
2876
2990
  super(ptr)
@@ -2916,6 +3030,25 @@ module OpenCL
2916
3030
  end
2917
3031
  end
2918
3032
 
3033
+ class PriorityKHR < Enum
3034
+ PRIORITY_HIGH_KHR = (1 << 0)
3035
+ PRIORITY_MED_KHR = (1 << 1)
3036
+ PRIORITY_LOW_KHR = (1 << 2)
3037
+ @codes = {}
3038
+ @codes[(1 << 0)] = 'PRIORITY_HIGH_KHR'
3039
+ @codes[(1 << 1)] = 'PRIORITY_MED_KHR'
3040
+ @codes[(1 << 2)] = 'PRIORITY_LOW_KHR'
3041
+ end
3042
+
3043
+ class ThrottleKHR < Enum
3044
+ THROTTLE_HIGH_KHR = (1 << 0)
3045
+ THROTTLE_MED_KHR = (1 << 1)
3046
+ THROTTLE_LOW_KHR = (1 << 2)
3047
+ @codes = {}
3048
+ @codes[(1 << 0)] = 'THROTTLE_HIGH_KHR'
3049
+ @codes[(1 << 1)] = 'THROTTLE_MED_KHR'
3050
+ @codes[(1 << 2)] = 'THROTTLE_LOW_KHR'
3051
+ end
2919
3052
  end
2920
3053
  class Mem < FFI::ManagedStruct
2921
3054
  layout :dummy, :pointer
@@ -2931,6 +3064,7 @@ module OpenCL
2931
3064
  HOST_NO_ACCESS = (1 << 9)
2932
3065
  SVM_FINE_GRAIN_BUFFER = (1 << 10)
2933
3066
  SVM_ATOMICS = (1 << 11)
3067
+ KERNEL_READ_AND_WRITE = (1 << 12)
2934
3068
  BUFFER = 0x10F0
2935
3069
  IMAGE2D = 0x10F1
2936
3070
  IMAGE3D = 0x10F2
@@ -2996,6 +3130,9 @@ module OpenCL
2996
3130
  HOST_WRITE_ONLY = (1 << 7)
2997
3131
  HOST_READ_ONLY = (1 << 8)
2998
3132
  HOST_NO_ACCESS = (1 << 9)
3133
+ SVM_FINE_GRAIN_BUFFER = (1 << 10)
3134
+ SVM_ATOMICS = (1 << 11)
3135
+ KERNEL_READ_AND_WRITE = (1 << 12)
2999
3136
  # Returns an Array of String representing the different flags set
3000
3137
  def names
3001
3138
  fs = []
@@ -3030,18 +3167,15 @@ module OpenCL
3030
3167
  IMAGE1D_ARRAY = 0x10F5
3031
3168
  IMAGE1D_BUFFER = 0x10F6
3032
3169
  PIPE = 0x10F7
3033
- @@codes[0x10F0] = 'BUFFER'
3034
- @@codes[0x10F1] = 'IMAGE2D'
3035
- @@codes[0x10F2] = 'IMAGE3D'
3036
- @@codes[0x10F3] = 'IMAGE2D_ARRAY'
3037
- @@codes[0x10F4] = 'IMAGE1D'
3038
- @@codes[0x10F5] = 'IMAGE1D_ARRAY'
3039
- @@codes[0x10F6] = 'IMAGE1D_BUFFER'
3040
- @@codes[0x10F7] = 'PIPE'
3041
- # Returns a String representing the Enum value name
3042
- def name
3043
- return @@codes[@val]
3044
- end
3170
+ @codes = {}
3171
+ @codes[0x10F0] = 'BUFFER'
3172
+ @codes[0x10F1] = 'IMAGE2D'
3173
+ @codes[0x10F2] = 'IMAGE3D'
3174
+ @codes[0x10F3] = 'IMAGE2D_ARRAY'
3175
+ @codes[0x10F4] = 'IMAGE1D'
3176
+ @codes[0x10F5] = 'IMAGE1D_ARRAY'
3177
+ @codes[0x10F6] = 'IMAGE1D_BUFFER'
3178
+ @codes[0x10F7] = 'PIPE'
3045
3179
  end
3046
3180
 
3047
3181
  # Bitfield that maps the :cl_svm_mem_flags type
@@ -3123,15 +3257,12 @@ module OpenCL
3123
3257
  LIBRARY = 0x2
3124
3258
  EXECUTABLE = 0x4
3125
3259
  INTERMEDIATE = 0x40E1
3126
- @@codes[0x0] = 'NONE'
3127
- @@codes[0x1] = 'COMPILED_OBJECT'
3128
- @@codes[0x2] = 'LIBRARY'
3129
- @@codes[0x4] = 'EXECUTABLE'
3130
- @@codes[0x40E1] = 'INTERMEDIATE'
3131
- # Returns a String representing the Enum value name
3132
- def name
3133
- return @@codes[@val]
3134
- end
3260
+ @codes = {}
3261
+ @codes[0x0] = 'NONE'
3262
+ @codes[0x1] = 'COMPILED_OBJECT'
3263
+ @codes[0x2] = 'LIBRARY'
3264
+ @codes[0x4] = 'EXECUTABLE'
3265
+ @codes[0x40E1] = 'INTERMEDIATE'
3135
3266
  end
3136
3267
 
3137
3268
  end
@@ -3235,14 +3366,11 @@ module OpenCL
3235
3366
  LOCAL = 0x119C
3236
3367
  CONSTANT = 0x119D
3237
3368
  PRIVATE = 0x119E
3238
- @@codes[0x119B] = 'GLOBAL'
3239
- @@codes[0x119C] = 'LOCAL'
3240
- @@codes[0x119D] = 'CONSTANT'
3241
- @@codes[0x119E] = 'PRIVATE'
3242
- # Returns a String representing the Enum value name
3243
- def name
3244
- return @@codes[@val]
3245
- end
3369
+ @codes = {}
3370
+ @codes[0x119B] = 'GLOBAL'
3371
+ @codes[0x119C] = 'LOCAL'
3372
+ @codes[0x119D] = 'CONSTANT'
3373
+ @codes[0x119E] = 'PRIVATE'
3246
3374
  end
3247
3375
 
3248
3376
  # Enum that maps the :cl_kernel_arg_access_qualifier type
@@ -3251,14 +3379,11 @@ module OpenCL
3251
3379
  WRITE_ONLY = 0x11A1
3252
3380
  READ_WRITE = 0x11A2
3253
3381
  NONE = 0x11A3
3254
- @@codes[0x11A0] = 'READ_ONLY'
3255
- @@codes[0x11A1] = 'WRITE_ONLY'
3256
- @@codes[0x11A2] = 'READ_WRITE'
3257
- @@codes[0x11A3] = 'NONE'
3258
- # Returns a String representing the Enum value name
3259
- def name
3260
- return @@codes[@val]
3261
- end
3382
+ @codes = {}
3383
+ @codes[0x11A0] = 'READ_ONLY'
3384
+ @codes[0x11A1] = 'WRITE_ONLY'
3385
+ @codes[0x11A2] = 'READ_WRITE'
3386
+ @codes[0x11A3] = 'NONE'
3262
3387
  end
3263
3388
 
3264
3389
  # Bitfield that maps the :cl_kernel_arg_type_qualifier type
@@ -3357,29 +3482,6 @@ module OpenCL
3357
3482
  end
3358
3483
  end
3359
3484
 
3360
- end
3361
-
3362
- class Sampler
3363
- # Enum that maps the :cl_sampler_properties
3364
- class Type < Enum
3365
- NORMALIZED_COORDS = 0x1152
3366
- ADDRESSING_MODE = 0x1153
3367
- FILTER_MODE = 0x1154
3368
- MIP_FILTER_MODE = 0x1155
3369
- LOD_MIN = 0x1156
3370
- LOD_MAX = 0x1157
3371
- @@codes[0x1152] = 'NORMALIZED_COORDS'
3372
- @@codes[0x1153] = 'ADDRESSING_MODE'
3373
- @@codes[0x1154] = 'FILTER_MODE'
3374
- @@codes[0x1155] = 'MIP_FILTER_MODE'
3375
- @@codes[0x1156] = 'LOD_MIN'
3376
- @@codes[0x1157] = 'LOD_MAX'
3377
- # Returns a String representing the Enum value name
3378
- def name
3379
- return @@codes[@val]
3380
- end
3381
- end
3382
-
3383
3485
  end
3384
3486
  class GLsync < FFI::ManagedStruct
3385
3487
  layout :dummy, :pointer
@@ -3437,30 +3539,27 @@ module OpenCL
3437
3539
  return 0x10C2
3438
3540
  end
3439
3541
  ABGR = 0x10C3
3440
- @@codes[0x10B0] = 'R'
3441
- @@codes[0x10B1] = 'A'
3442
- @@codes[0x10B2] = 'RG'
3443
- @@codes[0x10B3] = 'RA'
3444
- @@codes[0x10B4] = 'RGB'
3445
- @@codes[0x10B5] = 'RGBA'
3446
- @@codes[0x10B6] = 'BGRA'
3447
- @@codes[0x10B7] = 'ARGB'
3448
- @@codes[0x10B8] = 'INTENSITY'
3449
- @@codes[0x10B9] = 'LUMINANCE'
3450
- @@codes[0x10BA] = 'Rx'
3451
- @@codes[0x10BB] = 'RGx'
3452
- @@codes[0x10BC] = 'RGBx'
3453
- @@codes[0x10BD] = 'DEPTH'
3454
- @@codes[0x10BE] = 'DEPTH_STENCIL'
3455
- @@codes[0x10BF] = 'sRGB'
3456
- @@codes[0x10C0] = 'sRGBx'
3457
- @@codes[0x10C1] = 'sRGBA'
3458
- @@codes[0x10C2] = 'sBGRA'
3459
- @@codes[0x10C3] = 'ABGR'
3460
- # Returns a String representing the Enum value name
3461
- def name
3462
- return @@codes[@val]
3463
- end
3542
+ @codes = {}
3543
+ @codes[0x10B0] = 'R'
3544
+ @codes[0x10B1] = 'A'
3545
+ @codes[0x10B2] = 'RG'
3546
+ @codes[0x10B3] = 'RA'
3547
+ @codes[0x10B4] = 'RGB'
3548
+ @codes[0x10B5] = 'RGBA'
3549
+ @codes[0x10B6] = 'BGRA'
3550
+ @codes[0x10B7] = 'ARGB'
3551
+ @codes[0x10B8] = 'INTENSITY'
3552
+ @codes[0x10B9] = 'LUMINANCE'
3553
+ @codes[0x10BA] = 'Rx'
3554
+ @codes[0x10BB] = 'RGx'
3555
+ @codes[0x10BC] = 'RGBx'
3556
+ @codes[0x10BD] = 'DEPTH'
3557
+ @codes[0x10BE] = 'DEPTH_STENCIL'
3558
+ @codes[0x10BF] = 'sRGB'
3559
+ @codes[0x10C0] = 'sRGBx'
3560
+ @codes[0x10C1] = 'sRGBA'
3561
+ @codes[0x10C2] = 'sBGRA'
3562
+ @codes[0x10C3] = 'ABGR'
3464
3563
  end
3465
3564
 
3466
3565
  # Enum that maps the :cl_channel_type type
@@ -3482,27 +3581,24 @@ module OpenCL
3482
3581
  FLOAT = 0x10DE
3483
3582
  UNORM_INT24 = 0x10DF
3484
3583
  UNORM_INT_101010_2 = 0x10E0
3485
- @@codes[0x10D0] = 'SNORM_INT8'
3486
- @@codes[0x10D1] = 'SNORM_INT16'
3487
- @@codes[0x10D2] = 'UNORM_INT8'
3488
- @@codes[0x10D3] = 'UNORM_INT16'
3489
- @@codes[0x10D4] = 'UNORM_SHORT_565'
3490
- @@codes[0x10D5] = 'UNORM_SHORT_555'
3491
- @@codes[0x10D6] = 'UNORM_INT_101010'
3492
- @@codes[0x10D7] = 'SIGNED_INT8'
3493
- @@codes[0x10D8] = 'SIGNED_INT16'
3494
- @@codes[0x10D9] = 'SIGNED_INT32'
3495
- @@codes[0x10DA] = 'UNSIGNED_INT8'
3496
- @@codes[0x10DB] = 'UNSIGNED_INT16'
3497
- @@codes[0x10DC] = 'UNSIGNED_INT32'
3498
- @@codes[0x10DD] = 'HALF_FLOAT'
3499
- @@codes[0x10DE] = 'FLOAT'
3500
- @@codes[0x10DF] = 'UNORM_INT24'
3501
- @@codes[0x10E0] = 'UNORM_INT_101010_2'
3502
- # Returns a String representing the Enum value name
3503
- def name
3504
- return @@codes[@val]
3505
- end
3584
+ @codes = {}
3585
+ @codes[0x10D0] = 'SNORM_INT8'
3586
+ @codes[0x10D1] = 'SNORM_INT16'
3587
+ @codes[0x10D2] = 'UNORM_INT8'
3588
+ @codes[0x10D3] = 'UNORM_INT16'
3589
+ @codes[0x10D4] = 'UNORM_SHORT_565'
3590
+ @codes[0x10D5] = 'UNORM_SHORT_555'
3591
+ @codes[0x10D6] = 'UNORM_INT_101010'
3592
+ @codes[0x10D7] = 'SIGNED_INT8'
3593
+ @codes[0x10D8] = 'SIGNED_INT16'
3594
+ @codes[0x10D9] = 'SIGNED_INT32'
3595
+ @codes[0x10DA] = 'UNSIGNED_INT8'
3596
+ @codes[0x10DB] = 'UNSIGNED_INT16'
3597
+ @codes[0x10DC] = 'UNSIGNED_INT32'
3598
+ @codes[0x10DD] = 'HALF_FLOAT'
3599
+ @codes[0x10DE] = 'FLOAT'
3600
+ @codes[0x10DF] = 'UNORM_INT24'
3601
+ @codes[0x10E0] = 'UNORM_INT_101010_2'
3506
3602
  end
3507
3603
 
3508
3604
  # Enum that maps the :cl_addressing_mode type
@@ -3512,27 +3608,21 @@ module OpenCL
3512
3608
  CLAMP = 0x1132
3513
3609
  REPEAT = 0x1133
3514
3610
  MIRRORED_REPEAT = 0x1134
3515
- @@codes[0x1130] = 'NONE'
3516
- @@codes[0x1131] = 'CLAMP_TO_EDGE'
3517
- @@codes[0x1132] = 'CLAMP'
3518
- @@codes[0x1133] = 'REPEAT'
3519
- @@codes[0x1134] = 'MIRRORED_REPEAT'
3520
- # Returns a String representing the Enum value name
3521
- def name
3522
- return @@codes[@val]
3523
- end
3611
+ @codes = {}
3612
+ @codes[0x1130] = 'NONE'
3613
+ @codes[0x1131] = 'CLAMP_TO_EDGE'
3614
+ @codes[0x1132] = 'CLAMP'
3615
+ @codes[0x1133] = 'REPEAT'
3616
+ @codes[0x1134] = 'MIRRORED_REPEAT'
3524
3617
  end
3525
3618
 
3526
3619
  # Enum that maps the :cl_filter_mode type
3527
3620
  class FilterMode < Enum
3528
3621
  NEAREST = 0x1140
3529
3622
  LINEAR = 0x1141
3530
- @@codes[0x1140] = 'NEAREST'
3531
- @@codes[0x1141] = 'LINEAR'
3532
- # Returns a String representing the Enum value name
3533
- def name
3534
- return @@codes[@val]
3535
- end
3623
+ @codes = {}
3624
+ @codes[0x1140] = 'NEAREST'
3625
+ @codes[0x1141] = 'LINEAR'
3536
3626
  end
3537
3627
 
3538
3628
  # Bitfield that maps the :cl_map_flags type
@@ -3582,40 +3672,57 @@ module OpenCL
3582
3672
  SVM_MEMFILL = 0x120B
3583
3673
  SVM_MAP = 0x120C
3584
3674
  SVM_UNMAP = 0x120D
3585
- @@codes[0x11F0] = 'NDRANGE_KERNEL'
3586
- @@codes[0x11F1] = 'TASK'
3587
- @@codes[0x11F2] = 'NATIVE_KERNEL'
3588
- @@codes[0x11F3] = 'READ_BUFFER'
3589
- @@codes[0x11F4] = 'WRITE_BUFFER'
3590
- @@codes[0x11F5] = 'COPY_BUFFER'
3591
- @@codes[0x11F6] = 'READ_IMAGE'
3592
- @@codes[0x11F7] = 'WRITE_IMAGE'
3593
- @@codes[0x11F8] = 'COPY_IMAGE'
3594
- @@codes[0x11F9] = 'COPY_IMAGE_TO_BUFFER'
3595
- @@codes[0x11FA] = 'COPY_BUFFER_TO_IMAGE'
3596
- @@codes[0x11FB] = 'MAP_BUFFER'
3597
- @@codes[0x11FC] = 'MAP_IMAGE'
3598
- @@codes[0x11FD] = 'UNMAP_MEM_OBJECT'
3599
- @@codes[0x11FE] = 'MARKER'
3600
- @@codes[0x11FF] = 'ACQUIRE_GL_OBJECTS'
3601
- @@codes[0x1200] = 'RELEASE_GL_OBJECTS'
3602
- @@codes[0x1201] = 'READ_BUFFER_RECT'
3603
- @@codes[0x1202] = 'WRITE_BUFFER_RECT'
3604
- @@codes[0x1203] = 'COPY_BUFFER_RECT'
3605
- @@codes[0x1204] = 'USER'
3606
- @@codes[0x1205] = 'BARRIER'
3607
- @@codes[0x1206] = 'MIGRATE_MEM_OBJECTS'
3608
- @@codes[0x1207] = 'FILL_BUFFER'
3609
- @@codes[0x1208] = 'FILL_IMAGE'
3610
- @@codes[0x1209] = 'SVM_FREE'
3611
- @@codes[0x120A] = 'SVM_MEMCPY'
3612
- @@codes[0x120B] = 'SVM_MEMFILL'
3613
- @@codes[0x120C] = 'SVM_MAP'
3614
- @@codes[0x120D] = 'SVM_UNMAP'
3615
- # Returns a String representing the Enum value name
3616
- def name
3617
- return @@codes[@val]
3618
- end
3675
+ GL_FENCE_SYNC_OBJECT_KHR = 0x200D
3676
+ ACQUIRE_DX9_MEDIA_SURFACES_KHR = 0x202B
3677
+ RELEASE_DX9_MEDIA_SURFACES_KHR = 0x202C
3678
+ EGL_FENCE_SYNC_OBJECT_KHR = 0x202F
3679
+ ACQUIRE_EGL_OBJECTS_KHR = 0x202D
3680
+ RELEASE_EGL_OBJECTS_KHR = 0x202E
3681
+ ACQUIRE_D3D10_OBJECTS_KHR = 0x4017
3682
+ RELEASE_D3D10_OBJECTS_KHR = 0x4018
3683
+ ACQUIRE_D3D11_OBJECTS_KHR = 0x4020
3684
+ RELEASE_D3D11_OBJECTS_KHR = 0x4021
3685
+ @codes = {}
3686
+ @codes[0x11F0] = 'NDRANGE_KERNEL'
3687
+ @codes[0x11F1] = 'TASK'
3688
+ @codes[0x11F2] = 'NATIVE_KERNEL'
3689
+ @codes[0x11F3] = 'READ_BUFFER'
3690
+ @codes[0x11F4] = 'WRITE_BUFFER'
3691
+ @codes[0x11F5] = 'COPY_BUFFER'
3692
+ @codes[0x11F6] = 'READ_IMAGE'
3693
+ @codes[0x11F7] = 'WRITE_IMAGE'
3694
+ @codes[0x11F8] = 'COPY_IMAGE'
3695
+ @codes[0x11F9] = 'COPY_IMAGE_TO_BUFFER'
3696
+ @codes[0x11FA] = 'COPY_BUFFER_TO_IMAGE'
3697
+ @codes[0x11FB] = 'MAP_BUFFER'
3698
+ @codes[0x11FC] = 'MAP_IMAGE'
3699
+ @codes[0x11FD] = 'UNMAP_MEM_OBJECT'
3700
+ @codes[0x11FE] = 'MARKER'
3701
+ @codes[0x11FF] = 'ACQUIRE_GL_OBJECTS'
3702
+ @codes[0x1200] = 'RELEASE_GL_OBJECTS'
3703
+ @codes[0x1201] = 'READ_BUFFER_RECT'
3704
+ @codes[0x1202] = 'WRITE_BUFFER_RECT'
3705
+ @codes[0x1203] = 'COPY_BUFFER_RECT'
3706
+ @codes[0x1204] = 'USER'
3707
+ @codes[0x1205] = 'BARRIER'
3708
+ @codes[0x1206] = 'MIGRATE_MEM_OBJECTS'
3709
+ @codes[0x1207] = 'FILL_BUFFER'
3710
+ @codes[0x1208] = 'FILL_IMAGE'
3711
+ @codes[0x1209] = 'SVM_FREE'
3712
+ @codes[0x120A] = 'SVM_MEMCPY'
3713
+ @codes[0x120B] = 'SVM_MEMFILL'
3714
+ @codes[0x120C] = 'SVM_MAP'
3715
+ @codes[0x120D] = 'SVM_UNMAP'
3716
+ @codes[0x200D] = 'GL_FENCE_SYNC_OBJECT_KHR'
3717
+ @codes[0x202B] = 'ACQUIRE_DX9_MEDIA_SURFACES_KHR'
3718
+ @codes[0x202C] = 'RELEASE_DX9_MEDIA_SURFACES_KHR'
3719
+ @codes[0x202F] = 'EGL_FENCE_SYNC_OBJECT_KHR'
3720
+ @codes[0x202D] = 'ACQUIRE_EGL_OBJECTS_KHR'
3721
+ @codes[0x202E] = 'RELEASE_EGL_OBJECTS_KHR'
3722
+ @codes[0x4017] = 'ACQUIRE_D3D10_OBJECTS_KHR'
3723
+ @codes[0x4018] = 'RELEASE_D3D10_OBJECTS_KHR'
3724
+ @codes[0x4020] = 'ACQUIRE_D3D11_OBJECTS_KHR'
3725
+ @codes[0x4021] = 'RELEASE_D3D11_OBJECTS_KHR'
3619
3726
  end
3620
3727
 
3621
3728
  # Enum that maps the :cl_gl_object_type type
@@ -3628,18 +3735,15 @@ module OpenCL
3628
3735
  TEXTURE1D = 0x200F
3629
3736
  TEXTURE1D_ARRAY = 0x2010
3630
3737
  TEXTURE_BUFFER = 0x2011
3631
- @@codes[0x2000] = 'BUFFER'
3632
- @@codes[0x2001] = 'TEXTURE2D'
3633
- @@codes[0x2002] = 'TEXTURE3D'
3634
- @@codes[0x2003] = 'RENDERBUFFER'
3635
- @@codes[0x200E] = 'TEXTURE2D_ARRAY'
3636
- @@codes[0x200F] = 'TEXTURE1D'
3637
- @@codes[0x2010] = 'TEXTURE1D_ARRAY'
3638
- @@codes[0x2011] = 'TEXTURE_BUFFER'
3639
- # Returns a String representing the Enum value name
3640
- def name
3641
- return @@codes[@val]
3642
- end
3738
+ @codes = {}
3739
+ @codes[0x2000] = 'BUFFER'
3740
+ @codes[0x2001] = 'TEXTURE2D'
3741
+ @codes[0x2002] = 'TEXTURE3D'
3742
+ @codes[0x2003] = 'RENDERBUFFER'
3743
+ @codes[0x200E] = 'TEXTURE2D_ARRAY'
3744
+ @codes[0x200F] = 'TEXTURE1D'
3745
+ @codes[0x2010] = 'TEXTURE1D_ARRAY'
3746
+ @codes[0x2011] = 'TEXTURE_BUFFER'
3643
3747
  end
3644
3748
 
3645
3749
  # Enum that maps the :cl_build_status type
@@ -3648,14 +3752,11 @@ module OpenCL
3648
3752
  NONE = -1
3649
3753
  ERROR = -2
3650
3754
  IN_PROGRESS = -3
3651
- @@codes[0] = 'SUCCESS'
3652
- @@codes[-1] = 'NONE'
3653
- @@codes[-2] = 'ERROR'
3654
- @@codes[-3] = 'IN_PROGRESS'
3655
- # Returns a String representing the Enum value name
3656
- def name
3657
- return @@codes[@val]
3658
- end
3755
+ @codes = {}
3756
+ @codes[0] = 'SUCCESS'
3757
+ @codes[-1] = 'NONE'
3758
+ @codes[-2] = 'ERROR'
3759
+ @codes[-3] = 'IN_PROGRESS'
3659
3760
  end
3660
3761
 
3661
3762
  # Enum that maps the command execution status logical type
@@ -3664,14 +3765,11 @@ module OpenCL
3664
3765
  RUNNING = 0x1
3665
3766
  SUBMITTED = 0x2
3666
3767
  QUEUED = 0x3
3667
- @@codes[0x0] = 'COMPLETE'
3668
- @@codes[0x1] = 'RUNNING'
3669
- @@codes[0x2] = 'SUBMITTED'
3670
- @@codes[0x3] = 'QUEUED'
3671
- # Returns a String representing the Enum value name
3672
- def name
3673
- return @@codes[@val]
3674
- end
3768
+ @codes = {}
3769
+ @codes[0x0] = 'COMPLETE'
3770
+ @codes[0x1] = 'RUNNING'
3771
+ @codes[0x2] = 'SUBMITTED'
3772
+ @codes[0x3] = 'QUEUED'
3675
3773
  end
3676
3774
 
3677
3775
  class Image < Mem