opencl_ruby_ffi 1.2.2 → 1.3.0

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/lib/opencl_ruby_ffi.rb +2 -0
  4. data/lib/opencl_ruby_ffi/Buffer.rb +18 -13
  5. data/lib/opencl_ruby_ffi/CommandQueue.rb +301 -302
  6. data/lib/opencl_ruby_ffi/Context.rb +158 -158
  7. data/lib/opencl_ruby_ffi/Device.rb +270 -224
  8. data/lib/opencl_ruby_ffi/Event.rb +40 -36
  9. data/lib/opencl_ruby_ffi/Image.rb +34 -57
  10. data/lib/opencl_ruby_ffi/Kernel.rb +251 -191
  11. data/lib/opencl_ruby_ffi/Mem.rb +49 -70
  12. data/lib/opencl_ruby_ffi/Pipe.rb +3 -14
  13. data/lib/opencl_ruby_ffi/Platform.rb +46 -48
  14. data/lib/opencl_ruby_ffi/Program.rb +131 -124
  15. data/lib/opencl_ruby_ffi/Sampler.rb +6 -24
  16. data/lib/opencl_ruby_ffi/amd/device_attribute_query.rb +100 -0
  17. data/lib/opencl_ruby_ffi/egl.rb +2 -0
  18. data/lib/opencl_ruby_ffi/ext.rb +11 -0
  19. data/lib/opencl_ruby_ffi/ext/device_fission.rb +264 -0
  20. data/lib/opencl_ruby_ffi/gl_ext.rb +2 -0
  21. data/lib/opencl_ruby_ffi/khr/d3d10_sharing.rb +120 -0
  22. data/lib/opencl_ruby_ffi/khr/d3d11_sharing.rb +120 -0
  23. data/lib/opencl_ruby_ffi/khr/dx9_media_sharing.rb +113 -0
  24. data/lib/opencl_ruby_ffi/khr/egl_event.rb +15 -0
  25. data/lib/opencl_ruby_ffi/khr/egl_image.rb +58 -0
  26. data/lib/opencl_ruby_ffi/khr/fp16.rb +23 -0
  27. data/lib/opencl_ruby_ffi/khr/fp64.rb +23 -0
  28. data/lib/opencl_ruby_ffi/khr/gl_event.rb +38 -0
  29. data/lib/opencl_ruby_ffi/khr/gl_sharing.rb +79 -0
  30. data/lib/opencl_ruby_ffi/khr/icd.rb +30 -0
  31. data/lib/opencl_ruby_ffi/khr/initalize_memory.rb +19 -0
  32. data/lib/opencl_ruby_ffi/khr/priority_hints.rb +48 -0
  33. data/lib/opencl_ruby_ffi/khr/spir.rb +45 -0
  34. data/lib/opencl_ruby_ffi/khr/sub_groups.rb +49 -0
  35. data/lib/opencl_ruby_ffi/khr/terminate_context.rb +46 -0
  36. data/lib/opencl_ruby_ffi/khr/throttle_hints.rb +47 -0
  37. data/lib/opencl_ruby_ffi/nv/device_attribute_query.rb +50 -0
  38. data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base.rb +40 -13
  39. data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base_gen.rb +214 -2114
  40. data/lib/opencl_ruby_ffi/opencl_types.rb +15 -3
  41. data/opencl_ruby_ffi.gemspec +4 -4
  42. data/templates_custom/default/module/setup.rb +9 -0
  43. metadata +29 -6
  44. data/lib/opencl_ruby_ffi/GLExt.rb +0 -58
  45. data/lib/opencl_ruby_ffi/Stream.rb +0 -127
@@ -60,13 +60,10 @@ module OpenCL
60
60
  Sampler::new(sampler_ptr, false)
61
61
  end
62
62
 
63
- # Maps the cl_smapler object of OpenCL
63
+ # Maps the cl_sampler object of OpenCL
64
64
  class Sampler
65
65
  include InnerInterface
66
-
67
- class << self
68
- include InnerGenerator
69
- end
66
+ extend InnerGenerator
70
67
 
71
68
  def inspect
72
69
  return "#<#{self.class.name}: #{addressing_mode} #{filter_mode} normalized: #{normalized_coords}>"
@@ -80,25 +77,10 @@ module OpenCL
80
77
  return Context::new( ptr.read_pointer )
81
78
  end
82
79
 
83
- ##
84
- # :method: reference_count()
85
- # returns the reference counter of the Sampler
86
- eval get_info("Sampler", :cl_uint, "REFERENCE_COUNT")
87
-
88
- ##
89
- # :method: normalized_coords()
90
- # returns if the Sampler uses normalized coords
91
- eval get_info("Sampler", :cl_bool, "NORMALIZED_COORDS")
92
-
93
- ##
94
- # :method: addressing_mode()
95
- # returns an AddressingMode representing the addressing mode used by the Sampler
96
- eval get_info("Sampler", :cl_addressing_mode, "ADDRESSING_MODE")
97
-
98
- ##
99
- # :method: filter_mode()
100
- # returns a FilterMode representing the filtering mode used by the Sampler
101
- eval get_info("Sampler", :cl_filter_mode, "FILTER_MODE")
80
+ get_info("Sampler", :cl_uint, "reference_count")
81
+ get_info("Sampler", :cl_bool, "normalized_coords")
82
+ get_info("Sampler", :cl_addressing_mode, "addressing_mode")
83
+ get_info("Sampler", :cl_filter_mode, "filter_mode")
102
84
 
103
85
  end
104
86
 
@@ -0,0 +1,100 @@
1
+ require 'opencl_ruby_ffi'
2
+ using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
3
+
4
+ module OpenCL
5
+
6
+ DEVICE_TOPOLOGY_TYPE_PCIE_AMD = 1
7
+ DEVICE_PROFILING_TIMER_OFFSET_AMD = 0x4036
8
+ DEVICE_TOPOLOGY_AMD = 0x4037
9
+ DEVICE_BOARD_NAME_AMD = 0x4038
10
+ DEVICE_GLOBAL_FREE_MEMORY_AMD = 0x4039
11
+ DEVICE_SIMD_PER_COMPUTE_UNIT_AMD = 0x4040
12
+ DEVICE_SIMD_WIDTH_AMD = 0x4041
13
+ DEVICE_SIMD_INSTRUCTION_WIDTH_AMD = 0x4042
14
+ DEVICE_WAVEFRONT_WIDTH_AMD = 0x4043
15
+ DEVICE_GLOBAL_MEM_CHANNELS_AMD = 0x4044
16
+ DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD = 0x4045
17
+ DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD = 0x4046
18
+ DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD = 0x4047
19
+ DEVICE_LOCAL_MEM_BANKS_AMD = 0x4048
20
+ DEVICE_THREAD_TRACE_SUPPORTED_AMD = 0x4049
21
+ DEVICE_GFXIP_MAJOR_AMD = 0x404A
22
+ DEVICE_GFXIP_MINOR_AMD = 0x404B
23
+ DEVICE_AVAILABLE_ASYNC_QUEUES_AMD = 0x404C
24
+
25
+ class Device
26
+
27
+ TOPOLOGY_TYPE_PCIE_AMD = 1
28
+ PROFILING_TIMER_OFFSET_AMD = 0x4036
29
+ TOPOLOGY_AMD = 0x4037
30
+ BOARD_NAME_AMD = 0x4038
31
+ GLOBAL_FREE_MEMORY_AMD = 0x4039
32
+ SIMD_PER_COMPUTE_UNIT_AMD = 0x4040
33
+ SIMD_WIDTH_AMD = 0x4041
34
+ SIMD_INSTRUCTION_WIDTH_AMD = 0x4042
35
+ WAVEFRONT_WIDTH_AMD = 0x4043
36
+ GLOBAL_MEM_CHANNELS_AMD = 0x4044
37
+ GLOBAL_MEM_CHANNEL_BANKS_AMD = 0x4045
38
+ GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD = 0x4046
39
+ LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD = 0x4047
40
+ LOCAL_MEM_BANKS_AMD = 0x4048
41
+ THREAD_TRACE_SUPPORTED_AMD = 0x4049
42
+ GFXIP_MAJOR_AMD = 0x404A
43
+ GFXIP_MINOR_AMD = 0x404B
44
+ AVAILABLE_ASYNC_QUEUES_AMD = 0x404C
45
+
46
+ module AMDDeviceAttributeQuery
47
+ extend InnerGenerator
48
+
49
+ class AMDTopology < Union
50
+ class Raw < Struct
51
+ layout :type, UInt,
52
+ :data, [UInt, 5]
53
+ end
54
+ class PCIE < Struct
55
+ layout :type, UInt,
56
+ :unused, [Char, 17],
57
+ :bus, Char,
58
+ :device, Char,
59
+ :function, Char
60
+ end
61
+ layout :raw, Raw,
62
+ :pcie, PCIE
63
+ end
64
+
65
+ get_info("Device", :string, "board_name_amd")
66
+
67
+ get_info("Device", :cl_ulong, "profiling_timer_offset_amd")
68
+
69
+ get_info("Device", :cl_uint, "simd_per_compute_unit_amd")
70
+ get_info("Device", :cl_uint, "simd_width_amd")
71
+ get_info("Device", :cl_uint, "simd_instruction_width_amd")
72
+ get_info("Device", :cl_uint, "wavefront_width_amd")
73
+ get_info("Device", :cl_uint, "global_mem_channels_amd")
74
+ get_info("Device", :cl_uint, "global_mem_channel_banks_amd")
75
+ get_info("Device", :cl_uint, "global_mem_channel_bank_width_amd")
76
+ get_info("Device", :cl_uint, "local_mem_banks_amd")
77
+ get_info("Device", :cl_uint, "gfxip_major_amd")
78
+ get_info("Device", :cl_uint, "gfxip_minor_amd")
79
+ get_info("Device", :cl_uint, "available_async_queues_amd")
80
+
81
+ get_info("Device", :cl_bool, "thread_trace_supported_amd")
82
+
83
+ get_info("Device", :size_t, "local_mem_size_per_compute_unit_amd")
84
+
85
+ get_info_array("Device", :size_t, "global_free_memory_amd")
86
+
87
+ def topology_amd
88
+ ptr1 = MemoryPointer::new( AMDTopology )
89
+ error = OpenCL.clGetDeviceInfo(self, TOPOLOGY_AMD, ptr1.size, ptr1, nil)
90
+ error_check(error)
91
+ return AMDTopology::new(ptr1)
92
+ end
93
+
94
+ end
95
+
96
+ register_extension( :cl_amd_device_attribute_query, AMDDeviceAttributeQuery, "extensions.include?(\"cl_amd_device_attribute_query\")" )
97
+
98
+ end
99
+
100
+ end
@@ -0,0 +1,2 @@
1
+ require "opencl_ruby_ffi/khr/egl_image.rb"
2
+ require "opencl_ruby_ffi/khr/egl_event.rb"
@@ -0,0 +1,11 @@
1
+ require "opencl_ruby_ffi/khr/fp64.rb"
2
+ require "opencl_ruby_ffi/khr/fp16.rb"
3
+ require "opencl_ruby_ffi/khr/icd.rb"
4
+ require "opencl_ruby_ffi/khr/initalize_memory.rb"
5
+ require "opencl_ruby_ffi/khr/spir.rb"
6
+ require "opencl_ruby_ffi/nv/device_attribute_query.rb"
7
+ require "opencl_ruby_ffi/amd/device_attribute_query.rb"
8
+ require "opencl_ruby_ffi/ext/device_fission.rb"
9
+ require "opencl_ruby_ffi/khr/sub_groups.rb"
10
+ require "opencl_ruby_ffi/khr/priority_hints.rb"
11
+ require "opencl_ruby_ffi/khr/throttle_hints.rb"
@@ -0,0 +1,264 @@
1
+ require 'opencl_ruby_ffi'
2
+ using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
3
+
4
+ module OpenCL
5
+
6
+ DEVICE_PARTITION_FAILED_EXT = -1057
7
+ INVALID_PARTITION_COUNT_EXT = -1058
8
+
9
+ DEVICE_PARTITION_EQUALLY_EXT = 0x4050
10
+ DEVICE_PARTITION_BY_COUNTS_EXT = 0x4051
11
+ DEVICE_PARTITION_BY_NAMES_EXT = 0x4052
12
+ DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT = 0x4053
13
+
14
+ DEVICE_PARENT_DEVICE_EXT = 0x4054
15
+ DEVICE_PARTITION_TYPES_EXT = 0x4055
16
+ DEVICE_AFFINITY_DOMAINS_EXT = 0x4056
17
+ DEVICE_REFERENCE_COUNT_EXT = 0x4057
18
+ DEVICE_PARTITION_STYLE_EXT = 0x4058
19
+
20
+ AFFINITY_DOMAIN_L1_CACHE_EXT = 0x1
21
+ AFFINITY_DOMAIN_L2_CACHE_EXT = 0x2
22
+ AFFINITY_DOMAIN_L3_CACHE_EXT = 0x3
23
+ AFFINITY_DOMAIN_L4_CACHE_EXT = 0x4
24
+ AFFINITY_DOMAIN_NUMA_EXT = 0x10
25
+ AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT = 0x100
26
+
27
+ PROPERTIES_LIST_END_EXT = 0
28
+ PARTITION_BY_COUNTS_LIST_END_EXT = 0
29
+ PARTITION_BY_NAMES_LIST_END_EXT = -1
30
+
31
+ [
32
+ [ "clReleaseDeviceEXT",
33
+ :cl_int,
34
+ [ Device ]
35
+ ], [
36
+ "clRetainDeviceEXT",
37
+ :cl_int,
38
+ [ Device ]
39
+ ], [
40
+ "clCreateSubDevicesEXT",
41
+ :cl_int,
42
+ [ Device,
43
+ :pointer,
44
+ :cl_uint,
45
+ :pointer,
46
+ :pointer ]
47
+ ]
48
+ ].each { |name, return_type, args|
49
+ attach_extension_function(name, return_type, args)
50
+ }
51
+
52
+ def self.create_sub_devices_ext( in_device, properties )
53
+ error_check(INVALID_OPERATION) if in_device.platform.version_number < 1.1 and not in_device.platform.extensions.include? "cl_ext_device_fission"
54
+ props = MemoryPointer::new( :cl_device_partition_property_ext, properties.length + 1 )
55
+ properties.each_with_index { |e,i|
56
+ props[i].write_cl_device_partition_property_ext(e)
57
+ }
58
+ props[properties.length].write_cl_device_partition_property_ext(0)
59
+ device_number_ptr = MemoryPointer::new( :cl_uint )
60
+ error = clCreateSubDevicesEXT( in_device, props, 0, nil, device_number_ptr )
61
+ error_check(error)
62
+ device_number = device_number_ptr.read_cl_uint
63
+ devices_ptr = MemoryPointer::new( Device, device_number )
64
+ error = clCreateSubDevicesEXT( in_device, props, device_number, devices_ptr, nil )
65
+ error_check(error)
66
+ devices_ptr.get_array_of_pointer(0, device_number).collect { |device_ptr|
67
+ Device::new(device_ptr, false)
68
+ }
69
+ end
70
+
71
+ class Error
72
+
73
+ eval error_class_constructor( :INVALID_PARTITION_COUNT_EXT, :InvalidPartitionCountEXT )
74
+ eval error_class_constructor( :DEVICE_PARTITION_FAILED_EXT, :DevicePartitionFailedEXT )
75
+
76
+ end
77
+
78
+ class Device
79
+
80
+ PARTITION_EQUALLY_EXT = 0x4050
81
+ PARTITION_BY_COUNTS_EXT = 0x4051
82
+ PARTITION_BY_NAMES_EXT = 0x4052
83
+ PARTITION_BY_AFFINITY_DOMAIN_EXT = 0x4053
84
+
85
+ PARENT_DEVICE_EXT = 0x4054
86
+ PARTITION_TYPES_EXT = 0x4055
87
+ AFFINITY_DOMAINS_EXT = 0x4056
88
+ REFERENCE_COUNT_EXT = 0x4057
89
+ PARTITION_STYLE_EXT = 0x4058
90
+
91
+ # Enum that maps the :cl_device_partition_property_ext type
92
+ class PartitionEXT < EnumInt
93
+ EQUALLY_EXT = 0x4050
94
+ BY_COUNTS_EXT = 0x4051
95
+ BY_COUNTS_LIST_END_EXT = 0x0
96
+ BY_NAMES_EXT = 0x4052
97
+ BY_AFFINITY_DOMAIN_EXT = 0x4053
98
+ BY_NAMES_LIST_END_EXT = -1
99
+ @codes = {}
100
+ @codes[0x4050] = 'EQUALLY_EXT'
101
+ @codes[0x4051] = 'BY_COUNTS_EXT'
102
+ @codes[0x0] = 'BY_COUNTS_LIST_END_EXT'
103
+ @codes[0x4052] = 'BY_NAMES_EXT'
104
+ @codes[0x4053] = 'BY_AFFINITY_DOMAIN_EXT'
105
+ @codes[-1] = 'BY_NAMES_LIST_END_EXT'
106
+ end
107
+
108
+ # Bitfield that maps the :cl_device_affinity_domain_ext type
109
+ class AffinityDomainEXT < Enum
110
+ L1_CACHE_EXT = 0x1
111
+ L2_CACHE_EXT = 0x2
112
+ L3_CACHE_EXT = 0x3
113
+ L4_CACHE_EXT = 0x4
114
+ NUMA_EXT = 0x10
115
+ NEXT_FISSIONABLE_EXT = 0x100
116
+ @codes = {}
117
+ @codes[0x1] = 'L1_CACHE_EXT'
118
+ @codes[0x2] = 'L2_CACHE_EXT'
119
+ @codes[0x3] = 'L3_CACHE_EXT'
120
+ @codes[0x4] = 'L4_CACHE_EXT'
121
+ @codes[0x10] = 'NUMA_EXT'
122
+ @codes[0x100] = 'NEXT_FISSIONABLE_EXT'
123
+ end
124
+
125
+ end
126
+
127
+ module InnerInterface
128
+ TYPE_CONVERTER[:cl_device_affinity_domain_ext] = Device::AffinityDomainEXT
129
+ end
130
+
131
+ class Device
132
+
133
+ # Creates a new Device and retains it if specified and aplicable
134
+ def initialize(ptr, retain = true)
135
+ super(ptr)
136
+ p = platform
137
+ if p.version_number >= 1.2 and retain then
138
+ error = OpenCL.clRetainDevice(ptr)
139
+ error_check( error )
140
+ elsif p.version_number >= 1.1 and retain and extensions.include? "cl_ext_device_fission" then
141
+ error = OpenCL.clRetainDeviceEXT(ptr)
142
+ error_check( error )
143
+ end
144
+ end
145
+
146
+ # method called at Device deletion, releases the object if aplicable
147
+ # @private
148
+ def self.release(ptr)
149
+ plat = FFI::MemoryPointer::new( Platform )
150
+ OpenCL.clGetDeviceInfo( ptr, OpenCL::Device::PLATFORM, plat.size, plat, nil)
151
+ platform = OpenCL::Platform::new(plat.read_pointer)
152
+ if platform.version_number >= 1.2 then
153
+ OpenCL.clReleaseDevice(ptr)
154
+ elsif platform.version_number >= 1.1
155
+ ext_size = FFI::MemoryPointer::new( :size_t )
156
+ OpenCL.clGetDeviceInfo( ptr, OpenCL::Device::EXTENSIONS, 0, nil, ext_size)
157
+ ext = FFI::MemoryPointer::new( ext.read_size_t )
158
+ OpenCL.clGetDeviceInfo( ptr, OpenCL::Device::EXTENSIONS, ext.size, ext, nil)
159
+ extensions = ext.read_string.split(" ")
160
+ if extensions.include? "cl_ext_device_fission" then
161
+ OpenCL.clReleaseDeviceEXT(ptr)
162
+ end
163
+ end
164
+ end
165
+
166
+ module EXTDeviceFission
167
+ extend InnerGenerator
168
+
169
+ # Returns the list of partition types supported by the Device
170
+ def partition_types_ext
171
+ ptr1 = MemoryPointer::new( :size_t, 1)
172
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_TYPES_EXT, 0, nil, ptr1)
173
+ error_check(error)
174
+ ptr2 = MemoryPointer::new( ptr1.read_size_t )
175
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_TYPES_EXT, ptr1.read_size_t, ptr2, nil)
176
+ error_check(error)
177
+ arr = ptr2.get_array_of_cl_device_partition_property_ext(0, ptr1.read_size_t/ OpenCL.find_type(:cl_device_partition_property_ext).size)
178
+ arr.reject! { |e| e == 0 }
179
+ return arr.collect { |e| PartitionEXT::new(e.to_i) }
180
+ end
181
+
182
+ get_info_array("Device", :cl_device_affinity_domain_ext, "affinity_domains_ext")
183
+
184
+ # Returns the parent Device if it exists
185
+ def parent_device_ext
186
+ ptr = MemoryPointer::new( Device )
187
+ error = OpenCL.clGetDeviceInfo(self, PARENT_DEVICE_EXT, Device.size, ptr, nil)
188
+ error_check(error)
189
+ return nil if ptr.null?
190
+ return Device::new(ptr.read_pointer)
191
+ end
192
+
193
+ get_info("Device", :cl_uint, "reference_count_ext")
194
+
195
+ def partition_style_ext
196
+ ptr1 = MemoryPointer::new( :size_t, 1)
197
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_STYLE_EXT, 0, nil, ptr1)
198
+ error_check(error)
199
+ ptr2 = MemoryPointer::new( ptr1.read_size_t )
200
+ error = OpenCL.clGetDeviceInfo(self, PARTITION_STYLE_EXT, ptr1.read_size_t, ptr2, nil)
201
+ error_check(error)
202
+ arr = ptr2.get_array_of_cl_device_partition_property_ext(0, ptr1.read_size_t/ OpenCL.find_type(:cl_device_partition_property).size)
203
+ return [] if arr.length == 0
204
+ ptype = arr.first.to_i
205
+ arr_2 = []
206
+ arr_2.push( PartitionEXT::new(ptype) )
207
+ return arr_2 if arr.length == 1
208
+ case ptype
209
+ when PartitionEXT::BY_NAMES_EXT
210
+ i = 1
211
+ while arr[i].to_i - (0x1 << Pointer.size * 8) != PartitionEXT::BY_NAMES_LIST_END_EXT do
212
+ arr_2.push( arr[i].to_i )
213
+ i += 1
214
+ return arr_2 if arr.length <= i
215
+ end
216
+ arr_2.push( PartitionEXT::new(PartitionEXT::BY_NAMES_LIST_END_EXT) )
217
+ arr_2.push( 0 )
218
+ when PartitionEXT::EQUALLY_EXT
219
+ arr_2.push(arr[1].to_i)
220
+ arr_2.push( 0 )
221
+ when PartitionEXT::BY_COUNTS_EXT
222
+ i = 1
223
+ while arr[i].to_i != PartitionEXT::BY_COUNTS_LIST_END_EXT do
224
+ arr_2.push( arr[i].to_i )
225
+ i += 1
226
+ return arr_2 if arr.length <= i
227
+ end
228
+ arr_2.push( PartitionEXT::new(PartitionEXT::BY_COUNTS_LIST_END_EXT) )
229
+ arr_2.push( 0 )
230
+ end
231
+ return arr_2
232
+ end
233
+
234
+ def create_sub_devices_ext( properties )
235
+ OpenCL.create_sub_devices_ext( self, properties )
236
+ end
237
+
238
+ def partition_by_affinity_domain_ext( affinity_domain = AffinityDomainEXT::NEXT_FISSIONABLE_EXT )
239
+ return OpenCL.create_sub_devices_ext( self, [ PartitionEXT::BY_AFFINITY_DOMAIN_EXT, affinity_domain ] )
240
+ end
241
+
242
+ def partition_equally_ext( compute_unit_number = 1 )
243
+ return OpenCL.create_sub_devices_ext( self, [ PartitionEXT::EQUALLY_EXT, compute_unit_number ] )
244
+ end
245
+
246
+ def partition_by_counts_ext( *compute_unit_count_list )
247
+ compute_unit_count_list = [1] if compute_unit_count_list == []
248
+ compute_unit_count_list.flatten!
249
+ return OpenCL.create_sub_devices_ext( self, [ PartitionEXT::BY_COUNTS_EXT] + compute_unit_count_list + [ PartitionEXT::BY_COUNTS_LIST_END_EXT ] )
250
+ end
251
+
252
+ def partition_by_names_ext( *compute_unit_name_list )
253
+ compute_unit_name_list = [0] if compute_unit_name_list == []
254
+ compute_unit_name_list.flatten!
255
+ return OpenCL.create_sub_devices_ext( self, [ PartitionEXT::BY_NAMES_EXT ] + compute_unit_name_list + [ PartitionEXT::BY_NAMES_LIST_END_EXT ] )
256
+ end
257
+
258
+ end
259
+
260
+ register_extension( :cl_ext_device_fission, EXTDeviceFission, "extensions.include?(\"cl_ext_device_fission\")" )
261
+
262
+ end
263
+
264
+ end
@@ -0,0 +1,2 @@
1
+ require "opencl_ruby_ffi/khr/gl_event.rb"
2
+ require "opencl_ruby_ffi/khr/gl_sharing.rb"
@@ -0,0 +1,120 @@
1
+ require 'opencl_ruby_ffi'
2
+ using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
3
+
4
+ module OpenCL
5
+
6
+ INVALID_D3D10_DEVICE_KHR = -1002
7
+ INVALID_D3D10_RESOURCE_KHR = -1003
8
+ D3D10_RESOURCE_ALREADY_ACQUIRED_KHR = -1004
9
+ D3D10_RESOURCE_NOT_ACQUIRED_KHR = -1005
10
+
11
+ D3D10_DEVICE_KHR = 0x4010
12
+ D3D10_DXGI_ADAPTER_KHR = 0x4011
13
+ PREFERRED_DEVICES_FOR_D3D10_KHR = 0x4012
14
+ ALL_DEVICES_FOR_D3D10_KHR = 0x4013
15
+ CONTEXT_D3D10_DEVICE_KHR = 0x4014
16
+ CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR = 0x402C
17
+ MEM_D3D10_RESOURCE_KHR = 0x4015
18
+ IMAGE_D3D10_SUBRESOURCE_KHR = 0x4016
19
+ COMMAND_ACQUIRE_D3D10_OBJECTS_KHR = 0x4017
20
+ COMMAND_RELEASE_D3D10_OBJECTS_KHR = 0x4018
21
+
22
+ class Error
23
+
24
+ eval error_class_constructor( :INVALID_D3D10_DEVICE_KHR, :InvalidD3D10DeviceKHR )
25
+ eval error_class_constructor( :INVALID_D3D10_RESOURCE_KHR, :InvalidD3D10ResourceKHR )
26
+ eval error_class_constructor( :D3D10_RESOURCE_ALREADY_ACQUIRED_KHR, :D3D10ResourceAlreadyAcquiredKHR )
27
+ eval error_class_constructor( :D3D10_RESOURCE_NOT_ACQUIRED_KHR, :D3D10ResourceNotAcquiredKHR )
28
+
29
+ end
30
+
31
+ class Context
32
+ D3D10_DEVICE_KHR = 0x4014
33
+ D3D10_PREFER_SHARED_RESOURCES_KHR = 0x402C
34
+
35
+ class Properties
36
+ D3D10_DEVICE_KHR = 0x4014
37
+ D3D10_PREFER_SHARED_RESOURCES_KHR = 0x402C
38
+ @codes[0x4014] = 'D3D10_DEVICE_KHR'
39
+ @codes[0x402C] = 'D3D10_PREFER_SHARED_RESOURCES_KHR'
40
+ end
41
+
42
+ end
43
+
44
+ class Mem
45
+ D3D10_RESOURCE_KHR = 0x4015
46
+ end
47
+
48
+ class Image
49
+ D3D10_SUBRESOURCE_KHR = 0x4016
50
+ end
51
+
52
+ class CommandType
53
+ ACQUIRE_D3D10_OBJECTS_KHR = 0x4017
54
+ RELEASE_D3D10_OBJECTS_KHR = 0x4018
55
+ @codes[0x4017] = 'ACQUIRE_D3D10_OBJECTS_KHR'
56
+ @codes[0x4018] = 'RELEASE_D3D10_OBJECTS_KHR'
57
+ end
58
+
59
+ [
60
+ [ "clGetDeviceIDsFromD3D10KHR",
61
+ :cl_int,
62
+ [ Platform,
63
+ :cl_d3d10_device_source_khr,
64
+ :pointer,
65
+ :cl_d3d10_device_set_khr,
66
+ :cl_uint,
67
+ :pointer,
68
+ :pointer
69
+ ]
70
+ ], [
71
+ "clCreateFromD3D10BufferKHR",
72
+ Mem,
73
+ [ Context,
74
+ :cl_mem_flags,
75
+ :pointer,
76
+ :pointer ]
77
+ ], [
78
+ "clCreateFromD3D10Texture2DKHR",
79
+ Mem,
80
+ [ Context,
81
+ :cl_mem_flags,
82
+ :pointer,
83
+ :cl_uint,
84
+ :pointer
85
+ ]
86
+ ], [
87
+ "clCreateFromD3D10Texture3DKHR",
88
+ Mem,
89
+ [ Context,
90
+ :cl_mem_flags,
91
+ :pointer,
92
+ :cl_uint,
93
+ :pointer
94
+ ]
95
+ ], [
96
+ "clEnqueueAcquireD3D10ObjectsKHR",
97
+ :cl_int,
98
+ [ CommandQueue,
99
+ :cl_uint,
100
+ :pointer,
101
+ :cl_uint,
102
+ :pointer,
103
+ :pointer,
104
+ ]
105
+ ], [
106
+ "clEnqueueReleaseD3D10ObjectsKHR",
107
+ :cl_int,
108
+ [ CommandQueue,
109
+ :cl_uint,
110
+ :pointer,
111
+ :cl_uint,
112
+ :pointer,
113
+ :pointer,
114
+ ]
115
+ ]
116
+ ].each { |name, return_type, args|
117
+ attach_extension_function(name, return_type, args)
118
+ }
119
+
120
+ end