… | |
… | |
28 | specific device ("compiling and linking"), also binary programs. For each |
28 | specific device ("compiling and linking"), also binary programs. For each |
29 | kernel function in a program you can then create an OpenCL::Kernel object |
29 | kernel function in a program you can then create an OpenCL::Kernel object |
30 | which represents basically a function call with argument values. |
30 | which represents basically a function call with argument values. |
31 | |
31 | |
32 | OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat |
32 | OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat |
33 | memory areas, think arrays or structs) and OpenCL::Image objects (think 2d |
33 | memory areas, think arrays or structs) and OpenCL::Image objects (think 2D |
34 | or 3d array) for bulk data and input and output for kernels. |
34 | or 3D array) for bulk data and input and output for kernels. |
35 | |
35 | |
36 | OpenCL::Sampler objects, which are kind of like texture filter modes in |
36 | OpenCL::Sampler objects, which are kind of like texture filter modes in |
37 | OpenGL. |
37 | OpenGL. |
38 | |
38 | |
39 | OpenCL::Queue objects - command queues, which allow you to submit memory |
39 | OpenCL::Queue objects - command queues, which allow you to submit memory |
… | |
… | |
213 | $ev->wait; |
213 | $ev->wait; |
214 | |
214 | |
215 | =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 |
216 | set flight effect. |
216 | set flight effect. |
217 | |
217 | |
218 | This is quite a long example to get you going - you can download it from |
218 | This is quite a long example to get you going - you can also download it |
219 | L<http://cvs.schmorp.de/OpenCL/examples/juliaflight>. |
219 | from L<http://cvs.schmorp.de/OpenCL/examples/juliaflight>. |
220 | |
220 | |
221 | use OpenGL ":all"; |
221 | use OpenGL ":all"; |
222 | use OpenCL; |
222 | use OpenCL; |
223 | |
223 | |
224 | my $S = $ARGV[0] || 256; # window/texture size, smaller is faster |
224 | my $S = $ARGV[0] || 256; # window/texture size, smaller is faster |
… | |
… | |
388 | |
388 | |
389 | =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 |
390 | context, no event is created. In all other contexts an event is returned |
390 | context, no event is created. In all other contexts an event is returned |
391 | by the method. |
391 | by the method. |
392 | |
392 | |
393 | =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 |
394 | other status is returned the function will throw an exception, so you |
394 | other status is returned the function will throw an exception, so you |
395 | don't normally have to to any error checking. |
395 | don't normally have to to any error checking. |
396 | |
396 | |
397 | =back |
397 | =back |
|
|
398 | |
|
|
399 | =head2 CONSTANTS |
|
|
400 | |
|
|
401 | All C<CL_xxx> constants that this module supports are always available |
|
|
402 | in the C<OpenCL> namespace as C<OpenCL::xxx> (i.e. without the C<CL_> |
|
|
403 | prefix). Constants which are not defined in the header files used during |
|
|
404 | compilation, or otherwise are not available, will have the value C<0> (in |
|
|
405 | some cases, this will make them indistinguishable from real constants, |
|
|
406 | sorry). |
|
|
407 | |
|
|
408 | The latest version of this module knows and exports the constants |
|
|
409 | listed in L<http://cvs.schmorp.de/OpenCL/constiv.h>. |
|
|
410 | |
|
|
411 | =head2 OPENCL 1.1 VS. OPENCL 1.2 |
|
|
412 | |
|
|
413 | This module supports both OpenCL version 1.1 and 1.2, although the OpenCL |
|
|
414 | 1.2 interface hasn't been tested much for lack of availability of an |
|
|
415 | actual implementation. |
|
|
416 | |
|
|
417 | Every function or method in this manual page that interfaces to a |
|
|
418 | particular OpenCL function has a link to the its C manual page. |
|
|
419 | |
|
|
420 | If the link contains a F<1.1>, then this function is an OpenCL 1.1 |
|
|
421 | function. Most but not all also exist in OpenCL 1.2, and this module |
|
|
422 | tries to emulate the missing ones for you, when told to do so at |
|
|
423 | compiletime. You can check whether a function was removed in OpenCL 1.2 by |
|
|
424 | replacing the F<1.1> component in the URL by F<1.2>. |
|
|
425 | |
|
|
426 | If the link contains a F<1.2>, then this is a OpenCL 1.2-only |
|
|
427 | function. Even if the module was compiled with OpenCL 1.2 header files |
|
|
428 | and has an 1.2 OpenCL library, calling such a function on a platform that |
|
|
429 | doesn't implement 1.2 causes undefined behaviour, usually a crash (But |
|
|
430 | this is not guaranteed). |
|
|
431 | |
|
|
432 | You can find out whether this module was compiled to prefer 1.1 |
|
|
433 | functionality by ooking at C<OpenCL::PREFER_1_1> - if it is true, then |
|
|
434 | 1.1 functions generally are implemented using 1.1 OpenCL functions. If it |
|
|
435 | is false, then 1.1 functions missing from 1.2 are emulated by calling 1.2 |
|
|
436 | fucntions. |
|
|
437 | |
|
|
438 | This is a somewhat sorry state of affairs, but the Khronos group choose to |
|
|
439 | make every release of OpenCL source and binary incompatible with previous |
|
|
440 | releases. |
398 | |
441 | |
399 | =head2 PERL AND OPENCL TYPES |
442 | =head2 PERL AND OPENCL TYPES |
400 | |
443 | |
401 | This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack |
444 | This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack |
402 | format equivalents: |
445 | format equivalents: |
… | |
… | |
554 | use Async::Interrupt (); |
597 | use Async::Interrupt (); |
555 | |
598 | |
556 | our $POLL_FUNC; # set by XS |
599 | our $POLL_FUNC; # set by XS |
557 | |
600 | |
558 | BEGIN { |
601 | BEGIN { |
559 | our $VERSION = '0.99'; |
602 | our $VERSION = '1.0'; |
560 | |
603 | |
561 | require XSLoader; |
604 | require XSLoader; |
562 | XSLoader::load (__PACKAGE__, $VERSION); |
605 | XSLoader::load (__PACKAGE__, $VERSION); |
563 | |
606 | |
564 | @OpenCL::Platform::ISA = |
607 | @OpenCL::Platform::ISA = |
… | |
… | |
600 | The last error returned by a function - it's only valid after an error occured |
643 | The last error returned by a function - it's only valid after an error occured |
601 | and before calling another OpenCL function. |
644 | and before calling another OpenCL function. |
602 | |
645 | |
603 | =item $str = OpenCL::err2str [$errval] |
646 | =item $str = OpenCL::err2str [$errval] |
604 | |
647 | |
605 | Converts an error value into a human readable string. IF no error value is |
648 | Converts an error value into a human readable string. If no error value is |
606 | given, then the last error will be used (as returned by OpenCL::errno). |
649 | given, then the last error will be used (as returned by OpenCL::errno). |
|
|
650 | |
|
|
651 | The latest version of this module knows the error constants |
|
|
652 | listed in L<http://cvs.schmorp.de/OpenCL/errstr.h>. |
607 | |
653 | |
608 | =item $str = OpenCL::enum2str $enum |
654 | =item $str = OpenCL::enum2str $enum |
609 | |
655 | |
610 | Converts most enum values (of parameter names, image format constants, |
656 | Converts most enum values (of parameter names, image format constants, |
611 | object types, addressing and filter modes, command types etc.) into a |
657 | object types, addressing and filter modes, command types etc.) into a |
612 | human readable string. When confronted with some random integer it can be |
658 | human readable string. When confronted with some random integer it can be |
613 | very helpful to pass it through this function to maybe get some readable |
659 | very helpful to pass it through this function to maybe get some readable |
614 | string out of it. |
660 | string out of it. |
615 | |
661 | |
|
|
662 | The latest version of this module knows the enumaration constants |
|
|
663 | listed in L<http://cvs.schmorp.de/OpenCL/enumstr.h>. |
|
|
664 | |
616 | =item @platforms = OpenCL::platforms |
665 | =item @platforms = OpenCL::platforms |
617 | |
666 | |
618 | Returns all available OpenCL::Platform objects. |
667 | Returns all available OpenCL::Platform objects. |
619 | |
668 | |
620 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> |
669 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> |
621 | |
670 | |
622 | =item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr |
671 | =item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr |
623 | |
672 | |
624 | Tries to create a context from a default device and platform type - never worked for me. |
673 | Tries to create a context from a default device and platform type - never worked for me. |
|
|
674 | Consider using C<< $platform->context_from_type >> instead. |
625 | |
675 | |
626 | type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU, |
676 | type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU, |
627 | OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. |
677 | OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. |
628 | |
678 | |
629 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
679 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
630 | |
680 | |
631 | =item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
681 | =item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
632 | |
682 | |
633 | Create a new OpenCL::Context object using the given device object(s). This |
683 | Create a new OpenCL::Context object using the given device object(s). |
634 | function isn't implemented yet, use C<< $platform->context >> instead. |
684 | Consider using C<< $platform->context >> instead. |
635 | |
685 | |
636 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
686 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
637 | |
687 | |
638 | =item OpenCL::wait_for_events $wait_events... |
688 | =item OpenCL::wait_for_events $wait_events... |
639 | |
689 | |
… | |
… | |
720 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
770 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
721 | |
771 | |
722 | =item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
772 | =item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
723 | |
773 | |
724 | Create a new OpenCL::Context object using the given device object(s)- a |
774 | Create a new OpenCL::Context object using the given device object(s)- a |
725 | CL_CONTEXT_PLATFORM property is supplied automatically. |
775 | OpenCL::CONTEXT_PLATFORM property is supplied automatically. |
726 | |
776 | |
727 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
777 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
728 | |
778 | |
729 | =item $packed_value = $platform->info ($name) |
779 | =item $packed_value = $platform->info ($name) |
730 | |
780 | |
… | |
… | |
775 | =over 4 |
825 | =over 4 |
776 | |
826 | |
777 | =item $packed_value = $device->info ($name) |
827 | =item $packed_value = $device->info ($name) |
778 | |
828 | |
779 | See C<< $platform->info >> for details. |
829 | See C<< $platform->info >> for details. |
|
|
830 | |
|
|
831 | type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, |
|
|
832 | OpenCL::DEVICE_TYPE_GPU, OpenCL::DEVICE_TYPE_ACCELERATOR, |
|
|
833 | OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. |
|
|
834 | |
|
|
835 | fp_config: OpenCL::FP_DENORM, OpenCL::FP_INF_NAN, OpenCL::FP_ROUND_TO_NEAREST, |
|
|
836 | OpenCL::FP_ROUND_TO_ZERO, OpenCL::FP_ROUND_TO_INF, OpenCL::FP_FMA, |
|
|
837 | OpenCL::FP_SOFT_FLOAT, OpenCL::FP_CORRECTLY_ROUNDED_DIVIDE_SQRT. |
|
|
838 | |
|
|
839 | mem_cache_type: OpenCL::NONE, OpenCL::READ_ONLY_CACHE, OpenCL::READ_WRITE_CACHE. |
|
|
840 | |
|
|
841 | local_mem_type: OpenCL::LOCAL, OpenCL::GLOBAL. |
|
|
842 | |
|
|
843 | exec_capabilities: OpenCL::EXEC_KERNEL, OpenCL::EXEC_NATIVE_KERNEL. |
|
|
844 | |
|
|
845 | command_queue_properties: OpenCL::QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, |
|
|
846 | OpenCL::QUEUE_PROFILING_ENABLE. |
|
|
847 | |
|
|
848 | partition_properties: OpenCL::DEVICE_PARTITION_EQUALLY, |
|
|
849 | OpenCL::DEVICE_PARTITION_BY_COUNTS, OpenCL::DEVICE_PARTITION_BY_COUNTS_LIST_END, |
|
|
850 | OpenCL::DEVICE_PARTITION_BY_AFFINITY_DOMAIN. |
|
|
851 | |
|
|
852 | affinity_domain: OpenCL::DEVICE_AFFINITY_DOMAIN_NUMA, |
|
|
853 | OpenCL::DEVICE_AFFINITY_DOMAIN_L4_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L3_CACHE, |
|
|
854 | OpenCL::DEVICE_AFFINITY_DOMAIN_L2_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L1_CACHE, |
|
|
855 | OpenCL::DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE. |
780 | |
856 | |
781 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> |
857 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> |
782 | |
858 | |
783 | =item @devices = $device->sub_devices (\@properties) |
859 | =item @devices = $device->sub_devices (\@properties) |
784 | |
860 | |
… | |
… | |
1164 | OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555, |
1240 | OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555, |
1165 | OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16, |
1241 | OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16, |
1166 | OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16, |
1242 | OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16, |
1167 | OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT. |
1243 | OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT. |
1168 | |
1244 | |
1169 | |
|
|
1170 | type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D, |
1245 | type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D, |
1171 | OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY, |
1246 | OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY, |
1172 | OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY, |
1247 | OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY, |
1173 | OpenCL::MEM_OBJECT_IMAGE1D_BUFFER. |
1248 | OpenCL::MEM_OBJECT_IMAGE1D_BUFFER. |
1174 | |
1249 | |
… | |
… | |
1349 | |
1424 | |
1350 | =item $ev = $queue->copy_buffer ($src, $dst, $src_offset, $dst_offset, $len, $wait_events...) |
1425 | =item $ev = $queue->copy_buffer ($src, $dst, $src_offset, $dst_offset, $len, $wait_events...) |
1351 | |
1426 | |
1352 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBuffer.html> |
1427 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBuffer.html> |
1353 | |
1428 | |
1354 | =item $ev = $queue->read_buffer_rect (OpenCL::Memory buf, cl_bool blocking, $buf_x, $buf_y, $buf_z, $host_x, $host_y, $host_z, $width, $height, $depth, $buf_row_pitch, $buf_slice_pitch, $host_row_pitch, $host_slice_pitch, $data, $wait_events...) |
1429 | $eue->read_buffer_rect ($buf, cl_bool blocking, $buf_x, $buf_y, $buf_z, $host_x, $host_y, $host_z, $width, $height, $depth, $buf_row_pitch, $buf_slice_pitch, $host_row_pitch, $host_slice_pitch, $data, $wait_events...) |
1355 | |
1430 | |
1356 | http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBufferRect.html |
1431 | http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBufferRect.html |
1357 | |
1432 | |
1358 | =item $ev = $queue->write_buffer_rect (OpenCL::Memory buf, cl_bool blocking, $buf_x, $buf_y, $buf_z, $host_x, $host_y, $host_z, $width, $height, $depth, $buf_row_pitch, $buf_slice_pitch, $host_row_pitch, $host_slice_pitch, $data, $wait_events...) |
1433 | =item $ev = $queue->write_buffer_rect ($buf, $blocking, $buf_y, $host_x, $host_z, $height, $buf_row_pitch, $host_row_pitch, $data, $wait_events...) |
1359 | |
1434 | |
1360 | http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBufferRect.html |
1435 | http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBufferRect.html |
1361 | |
1436 | |
1362 | =item $ev = $queue->copy_buffer_to_image ($src_buffer, $dst_image, $src_offset, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $wait_events...) |
1437 | =item $ev = $queue->copy_buffer_to_image ($src_buffer, $dst_image, $src_offset, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $wait_events...) |
1363 | |
1438 | |
… | |
… | |
1547 | it. You are not necessarily meant to do it this way, this example just |
1622 | it. You are not necessarily meant to do it this way, this example just |
1548 | shows you the accessors to use :) |
1623 | shows you the accessors to use :) |
1549 | |
1624 | |
1550 | my $mapped = $queue->map_image ($image, 1, OpenCL::MAP_WRITE); |
1625 | my $mapped = $queue->map_image ($image, 1, OpenCL::MAP_WRITE); |
1551 | |
1626 | |
1552 | $mapped->set ($_ * $mapped->row_pitch, pack "C", 5) |
1627 | $mapped->write ($_ * $mapped->row_pitch, pack "C", 5) |
1553 | for 0..$image->height; |
1628 | for 0 .. $mapped->height - 1; |
1554 | |
1629 | |
1555 | $mapped->unmap;. |
1630 | $mapped->unmap;. |
1556 | $mapped->wait; # only needed for out of order queues normally |
1631 | $mapped->wait; # only needed for out of order queues normally |
1557 | |
1632 | |
1558 | =item $ev = $queue->unmap ($mapped, $wait_events...) |
1633 | =item $ev = $queue->unmap ($mapped, $wait_events...) |
… | |
… | |
1578 | |
1653 | |
1579 | See C<< $platform->info >> for details. |
1654 | See C<< $platform->info >> for details. |
1580 | |
1655 | |
1581 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetMemObjectInfo.html> |
1656 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetMemObjectInfo.html> |
1582 | |
1657 | |
|
|
1658 | =item $memory->destructor_callback ($cb->()) |
|
|
1659 | |
|
|
1660 | Sets a callback that will be invoked after the memory object is destructed. |
|
|
1661 | |
|
|
1662 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetMemObjectDestructorCallback.html> |
|
|
1663 | |
1583 | =for gengetinfo begin mem |
1664 | =for gengetinfo begin mem |
1584 | |
1665 | |
1585 | =item $mem_object_type = $mem->type |
1666 | =item $mem_object_type = $mem->type |
1586 | |
1667 | |
1587 | Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_TYPE> and returns the result. |
1668 | Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_TYPE> and returns the result. |
… | |
… | |
1644 | =over 4 |
1725 | =over 4 |
1645 | |
1726 | |
1646 | =item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size) |
1727 | =item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size) |
1647 | |
1728 | |
1648 | Creates an OpenCL::Buffer objects from this buffer and returns it. The |
1729 | Creates an OpenCL::Buffer objects from this buffer and returns it. The |
1649 | C<buffer_create_type> is assumed to be C<CL_BUFFER_CREATE_TYPE_REGION>. |
1730 | C<buffer_create_type> is assumed to be C<OpenCL::BUFFER_CREATE_TYPE_REGION>. |
1650 | |
1731 | |
1651 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html> |
1732 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html> |
1652 | |
1733 | |
1653 | =back |
1734 | =back |
1654 | |
1735 | |
… | |
… | |
1670 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html> |
1751 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html> |
1671 | |
1752 | |
1672 | =item ($channel_order, $channel_data_type) = $image->format |
1753 | =item ($channel_order, $channel_data_type) = $image->format |
1673 | |
1754 | |
1674 | Returns the channel order and type used to create the image by calling |
1755 | Returns the channel order and type used to create the image by calling |
1675 | C<clGetImageInfo> with C<CL_IMAGE_FORMAT>. |
1756 | C<clGetImageInfo> with C<OpenCL::IMAGE_FORMAT>. |
1676 | |
1757 | |
1677 | =for gengetinfo begin image |
1758 | =for gengetinfo begin image |
1678 | |
1759 | |
1679 | =item $int = $image->element_size |
1760 | =item $int = $image->element_size |
1680 | |
1761 | |
… | |
… | |
1803 | =item $packed_value = $program->build_info ($device, $name) |
1884 | =item $packed_value = $program->build_info ($device, $name) |
1804 | |
1885 | |
1805 | Similar to C<< $platform->info >>, but returns build info for a previous |
1886 | Similar to C<< $platform->info >>, but returns build info for a previous |
1806 | build attempt for the given device. |
1887 | build attempt for the given device. |
1807 | |
1888 | |
|
|
1889 | binary_type: OpenCL::PROGRAM_BINARY_TYPE_NONE, |
|
|
1890 | OpenCL::PROGRAM_BINARY_TYPE_COMPILED_OBJECT, |
|
|
1891 | OpenCL::PROGRAM_BINARY_TYPE_LIBRARY, |
|
|
1892 | OpenCL::PROGRAM_BINARY_TYPE_EXECUTABLE. |
|
|
1893 | |
1808 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html> |
1894 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html> |
1809 | |
1895 | |
1810 | =item $kernel = $program->kernel ($function_name) |
1896 | =item $kernel = $program->kernel ($function_name) |
1811 | |
1897 | |
1812 | Creates an OpenCL::Kernel object out of the named C<__kernel> function in |
1898 | Creates an OpenCL::Kernel object out of the named C<__kernel> function in |
… | |
… | |
1831 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result. |
1917 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result. |
1832 | |
1918 | |
1833 | =item $string = $program->build_log ($device) |
1919 | =item $string = $program->build_log ($device) |
1834 | |
1920 | |
1835 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result. |
1921 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result. |
|
|
1922 | |
|
|
1923 | =item $binary_type = $program->binary_type ($device) |
|
|
1924 | |
|
|
1925 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BINARY_TYPE> and returns the result. |
1836 | |
1926 | |
1837 | =for gengetinfo end program_build |
1927 | =for gengetinfo end program_build |
1838 | |
1928 | |
1839 | =item $packed_value = $program->info ($name) |
1929 | =item $packed_value = $program->info ($name) |
1840 | |
1930 | |
… | |
… | |
2255 | |
2345 | |
2256 | This is a subclass of OpenCL::Mapped, representing mapped images. |
2346 | This is a subclass of OpenCL::Mapped, representing mapped images. |
2257 | |
2347 | |
2258 | =over 4 |
2348 | =over 4 |
2259 | |
2349 | |
|
|
2350 | =item $pixels = $mapped->width |
|
|
2351 | |
|
|
2352 | =item $pixels = $mapped->height |
|
|
2353 | |
|
|
2354 | =item $pixels = $mapped->depth |
|
|
2355 | |
|
|
2356 | Return the width/height/depth of the mapped image region, in pixels. |
|
|
2357 | |
2260 | =item $bytes = $mapped->row_pitch |
2358 | =item $bytes = $mapped->row_pitch |
2261 | |
2359 | |
2262 | =item $bytes = $mapped->slice_pitch |
2360 | =item $bytes = $mapped->slice_pitch |
2263 | |
2361 | |
2264 | Return the row or slice pitch of the image that has been mapped. |
2362 | Return the row or slice pitch of the image that has been mapped. |
2265 | |
2363 | |
|
|
2364 | =item $bytes = $mapped->element_size |
|
|
2365 | |
|
|
2366 | Return the size of a single pixel. |
|
|
2367 | |
|
|
2368 | =item $data = $mapped->get_row ($count, $x=0, $y=0, $z=0) |
|
|
2369 | |
|
|
2370 | Return C<$count> pixels from the given coordinates. The pixel data must |
|
|
2371 | be completely contained within a single row. |
|
|
2372 | |
|
|
2373 | If C<$count> is C<undef>, then all the remaining pixels in that row are |
|
|
2374 | returned. |
|
|
2375 | |
|
|
2376 | =item $mapped->set_row ($data, $x=0, $y=0, $z=0) |
|
|
2377 | |
|
|
2378 | Write the given pixel data at the given coordinate. The pixel data must |
|
|
2379 | be completely contained within a single row. |
|
|
2380 | |
2266 | =back |
2381 | =back |
2267 | |
|
|
2268 | |
2382 | |
2269 | =cut |
2383 | =cut |
2270 | |
2384 | |
2271 | 1; |
2385 | 1; |
2272 | |
2386 | |