ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/OpenCL/OpenCL.xs
(Generate patch)

Comparing OpenCL/OpenCL.xs (file contents):
Revision 1.2 by root, Tue Nov 15 09:24:40 2011 UTC vs.
Revision 1.3 by root, Tue Nov 15 20:38:07 2011 UTC

7typedef cl_platform_id OpenCL__Platform; 7typedef cl_platform_id OpenCL__Platform;
8typedef cl_device_id OpenCL__Device; 8typedef cl_device_id OpenCL__Device;
9typedef cl_context OpenCL__Context; 9typedef cl_context OpenCL__Context;
10typedef cl_command_queue OpenCL__Queue; 10typedef cl_command_queue OpenCL__Queue;
11typedef cl_mem OpenCL__Memory; 11typedef cl_mem OpenCL__Memory;
12typedef cl_mem OpenCL__Buffer;
13typedef cl_mem OpenCL__Image;
14typedef cl_mem OpenCL__Image2D;
15typedef cl_mem OpenCL__Image3D;
16typedef cl_mem OpenCL__Memory_ornull;
17typedef cl_mem OpenCL__Buffer_ornull;
18typedef cl_mem OpenCL__Image_ornull;
19typedef cl_mem OpenCL__Image2D_ornull;
20typedef cl_mem OpenCL__Image3D_ornull;
12typedef cl_sampler OpenCL__Sampler; 21typedef cl_sampler OpenCL__Sampler;
13typedef cl_program OpenCL__Program; 22typedef cl_program OpenCL__Program;
14typedef cl_kernel OpenCL__Kernel; 23typedef cl_kernel OpenCL__Kernel;
15typedef cl_event OpenCL__Event; 24typedef cl_event OpenCL__Event;
16 25
17static const struct { 26typedef struct
27{
18 IV iv; 28 IV iv;
19 const char *name; 29 const char *name;
20} cl_error[] = {
21#define def_error(name) { (IV)CL_ ## name, # name }, 30 #define const_iv(name) { (IV)CL_ ## name, # name },
22#include "invalid.h" 31} ivstr;
23};
24 32
25static const char * 33static const char *
26clstrerror (cl_int res) 34iv2str (IV value, const ivstr *base, int count, const char *fallback)
27{ 35{
28 int i; 36 int i;
29 static char numbuf [32]; 37 static char strbuf [32];
30 38
31 for (i = sizeof (cl_error) / sizeof (cl_error [0]); i--; ) 39 for (i = count; i--; )
32 if (cl_error [i].iv == res) 40 if (base [i].iv == value)
33 return cl_error [i].name; 41 return base [i].name;
34 42
35 snprintf (numbuf, sizeof (numbuf), "ERROR(%d)", res); 43 snprintf (strbuf, sizeof (strbuf), fallback, (int)value);
36 44
37 return numbuf; 45 return strbuf;
46}
47
48static const char *
49enum2str (cl_uint value)
50{
51 static const ivstr enumstr[] = {
52 #include "enumstr.h"
53 };
54
55 return iv2str (value, enumstr, sizeof (enumstr) / sizeof (enumstr [0]), "ENUM(0x%04x)");
56}
57
58static const char *
59err2str (cl_int err)
60{
61 static const ivstr errstr[] = {
62 #include "errstr.h"
63 };
64
65 return iv2str (err, errstr, sizeof (errstr) / sizeof (errstr [0]), "ERROR(%d)");
38} 66}
39 67
40#define FAIL(name,res) \ 68#define FAIL(name,res) \
41 croak ("cl" # name ": %s", clstrerror (res)); 69 croak ("cl" # name ": %s", err2str (res));
42 70
43#define NEED_SUCCESS(name,args) \ 71#define NEED_SUCCESS(name,args) \
44 do { \ 72 do { \
45 cl_int res = cl ## name args; \ 73 cl_int res = cl ## name args; \
46 \ 74 \
66 SvCUR_set (sv, size); \ 94 SvCUR_set (sv, size); \
67 NEED_SUCCESS (Get ## class ## Info, (this, name, size, SvPVX (sv), 0)); \ 95 NEED_SUCCESS (Get ## class ## Info, (this, name, size, SvPVX (sv), 0)); \
68 XPUSHs (sv); \ 96 XPUSHs (sv); \
69} 97}
70 98
99static void *
100SvPTROBJ (const char *func, const char *svname, SV *sv, const char *pkg)
101{
102 if (SvROK (sv) && sv_derived_from (sv, pkg))
103 return (void *)SvIV (SvRV (sv));
104
105 croak ("%s: %s is not of type %s", func, svname, pkg);
106}
107
71MODULE = OpenCL PACKAGE = OpenCL 108MODULE = OpenCL PACKAGE = OpenCL
72 109
73PROTOTYPES: ENABLE 110PROTOTYPES: ENABLE
74 111
75BOOT: 112BOOT:
76{ 113{
77 HV *stash = gv_stashpv ("OpenCL", 1); 114 HV *stash = gv_stashpv ("OpenCL", 1);
78 static const struct {
79 const char *name;
80 IV iv;
81 } *civ, const_iv[] = { 115 static const ivstr *civ, const_iv[] = {
82#define const_iv(name) { # name, (IV)CL_ ## name }, 116 { sizeof (cl_char ), "SIZEOF_CHAR" },
117 { sizeof (cl_uchar ), "SIZEOF_UCHAR" },
118 { sizeof (cl_short ), "SIZEOF_SHORT" },
119 { sizeof (cl_ushort), "SIZEOF_USHORT"},
120 { sizeof (cl_int ), "SIZEOF_INT" },
121 { sizeof (cl_uint ), "SIZEOF_UINT" },
122 { sizeof (cl_long ), "SIZEOF_LONG" },
123 { sizeof (cl_ulong ), "SIZEOF_ULONG" },
124 { sizeof (cl_half ), "SIZEOF_HALF" },
125 { sizeof (cl_float ), "SIZEOF_FLOAT" },
83#include "constiv.h" 126#include "constiv.h"
84 }; 127 };
85 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ > const_iv; civ--) 128 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ > const_iv; civ--)
86 newCONSTSUB (stash, (char *)civ[-1].name, newSViv (civ[-1].iv)); 129 newCONSTSUB (stash, (char *)civ[-1].name, newSViv (civ[-1].iv));
87} 130}
88 131
132const char *
133err2str (cl_int err)
134
135const char *
136enum2str (cl_uint value)
137
89void 138void
90platforms () 139platforms ()
91 PPCODE: 140 PPCODE:
92{ 141{
93 cl_platform_id *list; 142 cl_platform_id *list;
166 FAIL (CreateContextFromType, res); 215 FAIL (CreateContextFromType, res);
167 216
168 XPUSH_NEW_OBJ ("OpenCL::Context", ctx); 217 XPUSH_NEW_OBJ ("OpenCL::Context", ctx);
169} 218}
170 219
171void
172unload_compiler ()
173 CODE:
174 NEED_SUCCESS (UnloadCompiler, ());
175
176MODULE = OpenCL PACKAGE = OpenCL::Device 220MODULE = OpenCL PACKAGE = OpenCL::Device
177 221
178void 222void
179info (OpenCL::Device this, cl_device_info name) 223info (OpenCL::Device this, cl_device_info name)
180 PPCODE: 224 PPCODE:
221void 265void
222buffer (OpenCL::Context this, cl_mem_flags flags, size_t len) 266buffer (OpenCL::Context this, cl_mem_flags flags, size_t len)
223 PPCODE: 267 PPCODE:
224{ 268{
225 cl_int res; 269 cl_int res;
270 cl_mem mem;
271
272 if (flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR))
273 croak ("clCreateBuffer: cannot use/copy host ptr when no data is given, use $context->buffer_sv instead?");
274
226 cl_mem mem = clCreateBuffer (this, flags, len, 0, &res); 275 mem = clCreateBuffer (this, flags, len, 0, &res);
227 276
228 if (res) 277 if (res)
229 FAIL (CreateBuffer, res); 278 FAIL (CreateBuffer, res);
230 279
231 XPUSH_NEW_OBJ ("OpenCL::Memory", mem); 280 XPUSH_NEW_OBJ ("OpenCL::Buffer", mem);
232} 281}
233 282
234void 283void
235buffer_sv (OpenCL::Context this, cl_mem_flags flags, SV *data) 284buffer_sv (OpenCL::Context this, cl_mem_flags flags, SV *data)
236 PPCODE: 285 PPCODE:
237{ 286{
238 STRLEN len; 287 STRLEN len;
239 char *ptr = SvPVbyte (data, len); 288 char *ptr = SvPVbyte (data, len);
240 cl_int res; 289 cl_int res;
290 cl_mem mem;
291
292 if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
293 croak ("clCreateBuffer: have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?");
294
241 cl_mem mem = clCreateBuffer (this, flags, len, ptr, &res); 295 mem = clCreateBuffer (this, flags, len, ptr, &res);
242 296
243 if (res) 297 if (res)
244 FAIL (CreateBuffer, res); 298 FAIL (CreateBuffer, res);
245 299
246 XPUSH_NEW_OBJ ("OpenCL::Memory", mem); 300 XPUSH_NEW_OBJ ("OpenCL::Buffer", mem);
301}
302
303void
304image2d (OpenCL::Context this, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, size_t width, size_t height, SV *data)
305 PPCODE:
306{
307 STRLEN len;
308 char *ptr = SvPVbyte (data, len);
309 const cl_image_format format = { channel_order, channel_type };
310 cl_int res;
311 cl_mem mem = clCreateImage2D (this, flags, &format, width, height, len / height, ptr, &res);
312
313 if (res)
314 FAIL (CreateImage2D, res);
315
316 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem);
317}
318
319void
320image3d (OpenCL::Context this, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, size_t width, size_t height, size_t depth, size_t slice_pitch, SV *data)
321 PPCODE:
322{
323 STRLEN len;
324 char *ptr = SvPVbyte (data, len);
325 const cl_image_format format = { channel_order, channel_type };
326 cl_int res;
327 cl_mem mem = clCreateImage3D (this, flags, &format, width, height,
328 depth, len / (height * slice_pitch), slice_pitch, ptr, &res);
329
330 if (res)
331 FAIL (CreateImage3D, res);
332
333 XPUSH_NEW_OBJ ("OpenCL::Image3D", mem);
334}
335
336void
337supported_image_formats (OpenCL::Context this, cl_mem_flags flags, cl_mem_object_type image_type)
338 PPCODE:
339{
340 cl_uint count;
341 cl_image_format *list;
342 int i;
343
344 NEED_SUCCESS (GetSupportedImageFormats, (this, flags, image_type, 0, 0, &count));
345 Newx (list, count, cl_image_format);
346 NEED_SUCCESS (GetSupportedImageFormats, (this, flags, image_type, count, list, 0));
347
348 EXTEND (SP, count);
349 for (i = 0; i < count; ++i)
350 {
351 AV *av = newAV ();
352 av_store (av, 1, newSVuv (list [i].image_channel_data_type));
353 av_store (av, 0, newSVuv (list [i].image_channel_order));
354 PUSHs (sv_2mortal (newRV_noinc ((SV *)av)));
355 }
247} 356}
248 357
249void 358void
250sampler (OpenCL::Context this, cl_bool normalized_coords, cl_addressing_mode addressing_mode, cl_filter_mode filter_mode) 359sampler (OpenCL::Context this, cl_bool normalized_coords, cl_addressing_mode addressing_mode, cl_filter_mode filter_mode)
251 PPCODE: 360 PPCODE:
289info (OpenCL::Queue this, cl_command_queue_info name) 398info (OpenCL::Queue this, cl_command_queue_info name)
290 PPCODE: 399 PPCODE:
291 INFO (CommandQueue) 400 INFO (CommandQueue)
292 401
293void 402void
294enqueue_read_buffer (OpenCL::Queue this, OpenCL::Memory mem, cl_bool blocking, size_t offset, size_t len, SV *data, ...) 403enqueue_read_buffer (OpenCL::Queue this, OpenCL::Buffer mem, cl_bool blocking, size_t offset, size_t len, SV *data, ...)
295 PPCODE: 404 PPCODE:
296{ 405{
297 cl_event ev = 0; 406 cl_event ev = 0;
298 EVENT_LIST (6, items - 6); 407 EVENT_LIST (6, items - 6);
299 408
306 if (ev) 415 if (ev)
307 XPUSH_NEW_OBJ ("OpenCL::Event", ev); 416 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
308} 417}
309 418
310void 419void
311enqueue_write_buffer (OpenCL::Queue this, OpenCL::Memory mem, cl_bool blocking, size_t offset, SV *data, ...) 420enqueue_write_buffer (OpenCL::Queue this, OpenCL::Buffer mem, cl_bool blocking, size_t offset, SV *data, ...)
312 PPCODE: 421 PPCODE:
313{ 422{
314 cl_event ev = 0; 423 cl_event ev = 0;
315 STRLEN len; 424 STRLEN len;
316 char *ptr = SvPVbyte (data, len); 425 char *ptr = SvPVbyte (data, len);
321 if (ev) 430 if (ev)
322 XPUSH_NEW_OBJ ("OpenCL::Event", ev); 431 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
323} 432}
324 433
325void 434void
326enqueue_copy_buffer (OpenCL::Queue this, OpenCL::Memory src, OpenCL::Memory dst, size_t src_offset, size_t dst_offset, size_t len, ...) 435enqueue_copy_buffer (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Buffer dst, size_t src_offset, size_t dst_offset, size_t len, ...)
327 PPCODE: 436 PPCODE:
328{ 437{
329 cl_event ev = 0; 438 cl_event ev = 0;
330 EVENT_LIST (6, items - 6); 439 EVENT_LIST (6, items - 6);
331 440
332 NEED_SUCCESS (EnqueueCopyBuffer, (this, src, dst, src_offset, dst_offset, len, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); 441 NEED_SUCCESS (EnqueueCopyBuffer, (this, src, dst, src_offset, dst_offset, len, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
333 442
334 if (ev) 443 if (ev)
335 XPUSH_NEW_OBJ ("OpenCL::Event", ev); 444 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
336} 445}
446
447 /*TODO http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBufferRect.html */
448 /*TODO http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBufferRect.html */
449
450void
451enqueue_read_image (OpenCL::Queue this, OpenCL::Image src, cl_bool blocking, size_t src_x, size_t src_y, size_t src_z, size_t width, size_t height, size_t depth, size_t row_pitch, size_t slice_pitch, SV *data, ...)
452 PPCODE:
453{
454 cl_event ev = 0;
455 const size_t src_origin[3] = { src_x, src_y, src_z };
456 const size_t region[3] = { width, height, depth };
457 size_t len = row_pitch * slice_pitch * depth;
458 EVENT_LIST (11, items - 11);
459
460 SvUPGRADE (data, SVt_PV);
461 SvGROW (data, len);
462 SvPOK_only (data);
463 SvCUR_set (data, len);
464 NEED_SUCCESS (EnqueueReadImage, (this, src, blocking, src_origin, region, row_pitch, slice_pitch, SvPVX (data), event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
465
466 if (ev)
467 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
468}
469
470void
471enqueue_write_image (OpenCL::Queue this, OpenCL::Image dst, cl_bool blocking, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, size_t row_pitch, SV *data, ...)
472 PPCODE:
473{
474 cl_event ev = 0;
475 const size_t dst_origin[3] = { dst_x, dst_y, dst_z };
476 const size_t region[3] = { width, height, depth };
477 STRLEN len;
478 char *ptr = SvPVbyte (data, len);
479 size_t slice_pitch = len / (row_pitch * height);
480 EVENT_LIST (11, items - 11);
481
482 NEED_SUCCESS (EnqueueWriteImage, (this, dst, blocking, dst_origin, region, row_pitch, slice_pitch, SvPVX (data), event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
483
484 if (ev)
485 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
486}
487
488void
489enqueue_copy_buffer_rect (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Buffer dst, size_t src_x, size_t src_y, size_t src_z, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, ...)
490 PPCODE:
491{
492 cl_event ev = 0;
493 const size_t src_origin[3] = { src_x, src_y, src_z };
494 const size_t dst_origin[3] = { dst_x, dst_y, dst_z };
495 const size_t region[3] = { width, height, depth };
496 EVENT_LIST (16, items - 16);
497
498 NEED_SUCCESS (EnqueueCopyBufferRect, (this, src, dst, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
499
500 if (ev)
501 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
502}
503
504void
505enqueue_copy_buffer_to_image (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Image dst, size_t src_offset, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, ...)
506 PPCODE:
507{
508 cl_event ev = 0;
509 const size_t dst_origin[3] = { dst_x, dst_y, dst_z };
510 const size_t region[3] = { width, height, depth };
511 EVENT_LIST (10, items - 10);
512
513 NEED_SUCCESS (EnqueueCopyBufferToImage, (this, src, dst, src_offset, dst_origin, region, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
514
515 if (ev)
516 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
517}
518
519void
520enqueue_copy_image (OpenCL::Queue this, OpenCL::Image src, OpenCL::Buffer dst, size_t src_x, size_t src_y, size_t src_z, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, ...)
521 PPCODE:
522{
523 cl_event ev = 0;
524 const size_t src_origin[3] = { src_x, src_y, src_z };
525 const size_t dst_origin[3] = { dst_x, dst_y, dst_z };
526 const size_t region[3] = { width, height, depth };
527 EVENT_LIST (12, items - 12);
528
529 NEED_SUCCESS (EnqueueCopyImage, (this, src, dst, src_origin, dst_origin, region, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
530
531 if (ev)
532 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
533}
534
535void
536enqueue_copy_image_to_buffer (OpenCL::Queue this, OpenCL::Image src, OpenCL::Buffer dst, size_t src_x, size_t src_y, size_t src_z, size_t width, size_t height, size_t depth, size_t dst_offset, ...)
537 PPCODE:
538{
539 cl_event ev = 0;
540 const size_t src_origin[3] = { src_x, src_y, src_z };
541 const size_t region[3] = { width, height, depth };
542 EVENT_LIST (10, items - 10);
543
544 NEED_SUCCESS (EnqueueCopyImageToBuffer, (this, src, dst, src_origin, region, dst_offset, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
545
546 if (ev)
547 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
548}
549
550void
551enqueue_task (OpenCL::Queue this, OpenCL::Kernel kernel, ...)
552 PPCODE:
553{
554 cl_event ev = 0;
555 EVENT_LIST (2, items - 2);
556
557 NEED_SUCCESS (EnqueueTask, (this, kernel, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0));
558
559 if (ev)
560 XPUSH_NEW_OBJ ("OpenCL::Event", ev);
561}
562
563 /*TODO http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html */
337 564
338void 565void
339enqueue_marker (OpenCL::Queue this) 566enqueue_marker (OpenCL::Queue this)
340 PPCODE: 567 PPCODE:
341{ 568{
354 581
355void 582void
356enqueue_barrier (OpenCL::Queue this) 583enqueue_barrier (OpenCL::Queue this)
357 CODE: 584 CODE:
358 NEED_SUCCESS (EnqueueBarrier, (this)); 585 NEED_SUCCESS (EnqueueBarrier, (this));
586
587void
588flush (OpenCL::Queue this)
589 CODE:
590 NEED_SUCCESS (Flush, (this));
591
592void
593finish (OpenCL::Queue this)
594 CODE:
595 NEED_SUCCESS (Finish, (this));
359 596
360MODULE = OpenCL PACKAGE = OpenCL::Memory 597MODULE = OpenCL PACKAGE = OpenCL::Memory
361 598
362void 599void
363DESTROY (OpenCL::Memory this) 600DESTROY (OpenCL::Memory this)
438info (OpenCL::Kernel this, cl_kernel_info name) 675info (OpenCL::Kernel this, cl_kernel_info name)
439 PPCODE: 676 PPCODE:
440 INFO (Kernel) 677 INFO (Kernel)
441 678
442void 679void
443set_bool (OpenCL::Kernel this, cl_uint idx, cl_bool value) 680set_char (OpenCL::Kernel this, cl_uint idx, cl_char value)
444 CODE: 681 CODE:
445 clKernelSetArg (this, idx, sizeof (value), &value); 682 clSetKernelArg (this, idx, sizeof (value), &value);
683
684void
685set_uchar (OpenCL::Kernel this, cl_uint idx, cl_uchar value)
686 CODE:
687 clSetKernelArg (this, idx, sizeof (value), &value);
688
689void
690set_short (OpenCL::Kernel this, cl_uint idx, cl_short value)
691 CODE:
692 clSetKernelArg (this, idx, sizeof (value), &value);
693
694void
695set_ushort (OpenCL::Kernel this, cl_uint idx, cl_ushort value)
696 CODE:
697 clSetKernelArg (this, idx, sizeof (value), &value);
698
699void
700set_int (OpenCL::Kernel this, cl_uint idx, cl_int value)
701 CODE:
702 clSetKernelArg (this, idx, sizeof (value), &value);
703
704void
705set_uint (OpenCL::Kernel this, cl_uint idx, cl_uint value)
706 CODE:
707 clSetKernelArg (this, idx, sizeof (value), &value);
708
709void
710set_long (OpenCL::Kernel this, cl_uint idx, cl_long value)
711 CODE:
712 clSetKernelArg (this, idx, sizeof (value), &value);
713
714void
715set_ulong (OpenCL::Kernel this, cl_uint idx, cl_ulong value)
716 CODE:
717 clSetKernelArg (this, idx, sizeof (value), &value);
718
719void
720set_half (OpenCL::Kernel this, cl_uint idx, cl_half value)
721 CODE:
722 clSetKernelArg (this, idx, sizeof (value), &value);
723
724void
725set_float (OpenCL::Kernel this, cl_uint idx, cl_float value)
726 CODE:
727 clSetKernelArg (this, idx, sizeof (value), &value);
728
729void
730set_memory (OpenCL::Kernel this, cl_uint idx, OpenCL::Memory_ornull value)
731 CODE:
732 clSetKernelArg (this, idx, sizeof (value), &value);
733
734void
735set_buffer (OpenCL::Kernel this, cl_uint idx, OpenCL::Buffer_ornull value)
736 CODE:
737 clSetKernelArg (this, idx, sizeof (value), &value);
738
739void
740set_image2d (OpenCL::Kernel this, cl_uint idx, OpenCL::Image2D_ornull value)
741 CODE:
742 clSetKernelArg (this, idx, sizeof (value), &value);
743
744void
745set_image3d (OpenCL::Kernel this, cl_uint idx, OpenCL::Image3D_ornull value)
746 CODE:
747 clSetKernelArg (this, idx, sizeof (value), &value);
748
749void
750set_sampler (OpenCL::Kernel this, cl_uint idx, OpenCL::Sampler value)
751 CODE:
752 clSetKernelArg (this, idx, sizeof (value), &value);
753
754void
755set_event (OpenCL::Kernel this, cl_uint idx, OpenCL::Event value)
756 CODE:
757 clSetKernelArg (this, idx, sizeof (value), &value);
446 758
447MODULE = OpenCL PACKAGE = OpenCL::Event 759MODULE = OpenCL PACKAGE = OpenCL::Event
448 760
449void 761void
450DESTROY (OpenCL::Event this) 762DESTROY (OpenCL::Event this)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines