opencl_ruby_ffi 1.3.4 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b21d6823d5293898d032505607499b748d65fc45c30b0ba11d618210630a6c0
4
- data.tar.gz: a6439a7eb8f5fbb3f4555ac735b271053ceedc3e5b0367bab14952fb857cdd4d
3
+ metadata.gz: 406f911ff3d3ea9c5f815c7854ea7cd3e4879c51dc583df94fcf73adf0532c6b
4
+ data.tar.gz: 4cc80ef3c64b55142ee8f6db0786b7f9d2062104e8d17df32077545e9dd41bbc
5
5
  SHA512:
6
- metadata.gz: 32995522c19c6180d34879752bab8613f3f0caf9049fa4a10ecb2ab692a46ac6df3a68b122d39e7bb6df44fe4327410cc229127d515be561dea722f4b85cd3b0
7
- data.tar.gz: b2e8933cc719de81412adc6ee3864547f0308b9ae959bf93f8d0806019ffe7c835cea8530dbbc43e84b6a84d4d66b87de6619b3d32089595312870c473efc615
6
+ metadata.gz: cd58bb929a02b1c730f7319bb45fb0f3955e1afc90b5dbb3a1c201439f9cd50dec7fd647843064c097f011725540f69f6fa40455a418398b16c470606780fd55
7
+ data.tar.gz: b08e3de035ec44212bd1841fcf0464cd17b4ecb6eb5712728c5a99df5cf06f044b56e2578ef0377179bd3fa973c1c8787d86ea70b46e86a784f0cbea84e03d1b
@@ -639,7 +639,8 @@ module OpenCL
639
639
  offset = options[:offset] if options[:offset]
640
640
  pattern_size = pattern.size
641
641
  pattern_size = options[:pattern_size] if options[:pattern_size]
642
- size = (buffer.size - offset) % pattern_size
642
+ size = (buffer.size - offset)
643
+ size -= size % pattern_size
643
644
  size = options[:size] if options[:size]
644
645
  num_events, events = get_event_wait_list( options )
645
646
  event = MemoryPointer::new( Event )
@@ -0,0 +1,152 @@
1
+ module OpenCL
2
+
3
+ ACCELERATOR_DESCRIPTOR_INTEL = 0x4090
4
+ ACCELERATOR_REFERENCE_COUNT_INTEL = 0x4091
5
+ ACCELERATOR_CONTEXT_INTEL = 0x4092
6
+ ACCELERATOR_TYPE_INTEL = 0x4093
7
+ INVALID_ACCELERATOR_INTEL = -1094
8
+ INVALID_ACCELERATOR_TYPE_INTEL = -1095
9
+ INVALID_ACCELERATOR_DESCRIPTOR_INTEL = -1096
10
+ ACCELERATOR_TYPE_NOT_SUPPORTED_INTEL = -1097
11
+
12
+ typedef :cl_uint, :cl_accelerator_type_intel
13
+ typedef :cl_uint, :cl_accelerator_info_intel
14
+
15
+ end
16
+
17
+ if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
18
+ module OpenCLRefinements
19
+ refine FFI::Pointer do
20
+ methods_prefix = [:put, :get, :write, :read, :put_array_of, :get_array_of]
21
+ [[:cl_uint, :cl_accelerator_type_intel],
22
+ [:cl_uint, :cl_accelerator_info_intel]].each { |orig, add|
23
+ methods_prefix.each { |meth|
24
+ alias_method "#{meth}_#{add}".to_sym, "#{meth}_#{orig}".to_sym
25
+ }
26
+ }
27
+ end
28
+ end
29
+ using OpenCLRefinements
30
+ else
31
+ class FFI::Pointer
32
+ methods_prefix = [:put, :get, :write, :read, :put_array_of, :get_array_of]
33
+ [[:cl_uint, :cl_accelerator_type_intel],
34
+ [:cl_uint, :cl_accelerator_info_intel]].each { |orig, add|
35
+ methods_prefix.each { |meth|
36
+ alias_method "#{meth}_#{add}".to_sym, "#{meth}_#{orig}".to_sym
37
+ }
38
+ }
39
+ end
40
+ end
41
+
42
+ module OpenCL
43
+
44
+ class Error
45
+ eval error_class_constructor( :INVALID_ACCELERATOR_INTEL, :InvalidAcceleratorINTEL )
46
+ eval error_class_constructor( :INVALID_ACCELERATOR_TYPE_INTEL, :InvalidAcceleratorTypeINTEL )
47
+ eval error_class_constructor( :INVALID_ACCELERATOR_DESCRIPTOR_INTEL, :InvalidAcceleratorDescriptorINTEL )
48
+ eval error_class_constructor( :ACCELERATOR_TYPE_NOT_SUPPORTED_INTEL, :AcceleratorTypeNotSupportedINTEL )
49
+ end
50
+
51
+ class AcceleratorINTEL < ExtendedStruct
52
+ class AcceleratorINTELPointer < FFI::Pointer
53
+ attr_accessor :context
54
+ def initialize(ptr, context)
55
+ super(ptr)
56
+ @context = context
57
+ end
58
+ end
59
+
60
+ include InnerInterface
61
+ extend ExtensionInnerGenerator
62
+ layout :dummy, :pointer
63
+ DESCRIPTOR_INTEL = 0x4090
64
+ REFERENCE_COUNT_INTEL = 0x4091
65
+ CONTEXT_INTEL = 0x4092
66
+ TYPE_INTEL = 0x4093
67
+
68
+ def platform
69
+ @context.platform
70
+ end
71
+
72
+ def initialize(ptr, context = ptr.context, retain = true)
73
+ super(AcceleratorINTELPointer::new(ptr, context))
74
+ @context = context
75
+ context.__retain_accelerator_intel(ptr) if retain
76
+ end
77
+
78
+ def self.release(ptr)
79
+ ptr.context.__release_accelerator_intel(ptr)
80
+ end
81
+
82
+ def descriptor_intel
83
+ f = platform.get_extension_function("clGetAcceleratorInfoINTEL", :cl_int,
84
+ [OpenCL::AcceleratorINTEL, :cl_accelerator_info_intel, :size_t, :pointer, :pointer])
85
+ error_check(OpenCL::INVALID_OPERATION) unless f
86
+
87
+ ptr1 = MemoryPointer::new( :size_t, 1)
88
+ error = f.call(self, DESCRIPTOR_INTEL, 0, nil, ptr1)
89
+ error_check(error)
90
+ ptr2 = MemoryPointer::new( ptr1.read_size_t )
91
+ error = f.call(self, DESCRIPTOR_INTEL, ptr1.read_size_t, ptr2, nil)
92
+ error_check(error)
93
+ return ptr2
94
+ end
95
+
96
+ def context_intel
97
+ f = platform.get_extension_function("clGetAcceleratorInfoINTEL", :cl_int,
98
+ [OpenCL::AcceleratorINTEL, :cl_accelerator_info_intel, :size_t, :pointer, :pointer])
99
+ error_check(OpenCL::INVALID_OPERATION) unless f
100
+
101
+ ptr = MemoryPointer::new( Context )
102
+ error = f.call(self, CONTEXT_INTEL, Context.size, ptr, nil)
103
+ error_check(error)
104
+ return Context::new( ptr.read_pointer )
105
+ end
106
+
107
+ get_info_ext("AcceleratorINTEL", :cl_uint, "reference_count_intel", "clGetAcceleratorInfoINTEL")
108
+ get_info_ext("AcceleratorINTEL", :cl_uint, "type_intel", "clGetAcceleratorInfoINTEL")
109
+
110
+ end
111
+
112
+ class Context
113
+ module AcceleratorINTEL
114
+
115
+ def create_accelerator_intel(accelerator_type, descriptor, options = {})
116
+ name = "clCreateAcceleratorINTEL"
117
+ return_type = OpenCL::AcceleratorINTEL
118
+ params = [Context, :cl_accelerator_type_intel, :size_t, :pointer, :pointer]
119
+ f = platform.get_extension_function(name, return_type, params)
120
+ error_check(OpenCL::INVALID_OPERATION) unless f
121
+ error = MemoryPointer::new( :cl_int )
122
+ size = descriptor.size
123
+ acc = f.call(self, accelerator_type, size, descriptor, error)
124
+ error_check(error.read_cl_int)
125
+ return OpenCL::AcceleratorINTEL::new( acc, self, false )
126
+ end
127
+
128
+ def __release_accelerator_intel(ptr)
129
+ name = "clReleaseAcceleratorINTEL"
130
+ return_type = :cl_int
131
+ params = [OpenCL::AcceleratorINTEL]
132
+ f = platform.get_extension_function(name, return_type, params)
133
+ error_check(OpenCL::INVALID_OPERATION) unless f
134
+ error = f.call(ptr)
135
+ error_check(error)
136
+ end
137
+
138
+ def __retain_accelerator_intel(ptr)
139
+ name = "clRetainAcceleratorINTEL"
140
+ return_type = :cl_int
141
+ params = [OpenCL::AcceleratorINTEL]
142
+ f = platform.get_extension_function(name, return_type, params)
143
+ error_check(OpenCL::INVALID_OPERATION) unless f
144
+ error = f.call(ptr)
145
+ error_check(error)
146
+ end
147
+
148
+ end
149
+ register_extension( :cl_intel_accelerator, AcceleratorINTEL, "platform.extensions.include?(\"cl_intel_accelerator\")" )
150
+ end
151
+
152
+ end
@@ -0,0 +1,65 @@
1
+ using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
2
+
3
+ require_relative 'motion_estimation'
4
+
5
+ module OpenCL
6
+
7
+ DEVICE_ME_VERSION_INTEL = 0x407E
8
+
9
+ ME_CHROMA_INTRA_PREDICT_ENABLED_INTEL = 0x1
10
+ ME_LUMA_INTRA_PREDICT_ENABLED_INTEL = 0x2
11
+
12
+ ME_SKIP_BLOCK_TYPE_16x16_INTEL = 0x0
13
+ ME_SKIP_BLOCK_TYPE_8x8_INTEL = 0x4
14
+
15
+ ME_COST_PENALTY_NONE_INTEL = 0x0
16
+ ME_COST_PENALTY_LOW_INTEL = 0x1
17
+ ME_COST_PENALTY_NORMAL_INTEL = 0x2
18
+ ME_COST_PENALTY_HIGH_INTEL = 0x3
19
+
20
+ ME_COST_PRECISION_QPEL_INTEL = 0x0
21
+ ME_COST_PRECISION_HEL_INTEL = 0x1
22
+ ME_COST_PRECISION_PEL_INTEL = 0x2
23
+ ME_COST_PRECISION_DPEL_INTEL = 0x3
24
+
25
+ ME_LUMA_PREDICTOR_MODE_VERTICAL_INTEL = 0x0
26
+ ME_LUMA_PREDICTOR_MODE_HORIZONTAL_INTEL = 0x1
27
+ ME_LUMA_PREDICTOR_MODE_DC_INTEL = 0x2
28
+ ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_LEFT_INTEL = 0x3
29
+
30
+ ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_RIGHT_INTEL = 0x4
31
+ ME_LUMA_PREDICTOR_MODE_PLANE_INTEL = 0x4
32
+ ME_LUMA_PREDICTOR_MODE_VERTICAL_RIGHT_INTEL = 0x5
33
+ ME_LUMA_PREDICTOR_MODE_HORIZONTAL_DOWN_INTEL = 0x6
34
+ ME_LUMA_PREDICTOR_MODE_VERTICAL_LEFT_INTEL = 0x7
35
+ ME_LUMA_PREDICTOR_MODE_HORIZONTAL_UP_INTEL = 0x8
36
+
37
+ ME_CHROMA_PREDICTOR_MODE_DC_INTEL = 0x0
38
+ ME_CHROMA_PREDICTOR_MODE_HORIZONTAL_INTEL = 0x1
39
+ ME_CHROMA_PREDICTOR_MODE_VERTICAL_INTEL = 0x2
40
+ ME_CHROMA_PREDICTOR_MODE_PLANE_INTEL = 0x3
41
+
42
+ ME_VERSION_LEGACY_INTEL = 0x0
43
+ ME_VERSION_ADVANCED_VER_1_INTEL = 0x1
44
+ ME_VERSION_ADVANCED_VER_2_INTEL = 0x2
45
+
46
+ ME_FORWARD_INPUT_MODE_INTEL = 0x1
47
+ ME_BACKWARD_INPUT_MODE_INTEL = 0x2
48
+ ME_BIDIRECTION_INPUT_MODE_INTEL = 0x3
49
+
50
+ ME_BIDIR_WEIGHT_QUARTER_INTEL = 0x10
51
+ ME_BIDIR_WEIGHT_THIRD_INTEL = 0x15
52
+ ME_BIDIR_WEIGHT_HALF_INTEL = 0x20
53
+ ME_BIDIR_WEIGHT_TWO_THIRD_INTEL = 0x2B
54
+ ME_BIDIR_WEIGHT_THREE_QUARTER_INTEL = 0x30
55
+
56
+ class Device
57
+ ME_VERSION_INTEL = 0x407E
58
+ module AdvanceMotionEstimationINTEL
59
+ extend InnerGenerator
60
+ get_info("Device", :cl_uint, "me_version_intel")
61
+
62
+ end
63
+ register_extension( :cl_intel_advanced_motion_estimation, AdvanceMotionEstimationINTEL, "platform.extensions.include?(\"cl_intel_advanced_motion_estimation\")" )
64
+ end
65
+ end
@@ -0,0 +1,19 @@
1
+ using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
2
+
3
+ module OpenCL
4
+ CONTEXT_DRIVER_DIAGNOSTICS_INTEL = 0x4106
5
+ CONTEXT_SHOW_DIAGNOSTICS_INTEL = 0x4106
6
+ CONTEXT_DIAGNOSTICS_LEVEL_GOOD_INTEL = 0x1
7
+ CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL = 0x2
8
+ CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL = 0x4
9
+
10
+ class Context
11
+ DRIVER_DIAGNOSTICS_INTEL = 0x4106
12
+ SHOW_DIAGNOSTICS_INTEL = 0x4106
13
+ DIAGNOSTICS_LEVEL_GOOD_INTEL = 0x1
14
+ DIAGNOSTICS_LEVEL_BAD_INTEL = 0x2
15
+ DIAGNOSTICS_LEVEL_NEUTRAL_INTEL = 0x4
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,26 @@
1
+ using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
2
+
3
+ require_relative 'accelerator'
4
+
5
+ module OpenCL
6
+ ACCELERATOR_TYPE_MOTION_ESTIMATION_INTEL = 0x0
7
+ ME_MB_TYPE_16x16_INTEL = 0x0
8
+ ME_MB_TYPE_8x8_INTEL = 0x1
9
+ ME_MB_TYPE_4x4_INTEL = 0x2
10
+ ME_SUBPIXEL_MODE_INTEGER_INTEL = 0x0
11
+ ME_SUBPIXEL_MODE_HPEL_INTEL = 0x1
12
+ ME_SUBPIXEL_MODE_QPEL_INTEL = 0x2
13
+ ME_SAD_ADJUST_MODE_NONE_INTEL = 0x0
14
+ ME_SAD_ADJUST_MODE_HAAR_INTEL = 0x1
15
+ ME_SEARCH_PATH_RADIUS_2_2_INTEL = 0x0
16
+ ME_SEARCH_PATH_RADIUS_4_4_INTEL = 0x1
17
+ ME_SEARCH_PATH_RADIUS_16_12_INTEL = 0x5
18
+
19
+ class MotionEstimationDescINTEL < FFI::Struct
20
+ layout :mb_block_type, :cl_uint,
21
+ :subpixel_mode, :cl_uint,
22
+ :sad_adjust_mode, :cl_uint,
23
+ :search_path_type, :cl_uint
24
+ end
25
+
26
+ end
@@ -284,6 +284,84 @@ module OpenCL
284
284
  include InnerInterface
285
285
  end
286
286
 
287
+ module ExtensionInnerGenerator
288
+
289
+ private
290
+ # Generates a new method for klass that use the given clGetKlassInfo on the object platform, to read an info of the given type. The info queried is specified by name.
291
+ # @param [String] klass the property is to be found
292
+ # @param [Symbol] type of the property
293
+ # @param [String] name of the property
294
+ # @!macro [attach] get_info
295
+ # @!method $3
296
+ # Returns the OpenCL::$1::$3 info
297
+ # @return $2
298
+ def get_info_ext(klass, type, name, function)
299
+ klass_name = klass
300
+ klass_name = "MemObject" if klass == "Mem"
301
+ s = <<EOF
302
+ def #{name.downcase}
303
+ f = platform.get_extension_function("#{function}", :cl_int, [#{klass_name}, :cl_uint, :size_t, :pointer, :pointer])
304
+ error_check(OpenCL::INVALID_OPERATION) unless f
305
+
306
+ ptr1 = MemoryPointer::new( :size_t, 1)
307
+ error = f.call(self, #{klass}::#{name.upcase}, 0, nil, ptr1)
308
+ error_check(error)
309
+ ptr2 = MemoryPointer::new( ptr1.read_size_t )
310
+ error = f.call(self, #{klass}::#{name.upcase}, ptr1.read_size_t, ptr2, nil)
311
+ error_check(error)
312
+ if(convert_type(:#{type})) then
313
+ return convert_type(:#{type})::new(ptr2.read_#{type})
314
+ else
315
+ return ptr2.read_#{type}
316
+ end
317
+ end
318
+ EOF
319
+ if type == :cl_bool then
320
+ s += <<EOF
321
+ def #{name.downcase}?
322
+ #{name.downcase} == 0 ? false : true
323
+ end
324
+ EOF
325
+ end
326
+ module_eval s
327
+ end
328
+
329
+ # 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.
330
+ # @param [String] klass the property is to be found
331
+ # @param [Symbol] type of the property
332
+ # @param [String] name of the property
333
+ # @!macro [attach] get_info_array
334
+ # @!method $3
335
+ # Returns the OpenCL::$1::$3 info
336
+ # @return an Array of $2
337
+ def get_info_array_ext(klass, type, name, function)
338
+ klass_name = klass
339
+ klass_name = "MemObject" if klass == "Mem"
340
+ s = <<EOF
341
+ def #{name.downcase}
342
+ f = platform.get_extension_function("#{function}", :cl_int, [:cl_uint, :size_t, :pointer, :pointer])
343
+ error_check(OpenCL::INVALID_OPERATION) unless f
344
+
345
+ ptr1 = MemoryPointer::new( :size_t, 1)
346
+ error = f.call(self, #{klass}::#{name.upcase}, 0, nil, ptr1)
347
+ error_check(error)
348
+ ptr2 = MemoryPointer::new( ptr1.read_size_t )
349
+ error = f.call(self, #{klass}::#{name.upcase}, ptr1.read_size_t, ptr2, nil)
350
+ error_check(error)
351
+ arr = ptr2.get_array_of_#{type}(0, ptr1.read_size_t/ OpenCL.find_type(:#{type}).size)
352
+ if(convert_type(:#{type})) then
353
+ return arr.collect { |e| convert_type(:#{type})::new(e) }
354
+ else
355
+ return arr
356
+ end
357
+ end
358
+ EOF
359
+ module_eval s
360
+ end
361
+
362
+ end
363
+ private_constant :ExtensionInnerGenerator
364
+
287
365
  module InnerGenerator
288
366
 
289
367
  private
@@ -1844,9 +1844,9 @@ EOF
1844
1844
  attach_function :clGetPlatformInfo, [Platform,:cl_platform_info,:size_t,:pointer,:pointer], :cl_int
1845
1845
  attach_function :clGetDeviceIDs, [Platform,:cl_device_type,:cl_uint,:pointer,:pointer], :cl_int
1846
1846
  attach_function :clGetDeviceInfo, [Device,:cl_device_info,:size_t,:pointer,:pointer], :cl_int
1847
- callback :clCreateContext_notify, [:pointer,:pointer,:size_t,:pointer], :void
1847
+ callback :clCreateContext_notify, [:string,:pointer,:size_t,:pointer], :void
1848
1848
  attach_function :clCreateContext, [:pointer,:cl_uint,:pointer,:clCreateContext_notify,:pointer,:pointer], Context
1849
- callback :clCreateContextFromType_notify, [:pointer,:pointer,:size_t,:pointer], :void
1849
+ callback :clCreateContextFromType_notify, [:string,:pointer,:size_t,:pointer], :void
1850
1850
  attach_function :clCreateContextFromType, [:pointer,:cl_device_type,:clCreateContextFromType_notify,:pointer,:pointer], Context
1851
1851
  attach_function :clRetainContext, [Context], :cl_int
1852
1852
  attach_function :clReleaseContext, [Context], :cl_int
@@ -1,12 +1,12 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'opencl_ruby_ffi'
3
- s.version = "1.3.4"
3
+ s.version = "1.3.5"
4
4
  s.author = "Brice Videau"
5
5
  s.email = "brice.videau@imag.fr"
6
6
  s.homepage = "https://github.com/Nanosim-LIG/opencl-ruby"
7
7
  s.summary = "Ruby OpenCL FFI bindings"
8
- s.description = "Ruby OpenCL FFI bindings. OpenCL 2.1 ready"
9
- s.files = Dir[ 'opencl_ruby_ffi.gemspec', 'LICENSE', 'lib/**/**/*', '.yardopts', 'templates_custom/default/module/setup.rb' ]
8
+ s.description = "Ruby OpenCL FFI bindings. OpenCL 2.2 ready"
9
+ s.files = Dir[ 'opencl_ruby_ffi.gemspec', 'LICENSE', 'lib/**/**/*.rb', '.yardopts', 'templates_custom/default/module/setup.rb' ]
10
10
  s.has_rdoc = false
11
11
  s.license = 'BSD-2-Clause'
12
12
  s.required_ruby_version = '>= 1.8.7'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opencl_ruby_ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brice Videau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-05 00:00:00.000000000 Z
11
+ date: 2019-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: narray
@@ -70,7 +70,7 @@ dependencies:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: 1.0.0
73
- description: Ruby OpenCL FFI bindings. OpenCL 2.1 ready
73
+ description: Ruby OpenCL FFI bindings. OpenCL 2.2 ready
74
74
  email: brice.videau@imag.fr
75
75
  executables: []
76
76
  extensions: []
@@ -97,6 +97,10 @@ files:
97
97
  - lib/opencl_ruby_ffi/ext.rb
98
98
  - lib/opencl_ruby_ffi/ext/device_fission.rb
99
99
  - lib/opencl_ruby_ffi/gl_ext.rb
100
+ - lib/opencl_ruby_ffi/intel/accelerator.rb
101
+ - lib/opencl_ruby_ffi/intel/advanced_motion_estimation.rb
102
+ - lib/opencl_ruby_ffi/intel/driver_diagnostics.rb
103
+ - lib/opencl_ruby_ffi/intel/motion_estimation.rb
100
104
  - lib/opencl_ruby_ffi/khr/d3d10_sharing.rb
101
105
  - lib/opencl_ruby_ffi/khr/d3d11_sharing.rb
102
106
  - lib/opencl_ruby_ffi/khr/dx9_media_sharing.rb
@@ -140,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
144
  version: '0'
141
145
  requirements: []
142
146
  rubyforge_project:
143
- rubygems_version: 2.7.6
147
+ rubygems_version: 2.7.6.2
144
148
  signing_key:
145
149
  specification_version: 4
146
150
  summary: Ruby OpenCL FFI bindings