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

Comparing OpenCL/OpenCL.pm (file contents):
Revision 1.70 by root, Thu May 3 23:32:47 2012 UTC vs.
Revision 1.80 by root, Sat May 5 13:55:59 2012 UTC

28specific device ("compiling and linking"), also binary programs. For each 28specific device ("compiling and linking"), also binary programs. For each
29kernel function in a program you can then create an OpenCL::Kernel object 29kernel function in a program you can then create an OpenCL::Kernel object
30which represents basically a function call with argument values. 30which represents basically a function call with argument values.
31 31
32OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat 32OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat
33memory areas, think arrays or structs) and OpenCL::Image objects (think 2d 33memory areas, think arrays or structs) and OpenCL::Image objects (think 2D
34or 3d array) for bulk data and input and output for kernels. 34or 3D array) for bulk data and input and output for kernels.
35 35
36OpenCL::Sampler objects, which are kind of like texture filter modes in 36OpenCL::Sampler objects, which are kind of like texture filter modes in
37OpenGL. 37OpenGL.
38 38
39OpenCL::Queue objects - command queues, which allow you to submit memory 39OpenCL::Queue objects - command queues, which allow you to submit memory
43 43
44OpenCL::Event objects are used to signal when something is complete. 44OpenCL::Event objects are used to signal when something is complete.
45 45
46=head2 HELPFUL RESOURCES 46=head2 HELPFUL RESOURCES
47 47
48The OpenCL specs used to develop this module: 48The OpenCL specs used to develop this module - download these and keept
49hema round, they are required reference material:
49 50
50 http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf 51 http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf
51 http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf 52 http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf
52 http://www.khronos.org/registry/cl/specs/opencl-1.2-extensions.pdf 53 http://www.khronos.org/registry/cl/specs/opencl-1.2-extensions.pdf
53 54
210 211
211 # wait for the last event to complete 212 # wait for the last event to complete
212 $ev->wait; 213 $ev->wait;
213 214
214=head2 Use the OpenGL module to share a texture between OpenCL and OpenGL and draw some julia 215=head2 Use the OpenGL module to share a texture between OpenCL and OpenGL and draw some julia
215set tunnel effect. 216set flight effect.
216 217
217This is quite a long example to get you going - you can download it from 218This is quite a long example to get you going - you can download it from
218L<http://cvs.schmorp.de/OpenCL/examples/juliaflight>. 219L<http://cvs.schmorp.de/OpenCL/examples/juliaflight>.
219 220
220 use OpenGL ":all"; 221 use OpenGL ":all";
320To use a texture, you would modify the above example by creating an 321To use a texture, you would modify the above example by creating an
321OpenCL::Image manually instead of deriving it from a texture: 322OpenCL::Image manually instead of deriving it from a texture:
322 323
323 my $tex = $ctx->image2d (OpenCL::MEM_WRITE_ONLY, OpenCL::RGBA, OpenCL::UNORM_INT8, $S, $S); 324 my $tex = $ctx->image2d (OpenCL::MEM_WRITE_ONLY, OpenCL::RGBA, OpenCL::UNORM_INT8, $S, $S);
324 325
325And in the darw loop, intead of acquire_gl_objects/release_gl_objects, you 326And in the draw loop, intead of acquire_gl_objects/release_gl_objects, you
326would read the image2d after the kernel has written it: 327would read the image2d after the kernel has written it:
327 328
328 $queue->read_image ($tex, 0, 0, 0, 0, $S, $S, 1, 0, 0, my $data); 329 $queue->read_image ($tex, 0, 0, 0, 0, $S, $S, 1, 0, 0, my $data);
329 330
330And then you would upload the pixel data to the texture (or use glDrawPixels): 331And then you would upload the pixel data to the texture (or use glDrawPixels):
331 332
332 glTexSubImage2D_s GL_TEXTURE_2D, 0, 0, 0, $S, $S, GL_RGBA, GL_UNSIGNED_BYTE, $data; 333 glTexSubImage2D_s GL_TEXTURE_2D, 0, 0, 0, $S, $S, GL_RGBA, GL_UNSIGNED_BYTE, $data;
333 334
334The fully modified example can be found at 335The fully modified example can be found at
335L<http://cvs.schmorp.de/OpenCL/examples/juliaflight-nosharing>. 336L<http://cvs.schmorp.de/OpenCL/examples/juliaflight-nosharing>.
337
338=head2 Julia sets look soooo 80ies.
339
340Then colour them differently, e.g. using orbit traps! Replace the loop and
341colour calculation from the previous examples by this:
342
343 float2 dm = (float2)(1.f, 1.f);
344
345 for (int i = 0; i < 25; ++i)
346 {
347 z = (float2)(z.x * z.x - z.y * z.y, 2.f * z.x * z.y) + c;
348 dm = fmin (dm, (float2)(fabs (dot (z, z) - 1.f), fabs (z.x - 1.f)));
349 }
350
351 float3 colour = (float3)(dm.x * dm.y, dm.x * dm.y, dm.x);
352
353Also try C<-10.f> instead of C<-1.f>.
336 354
337=head1 DOCUMENTATION 355=head1 DOCUMENTATION
338 356
339=head2 BASIC CONVENTIONS 357=head2 BASIC CONVENTIONS
340 358
370 388
371=item * When enqueuing commands, if the enqueue method is called in void 389=item * When enqueuing commands, if the enqueue method is called in void
372context, no event is created. In all other contexts an event is returned 390context, no event is created. In all other contexts an event is returned
373by the method. 391by the method.
374 392
375=item * This module expects all functions to return C<CL_SUCCESS>. If any 393=item * This module expects all functions to return C<OpenCL::SUCCESS>. If any
376other status is returned the function will throw an exception, so you 394other status is returned the function will throw an exception, so you
377don't normally have to to any error checking. 395don't normally have to to any error checking.
378 396
379=back 397=back
398
399=head2 CONSTANTS
400
401All C<CL_xxx> constants that this module supports are always available
402in the C<OpenCL> namespace as C<OpenCL::xxx> (i.e. without the C<CL_>
403prefix). Constants which are not defined in the heaer files used during
404compilation, or otherwise are not available, will have the value C<-1>.
405
406=head2 OPENCL 1.1 VS. OPENCL 1.2
407
408This module supports both OpenCL version 1.1 and 1.2, although the OpenCL
4091.2 interface hasn't been tested much for lack of availability of an
410actual implementation.
411
412Every function or method in this manual page that interfaces to a
413particular OpenCL function has a link to the its C manual page.
414
415If the link contains a F<1.1>, then this function is an OpenCL 1.1
416function. Most but not all also exist in OpenCL 1.2, and this module
417tries to emulate the missing ones for you, when told to do so at
418compiletime. You cna check whether a function was removed in OpenCL 1.2 by
419replacing the F<1.1> component in the URL by F<1.2>.
420
421If the link contains a F<1.2>, then this is a OpenCL 1.2-only
422function. Even if the module was compiled with OpenCL 1.2 header files
423and has an 1.2 OpenCL library, calling such a function on a platform that
424doesn't implement 1.2 causes undefined behaviour, usually a crash (But
425this is not guaranteed).
426
427You can find out whether this module was compiled to prefer 1.1
428functionality by ooking at C<OpenCL::PREFER_1_1> - if it is true, then
4291.1 functions generally are implemented using 1.1 OpenCL functions. If it
430is false, then 1.1 functions missing from 1.2 are emulated by calling 1.2
431fucntions.
432
433This is a somewhat sorry state of affairs, but the Khronos group choose to
434make every release of OpenCL source and binary incompatible with previous
435releases.
380 436
381=head2 PERL AND OPENCL TYPES 437=head2 PERL AND OPENCL TYPES
382 438
383This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack 439This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack
384format equivalents: 440format equivalents:
416OpenCL can generate a number of (potentially) asynchronous events, for 472OpenCL can generate a number of (potentially) asynchronous events, for
417example, after compiling a program, to signal a context-related error or, 473example, after compiling a program, to signal a context-related error or,
418perhaps most important, to signal completion of queued jobs (by setting 474perhaps most important, to signal completion of queued jobs (by setting
419callbacks on OpenCL::Event objects). 475callbacks on OpenCL::Event objects).
420 476
477The OpenCL module converts all these callbacks into events - you can
478still register callbacks, but they are not executed when your OpenCL
479implementation calls the actual callback, but only later. Therefore, none
480of the limitations of OpenCL callbacks apply to the perl implementation:
481it is perfectly safe to make blocking operations from event callbacks, and
482enqueued operations don't need to be flushed.
483
421To facilitate this, this module maintains an event queue - each 484To facilitate this, this module maintains an event queue - each
422time an asynchronous event happens, it is queued, and perl will be 485time an asynchronous event happens, it is queued, and perl will be
423interrupted. This is implemented via the L<Async::Interrupt> module. In 486interrupted. This is implemented via the L<Async::Interrupt> module. In
424addition, this module has L<AnyEvent> support, so it can seamlessly 487addition, this module has L<AnyEvent> support, so it can seamlessly
425integrate itself into many event loops. 488integrate itself into many event loops.
426 489
427Since this module is a bit hard to understand, here are some case examples: 490Since L<Async::Interrupt> is a bit hard to understand, here are some case examples:
428 491
429=head3 Don't use callbacks. 492=head3 Don't use callbacks.
430 493
431When your program never uses any callbacks, then there will never be any 494When your program never uses any callbacks, then there will never be any
432notifications you need to take care of, and therefore no need to worry 495notifications you need to take care of, and therefore no need to worry
544 @OpenCL::Sampler::ISA = 607 @OpenCL::Sampler::ISA =
545 @OpenCL::Program::ISA = 608 @OpenCL::Program::ISA =
546 @OpenCL::Kernel::ISA = 609 @OpenCL::Kernel::ISA =
547 @OpenCL::Event::ISA = OpenCL::Object::; 610 @OpenCL::Event::ISA = OpenCL::Object::;
548 611
612 @OpenCL::SubDevice::ISA = OpenCL::Device::;
613
549 @OpenCL::Buffer::ISA = 614 @OpenCL::Buffer::ISA =
550 @OpenCL::Image::ISA = OpenCL::Memory::; 615 @OpenCL::Image::ISA = OpenCL::Memory::;
551 616
552 @OpenCL::BufferObj::ISA = OpenCL::Buffer::; 617 @OpenCL::BufferObj::ISA = OpenCL::Buffer::;
553 618
593L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> 658L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html>
594 659
595=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr 660=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr
596 661
597Tries to create a context from a default device and platform type - never worked for me. 662Tries to create a context from a default device and platform type - never worked for me.
663Consider using C<< $platform->context_from_type >> instead.
664
665type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU,
666OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL.
598 667
599L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> 668L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
600 669
601=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) 670=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr)
602 671
603Create a new OpenCL::Context object using the given device object(s). This 672Create a new OpenCL::Context object using the given device object(s).
604function isn't implemented yet, use C<< $platform->context >> instead. 673Consider using C<< $platform->context >> instead.
605 674
606L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> 675L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html>
607 676
608=item OpenCL::wait_for_events $wait_events... 677=item OpenCL::wait_for_events $wait_events...
609 678
690L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> 759L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
691 760
692=item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr) 761=item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr)
693 762
694Create a new OpenCL::Context object using the given device object(s)- a 763Create a new OpenCL::Context object using the given device object(s)- a
695CL_CONTEXT_PLATFORM property is supplied automatically. 764OpenCL::CONTEXT_PLATFORM property is supplied automatically.
696 765
697L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> 766L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html>
698 767
699=item $packed_value = $platform->info ($name) 768=item $packed_value = $platform->info ($name)
700 769
716 785
717=for gengetinfo begin platform 786=for gengetinfo begin platform
718 787
719=item $string = $platform->profile 788=item $string = $platform->profile
720 789
721Calls C<clGetPlatformInfo> with C<CL_PLATFORM_PROFILE> and returns the result. 790Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_PROFILE> and returns the result.
722 791
723=item $string = $platform->version 792=item $string = $platform->version
724 793
725Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VERSION> and returns the result. 794Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_VERSION> and returns the result.
726 795
727=item $string = $platform->name 796=item $string = $platform->name
728 797
729Calls C<clGetPlatformInfo> with C<CL_PLATFORM_NAME> and returns the result. 798Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_NAME> and returns the result.
730 799
731=item $string = $platform->vendor 800=item $string = $platform->vendor
732 801
733Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VENDOR> and returns the result. 802Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_VENDOR> and returns the result.
734 803
735=item $string = $platform->extensions 804=item $string = $platform->extensions
736 805
737Calls C<clGetPlatformInfo> with C<CL_PLATFORM_EXTENSIONS> and returns the result. 806Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_EXTENSIONS> and returns the result.
738 807
739=for gengetinfo end platform 808=for gengetinfo end platform
740 809
741=back 810=back
742 811
746 815
747=item $packed_value = $device->info ($name) 816=item $packed_value = $device->info ($name)
748 817
749See C<< $platform->info >> for details. 818See C<< $platform->info >> for details.
750 819
820type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU,
821OpenCL::DEVICE_TYPE_GPU, OpenCL::DEVICE_TYPE_ACCELERATOR,
822OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL.
823
824fp_config: OpenCL::FP_DENORM, OpenCL::FP_INF_NAN, OpenCL::FP_ROUND_TO_NEAREST,
825OpenCL::FP_ROUND_TO_ZERO, OpenCL::FP_ROUND_TO_INF, OpenCL::FP_FMA,
826OpenCL::FP_SOFT_FLOAT, OpenCL::FP_CORRECTLY_ROUNDED_DIVIDE_SQRT.
827
828mem_cache_type: OpenCL::NONE, OpenCL::READ_ONLY_CACHE, OpenCL::READ_WRITE_CACHE.
829
830local_mem_type: OpenCL::LOCAL, OpenCL::GLOBAL.
831
832exec_capabilities: OpenCL::EXEC_KERNEL, OpenCL::EXEC_NATIVE_KERNEL.
833
834command_queue_properties: OpenCL::QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,
835OpenCL::QUEUE_PROFILING_ENABLE.
836
837partition_properties: OpenCL::DEVICE_PARTITION_EQUALLY,
838OpenCL::DEVICE_PARTITION_BY_COUNTS, OpenCL::DEVICE_PARTITION_BY_COUNTS_LIST_END,
839OpenCL::DEVICE_PARTITION_BY_AFFINITY_DOMAIN.
840
841affinity_domain: OpenCL::DEVICE_AFFINITY_DOMAIN_NUMA,
842OpenCL::DEVICE_AFFINITY_DOMAIN_L4_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L3_CACHE,
843OpenCL::DEVICE_AFFINITY_DOMAIN_L2_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L1_CACHE,
844OpenCL::DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE.
845
751L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> 846L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html>
752 847
848=item @devices = $device->sub_devices (\@properties)
849
850Creates OpencL::SubDevice objects by partitioning an existing device.
851
852L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubDevices.html>
853
753=for gengetinfo begin device 854=for gengetinfo begin device
754 855
755=item $device_type = $device->type 856=item $device_type = $device->type
756 857
757Calls C<clGetDeviceInfo> with C<CL_DEVICE_TYPE> and returns the result. 858Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_TYPE> and returns the result.
758 859
759=item $uint = $device->vendor_id 860=item $uint = $device->vendor_id
760 861
761Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR_ID> and returns the result. 862Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_VENDOR_ID> and returns the result.
762 863
763=item $uint = $device->max_compute_units 864=item $uint = $device->max_compute_units
764 865
765Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_COMPUTE_UNITS> and returns the result. 866Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_COMPUTE_UNITS> and returns the result.
766 867
767=item $uint = $device->max_work_item_dimensions 868=item $uint = $device->max_work_item_dimensions
768 869
769Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS> and returns the result. 870Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WORK_ITEM_DIMENSIONS> and returns the result.
770 871
771=item $int = $device->max_work_group_size 872=item $int = $device->max_work_group_size
772 873
773Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_GROUP_SIZE> and returns the result. 874Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WORK_GROUP_SIZE> and returns the result.
774 875
775=item @ints = $device->max_work_item_sizes 876=item @ints = $device->max_work_item_sizes
776 877
777Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_SIZES> and returns the result. 878Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WORK_ITEM_SIZES> and returns the result.
778 879
779=item $uint = $device->preferred_vector_width_char 880=item $uint = $device->preferred_vector_width_char
780 881
781Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR> and returns the result. 882Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_CHAR> and returns the result.
782 883
783=item $uint = $device->preferred_vector_width_short 884=item $uint = $device->preferred_vector_width_short
784 885
785Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT> and returns the result. 886Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_SHORT> and returns the result.
786 887
787=item $uint = $device->preferred_vector_width_int 888=item $uint = $device->preferred_vector_width_int
788 889
789Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT> and returns the result. 890Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_INT> and returns the result.
790 891
791=item $uint = $device->preferred_vector_width_long 892=item $uint = $device->preferred_vector_width_long
792 893
793Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG> and returns the result. 894Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_LONG> and returns the result.
794 895
795=item $uint = $device->preferred_vector_width_float 896=item $uint = $device->preferred_vector_width_float
796 897
797Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT> and returns the result. 898Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT> and returns the result.
798 899
799=item $uint = $device->preferred_vector_width_double 900=item $uint = $device->preferred_vector_width_double
800 901
801Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE> and returns the result. 902Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE> and returns the result.
802 903
803=item $uint = $device->max_clock_frequency 904=item $uint = $device->max_clock_frequency
804 905
805Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CLOCK_FREQUENCY> and returns the result. 906Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_CLOCK_FREQUENCY> and returns the result.
806 907
807=item $bitfield = $device->address_bits 908=item $bitfield = $device->address_bits
808 909
809Calls C<clGetDeviceInfo> with C<CL_DEVICE_ADDRESS_BITS> and returns the result. 910Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_ADDRESS_BITS> and returns the result.
810 911
811=item $uint = $device->max_read_image_args 912=item $uint = $device->max_read_image_args
812 913
813Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_READ_IMAGE_ARGS> and returns the result. 914Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_READ_IMAGE_ARGS> and returns the result.
814 915
815=item $uint = $device->max_write_image_args 916=item $uint = $device->max_write_image_args
816 917
817Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WRITE_IMAGE_ARGS> and returns the result. 918Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WRITE_IMAGE_ARGS> and returns the result.
818 919
819=item $ulong = $device->max_mem_alloc_size 920=item $ulong = $device->max_mem_alloc_size
820 921
821Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_MEM_ALLOC_SIZE> and returns the result. 922Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_MEM_ALLOC_SIZE> and returns the result.
822 923
823=item $int = $device->image2d_max_width 924=item $int = $device->image2d_max_width
824 925
825Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_WIDTH> and returns the result. 926Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE2D_MAX_WIDTH> and returns the result.
826 927
827=item $int = $device->image2d_max_height 928=item $int = $device->image2d_max_height
828 929
829Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_HEIGHT> and returns the result. 930Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE2D_MAX_HEIGHT> and returns the result.
830 931
831=item $int = $device->image3d_max_width 932=item $int = $device->image3d_max_width
832 933
833Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_WIDTH> and returns the result. 934Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE3D_MAX_WIDTH> and returns the result.
834 935
835=item $int = $device->image3d_max_height 936=item $int = $device->image3d_max_height
836 937
837Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_HEIGHT> and returns the result. 938Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE3D_MAX_HEIGHT> and returns the result.
838 939
839=item $int = $device->image3d_max_depth 940=item $int = $device->image3d_max_depth
840 941
841Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_DEPTH> and returns the result. 942Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE3D_MAX_DEPTH> and returns the result.
842 943
843=item $uint = $device->image_support 944=item $uint = $device->image_support
844 945
845Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE_SUPPORT> and returns the result. 946Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE_SUPPORT> and returns the result.
846 947
847=item $int = $device->max_parameter_size 948=item $int = $device->max_parameter_size
848 949
849Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_PARAMETER_SIZE> and returns the result. 950Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_PARAMETER_SIZE> and returns the result.
850 951
851=item $uint = $device->max_samplers 952=item $uint = $device->max_samplers
852 953
853Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_SAMPLERS> and returns the result. 954Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_SAMPLERS> and returns the result.
854 955
855=item $uint = $device->mem_base_addr_align 956=item $uint = $device->mem_base_addr_align
856 957
857Calls C<clGetDeviceInfo> with C<CL_DEVICE_MEM_BASE_ADDR_ALIGN> and returns the result. 958Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MEM_BASE_ADDR_ALIGN> and returns the result.
858 959
859=item $uint = $device->min_data_type_align_size 960=item $uint = $device->min_data_type_align_size
860 961
861Calls C<clGetDeviceInfo> with C<CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE> and returns the result. 962Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MIN_DATA_TYPE_ALIGN_SIZE> and returns the result.
862 963
863=item $device_fp_config = $device->single_fp_config 964=item $device_fp_config = $device->single_fp_config
864 965
865Calls C<clGetDeviceInfo> with C<CL_DEVICE_SINGLE_FP_CONFIG> and returns the result. 966Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_SINGLE_FP_CONFIG> and returns the result.
866 967
867=item $device_mem_cache_type = $device->global_mem_cache_type 968=item $device_mem_cache_type = $device->global_mem_cache_type
868 969
869Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_TYPE> and returns the result. 970Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_CACHE_TYPE> and returns the result.
870 971
871=item $uint = $device->global_mem_cacheline_size 972=item $uint = $device->global_mem_cacheline_size
872 973
873Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE> and returns the result. 974Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_CACHELINE_SIZE> and returns the result.
874 975
875=item $ulong = $device->global_mem_cache_size 976=item $ulong = $device->global_mem_cache_size
876 977
877Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_SIZE> and returns the result. 978Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_CACHE_SIZE> and returns the result.
878 979
879=item $ulong = $device->global_mem_size 980=item $ulong = $device->global_mem_size
880 981
881Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_SIZE> and returns the result. 982Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_SIZE> and returns the result.
882 983
883=item $ulong = $device->max_constant_buffer_size 984=item $ulong = $device->max_constant_buffer_size
884 985
885Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE> and returns the result. 986Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_CONSTANT_BUFFER_SIZE> and returns the result.
886 987
887=item $uint = $device->max_constant_args 988=item $uint = $device->max_constant_args
888 989
889Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_ARGS> and returns the result. 990Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_CONSTANT_ARGS> and returns the result.
890 991
891=item $device_local_mem_type = $device->local_mem_type 992=item $device_local_mem_type = $device->local_mem_type
892 993
893Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_TYPE> and returns the result. 994Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_LOCAL_MEM_TYPE> and returns the result.
894 995
895=item $ulong = $device->local_mem_size 996=item $ulong = $device->local_mem_size
896 997
897Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_SIZE> and returns the result. 998Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_LOCAL_MEM_SIZE> and returns the result.
898 999
899=item $boolean = $device->error_correction_support 1000=item $boolean = $device->error_correction_support
900 1001
901Calls C<clGetDeviceInfo> with C<CL_DEVICE_ERROR_CORRECTION_SUPPORT> and returns the result. 1002Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_ERROR_CORRECTION_SUPPORT> and returns the result.
902 1003
903=item $int = $device->profiling_timer_resolution 1004=item $int = $device->profiling_timer_resolution
904 1005
905Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILING_TIMER_RESOLUTION> and returns the result. 1006Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PROFILING_TIMER_RESOLUTION> and returns the result.
906 1007
907=item $boolean = $device->endian_little 1008=item $boolean = $device->endian_little
908 1009
909Calls C<clGetDeviceInfo> with C<CL_DEVICE_ENDIAN_LITTLE> and returns the result. 1010Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_ENDIAN_LITTLE> and returns the result.
910 1011
911=item $boolean = $device->available 1012=item $boolean = $device->available
912 1013
913Calls C<clGetDeviceInfo> with C<CL_DEVICE_AVAILABLE> and returns the result. 1014Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_AVAILABLE> and returns the result.
914 1015
915=item $boolean = $device->compiler_available 1016=item $boolean = $device->compiler_available
916 1017
917Calls C<clGetDeviceInfo> with C<CL_DEVICE_COMPILER_AVAILABLE> and returns the result. 1018Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_COMPILER_AVAILABLE> and returns the result.
918 1019
919=item $device_exec_capabilities = $device->execution_capabilities 1020=item $device_exec_capabilities = $device->execution_capabilities
920 1021
921Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXECUTION_CAPABILITIES> and returns the result. 1022Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_EXECUTION_CAPABILITIES> and returns the result.
922 1023
923=item $command_queue_properties = $device->properties 1024=item $command_queue_properties = $device->properties
924 1025
925Calls C<clGetDeviceInfo> with C<CL_DEVICE_QUEUE_PROPERTIES> and returns the result. 1026Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_QUEUE_PROPERTIES> and returns the result.
926 1027
927=item $ = $device->platform 1028=item $ = $device->platform
928 1029
929Calls C<clGetDeviceInfo> with C<CL_DEVICE_PLATFORM> and returns the result. 1030Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PLATFORM> and returns the result.
930 1031
931=item $string = $device->name 1032=item $string = $device->name
932 1033
933Calls C<clGetDeviceInfo> with C<CL_DEVICE_NAME> and returns the result. 1034Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NAME> and returns the result.
934 1035
935=item $string = $device->vendor 1036=item $string = $device->vendor
936 1037
937Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR> and returns the result. 1038Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_VENDOR> and returns the result.
938 1039
939=item $string = $device->driver_version 1040=item $string = $device->driver_version
940 1041
941Calls C<clGetDeviceInfo> with C<CL_DRIVER_VERSION> and returns the result. 1042Calls C<clGetDeviceInfo> with C<OpenCL::DRIVER_VERSION> and returns the result.
942 1043
943=item $string = $device->profile 1044=item $string = $device->profile
944 1045
945Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILE> and returns the result. 1046Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PROFILE> and returns the result.
946 1047
947=item $string = $device->version 1048=item $string = $device->version
948 1049
949Calls C<clGetDeviceInfo> with C<CL_DEVICE_VERSION> and returns the result. 1050Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_VERSION> and returns the result.
950 1051
951=item $string = $device->extensions 1052=item $string = $device->extensions
952 1053
953Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXTENSIONS> and returns the result. 1054Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_EXTENSIONS> and returns the result.
954 1055
955=item $uint = $device->preferred_vector_width_half 1056=item $uint = $device->preferred_vector_width_half
956 1057
957Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF> and returns the result. 1058Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_HALF> and returns the result.
958 1059
959=item $uint = $device->native_vector_width_char 1060=item $uint = $device->native_vector_width_char
960 1061
961Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR> and returns the result. 1062Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_CHAR> and returns the result.
962 1063
963=item $uint = $device->native_vector_width_short 1064=item $uint = $device->native_vector_width_short
964 1065
965Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT> and returns the result. 1066Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_SHORT> and returns the result.
966 1067
967=item $uint = $device->native_vector_width_int 1068=item $uint = $device->native_vector_width_int
968 1069
969Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_INT> and returns the result. 1070Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_INT> and returns the result.
970 1071
971=item $uint = $device->native_vector_width_long 1072=item $uint = $device->native_vector_width_long
972 1073
973Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG> and returns the result. 1074Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_LONG> and returns the result.
974 1075
975=item $uint = $device->native_vector_width_float 1076=item $uint = $device->native_vector_width_float
976 1077
977Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT> and returns the result. 1078Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_FLOAT> and returns the result.
978 1079
979=item $uint = $device->native_vector_width_double 1080=item $uint = $device->native_vector_width_double
980 1081
981Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE> and returns the result. 1082Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE> and returns the result.
982 1083
983=item $uint = $device->native_vector_width_half 1084=item $uint = $device->native_vector_width_half
984 1085
985Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF> and returns the result. 1086Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_HALF> and returns the result.
986 1087
987=item $device_fp_config = $device->double_fp_config 1088=item $device_fp_config = $device->double_fp_config
988 1089
989Calls C<clGetDeviceInfo> with C<CL_DEVICE_DOUBLE_FP_CONFIG> and returns the result. 1090Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_DOUBLE_FP_CONFIG> and returns the result.
990 1091
991=item $device_fp_config = $device->half_fp_config 1092=item $device_fp_config = $device->half_fp_config
992 1093
993Calls C<clGetDeviceInfo> with C<CL_DEVICE_HALF_FP_CONFIG> and returns the result. 1094Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_HALF_FP_CONFIG> and returns the result.
994 1095
995=item $boolean = $device->host_unified_memory 1096=item $boolean = $device->host_unified_memory
996 1097
997Calls C<clGetDeviceInfo> with C<CL_DEVICE_HOST_UNIFIED_MEMORY> and returns the result. 1098Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_HOST_UNIFIED_MEMORY> and returns the result.
998 1099
999=item $device = $device->parent_device_ext 1100=item $device = $device->parent_device_ext
1000 1101
1001Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARENT_DEVICE_EXT> and returns the result. 1102Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PARENT_DEVICE_EXT> and returns the result.
1002 1103
1003=item @device_partition_property_exts = $device->partition_types_ext 1104=item @device_partition_property_exts = $device->partition_types_ext
1004 1105
1005Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_TYPES_EXT> and returns the result. 1106Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PARTITION_TYPES_EXT> and returns the result.
1006 1107
1007=item @device_partition_property_exts = $device->affinity_domains_ext 1108=item @device_partition_property_exts = $device->affinity_domains_ext
1008 1109
1009Calls C<clGetDeviceInfo> with C<CL_DEVICE_AFFINITY_DOMAINS_EXT> and returns the result. 1110Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_AFFINITY_DOMAINS_EXT> and returns the result.
1010 1111
1011=item $uint = $device->reference_count_ext 1112=item $uint = $device->reference_count_ext
1012 1113
1013Calls C<clGetDeviceInfo> with C<CL_DEVICE_REFERENCE_COUNT_EXT> and returns the result. 1114Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_REFERENCE_COUNT_EXT> and returns the result.
1014 1115
1015=item @device_partition_property_exts = $device->partition_style_ext 1116=item @device_partition_property_exts = $device->partition_style_ext
1016 1117
1017Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_STYLE_EXT> and returns the result. 1118Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PARTITION_STYLE_EXT> and returns the result.
1018 1119
1019=for gengetinfo end device 1120=for gengetinfo end device
1020 1121
1021=back 1122=back
1022 1123
1023=head2 THE OpenCL::Context CLASS 1124=head2 THE OpenCL::Context CLASS
1125
1126An OpenCL::Context is basically a container, or manager, for a number of
1127devices of a platform. It is used to create all sorts of secondary objects
1128such as buffers, queues, programs and so on.
1129
1130All context creation functions and methods take a list of properties
1131(type-value pairs). All property values can be specified as integers -
1132some additionally support other types:
1133
1134=over 4
1135
1136=item OpenCL::CONTEXT_PLATFORM
1137
1138Also accepts OpenCL::Platform objects.
1139
1140=item OpenCL::GLX_DISPLAY_KHR
1141
1142Also accepts C<undef>, in which case a deep and troubling hack is engaged
1143to find the current glx display (see L<GLX SUPPORT>).
1144
1145=item OpenCL::GL_CONTEXT_KHR
1146
1147Also accepts C<undef>, in which case a deep and troubling hack is engaged
1148to find the current glx context (see L<GLX SUPPORT>).
1149
1150=back
1024 1151
1025=over 4 1152=over 4
1026 1153
1027=item $prog = $ctx->build_program ($program, $options = "") 1154=item $prog = $ctx->build_program ($program, $options = "")
1028 1155
1076=item $buf = $ctx->buffer ($flags, $len) 1203=item $buf = $ctx->buffer ($flags, $len)
1077 1204
1078Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object with the 1205Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object with the
1079given flags and octet-size. 1206given flags and octet-size.
1080 1207
1208flags: OpenCL::MEM_READ_WRITE, OpenCL::MEM_WRITE_ONLY, OpenCL::MEM_READ_ONLY,
1209OpenCL::MEM_USE_HOST_PTR, OpenCL::MEM_ALLOC_HOST_PTR, OpenCL::MEM_COPY_HOST_PTR,
1210OpenCL::MEM_HOST_WRITE_ONLY, OpenCL::MEM_HOST_READ_ONLY, OpenCL::MEM_HOST_NO_ACCESS.
1211
1081L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateBuffer.html> 1212L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateBuffer.html>
1082 1213
1083=item $buf = $ctx->buffer_sv ($flags, $data) 1214=item $buf = $ctx->buffer_sv ($flags, $data)
1084 1215
1085Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object and 1216Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object and
1088=item $img = $ctx->image ($self, $flags, $channel_order, $channel_type, $type, $width, $height, $depth = 0, $array_size = 0, $row_pitch = 0, $slice_pitch = 0, $num_mip_level = 0, $num_samples = 0, $*data = &PL_sv_undef) 1219=item $img = $ctx->image ($self, $flags, $channel_order, $channel_type, $type, $width, $height, $depth = 0, $array_size = 0, $row_pitch = 0, $slice_pitch = 0, $num_mip_level = 0, $num_samples = 0, $*data = &PL_sv_undef)
1089 1220
1090Creates a new OpenCL::Image object and optionally initialises it with 1221Creates a new OpenCL::Image object and optionally initialises it with
1091the given data values. 1222the given data values.
1092 1223
1224channel_order: OpenCL::R, OpenCL::A, OpenCL::RG, OpenCL::RA, OpenCL::RGB,
1225OpenCL::RGBA, OpenCL::BGRA, OpenCL::ARGB, OpenCL::INTENSITY, OpenCL::LUMINANCE,
1226OpenCL::Rx, OpenCL::RGx, OpenCL::RGBx.
1227
1228channel_type: OpenCL::SNORM_INT8, OpenCL::SNORM_INT16, OpenCL::UNORM_INT8,
1229OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555,
1230OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16,
1231OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16,
1232OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT.
1233
1234type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D,
1235OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY,
1236OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY,
1237OpenCL::MEM_OBJECT_IMAGE1D_BUFFER.
1238
1093L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateImage.html> 1239L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateImage.html>
1094 1240
1095=item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef) 1241=item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef)
1096 1242
1097Creates a new OpenCL::Image2D object and optionally initialises it with 1243Creates a new OpenCL::Image2D object and optionally initialises it with
1109=item $buffer = $ctx->gl_buffer ($flags, $bufobj) 1255=item $buffer = $ctx->gl_buffer ($flags, $bufobj)
1110 1256
1111Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object that refers to the given 1257Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object that refers to the given
1112OpenGL buffer object. 1258OpenGL buffer object.
1113 1259
1260flags: OpenCL::MEM_READ_WRITE, OpenCL::MEM_READ_ONLY, OpenCL::MEM_WRITE_ONLY.
1261
1114http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLBuffer.html 1262http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLBuffer.html
1115 1263
1116=item $img = $ctx->gl_texture ($flags, $target, $miplevel, $texture) 1264=item $img = $ctx->gl_texture ($flags, $target, $miplevel, $texture)
1117 1265
1118Creates a new OpenCL::Image object that refers to the given OpenGL 1266Creates a new OpenCL::Image object that refers to the given OpenGL
1119texture object or buffer. 1267texture object or buffer.
1120 1268
1269target: GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_BUFFER,
1270GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D,
1271GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
1272GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
1273GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
1274GL_TEXTURE_RECTANGLE/GL_TEXTURE_RECTANGLE_ARB.
1275
1121http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLTexture.html 1276http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLTexture.html
1122 1277
1123=item $img = $ctx->gl_texture2d ($flags, $target, $miplevel, $texture) 1278=item $img = $ctx->gl_texture2d ($flags, $target, $miplevel, $texture)
1124 1279
1125Creates a new OpenCL::Image2D object that refers to the given OpenGL 1280Creates a new OpenCL::Image2D object that refers to the given OpenGL
1150 1305
1151=item $sampler = $ctx->sampler ($normalized_coords, $addressing_mode, $filter_mode) 1306=item $sampler = $ctx->sampler ($normalized_coords, $addressing_mode, $filter_mode)
1152 1307
1153Creates a new OpenCL::Sampler object. 1308Creates a new OpenCL::Sampler object.
1154 1309
1310addressing_mode: OpenCL::ADDRESS_NONE, OpenCL::ADDRESS_CLAMP_TO_EDGE,
1311OpenCL::ADDRESS_CLAMP, OpenCL::ADDRESS_REPEAT, OpenCL::ADDRESS_MIRRORED_REPEAT.
1312
1313filter_mode: OpenCL::FILTER_NEAREST, OpenCL::FILTER_LINEAR.
1314
1155L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSampler.html> 1315L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSampler.html>
1156 1316
1157=item $program = $ctx->program_with_source ($string) 1317=item $program = $ctx->program_with_source ($string)
1158 1318
1159Creates a new OpenCL::Program object from the given source code. 1319Creates a new OpenCL::Program object from the given source code.
1169Example: clone an existing program object that contains a successfully 1329Example: clone an existing program object that contains a successfully
1170compiled program, no matter how useless this is. 1330compiled program, no matter how useless this is.
1171 1331
1172 my $clone = $ctx->program_with_binary ([$prog->devices], [$prog->binaries]); 1332 my $clone = $ctx->program_with_binary ([$prog->devices], [$prog->binaries]);
1173 1333
1334=item $program = $ctx->program_with_built_in_kernels (\@devices, $kernel_names)
1335
1336Creates a new OpenCL::Program object from the given built-in kernel names.
1337
1338L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html>
1339
1340=item $program = $ctx->link_program (\@devices, $options, \@programs, $cb->($program) = undef)
1341
1342Links all (already compiled) program objects specified in C<@programs>
1343together and returns a new OpenCL::Program object with the result.
1344
1345L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clLinkProgram.html>
1346
1174=item $packed_value = $ctx->info ($name) 1347=item $packed_value = $ctx->info ($name)
1175 1348
1176See C<< $platform->info >> for details. 1349See C<< $platform->info >> for details.
1177 1350
1178L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html> 1351L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html>
1179 1352
1180=for gengetinfo begin context 1353=for gengetinfo begin context
1181 1354
1182=item $uint = $context->reference_count 1355=item $uint = $context->reference_count
1183 1356
1184Calls C<clGetContextInfo> with C<CL_CONTEXT_REFERENCE_COUNT> and returns the result. 1357Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_REFERENCE_COUNT> and returns the result.
1185 1358
1186=item @devices = $context->devices 1359=item @devices = $context->devices
1187 1360
1188Calls C<clGetContextInfo> with C<CL_CONTEXT_DEVICES> and returns the result. 1361Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_DEVICES> and returns the result.
1189 1362
1190=item @property_ints = $context->properties 1363=item @property_ints = $context->properties
1191 1364
1192Calls C<clGetContextInfo> with C<CL_CONTEXT_PROPERTIES> and returns the result. 1365Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_PROPERTIES> and returns the result.
1193 1366
1194=item $uint = $context->num_devices 1367=item $uint = $context->num_devices
1195 1368
1196Calls C<clGetContextInfo> with C<CL_CONTEXT_NUM_DEVICES> and returns the result. 1369Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_NUM_DEVICES> and returns the result.
1197 1370
1198=for gengetinfo end context 1371=for gengetinfo end context
1199 1372
1200=back 1373=back
1201 1374
1317reference to an array of local work sizes, with the same number of 1490reference to an array of local work sizes, with the same number of
1318elements as \@global_work_size. 1491elements as \@global_work_size.
1319 1492
1320L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html> 1493L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html>
1321 1494
1495=item $ev = $queue->migrate_mem_objects (\@mem_objects, $flags, $wait_events...)
1496
1497Migrates a number of OpenCL::Memory objects to or from the device.
1498
1499flags: OpenCL::MIGRATE_MEM_OBJECT_HOST, OpenCL::MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED
1500
1501L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueMigrateMemObjects.html>
1502
1322=item $ev = $queue->acquire_gl_objects ([object, ...], $wait_events...) 1503=item $ev = $queue->acquire_gl_objects ([object, ...], $wait_events...)
1323 1504
1324Enqueues a list (an array-ref of OpenCL::Memory objects) to be acquired 1505Enqueues a list (an array-ref of OpenCL::Memory objects) to be acquired
1325for subsequent OpenCL usage. 1506for subsequent OpenCL usage.
1326 1507
1361 1542
1362=for gengetinfo begin command_queue 1543=for gengetinfo begin command_queue
1363 1544
1364=item $ctx = $command_queue->context 1545=item $ctx = $command_queue->context
1365 1546
1366Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_CONTEXT> and returns the result. 1547Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_CONTEXT> and returns the result.
1367 1548
1368=item $device = $command_queue->device 1549=item $device = $command_queue->device
1369 1550
1370Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_DEVICE> and returns the result. 1551Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_DEVICE> and returns the result.
1371 1552
1372=item $uint = $command_queue->reference_count 1553=item $uint = $command_queue->reference_count
1373 1554
1374Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_REFERENCE_COUNT> and returns the result. 1555Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_REFERENCE_COUNT> and returns the result.
1375 1556
1376=item $command_queue_properties = $command_queue->properties 1557=item $command_queue_properties = $command_queue->properties
1377 1558
1378Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_PROPERTIES> and returns the result. 1559Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_PROPERTIES> and returns the result.
1379 1560
1380=for gengetinfo end command_queue 1561=for gengetinfo end command_queue
1381 1562
1382=back 1563=back
1383 1564
1402 1583
1403Maps the given buffer into host memory and returns an 1584Maps the given buffer into host memory and returns an
1404C<OpenCL::MappedBuffer> object. If C<$size> is specified as undef, then 1585C<OpenCL::MappedBuffer> object. If C<$size> is specified as undef, then
1405the map will extend to the end of the buffer. 1586the map will extend to the end of the buffer.
1406 1587
1588map_flags: OpenCL::MAP_READ, OpenCL::MAP_WRITE, OpenCL::MAP_WRITE_INVALIDATE_REGION.
1589
1407L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMapBuffer.html> 1590L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMapBuffer.html>
1408 1591
1409Example: map the buffer $buf fully and replace the first 4 bytes by "abcd", then unmap. 1592Example: map the buffer $buf fully and replace the first 4 bytes by "abcd", then unmap.
1410 1593
1411 { 1594 {
1463 1646
1464=for gengetinfo begin mem 1647=for gengetinfo begin mem
1465 1648
1466=item $mem_object_type = $mem->type 1649=item $mem_object_type = $mem->type
1467 1650
1468Calls C<clGetMemObjectInfo> with C<CL_MEM_TYPE> and returns the result. 1651Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_TYPE> and returns the result.
1469 1652
1470=item $mem_flags = $mem->flags 1653=item $mem_flags = $mem->flags
1471 1654
1472Calls C<clGetMemObjectInfo> with C<CL_MEM_FLAGS> and returns the result. 1655Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_FLAGS> and returns the result.
1473 1656
1474=item $int = $mem->size 1657=item $int = $mem->size
1475 1658
1476Calls C<clGetMemObjectInfo> with C<CL_MEM_SIZE> and returns the result. 1659Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_SIZE> and returns the result.
1477 1660
1478=item $ptr_value = $mem->host_ptr 1661=item $ptr_value = $mem->host_ptr
1479 1662
1480Calls C<clGetMemObjectInfo> with C<CL_MEM_HOST_PTR> and returns the result. 1663Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_HOST_PTR> and returns the result.
1481 1664
1482=item $uint = $mem->map_count 1665=item $uint = $mem->map_count
1483 1666
1484Calls C<clGetMemObjectInfo> with C<CL_MEM_MAP_COUNT> and returns the result. 1667Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_MAP_COUNT> and returns the result.
1485 1668
1486=item $uint = $mem->reference_count 1669=item $uint = $mem->reference_count
1487 1670
1488Calls C<clGetMemObjectInfo> with C<CL_MEM_REFERENCE_COUNT> and returns the result. 1671Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_REFERENCE_COUNT> and returns the result.
1489 1672
1490=item $ctx = $mem->context 1673=item $ctx = $mem->context
1491 1674
1492Calls C<clGetMemObjectInfo> with C<CL_MEM_CONTEXT> and returns the result. 1675Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_CONTEXT> and returns the result.
1493 1676
1494=item $mem = $mem->associated_memobject 1677=item $mem = $mem->associated_memobject
1495 1678
1496Calls C<clGetMemObjectInfo> with C<CL_MEM_ASSOCIATED_MEMOBJECT> and returns the result. 1679Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_ASSOCIATED_MEMOBJECT> and returns the result.
1497 1680
1498=item $int = $mem->offset 1681=item $int = $mem->offset
1499 1682
1500Calls C<clGetMemObjectInfo> with C<CL_MEM_OFFSET> and returns the result. 1683Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_OFFSET> and returns the result.
1501 1684
1502=for gengetinfo end mem 1685=for gengetinfo end mem
1503 1686
1504=item ($type, $name) = $mem->gl_object_info 1687=item ($type, $name) = $mem->gl_object_info
1505 1688
1525=over 4 1708=over 4
1526 1709
1527=item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size) 1710=item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size)
1528 1711
1529Creates an OpenCL::Buffer objects from this buffer and returns it. The 1712Creates an OpenCL::Buffer objects from this buffer and returns it. The
1530C<buffer_create_type> is assumed to be C<CL_BUFFER_CREATE_TYPE_REGION>. 1713C<buffer_create_type> is assumed to be C<OpenCL::BUFFER_CREATE_TYPE_REGION>.
1531 1714
1532L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html> 1715L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html>
1533 1716
1534=back 1717=back
1535 1718
1551L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html> 1734L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html>
1552 1735
1553=item ($channel_order, $channel_data_type) = $image->format 1736=item ($channel_order, $channel_data_type) = $image->format
1554 1737
1555Returns the channel order and type used to create the image by calling 1738Returns the channel order and type used to create the image by calling
1556C<clGetImageInfo> with C<CL_IMAGE_FORMAT>. 1739C<clGetImageInfo> with C<OpenCL::IMAGE_FORMAT>.
1557 1740
1558=for gengetinfo begin image 1741=for gengetinfo begin image
1559 1742
1560=item $int = $image->element_size 1743=item $int = $image->element_size
1561 1744
1562Calls C<clGetImageInfo> with C<CL_IMAGE_ELEMENT_SIZE> and returns the result. 1745Calls C<clGetImageInfo> with C<OpenCL::IMAGE_ELEMENT_SIZE> and returns the result.
1563 1746
1564=item $int = $image->row_pitch 1747=item $int = $image->row_pitch
1565 1748
1566Calls C<clGetImageInfo> with C<CL_IMAGE_ROW_PITCH> and returns the result. 1749Calls C<clGetImageInfo> with C<OpenCL::IMAGE_ROW_PITCH> and returns the result.
1567 1750
1568=item $int = $image->slice_pitch 1751=item $int = $image->slice_pitch
1569 1752
1570Calls C<clGetImageInfo> with C<CL_IMAGE_SLICE_PITCH> and returns the result. 1753Calls C<clGetImageInfo> with C<OpenCL::IMAGE_SLICE_PITCH> and returns the result.
1571 1754
1572=item $int = $image->width 1755=item $int = $image->width
1573 1756
1574Calls C<clGetImageInfo> with C<CL_IMAGE_WIDTH> and returns the result. 1757Calls C<clGetImageInfo> with C<OpenCL::IMAGE_WIDTH> and returns the result.
1575 1758
1576=item $int = $image->height 1759=item $int = $image->height
1577 1760
1578Calls C<clGetImageInfo> with C<CL_IMAGE_HEIGHT> and returns the result. 1761Calls C<clGetImageInfo> with C<OpenCL::IMAGE_HEIGHT> and returns the result.
1579 1762
1580=item $int = $image->depth 1763=item $int = $image->depth
1581 1764
1582Calls C<clGetImageInfo> with C<CL_IMAGE_DEPTH> and returns the result. 1765Calls C<clGetImageInfo> with C<OpenCL::IMAGE_DEPTH> and returns the result.
1583 1766
1584=for gengetinfo end image 1767=for gengetinfo end image
1585 1768
1586=for gengetinfo begin gl_texture 1769=for gengetinfo begin gl_texture
1587 1770
1588=item $GLenum = $gl_texture->target 1771=item $GLenum = $gl_texture->target
1589 1772
1590Calls C<clGetGLTextureInfo> with C<CL_GL_TEXTURE_TARGET> and returns the result. 1773Calls C<clGetGLTextureInfo> with C<OpenCL::GL_TEXTURE_TARGET> and returns the result.
1591 1774
1592=item $GLint = $gl_texture->gl_mipmap_level 1775=item $GLint = $gl_texture->gl_mipmap_level
1593 1776
1594Calls C<clGetGLTextureInfo> with C<CL_GL_MIPMAP_LEVEL> and returns the result. 1777Calls C<clGetGLTextureInfo> with C<OpenCL::GL_MIPMAP_LEVEL> and returns the result.
1595 1778
1596=for gengetinfo end gl_texture 1779=for gengetinfo end gl_texture
1597 1780
1598=back 1781=back
1599 1782
1609 1792
1610=for gengetinfo begin sampler 1793=for gengetinfo begin sampler
1611 1794
1612=item $uint = $sampler->reference_count 1795=item $uint = $sampler->reference_count
1613 1796
1614Calls C<clGetSamplerInfo> with C<CL_SAMPLER_REFERENCE_COUNT> and returns the result. 1797Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_REFERENCE_COUNT> and returns the result.
1615 1798
1616=item $ctx = $sampler->context 1799=item $ctx = $sampler->context
1617 1800
1618Calls C<clGetSamplerInfo> with C<CL_SAMPLER_CONTEXT> and returns the result. 1801Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_CONTEXT> and returns the result.
1619 1802
1620=item $addressing_mode = $sampler->normalized_coords 1803=item $addressing_mode = $sampler->normalized_coords
1621 1804
1622Calls C<clGetSamplerInfo> with C<CL_SAMPLER_NORMALIZED_COORDS> and returns the result. 1805Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_NORMALIZED_COORDS> and returns the result.
1623 1806
1624=item $filter_mode = $sampler->addressing_mode 1807=item $filter_mode = $sampler->addressing_mode
1625 1808
1626Calls C<clGetSamplerInfo> with C<CL_SAMPLER_ADDRESSING_MODE> and returns the result. 1809Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_ADDRESSING_MODE> and returns the result.
1627 1810
1628=item $boolean = $sampler->filter_mode 1811=item $boolean = $sampler->filter_mode
1629 1812
1630Calls C<clGetSamplerInfo> with C<CL_SAMPLER_FILTER_MODE> and returns the result. 1813Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_FILTER_MODE> and returns the result.
1631 1814
1632=for gengetinfo end sampler 1815=for gengetinfo end sampler
1633 1816
1634=back 1817=back
1635 1818
1653not so. So best make sure you don't pass in invalid values. 1836not so. So best make sure you don't pass in invalid values.
1654 1837
1655Some implementations fail with C<OpenCL::INVALID_BINARY> when the 1838Some implementations fail with C<OpenCL::INVALID_BINARY> when the
1656compilation state is successful but some later stage fails. 1839compilation state is successful but some later stage fails.
1657 1840
1841options: C<-D name>, C<-D name=definition>, C<-I dir>,
1842C<-cl-single-precision-constant>, C<-cl-denorms-are-zero>,
1843C<-cl-fp32-correctly-rounded-divide-sqrt>, C<-cl-opt-disable>,
1844C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>,
1845C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>,
1846C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>,
1847C<-create-library>, C<-enable-link-options>.
1848
1849build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE,
1850OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS.
1851
1658L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> 1852L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1659 1853
1660=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) 1854=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef)
1661 1855
1662Similar to C<< ->build >>, except it starts a thread, and never fails (you 1856Similar to C<< ->build >>, except it starts a thread, and never fails (you
1663need to check the compilation status form the callback, or by polling). 1857need to check the compilation status form the callback, or by polling).
1664 1858
1859=item $program->compile (\@devices = undef, $options = "", \%headers = undef, $cb->($program) = undef)
1860
1861Compiles the given program for the given devices (or all devices if
1862undef). If C<$headers> is given, it must be a hashref with include name =>
1863OpenCL::Program pairs.
1864
1865L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCompileProgram.html>
1866
1665=item $packed_value = $program->build_info ($device, $name) 1867=item $packed_value = $program->build_info ($device, $name)
1666 1868
1667Similar to C<< $platform->info >>, but returns build info for a previous 1869Similar to C<< $platform->info >>, but returns build info for a previous
1668build attempt for the given device. 1870build attempt for the given device.
1669 1871
1872binary_type: OpenCL::PROGRAM_BINARY_TYPE_NONE,
1873OpenCL::PROGRAM_BINARY_TYPE_COMPILED_OBJECT,
1874OpenCL::PROGRAM_BINARY_TYPE_LIBRARY,
1875OpenCL::PROGRAM_BINARY_TYPE_EXECUTABLE.
1876
1670L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html> 1877L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html>
1671 1878
1672=item $kernel = $program->kernel ($function_name) 1879=item $kernel = $program->kernel ($function_name)
1673 1880
1674Creates an OpenCL::Kernel object out of the named C<__kernel> function in 1881Creates an OpenCL::Kernel object out of the named C<__kernel> function in
1684 1891
1685=for gengetinfo begin program_build 1892=for gengetinfo begin program_build
1686 1893
1687=item $build_status = $program->build_status ($device) 1894=item $build_status = $program->build_status ($device)
1688 1895
1689Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_STATUS> and returns the result. 1896Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_STATUS> and returns the result.
1690 1897
1691=item $string = $program->build_options ($device) 1898=item $string = $program->build_options ($device)
1692 1899
1693Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_OPTIONS> and returns the result. 1900Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result.
1694 1901
1695=item $string = $program->build_log ($device) 1902=item $string = $program->build_log ($device)
1696 1903
1697Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_LOG> and returns the result. 1904Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result.
1905
1906=item $binary_type = $program->binary_type ($device)
1907
1908Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BINARY_TYPE> and returns the result.
1698 1909
1699=for gengetinfo end program_build 1910=for gengetinfo end program_build
1700 1911
1701=item $packed_value = $program->info ($name) 1912=item $packed_value = $program->info ($name)
1702 1913
1706 1917
1707=for gengetinfo begin program 1918=for gengetinfo begin program
1708 1919
1709=item $uint = $program->reference_count 1920=item $uint = $program->reference_count
1710 1921
1711Calls C<clGetProgramInfo> with C<CL_PROGRAM_REFERENCE_COUNT> and returns the result. 1922Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_REFERENCE_COUNT> and returns the result.
1712 1923
1713=item $ctx = $program->context 1924=item $ctx = $program->context
1714 1925
1715Calls C<clGetProgramInfo> with C<CL_PROGRAM_CONTEXT> and returns the result. 1926Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_CONTEXT> and returns the result.
1716 1927
1717=item $uint = $program->num_devices 1928=item $uint = $program->num_devices
1718 1929
1719Calls C<clGetProgramInfo> with C<CL_PROGRAM_NUM_DEVICES> and returns the result. 1930Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_NUM_DEVICES> and returns the result.
1720 1931
1721=item @devices = $program->devices 1932=item @devices = $program->devices
1722 1933
1723Calls C<clGetProgramInfo> with C<CL_PROGRAM_DEVICES> and returns the result. 1934Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_DEVICES> and returns the result.
1724 1935
1725=item $string = $program->source 1936=item $string = $program->source
1726 1937
1727Calls C<clGetProgramInfo> with C<CL_PROGRAM_SOURCE> and returns the result. 1938Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_SOURCE> and returns the result.
1728 1939
1729=item @ints = $program->binary_sizes 1940=item @ints = $program->binary_sizes
1730 1941
1731Calls C<clGetProgramInfo> with C<CL_PROGRAM_BINARY_SIZES> and returns the result. 1942Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_BINARY_SIZES> and returns the result.
1732 1943
1733=for gengetinfo end program 1944=for gengetinfo end program
1734 1945
1735=item @blobs = $program->binaries 1946=item @blobs = $program->binaries
1736 1947
1757 1968
1758=for gengetinfo begin kernel 1969=for gengetinfo begin kernel
1759 1970
1760=item $string = $kernel->function_name 1971=item $string = $kernel->function_name
1761 1972
1762Calls C<clGetKernelInfo> with C<CL_KERNEL_FUNCTION_NAME> and returns the result. 1973Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_FUNCTION_NAME> and returns the result.
1763 1974
1764=item $uint = $kernel->num_args 1975=item $uint = $kernel->num_args
1765 1976
1766Calls C<clGetKernelInfo> with C<CL_KERNEL_NUM_ARGS> and returns the result. 1977Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_NUM_ARGS> and returns the result.
1767 1978
1768=item $uint = $kernel->reference_count 1979=item $uint = $kernel->reference_count
1769 1980
1770Calls C<clGetKernelInfo> with C<CL_KERNEL_REFERENCE_COUNT> and returns the result. 1981Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_REFERENCE_COUNT> and returns the result.
1771 1982
1772=item $ctx = $kernel->context 1983=item $ctx = $kernel->context
1773 1984
1774Calls C<clGetKernelInfo> with C<CL_KERNEL_CONTEXT> and returns the result. 1985Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_CONTEXT> and returns the result.
1775 1986
1776=item $program = $kernel->program 1987=item $program = $kernel->program
1777 1988
1778Calls C<clGetKernelInfo> with C<CL_KERNEL_PROGRAM> and returns the result. 1989Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_PROGRAM> and returns the result.
1779 1990
1780=for gengetinfo end kernel 1991=for gengetinfo end kernel
1781 1992
1782=item $packed_value = $kernel->work_group_info ($device, $name) 1993=item $packed_value = $kernel->work_group_info ($device, $name)
1783 1994
1784See C<< $platform->info >> for details. 1995See C<< $platform->info >> for details.
1785 1996
1786The reason this method is not called C<info> is that there already is an
1787C<< ->info >> method.
1788
1789L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html> 1997L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html>
1790 1998
1791=for gengetinfo begin kernel_work_group 1999=for gengetinfo begin kernel_work_group
1792 2000
1793=item $int = $kernel->work_group_size ($device) 2001=item $int = $kernel->work_group_size ($device)
1794 2002
1795Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_WORK_GROUP_SIZE> and returns the result. 2003Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_WORK_GROUP_SIZE> and returns the result.
1796 2004
1797=item @ints = $kernel->compile_work_group_size ($device) 2005=item @ints = $kernel->compile_work_group_size ($device)
1798 2006
1799Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_COMPILE_WORK_GROUP_SIZE> and returns the result. 2007Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_COMPILE_WORK_GROUP_SIZE> and returns the result.
1800 2008
1801=item $ulong = $kernel->local_mem_size ($device) 2009=item $ulong = $kernel->local_mem_size ($device)
1802 2010
1803Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_LOCAL_MEM_SIZE> and returns the result. 2011Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_LOCAL_MEM_SIZE> and returns the result.
1804 2012
1805=item $int = $kernel->preferred_work_group_size_multiple ($device) 2013=item $int = $kernel->preferred_work_group_size_multiple ($device)
1806 2014
1807Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE> and returns the result. 2015Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE> and returns the result.
1808 2016
1809=item $ulong = $kernel->private_mem_size ($device) 2017=item $ulong = $kernel->private_mem_size ($device)
1810 2018
1811Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PRIVATE_MEM_SIZE> and returns the result. 2019Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result.
1812 2020
1813=for gengetinfo end kernel_work_group 2021=for gengetinfo end kernel_work_group
2022
2023=item $packed_value = $kernel->arg_info ($idx, $name)
2024
2025See C<< $platform->info >> for details.
2026
2027L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clGetKernelArgInfo.html>
2028
2029=for gengetinfo begin kernel_arg
2030
2031=item $kernel_arg_address_qualifier = $kernel->arg_address_qualifier ($idx)
2032
2033Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ADDRESS_QUALIFIER> and returns the result.
2034
2035=item $kernel_arg_access_qualifier = $kernel->arg_access_qualifier ($idx)
2036
2037Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ACCESS_QUALIFIER> and returns the result.
2038
2039=item $string = $kernel->arg_type_name ($idx)
2040
2041Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_NAME> and returns the result.
2042
2043=item $kernel_arg_type_qualifier = $kernel->arg_type_qualifier ($idx)
2044
2045Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_QUALIFIER> and returns the result.
2046
2047=item $string = $kernel->arg_name ($idx)
2048
2049Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_NAME> and returns the result.
2050
2051=for gengetinfo end kernel_arg
1814 2052
1815=item $kernel->setf ($format, ...) 2053=item $kernel->setf ($format, ...)
1816 2054
1817Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic 2055Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic
1818way to set arguments (and with OpenCL 1.2 it might be rather slow), you 2056way to set arguments (and with OpenCL 1.2 it might be rather slow), you
1930 2168
1931=for gengetinfo begin event 2169=for gengetinfo begin event
1932 2170
1933=item $queue = $event->command_queue 2171=item $queue = $event->command_queue
1934 2172
1935Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_QUEUE> and returns the result. 2173Calls C<clGetEventInfo> with C<OpenCL::EVENT_COMMAND_QUEUE> and returns the result.
1936 2174
1937=item $command_type = $event->command_type 2175=item $command_type = $event->command_type
1938 2176
1939Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_TYPE> and returns the result. 2177Calls C<clGetEventInfo> with C<OpenCL::EVENT_COMMAND_TYPE> and returns the result.
1940 2178
1941=item $uint = $event->reference_count 2179=item $uint = $event->reference_count
1942 2180
1943Calls C<clGetEventInfo> with C<CL_EVENT_REFERENCE_COUNT> and returns the result. 2181Calls C<clGetEventInfo> with C<OpenCL::EVENT_REFERENCE_COUNT> and returns the result.
1944 2182
1945=item $uint = $event->command_execution_status 2183=item $uint = $event->command_execution_status
1946 2184
1947Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_EXECUTION_STATUS> and returns the result. 2185Calls C<clGetEventInfo> with C<OpenCL::EVENT_COMMAND_EXECUTION_STATUS> and returns the result.
1948 2186
1949=item $ctx = $event->context 2187=item $ctx = $event->context
1950 2188
1951Calls C<clGetEventInfo> with C<CL_EVENT_CONTEXT> and returns the result. 2189Calls C<clGetEventInfo> with C<OpenCL::EVENT_CONTEXT> and returns the result.
1952 2190
1953=for gengetinfo end event 2191=for gengetinfo end event
1954 2192
1955=item $packed_value = $ev->profiling_info ($name) 2193=item $packed_value = $ev->profiling_info ($name)
1956 2194
1963 2201
1964=for gengetinfo begin profiling 2202=for gengetinfo begin profiling
1965 2203
1966=item $ulong = $event->profiling_command_queued 2204=item $ulong = $event->profiling_command_queued
1967 2205
1968Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_QUEUED> and returns the result. 2206Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_QUEUED> and returns the result.
1969 2207
1970=item $ulong = $event->profiling_command_submit 2208=item $ulong = $event->profiling_command_submit
1971 2209
1972Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_SUBMIT> and returns the result. 2210Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_SUBMIT> and returns the result.
1973 2211
1974=item $ulong = $event->profiling_command_start 2212=item $ulong = $event->profiling_command_start
1975 2213
1976Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_START> and returns the result. 2214Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_START> and returns the result.
1977 2215
1978=item $ulong = $event->profiling_command_end 2216=item $ulong = $event->profiling_command_end
1979 2217
1980Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_END> and returns the result. 2218Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_END> and returns the result.
1981 2219
1982=for gengetinfo end profiling 2220=for gengetinfo end profiling
1983 2221
1984=back 2222=back
1985 2223
1991 2229
1992=item $ev->set_status ($execution_status) 2230=item $ev->set_status ($execution_status)
1993 2231
1994Sets the execution status of the user event. Can only be called once, 2232Sets the execution status of the user event. Can only be called once,
1995either with OpenCL::COMPLETE or a negative number as status. 2233either with OpenCL::COMPLETE or a negative number as status.
2234
2235execution_status: OpenCL::COMPLETE or a negative integer.
1996 2236
1997L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetUserEventStatus.html> 2237L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetUserEventStatus.html>
1998 2238
1999=back 2239=back
2000 2240

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines