opencl_ruby_ffi 0.993 → 0.994
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/lib/opencl_ruby_ffi/Buffer.rb +13 -13
- data/lib/opencl_ruby_ffi/CommandQueue.rb +177 -177
- data/lib/opencl_ruby_ffi/Context.rb +11 -13
- data/lib/opencl_ruby_ffi/Device.rb +20 -20
- data/lib/opencl_ruby_ffi/Event.rb +22 -20
- data/lib/opencl_ruby_ffi/Image.rb +42 -42
- data/lib/opencl_ruby_ffi/Kernel.rb +28 -28
- data/lib/opencl_ruby_ffi/Mem.rb +9 -8
- data/lib/opencl_ruby_ffi/Pipe.rb +5 -5
- data/lib/opencl_ruby_ffi/Platform.rb +17 -17
- data/lib/opencl_ruby_ffi/Program.rb +32 -32
- data/lib/opencl_ruby_ffi/SVM.rb +42 -42
- data/lib/opencl_ruby_ffi/Sampler.rb +14 -14
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base.rb +29 -29
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base_gen.rb +1 -55
- data/opencl_ruby_ffi.gemspec +2 -2
- metadata +3 -3
@@ -6,8 +6,8 @@ module OpenCL
|
|
6
6
|
#
|
7
7
|
# * +command_queue+ - the CommandQueue to finish
|
8
8
|
def self.finish( command_queue )
|
9
|
-
error =
|
10
|
-
|
9
|
+
error = clFinish( command_queue )
|
10
|
+
error_check( error )
|
11
11
|
return command_queue
|
12
12
|
end
|
13
13
|
|
@@ -17,8 +17,8 @@ module OpenCL
|
|
17
17
|
#
|
18
18
|
# * +command_queue+ - the CommandQueue to flush
|
19
19
|
def self.flush( command_queue )
|
20
|
-
error =
|
21
|
-
|
20
|
+
error = clFlush( command_queue )
|
21
|
+
error_check( error )
|
22
22
|
return command_queue
|
23
23
|
end
|
24
24
|
|
@@ -35,11 +35,11 @@ module OpenCL
|
|
35
35
|
# * +:properties+ - a single or an Array of :cl_command_queue_properties
|
36
36
|
# * +:size+ - the size of the command queue ( if ON_DEVICE is specified in the properties ) 2.0+ only
|
37
37
|
def self.create_command_queue( context, device, options = {} )
|
38
|
-
properties =
|
38
|
+
properties = get_command_queue_properties( options )
|
39
39
|
size = options[:size]
|
40
40
|
error = FFI::MemoryPointer::new( :cl_int )
|
41
41
|
if context.platform.version_number < 2.0 then
|
42
|
-
cmd =
|
42
|
+
cmd = clCreateCommandQueue( context, device, properties, error )
|
43
43
|
else
|
44
44
|
props = nil
|
45
45
|
if properties.to_i != 0 or size then
|
@@ -50,21 +50,21 @@ module OpenCL
|
|
50
50
|
props = FFI::MemoryPointer::new( :cl_queue_properties, props_size )
|
51
51
|
i=0
|
52
52
|
if properties.to_i != 0 then
|
53
|
-
props[i].write_cl_queue_properties(
|
53
|
+
props[i].write_cl_queue_properties( Queue::PROPERTIES )
|
54
54
|
props[i+1].write_cl_queue_properties( properties.to_i )
|
55
55
|
i += 2
|
56
56
|
end
|
57
57
|
if size then
|
58
|
-
props[i].write_cl_queue_properties(
|
58
|
+
props[i].write_cl_queue_properties( Queue::SIZE )
|
59
59
|
props[i+1].write_cl_queue_properties( size )
|
60
60
|
i += 2
|
61
61
|
end
|
62
62
|
props[i].write_cl_queue_properties( 0 )
|
63
63
|
end
|
64
|
-
cmd =
|
64
|
+
cmd = clCreateCommandQueueWithProperties( context, device, props, error )
|
65
65
|
end
|
66
|
-
|
67
|
-
return
|
66
|
+
error_check(error.read_cl_int)
|
67
|
+
return CommandQueue::new(cmd, false)
|
68
68
|
end
|
69
69
|
|
70
70
|
# Enqueues a command to indicate which device a set of memory objects should be migrated to
|
@@ -84,21 +84,21 @@ module OpenCL
|
|
84
84
|
#
|
85
85
|
# the Event associated with the command
|
86
86
|
def self.enqueue_migrate_mem_objects( command_queue, mem_objects, options = {} )
|
87
|
-
|
87
|
+
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.2
|
88
88
|
num_mem_objects = [mem_objects].flatten.length
|
89
89
|
mem_list = nil
|
90
90
|
if num_mem_objects > 0 then
|
91
|
-
mem_list = FFI::MemoryPointer::new(
|
91
|
+
mem_list = FFI::MemoryPointer::new( Mem, num_mem_objects )
|
92
92
|
[mem_objects].flatten.each_with_index { |e, i|
|
93
93
|
mem_list[i].write_pointer(e)
|
94
94
|
}
|
95
95
|
end
|
96
|
-
flags =
|
97
|
-
num_events, events =
|
98
|
-
event = FFI::MemoryPointer::new(
|
99
|
-
error =
|
100
|
-
|
101
|
-
return
|
96
|
+
flags = get_flags( options )
|
97
|
+
num_events, events = get_event_wait_list( options )
|
98
|
+
event = FFI::MemoryPointer::new( Event )
|
99
|
+
error = clEnqueueMigrateMemObjects( command_queue, num_mem_objects, mem_list, flags, num_events, events, event )
|
100
|
+
error_check( error )
|
101
|
+
return Event::new( event.read_ptr, false )
|
102
102
|
end
|
103
103
|
|
104
104
|
# Enqueues a command to map an Image into host memory
|
@@ -126,20 +126,20 @@ module OpenCL
|
|
126
126
|
# * +image_row_pitch+ - the row pitch of the mapped region
|
127
127
|
# * +image_slice_pitch+ - the slice pitch of the mapped region
|
128
128
|
def self.enqueue_map_image( command_queue, image, map_flags, options = {} )
|
129
|
-
blocking =
|
130
|
-
blocking =
|
131
|
-
flags =
|
129
|
+
blocking = FALSE
|
130
|
+
blocking = TRUE if options[:blocking] or options[:blocking_map]
|
131
|
+
flags = get_flags( {:flags => map_flags} )
|
132
132
|
|
133
|
-
origin, region =
|
133
|
+
origin, region = get_origin_region( image, options, :origin, :region )
|
134
134
|
|
135
|
-
num_events, events =
|
135
|
+
num_events, events = get_event_wait_list( options )
|
136
136
|
image_row_pitch = FFI::MemoryPointer::new( :size_t )
|
137
137
|
image_slice_pitch = FFI::MemoryPointer::new( :size_t )
|
138
|
-
event = FFI::MemoryPointer::new(
|
138
|
+
event = FFI::MemoryPointer::new( Event )
|
139
139
|
error = FFI::MemoryPointer::new( :cl_int )
|
140
|
-
ptr =
|
141
|
-
|
142
|
-
ev =
|
140
|
+
ptr = clEnqueueMapImage( command_queue, image, blocking, flags, origin, region, image_row_pitch, image_slice_pitch, num_events, events, event, error )
|
141
|
+
error_check( error.read_cl_int )
|
142
|
+
ev = Event::new( event.read_ptr, false )
|
143
143
|
return [ev, ptr, image_row_pitch.read_size_t, image_slice_pitch.read_size_t]
|
144
144
|
end
|
145
145
|
|
@@ -166,20 +166,20 @@ module OpenCL
|
|
166
166
|
# * +event+ - the Event associated with the command
|
167
167
|
# * +pointer+ - a Pointer to the mapped memory region
|
168
168
|
def self.enqueue_map_buffer( command_queue, buffer, map_flags, options = {} )
|
169
|
-
blocking =
|
170
|
-
blocking =
|
171
|
-
flags =
|
169
|
+
blocking = FALSE
|
170
|
+
blocking = TRUE if options[:blocking] or options[:blocking_map]
|
171
|
+
flags = get_flags( {:flags => map_flags} )
|
172
172
|
|
173
173
|
offset = 0
|
174
174
|
offset = options[:offset] if options[:offset]
|
175
175
|
size = buffer.size - offset
|
176
176
|
size = options[:size] - offset if options[:size]
|
177
|
-
num_events, events =
|
178
|
-
event = FFI::MemoryPointer::new(
|
177
|
+
num_events, events = get_event_wait_list( options )
|
178
|
+
event = FFI::MemoryPointer::new( Event )
|
179
179
|
error = FFI::MemoryPointer::new( :cl_int )
|
180
|
-
ptr =
|
181
|
-
|
182
|
-
ev =
|
180
|
+
ptr = clEnqueueMapBuffer( command_queue, buffer, blocking, flags, offset, size, num_events, events, event, error )
|
181
|
+
error_check( error.read_cl_int )
|
182
|
+
ev = Event::new( event.read_ptr, false )
|
183
183
|
return [ev, ptr]
|
184
184
|
end
|
185
185
|
|
@@ -200,11 +200,11 @@ module OpenCL
|
|
200
200
|
#
|
201
201
|
# the Event associated with the command
|
202
202
|
def self.enqueue_unmap_mem_object( command_queue, mem_obj, mapped_ptr, options = {} )
|
203
|
-
num_events, events =
|
204
|
-
event = FFI::MemoryPointer::new(
|
205
|
-
error =
|
206
|
-
|
207
|
-
return
|
203
|
+
num_events, events = get_event_wait_list( options )
|
204
|
+
event = FFI::MemoryPointer::new( Event )
|
205
|
+
error = clEnqueueUnmapMemObject( command_queue, mem_obj, mapped_ptr, num_events, events, event )
|
206
|
+
error_check( error )
|
207
|
+
return Event::new( event.read_ptr, false )
|
208
208
|
end
|
209
209
|
|
210
210
|
# Enqueues a command to read from a rectangular region from a Buffer object to host memory
|
@@ -233,9 +233,9 @@ module OpenCL
|
|
233
233
|
#
|
234
234
|
# the Event associated with the command
|
235
235
|
def self.enqueue_read_buffer_rect( command_queue, buffer, ptr, region, options = {} )
|
236
|
-
|
237
|
-
blocking =
|
238
|
-
blocking =
|
236
|
+
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
237
|
+
blocking = FALSE
|
238
|
+
blocking = TRUE if options[:blocking] or options[:blocking_read]
|
239
239
|
|
240
240
|
buffer_origin = FFI::MemoryPointer::new( :size_t, 3 )
|
241
241
|
(0..2).each { |i| buffer_origin[i].write_size_t(0) }
|
@@ -277,11 +277,11 @@ module OpenCL
|
|
277
277
|
if not host_slice_pitch then
|
278
278
|
host_slice_pitch = 0
|
279
279
|
end
|
280
|
-
num_events, events =
|
281
|
-
event = FFI::MemoryPointer::new(
|
282
|
-
error =
|
283
|
-
|
284
|
-
return
|
280
|
+
num_events, events = get_event_wait_list( options )
|
281
|
+
event = FFI::MemoryPointer::new( Event )
|
282
|
+
error = clEnqueueReadBufferRect(command_queue, buffer, blocking, buffer_origin, host_origin, r, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events, events, event)
|
283
|
+
error_check(error)
|
284
|
+
return Event::new(event.read_pointer, false)
|
285
285
|
end
|
286
286
|
|
287
287
|
# Enqueues a command to write to a rectangular region in a Buffer object from host memory
|
@@ -310,9 +310,9 @@ module OpenCL
|
|
310
310
|
#
|
311
311
|
# the Event associated with the command
|
312
312
|
def self.enqueue_write_buffer_rect(command_queue, buffer, ptr, region, options = {})
|
313
|
-
|
314
|
-
blocking =
|
315
|
-
blocking =
|
313
|
+
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
314
|
+
blocking = FALSE
|
315
|
+
blocking = TRUE if options[:blocking] or options[:blocking_write]
|
316
316
|
|
317
317
|
buffer_origin = FFI::MemoryPointer::new( :size_t, 3 )
|
318
318
|
(0..2).each { |i| buffer_origin[i].write_size_t(0) }
|
@@ -354,11 +354,11 @@ module OpenCL
|
|
354
354
|
if not host_slice_pitch then
|
355
355
|
host_slice_pitch = 0
|
356
356
|
end
|
357
|
-
num_events, events =
|
358
|
-
event = FFI::MemoryPointer::new(
|
359
|
-
error =
|
360
|
-
|
361
|
-
return
|
357
|
+
num_events, events = get_event_wait_list( options )
|
358
|
+
event = FFI::MemoryPointer::new( Event )
|
359
|
+
error = clEnqueueWriteBufferRect(command_queue, buffer, blocking, buffer_origin, host_origin, r, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events, events, event)
|
360
|
+
error_check(error)
|
361
|
+
return Event::new(event.read_pointer, false)
|
362
362
|
end
|
363
363
|
|
364
364
|
# Enqueues a command to copy a rectangular region into a Buffer object from another Buffer object
|
@@ -385,7 +385,7 @@ module OpenCL
|
|
385
385
|
#
|
386
386
|
# the Event associated with the command
|
387
387
|
def self.enqueue_copy_buffer_rect(command_queue, src_buffer, dst_buffer, region, options = {})
|
388
|
-
|
388
|
+
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
389
389
|
|
390
390
|
src_origin = FFI::MemoryPointer::new( :size_t, 3 )
|
391
391
|
(0..2).each { |i| src_origin[i].write_size_t(0) }
|
@@ -425,11 +425,11 @@ module OpenCL
|
|
425
425
|
if not dst_slice_pitch then
|
426
426
|
dst_slice_pitch = 0
|
427
427
|
end
|
428
|
-
num_events, events =
|
429
|
-
event = FFI::MemoryPointer::new(
|
430
|
-
error =
|
431
|
-
|
432
|
-
return
|
428
|
+
num_events, events = get_event_wait_list( options )
|
429
|
+
event = FFI::MemoryPointer::new( Event )
|
430
|
+
error = clEnqueueCopyBufferRect(command_queue, src_buffer, dst_buffer, src_origin, dst_origin, r, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, num_events, events, event)
|
431
|
+
error_check(error)
|
432
|
+
return Event::new(event.read_pointer, false)
|
433
433
|
end
|
434
434
|
|
435
435
|
# Enqueues a command to copy data from a Buffer object into another Buffer object
|
@@ -458,11 +458,11 @@ module OpenCL
|
|
458
458
|
dst_offset = options[:dst_offset] if options[:dst_offset]
|
459
459
|
size = [ src_buffer.size - src_offset, dst_buffer.size - dst_offset ].min
|
460
460
|
size = options[:size] if options[:size]
|
461
|
-
num_events, events =
|
462
|
-
event = FFI::MemoryPointer::new(
|
463
|
-
error =
|
464
|
-
|
465
|
-
return
|
461
|
+
num_events, events = get_event_wait_list( options )
|
462
|
+
event = FFI::MemoryPointer::new( Event )
|
463
|
+
error = clEnqueueCopyBuffer(command_queue, src_buffer, dst_buffer, src_offset, dst_offset, size, num_events, events, event)
|
464
|
+
error_check(error)
|
465
|
+
return Event::new(event.read_pointer, false)
|
466
466
|
end
|
467
467
|
|
468
468
|
|
@@ -487,17 +487,17 @@ module OpenCL
|
|
487
487
|
#
|
488
488
|
# the Event associated with the command
|
489
489
|
def self.enqueue_write_buffer( command_queue, buffer, ptr, options = {} )
|
490
|
-
blocking =
|
491
|
-
blocking =
|
490
|
+
blocking = FALSE
|
491
|
+
blocking = TRUE if options[:blocking] or options[:blocking_write]
|
492
492
|
offset = 0
|
493
493
|
offset = options[:offset] if options[:offset]
|
494
494
|
size = buffer.size - offset
|
495
495
|
size = options[:size] if options[:size]
|
496
|
-
num_events, events =
|
497
|
-
event = FFI::MemoryPointer::new(
|
498
|
-
error =
|
499
|
-
|
500
|
-
return
|
496
|
+
num_events, events = get_event_wait_list( options )
|
497
|
+
event = FFI::MemoryPointer::new( Event )
|
498
|
+
error = clEnqueueWriteBuffer(command_queue, buffer, blocking, offset, size, ptr, num_events, events, event)
|
499
|
+
error_check(error)
|
500
|
+
return Event::new(event.read_pointer, false)
|
501
501
|
end
|
502
502
|
|
503
503
|
# Enqueues a command to read from a Buffer object to host memory
|
@@ -521,17 +521,17 @@ module OpenCL
|
|
521
521
|
#
|
522
522
|
# the Event associated with the command
|
523
523
|
def self.enqueue_read_buffer( command_queue, buffer, ptr, options = {} )
|
524
|
-
blocking =
|
525
|
-
blocking =
|
524
|
+
blocking = FALSE
|
525
|
+
blocking = TRUE if options[:blocking] or options[:blocking_read]
|
526
526
|
offset = 0
|
527
527
|
offset = options[:offset] if options[:offset]
|
528
528
|
size = buffer.size - offset
|
529
529
|
size = options[:size] if options[:size]
|
530
|
-
num_events, events =
|
531
|
-
event = FFI::MemoryPointer::new(
|
532
|
-
error =
|
533
|
-
|
534
|
-
return
|
530
|
+
num_events, events = get_event_wait_list( options )
|
531
|
+
event = FFI::MemoryPointer::new( Event )
|
532
|
+
error = clEnqueueReadBuffer(command_queue, buffer, blocking, offset, size, ptr, num_events, events, event)
|
533
|
+
error_check(error)
|
534
|
+
return Event::new(event.read_pointer, false)
|
535
535
|
end
|
536
536
|
|
537
537
|
# Acquire OpenCL Mem objects that have been created from OpenGL objects
|
@@ -553,16 +553,16 @@ module OpenCL
|
|
553
553
|
num_objs = [mem_objects].flatten.length
|
554
554
|
objs = nil
|
555
555
|
if num_objs > 0 then
|
556
|
-
objs = FFI::MemoryPointer::new(
|
556
|
+
objs = FFI::MemoryPointer::new( Mem, num_objs )
|
557
557
|
[mem_objects].flatten.each_with_index { |o, i|
|
558
558
|
objs[i].write_pointer(e)
|
559
559
|
}
|
560
560
|
end
|
561
|
-
num_events, events =
|
562
|
-
event = FFI::MemoryPointer::new(
|
563
|
-
error =
|
564
|
-
|
565
|
-
return
|
561
|
+
num_events, events = get_event_wait_list( options )
|
562
|
+
event = FFI::MemoryPointer::new( Event )
|
563
|
+
error = clEnqueueAcquireGLObject( command_queue, num_objs, objs, num_events, events, event )
|
564
|
+
error_check(error)
|
565
|
+
return Event::new(event.read_pointer, false)
|
566
566
|
end
|
567
567
|
|
568
568
|
# Release OpenCL Mem objects that have been created from OpenGL objects and previously acquired
|
@@ -584,16 +584,16 @@ module OpenCL
|
|
584
584
|
num_objs = [mem_objects].flatten.length
|
585
585
|
objs = nil
|
586
586
|
if num_objs > 0 then
|
587
|
-
objs = FFI::MemoryPointer::new(
|
587
|
+
objs = FFI::MemoryPointer::new( Mem, num_objs )
|
588
588
|
[mem_objects].flatten.each_with_index { |o, i|
|
589
589
|
objs[i].write_pointer(e)
|
590
590
|
}
|
591
591
|
end
|
592
|
-
num_events, events =
|
593
|
-
event = FFI::MemoryPointer::new(
|
594
|
-
error =
|
595
|
-
|
596
|
-
return
|
592
|
+
num_events, events = get_event_wait_list( options )
|
593
|
+
event = FFI::MemoryPointer::new( Event )
|
594
|
+
error = clEnqueueReleaseGLObject( command_queue, num_objs, objs, num_events, events, event )
|
595
|
+
error_check(error)
|
596
|
+
return Event::new(event.read_pointer, false)
|
597
597
|
end
|
598
598
|
|
599
599
|
# Enqueues a command to fill a Buffer with the given pattern
|
@@ -616,18 +616,18 @@ module OpenCL
|
|
616
616
|
#
|
617
617
|
# the Event associated with the command
|
618
618
|
def self.enqueue_fill_buffer( command_queue, buffer, pattern, options = {} )
|
619
|
-
|
619
|
+
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
620
620
|
offset = 0
|
621
621
|
offset = options[:offset] if options[:offset]
|
622
622
|
pattern_size = pattern.size
|
623
623
|
pattern_size = options[:pattern_size] if options[:pattern_size]
|
624
624
|
size = (buffer.size - offset) % pattern_size
|
625
625
|
size = options[:size] if options[:size]
|
626
|
-
num_events, events =
|
627
|
-
event = FFI::MemoryPointer::new(
|
628
|
-
error =
|
629
|
-
|
630
|
-
return
|
626
|
+
num_events, events = get_event_wait_list( options )
|
627
|
+
event = FFI::MemoryPointer::new( Event )
|
628
|
+
error = clEnqueueFillBuffer( command_queue, buffer, pattern, pattern_size, offset, size, num_events, events, event )
|
629
|
+
error_check(error)
|
630
|
+
return Event::new(event.read_pointer, false)
|
631
631
|
end
|
632
632
|
|
633
633
|
# Enqueues a command to fill an Image with the given color
|
@@ -649,13 +649,13 @@ module OpenCL
|
|
649
649
|
#
|
650
650
|
# the Event associated with the command
|
651
651
|
def self.enqueue_fill_image( command_queue, image, fill_color, options = {} )
|
652
|
-
|
653
|
-
origin, region =
|
654
|
-
num_events, events =
|
655
|
-
event = FFI::MemoryPointer::new(
|
656
|
-
error =
|
657
|
-
|
658
|
-
return
|
652
|
+
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
653
|
+
origin, region = get_origin_region( image, options, :origin, :region )
|
654
|
+
num_events, events = get_event_wait_list( options )
|
655
|
+
event = FFI::MemoryPointer::new( Event )
|
656
|
+
error = clEnqueueFillImage( command_queue, image, fill_color, origin, region, num_events, events, event )
|
657
|
+
error_check(error)
|
658
|
+
return Event::new(event.read_pointer, false)
|
659
659
|
end
|
660
660
|
|
661
661
|
# Enqueues a command to copy an Image into a Buffer
|
@@ -678,14 +678,14 @@ module OpenCL
|
|
678
678
|
#
|
679
679
|
# the Event associated with the command
|
680
680
|
def self.enqueue_copy_image_to_buffer( command_queue, src_image, dst_buffer, options = {} )
|
681
|
-
src_origin, region =
|
681
|
+
src_origin, region = get_origin_region( src_image, options, :src_origin, :region )
|
682
682
|
dst_offset = 0
|
683
683
|
dst_offset = options[:dst_offset] if options[:dst_offset]
|
684
|
-
num_events, events =
|
685
|
-
event = FFI::MemoryPointer::new(
|
686
|
-
error =
|
687
|
-
|
688
|
-
return
|
684
|
+
num_events, events = get_event_wait_list( options )
|
685
|
+
event = FFI::MemoryPointer::new( Event )
|
686
|
+
error = clEnqueueCopyImageToBuffer( command_queue, src_image, dst_buffer, src_origin, region, dst_offset, num_events, events, event )
|
687
|
+
error_check(error)
|
688
|
+
return Event::new(event.read_pointer, false)
|
689
689
|
end
|
690
690
|
|
691
691
|
# Enqueues a command to copy a Buffer into an Image
|
@@ -708,14 +708,14 @@ module OpenCL
|
|
708
708
|
#
|
709
709
|
# the Event associated with the command
|
710
710
|
def self.enqueue_copy_buffer_to_image(command_queue, src_buffer, dst_image, options = {})
|
711
|
-
dst_origin, region =
|
711
|
+
dst_origin, region = get_origin_region( dst_image, options, :dst_origin, :region )
|
712
712
|
src_offset = 0
|
713
713
|
src_offset = options[:src_offset] if options[:src_offset]
|
714
|
-
num_events, events =
|
715
|
-
event = FFI::MemoryPointer::new(
|
716
|
-
error =
|
717
|
-
|
718
|
-
return
|
714
|
+
num_events, events = get_event_wait_list( options )
|
715
|
+
event = FFI::MemoryPointer::new( Event )
|
716
|
+
error = clEnqueueCopyBufferToImage( command_queue, src_buffer, dst_image, src_offset, dst_origin, region, num_events, events, event )
|
717
|
+
error_check(error)
|
718
|
+
return Event::new(event.read_pointer, false)
|
719
719
|
end
|
720
720
|
|
721
721
|
# Enqueues a command to copy from host memory into an Image
|
@@ -741,20 +741,20 @@ module OpenCL
|
|
741
741
|
#
|
742
742
|
# the Event associated with the command
|
743
743
|
def self.enqueue_write_image(command_queue, image, ptr, options = {})
|
744
|
-
blocking =
|
745
|
-
blocking =
|
744
|
+
blocking = FALSE
|
745
|
+
blocking = TRUE if options[:blocking] or options[:blocking_write]
|
746
746
|
|
747
|
-
origin, region =
|
747
|
+
origin, region = get_origin_region( image, options, :origin, :region )
|
748
748
|
|
749
749
|
input_row_pitch = 0
|
750
750
|
input_row_pitch = options[:input_row_pitch] if options[:input_row_pitch]
|
751
751
|
input_slice_pitch = 0
|
752
752
|
input_slice_pitch = options[:input_slice_pitch] if options[:input_slice_pitch]
|
753
|
-
num_events, events =
|
754
|
-
event = FFI::MemoryPointer::new(
|
755
|
-
error =
|
756
|
-
|
757
|
-
return
|
753
|
+
num_events, events = get_event_wait_list( options )
|
754
|
+
event = FFI::MemoryPointer::new( Event )
|
755
|
+
error = clEnqueueWriteImage( command_queue, image, blocking, origin, region, input_row_pitch, input_slice_pitch, ptr, num_events, events, event )
|
756
|
+
error_check(error)
|
757
|
+
return Event::new(event.read_pointer, false)
|
758
758
|
end
|
759
759
|
|
760
760
|
# Enqueues a command to copy from an Image into an Image
|
@@ -777,17 +777,17 @@ module OpenCL
|
|
777
777
|
#
|
778
778
|
# the Event associated with the command
|
779
779
|
def self.enqueue_copy_image( command_queue, src_image, dst_image, options = {} )
|
780
|
-
src_origin, src_region =
|
781
|
-
dst_origin, dst_region =
|
780
|
+
src_origin, src_region = get_origin_region( src_image, options, :src_origin, :region )
|
781
|
+
dst_origin, dst_region = get_origin_region( dst_image, options, :dst_origin, :region )
|
782
782
|
region = FFI::MemoryPointer::new( :size_t, 3 )
|
783
783
|
(0..2).each { |i|
|
784
784
|
region[i].write_size_t( [src_region[i].read_size_t, dst_region[i].read_size_t].min )
|
785
785
|
}
|
786
|
-
num_events, events =
|
787
|
-
event = FFI::MemoryPointer::new(
|
788
|
-
error =
|
789
|
-
|
790
|
-
return
|
786
|
+
num_events, events = get_event_wait_list( options )
|
787
|
+
event = FFI::MemoryPointer::new( Event )
|
788
|
+
error = clEnqueueCopyImage( command_queue, src_image, dst_image, src_origin, dst_origin, region, num_events, events, event )
|
789
|
+
error_check(error)
|
790
|
+
return Event::new(event.read_pointer, false)
|
791
791
|
end
|
792
792
|
|
793
793
|
# Enqueues a command to copy from an Image into host memory
|
@@ -813,19 +813,19 @@ module OpenCL
|
|
813
813
|
#
|
814
814
|
# the Event associated with the command
|
815
815
|
def self.enqueue_read_image( command_queue, image, ptr, options = {} )
|
816
|
-
blocking =
|
817
|
-
blocking =
|
816
|
+
blocking = FALSE
|
817
|
+
blocking = TRUE if options[:blocking] or options[:blocking_read]
|
818
818
|
|
819
|
-
origin, region =
|
819
|
+
origin, region = get_origin_region( image, options, :origin, :region )
|
820
820
|
row_pitch = 0
|
821
821
|
row_pitch = options[:row_pitch] if options[:row_pitch]
|
822
822
|
slice_pitch = 0
|
823
823
|
slice_pitch = options[:slice_pitch] if options[:slice_pitch]
|
824
|
-
num_events, events =
|
825
|
-
event = FFI::MemoryPointer::new(
|
826
|
-
error =
|
827
|
-
|
828
|
-
return
|
824
|
+
num_events, events = get_event_wait_list( options )
|
825
|
+
event = FFI::MemoryPointer::new( Event )
|
826
|
+
error = clEnqueueReadImage( command_queue, image, blocking, origin, region, row_pitch, slice_pitch, ptr, num_events, events, event )
|
827
|
+
error_check(error)
|
828
|
+
return Event::new(event.read_pointer, false)
|
829
829
|
end
|
830
830
|
|
831
831
|
# Enqueues a native kernel
|
@@ -865,7 +865,7 @@ module OpenCL
|
|
865
865
|
if options[:mem_list] then
|
866
866
|
num_mem_objects = options[:mem_list].length
|
867
867
|
if num_mem_objects > 0 then
|
868
|
-
mem_list = FFI::MemoryPointer::new(
|
868
|
+
mem_list = FFI::MemoryPointer::new( Mem, num_mem_objects )
|
869
869
|
mem_loc = FFI::MemoryPointer::new( :pointer, num_mem_objects )
|
870
870
|
i = 0
|
871
871
|
options[:mem_list].each { |key, value|
|
@@ -875,11 +875,11 @@ module OpenCL
|
|
875
875
|
}
|
876
876
|
end
|
877
877
|
end
|
878
|
-
num_events, events =
|
879
|
-
event = FFI::MemoryPointer::new(
|
880
|
-
error =
|
881
|
-
|
882
|
-
return
|
878
|
+
num_events, events = get_event_wait_list( options )
|
879
|
+
event = FFI::MemoryPointer::new( Event )
|
880
|
+
error = clEnqueueNativeKernel( command_queue, func, args, args_size, num_mem_objects, mem_list, mem_loc, num_events, events, event )
|
881
|
+
error_check(error)
|
882
|
+
return Event::new(event.read_pointer, false)
|
883
883
|
end
|
884
884
|
|
885
885
|
# Enqueues a kernel as a task
|
@@ -899,15 +899,15 @@ module OpenCL
|
|
899
899
|
# the Event associated with the command
|
900
900
|
def self.enqueue_task( command_queue, kernel, options = {} )
|
901
901
|
if queue.context.platform.version_number < 2.0 then
|
902
|
-
num_events, events =
|
903
|
-
event = FFI::MemoryPointer::new(
|
904
|
-
error =
|
905
|
-
|
906
|
-
return
|
902
|
+
num_events, events = get_event_wait_list( options )
|
903
|
+
event = FFI::MemoryPointer::new( Event )
|
904
|
+
error = clEnqueueTask( command_queue, kernel, num_events, events, event )
|
905
|
+
error_check(error)
|
906
|
+
return Event::new(event.read_pointer, false)
|
907
907
|
else
|
908
908
|
opts = options.dup
|
909
909
|
opts[:local_work_size] = [1]
|
910
|
-
return
|
910
|
+
return enqueue_NDrange_kernel( command_queue, kernel, [1], opts )
|
911
911
|
end
|
912
912
|
end
|
913
913
|
|
@@ -948,11 +948,11 @@ module OpenCL
|
|
948
948
|
gwo[i].write_size_t(options[:global_work_offset][i])
|
949
949
|
}
|
950
950
|
end
|
951
|
-
num_events, events =
|
952
|
-
event = FFI::MemoryPointer::new(
|
953
|
-
error =
|
954
|
-
|
955
|
-
return
|
951
|
+
num_events, events = get_event_wait_list( options )
|
952
|
+
event = FFI::MemoryPointer::new( Event )
|
953
|
+
error = clEnqueueNDRangeKernel(command_queue, kernel, global_work_size.length, gwo, gws, lws, num_events, events, event)
|
954
|
+
error_check(error)
|
955
|
+
return Event::new(event.read_pointer, false)
|
956
956
|
end
|
957
957
|
|
958
958
|
# Enqueues a barrier on a list of envents
|
@@ -966,7 +966,7 @@ module OpenCL
|
|
966
966
|
#
|
967
967
|
# an Event if implementation version is >= 1.2, nil otherwise
|
968
968
|
def self.enqueue_wait_for_events( command_queue, events )
|
969
|
-
return
|
969
|
+
return enqueue_barrier( command_queue, events )
|
970
970
|
end
|
971
971
|
|
972
972
|
# Enqueues a barrier that prevents subsequent execution to take place in the command queue, until the barrier is considered finished
|
@@ -983,29 +983,29 @@ module OpenCL
|
|
983
983
|
if command_queue.context.platform.version_number < 1.2 then
|
984
984
|
num_events = [events].flatten.length
|
985
985
|
if num_events > 0 then
|
986
|
-
evts = FFI::MemoryPointer::new(
|
986
|
+
evts = FFI::MemoryPointer::new( Event, num_events )
|
987
987
|
[events].flatten.each_with_index { |e, i|
|
988
988
|
evts[i].write_pointer(e)
|
989
989
|
}
|
990
|
-
error =
|
990
|
+
error = clnqueueWaitForEvents( command_queue, num_events, evts )
|
991
991
|
else
|
992
|
-
error =
|
992
|
+
error = clEnqueueBarrier( command_queue )
|
993
993
|
end
|
994
|
-
|
994
|
+
error_check(error)
|
995
995
|
return nil
|
996
996
|
else
|
997
997
|
num_events = [events].flatten.length
|
998
998
|
evts = nil
|
999
999
|
if num_events > 0 then
|
1000
|
-
evts = FFI::MemoryPointer::new(
|
1000
|
+
evts = FFI::MemoryPointer::new( Event, num_events )
|
1001
1001
|
[events].flatten.each_with_index { |e, i|
|
1002
1002
|
evts[i].write_pointer(e)
|
1003
1003
|
}
|
1004
1004
|
end
|
1005
|
-
event = FFI::MemoryPointer::new(
|
1006
|
-
error =
|
1007
|
-
|
1008
|
-
return
|
1005
|
+
event = FFI::MemoryPointer::new( Event )
|
1006
|
+
error = clEnqueueBarrierWithWaitList( command_queue, num_events, evts, event )
|
1007
|
+
error_check(error)
|
1008
|
+
return Event::new(event.read_pointer, false)
|
1009
1009
|
end
|
1010
1010
|
end
|
1011
1011
|
|
@@ -1020,22 +1020,22 @@ module OpenCL
|
|
1020
1020
|
#
|
1021
1021
|
# an Event
|
1022
1022
|
def self.enqueue_marker( command_queue, events = [] )
|
1023
|
-
event = FFI::MemoryPointer::new(
|
1023
|
+
event = FFI::MemoryPointer::new( Event )
|
1024
1024
|
if command_queue.context.platform.version_number < 1.2 then
|
1025
|
-
error =
|
1025
|
+
error = clEnqueueMarker( command_queue, event )
|
1026
1026
|
else
|
1027
1027
|
num_events = [events].flatten.length
|
1028
1028
|
evts = nil
|
1029
1029
|
if num_events > 0 then
|
1030
|
-
evts = FFI::MemoryPointer::new(
|
1030
|
+
evts = FFI::MemoryPointer::new( Event, num_events )
|
1031
1031
|
[events].flatten.each_with_index { |e, i|
|
1032
1032
|
evts[i].write_pointer(e)
|
1033
1033
|
}
|
1034
1034
|
end
|
1035
|
-
error =
|
1035
|
+
error = clEnqueueMarkerWithWaitList( command_queue, num_events, evts, event )
|
1036
1036
|
end
|
1037
|
-
|
1038
|
-
return
|
1037
|
+
error_check(error)
|
1038
|
+
return Event::new(event.read_pointer, false)
|
1039
1039
|
end
|
1040
1040
|
|
1041
1041
|
# Maps the cl_command_queue object of OpenCL
|
@@ -1044,7 +1044,7 @@ module OpenCL
|
|
1044
1044
|
# Returns the Context associated to the CommandQueue
|
1045
1045
|
def context
|
1046
1046
|
ptr = FFI::MemoryPointer::new( OpenCL::Context )
|
1047
|
-
error = OpenCL.clGetCommandQueueInfo(self,
|
1047
|
+
error = OpenCL.clGetCommandQueueInfo(self, CONTEXT, Context.size, ptr, nil)
|
1048
1048
|
OpenCL.error_check(error)
|
1049
1049
|
return OpenCL::Context::new( ptr.read_pointer )
|
1050
1050
|
end
|
@@ -1052,7 +1052,7 @@ module OpenCL
|
|
1052
1052
|
# Returns the Device associated to the CommandQueue
|
1053
1053
|
def device
|
1054
1054
|
ptr = FFI::MemoryPointer::new( OpenCL::Device )
|
1055
|
-
error = OpenCL.clGetCommandQueueInfo(self,
|
1055
|
+
error = OpenCL.clGetCommandQueueInfo(self, DEVICE, Device.size, ptr, nil)
|
1056
1056
|
OpenCL.error_check(error)
|
1057
1057
|
return OpenCL::Device::new( ptr.read_pointer )
|
1058
1058
|
end
|