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

Comparing OpenCL/OpenCL.pm (file contents):
Revision 1.65 by root, Mon Apr 30 23:35:16 2012 UTC vs.
Revision 1.71 by root, Fri May 4 14:29:35 2012 UTC

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";
305 glXSwapBuffers; 306 glXSwapBuffers;
306 307
307 select undef, undef, undef, 1/60; 308 select undef, undef, undef, 1/60;
308 } 309 }
309 310
310=item How to modify the previous example to not rely on GL sharing. 311=head2 How to modify the previous example to not rely on GL sharing.
311 312
312For those poor souls with only a sucky CPU OpenCL implementation, you 313For those poor souls with only a sucky CPU OpenCL implementation, you
313currently have to read the image into some perl scalar, and then modify a 314currently have to read the image into some perl scalar, and then modify a
314texture or use glDrawPixels or so). 315texture or use glDrawPixels or so).
315 316
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
529use Async::Interrupt (); 547use Async::Interrupt ();
530 548
531our $POLL_FUNC; # set by XS 549our $POLL_FUNC; # set by XS
532 550
533BEGIN { 551BEGIN {
534 our $VERSION = '0.98'; 552 our $VERSION = '0.99';
535 553
536 require XSLoader; 554 require XSLoader;
537 XSLoader::load (__PACKAGE__, $VERSION); 555 XSLoader::load (__PACKAGE__, $VERSION);
538 556
539 @OpenCL::Platform::ISA = 557 @OpenCL::Platform::ISA =
544 @OpenCL::Sampler::ISA = 562 @OpenCL::Sampler::ISA =
545 @OpenCL::Program::ISA = 563 @OpenCL::Program::ISA =
546 @OpenCL::Kernel::ISA = 564 @OpenCL::Kernel::ISA =
547 @OpenCL::Event::ISA = OpenCL::Object::; 565 @OpenCL::Event::ISA = OpenCL::Object::;
548 566
567 @OpenCL::SubDevice::ISA = OpenCL::Device::;
568
549 @OpenCL::Buffer::ISA = 569 @OpenCL::Buffer::ISA =
550 @OpenCL::Image::ISA = OpenCL::Memory::; 570 @OpenCL::Image::ISA = OpenCL::Memory::;
551 571
552 @OpenCL::BufferObj::ISA = OpenCL::Buffer::; 572 @OpenCL::BufferObj::ISA = OpenCL::Buffer::;
553 573
557 @OpenCL::Image1D::ISA = 577 @OpenCL::Image1D::ISA =
558 @OpenCL::Image1DArray::ISA = 578 @OpenCL::Image1DArray::ISA =
559 @OpenCL::Image1DBuffer::ISA = OpenCL::Image::; 579 @OpenCL::Image1DBuffer::ISA = OpenCL::Image::;
560 580
561 @OpenCL::UserEvent::ISA = OpenCL::Event::; 581 @OpenCL::UserEvent::ISA = OpenCL::Event::;
582
583 @OpenCL::MappedBuffer::ISA =
584 @OpenCL::MappedImage::ISA = OpenCL::Mapped::;
562} 585}
563 586
564=head2 THE OpenCL PACKAGE 587=head2 THE OpenCL PACKAGE
565 588
566=over 4 589=over 4
591 614
592=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr 615=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr
593 616
594Tries to create a context from a default device and platform type - never worked for me. 617Tries to create a context from a default device and platform type - never worked for me.
595 618
619type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU,
620OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL.
621
596L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> 622L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
597 623
598=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) 624=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr)
599 625
600Create a new OpenCL::Context object using the given device object(s). This 626Create a new OpenCL::Context object using the given device object(s). This
713 739
714=for gengetinfo begin platform 740=for gengetinfo begin platform
715 741
716=item $string = $platform->profile 742=item $string = $platform->profile
717 743
718Calls C<clGetPlatformInfo> with C<CL_PLATFORM_PROFILE> and returns the result. 744Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_PROFILE> and returns the result.
719 745
720=item $string = $platform->version 746=item $string = $platform->version
721 747
722Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VERSION> and returns the result. 748Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_VERSION> and returns the result.
723 749
724=item $string = $platform->name 750=item $string = $platform->name
725 751
726Calls C<clGetPlatformInfo> with C<CL_PLATFORM_NAME> and returns the result. 752Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_NAME> and returns the result.
727 753
728=item $string = $platform->vendor 754=item $string = $platform->vendor
729 755
730Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VENDOR> and returns the result. 756Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_VENDOR> and returns the result.
731 757
732=item $string = $platform->extensions 758=item $string = $platform->extensions
733 759
734Calls C<clGetPlatformInfo> with C<CL_PLATFORM_EXTENSIONS> and returns the result. 760Calls C<clGetPlatformInfo> with C<OpenCL::PLATFORM_EXTENSIONS> and returns the result.
735 761
736=for gengetinfo end platform 762=for gengetinfo end platform
737 763
738=back 764=back
739 765
745 771
746See C<< $platform->info >> for details. 772See C<< $platform->info >> for details.
747 773
748L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> 774L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html>
749 775
776=item @devices = $device->sub_devices (\@properties)
777
778Creates OpencL::SubDevice objects by partitioning an existing device.
779
780L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubDevices.html>
781
750=for gengetinfo begin device 782=for gengetinfo begin device
751 783
752=item $device_type = $device->type 784=item $device_type = $device->type
753 785
754Calls C<clGetDeviceInfo> with C<CL_DEVICE_TYPE> and returns the result. 786Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_TYPE> and returns the result.
755 787
756=item $uint = $device->vendor_id 788=item $uint = $device->vendor_id
757 789
758Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR_ID> and returns the result. 790Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_VENDOR_ID> and returns the result.
759 791
760=item $uint = $device->max_compute_units 792=item $uint = $device->max_compute_units
761 793
762Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_COMPUTE_UNITS> and returns the result. 794Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_COMPUTE_UNITS> and returns the result.
763 795
764=item $uint = $device->max_work_item_dimensions 796=item $uint = $device->max_work_item_dimensions
765 797
766Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS> and returns the result. 798Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WORK_ITEM_DIMENSIONS> and returns the result.
767 799
768=item $int = $device->max_work_group_size 800=item $int = $device->max_work_group_size
769 801
770Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_GROUP_SIZE> and returns the result. 802Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WORK_GROUP_SIZE> and returns the result.
771 803
772=item @ints = $device->max_work_item_sizes 804=item @ints = $device->max_work_item_sizes
773 805
774Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_SIZES> and returns the result. 806Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WORK_ITEM_SIZES> and returns the result.
775 807
776=item $uint = $device->preferred_vector_width_char 808=item $uint = $device->preferred_vector_width_char
777 809
778Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR> and returns the result. 810Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_CHAR> and returns the result.
779 811
780=item $uint = $device->preferred_vector_width_short 812=item $uint = $device->preferred_vector_width_short
781 813
782Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT> and returns the result. 814Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_SHORT> and returns the result.
783 815
784=item $uint = $device->preferred_vector_width_int 816=item $uint = $device->preferred_vector_width_int
785 817
786Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT> and returns the result. 818Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_INT> and returns the result.
787 819
788=item $uint = $device->preferred_vector_width_long 820=item $uint = $device->preferred_vector_width_long
789 821
790Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG> and returns the result. 822Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_LONG> and returns the result.
791 823
792=item $uint = $device->preferred_vector_width_float 824=item $uint = $device->preferred_vector_width_float
793 825
794Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT> and returns the result. 826Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT> and returns the result.
795 827
796=item $uint = $device->preferred_vector_width_double 828=item $uint = $device->preferred_vector_width_double
797 829
798Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE> and returns the result. 830Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE> and returns the result.
799 831
800=item $uint = $device->max_clock_frequency 832=item $uint = $device->max_clock_frequency
801 833
802Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CLOCK_FREQUENCY> and returns the result. 834Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_CLOCK_FREQUENCY> and returns the result.
803 835
804=item $bitfield = $device->address_bits 836=item $bitfield = $device->address_bits
805 837
806Calls C<clGetDeviceInfo> with C<CL_DEVICE_ADDRESS_BITS> and returns the result. 838Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_ADDRESS_BITS> and returns the result.
807 839
808=item $uint = $device->max_read_image_args 840=item $uint = $device->max_read_image_args
809 841
810Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_READ_IMAGE_ARGS> and returns the result. 842Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_READ_IMAGE_ARGS> and returns the result.
811 843
812=item $uint = $device->max_write_image_args 844=item $uint = $device->max_write_image_args
813 845
814Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WRITE_IMAGE_ARGS> and returns the result. 846Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_WRITE_IMAGE_ARGS> and returns the result.
815 847
816=item $ulong = $device->max_mem_alloc_size 848=item $ulong = $device->max_mem_alloc_size
817 849
818Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_MEM_ALLOC_SIZE> and returns the result. 850Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_MEM_ALLOC_SIZE> and returns the result.
819 851
820=item $int = $device->image2d_max_width 852=item $int = $device->image2d_max_width
821 853
822Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_WIDTH> and returns the result. 854Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE2D_MAX_WIDTH> and returns the result.
823 855
824=item $int = $device->image2d_max_height 856=item $int = $device->image2d_max_height
825 857
826Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_HEIGHT> and returns the result. 858Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE2D_MAX_HEIGHT> and returns the result.
827 859
828=item $int = $device->image3d_max_width 860=item $int = $device->image3d_max_width
829 861
830Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_WIDTH> and returns the result. 862Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE3D_MAX_WIDTH> and returns the result.
831 863
832=item $int = $device->image3d_max_height 864=item $int = $device->image3d_max_height
833 865
834Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_HEIGHT> and returns the result. 866Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE3D_MAX_HEIGHT> and returns the result.
835 867
836=item $int = $device->image3d_max_depth 868=item $int = $device->image3d_max_depth
837 869
838Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_DEPTH> and returns the result. 870Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE3D_MAX_DEPTH> and returns the result.
839 871
840=item $uint = $device->image_support 872=item $uint = $device->image_support
841 873
842Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE_SUPPORT> and returns the result. 874Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_IMAGE_SUPPORT> and returns the result.
843 875
844=item $int = $device->max_parameter_size 876=item $int = $device->max_parameter_size
845 877
846Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_PARAMETER_SIZE> and returns the result. 878Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_PARAMETER_SIZE> and returns the result.
847 879
848=item $uint = $device->max_samplers 880=item $uint = $device->max_samplers
849 881
850Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_SAMPLERS> and returns the result. 882Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_SAMPLERS> and returns the result.
851 883
852=item $uint = $device->mem_base_addr_align 884=item $uint = $device->mem_base_addr_align
853 885
854Calls C<clGetDeviceInfo> with C<CL_DEVICE_MEM_BASE_ADDR_ALIGN> and returns the result. 886Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MEM_BASE_ADDR_ALIGN> and returns the result.
855 887
856=item $uint = $device->min_data_type_align_size 888=item $uint = $device->min_data_type_align_size
857 889
858Calls C<clGetDeviceInfo> with C<CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE> and returns the result. 890Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MIN_DATA_TYPE_ALIGN_SIZE> and returns the result.
859 891
860=item $device_fp_config = $device->single_fp_config 892=item $device_fp_config = $device->single_fp_config
861 893
862Calls C<clGetDeviceInfo> with C<CL_DEVICE_SINGLE_FP_CONFIG> and returns the result. 894Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_SINGLE_FP_CONFIG> and returns the result.
863 895
864=item $device_mem_cache_type = $device->global_mem_cache_type 896=item $device_mem_cache_type = $device->global_mem_cache_type
865 897
866Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_TYPE> and returns the result. 898Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_CACHE_TYPE> and returns the result.
867 899
868=item $uint = $device->global_mem_cacheline_size 900=item $uint = $device->global_mem_cacheline_size
869 901
870Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE> and returns the result. 902Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_CACHELINE_SIZE> and returns the result.
871 903
872=item $ulong = $device->global_mem_cache_size 904=item $ulong = $device->global_mem_cache_size
873 905
874Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_SIZE> and returns the result. 906Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_CACHE_SIZE> and returns the result.
875 907
876=item $ulong = $device->global_mem_size 908=item $ulong = $device->global_mem_size
877 909
878Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_SIZE> and returns the result. 910Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_GLOBAL_MEM_SIZE> and returns the result.
879 911
880=item $ulong = $device->max_constant_buffer_size 912=item $ulong = $device->max_constant_buffer_size
881 913
882Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE> and returns the result. 914Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_CONSTANT_BUFFER_SIZE> and returns the result.
883 915
884=item $uint = $device->max_constant_args 916=item $uint = $device->max_constant_args
885 917
886Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_ARGS> and returns the result. 918Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_MAX_CONSTANT_ARGS> and returns the result.
887 919
888=item $device_local_mem_type = $device->local_mem_type 920=item $device_local_mem_type = $device->local_mem_type
889 921
890Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_TYPE> and returns the result. 922Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_LOCAL_MEM_TYPE> and returns the result.
891 923
892=item $ulong = $device->local_mem_size 924=item $ulong = $device->local_mem_size
893 925
894Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_SIZE> and returns the result. 926Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_LOCAL_MEM_SIZE> and returns the result.
895 927
896=item $boolean = $device->error_correction_support 928=item $boolean = $device->error_correction_support
897 929
898Calls C<clGetDeviceInfo> with C<CL_DEVICE_ERROR_CORRECTION_SUPPORT> and returns the result. 930Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_ERROR_CORRECTION_SUPPORT> and returns the result.
899 931
900=item $int = $device->profiling_timer_resolution 932=item $int = $device->profiling_timer_resolution
901 933
902Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILING_TIMER_RESOLUTION> and returns the result. 934Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PROFILING_TIMER_RESOLUTION> and returns the result.
903 935
904=item $boolean = $device->endian_little 936=item $boolean = $device->endian_little
905 937
906Calls C<clGetDeviceInfo> with C<CL_DEVICE_ENDIAN_LITTLE> and returns the result. 938Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_ENDIAN_LITTLE> and returns the result.
907 939
908=item $boolean = $device->available 940=item $boolean = $device->available
909 941
910Calls C<clGetDeviceInfo> with C<CL_DEVICE_AVAILABLE> and returns the result. 942Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_AVAILABLE> and returns the result.
911 943
912=item $boolean = $device->compiler_available 944=item $boolean = $device->compiler_available
913 945
914Calls C<clGetDeviceInfo> with C<CL_DEVICE_COMPILER_AVAILABLE> and returns the result. 946Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_COMPILER_AVAILABLE> and returns the result.
915 947
916=item $device_exec_capabilities = $device->execution_capabilities 948=item $device_exec_capabilities = $device->execution_capabilities
917 949
918Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXECUTION_CAPABILITIES> and returns the result. 950Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_EXECUTION_CAPABILITIES> and returns the result.
919 951
920=item $command_queue_properties = $device->properties 952=item $command_queue_properties = $device->properties
921 953
922Calls C<clGetDeviceInfo> with C<CL_DEVICE_QUEUE_PROPERTIES> and returns the result. 954Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_QUEUE_PROPERTIES> and returns the result.
923 955
924=item $ = $device->platform 956=item $ = $device->platform
925 957
926Calls C<clGetDeviceInfo> with C<CL_DEVICE_PLATFORM> and returns the result. 958Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PLATFORM> and returns the result.
927 959
928=item $string = $device->name 960=item $string = $device->name
929 961
930Calls C<clGetDeviceInfo> with C<CL_DEVICE_NAME> and returns the result. 962Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NAME> and returns the result.
931 963
932=item $string = $device->vendor 964=item $string = $device->vendor
933 965
934Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR> and returns the result. 966Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_VENDOR> and returns the result.
935 967
936=item $string = $device->driver_version 968=item $string = $device->driver_version
937 969
938Calls C<clGetDeviceInfo> with C<CL_DRIVER_VERSION> and returns the result. 970Calls C<clGetDeviceInfo> with C<OpenCL::DRIVER_VERSION> and returns the result.
939 971
940=item $string = $device->profile 972=item $string = $device->profile
941 973
942Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILE> and returns the result. 974Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PROFILE> and returns the result.
943 975
944=item $string = $device->version 976=item $string = $device->version
945 977
946Calls C<clGetDeviceInfo> with C<CL_DEVICE_VERSION> and returns the result. 978Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_VERSION> and returns the result.
947 979
948=item $string = $device->extensions 980=item $string = $device->extensions
949 981
950Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXTENSIONS> and returns the result. 982Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_EXTENSIONS> and returns the result.
951 983
952=item $uint = $device->preferred_vector_width_half 984=item $uint = $device->preferred_vector_width_half
953 985
954Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF> and returns the result. 986Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PREFERRED_VECTOR_WIDTH_HALF> and returns the result.
955 987
956=item $uint = $device->native_vector_width_char 988=item $uint = $device->native_vector_width_char
957 989
958Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR> and returns the result. 990Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_CHAR> and returns the result.
959 991
960=item $uint = $device->native_vector_width_short 992=item $uint = $device->native_vector_width_short
961 993
962Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT> and returns the result. 994Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_SHORT> and returns the result.
963 995
964=item $uint = $device->native_vector_width_int 996=item $uint = $device->native_vector_width_int
965 997
966Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_INT> and returns the result. 998Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_INT> and returns the result.
967 999
968=item $uint = $device->native_vector_width_long 1000=item $uint = $device->native_vector_width_long
969 1001
970Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG> and returns the result. 1002Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_LONG> and returns the result.
971 1003
972=item $uint = $device->native_vector_width_float 1004=item $uint = $device->native_vector_width_float
973 1005
974Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT> and returns the result. 1006Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_FLOAT> and returns the result.
975 1007
976=item $uint = $device->native_vector_width_double 1008=item $uint = $device->native_vector_width_double
977 1009
978Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE> and returns the result. 1010Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE> and returns the result.
979 1011
980=item $uint = $device->native_vector_width_half 1012=item $uint = $device->native_vector_width_half
981 1013
982Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF> and returns the result. 1014Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_NATIVE_VECTOR_WIDTH_HALF> and returns the result.
983 1015
984=item $device_fp_config = $device->double_fp_config 1016=item $device_fp_config = $device->double_fp_config
985 1017
986Calls C<clGetDeviceInfo> with C<CL_DEVICE_DOUBLE_FP_CONFIG> and returns the result. 1018Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_DOUBLE_FP_CONFIG> and returns the result.
987 1019
988=item $device_fp_config = $device->half_fp_config 1020=item $device_fp_config = $device->half_fp_config
989 1021
990Calls C<clGetDeviceInfo> with C<CL_DEVICE_HALF_FP_CONFIG> and returns the result. 1022Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_HALF_FP_CONFIG> and returns the result.
991 1023
992=item $boolean = $device->host_unified_memory 1024=item $boolean = $device->host_unified_memory
993 1025
994Calls C<clGetDeviceInfo> with C<CL_DEVICE_HOST_UNIFIED_MEMORY> and returns the result. 1026Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_HOST_UNIFIED_MEMORY> and returns the result.
995 1027
996=item $device = $device->parent_device_ext 1028=item $device = $device->parent_device_ext
997 1029
998Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARENT_DEVICE_EXT> and returns the result. 1030Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PARENT_DEVICE_EXT> and returns the result.
999 1031
1000=item @device_partition_property_exts = $device->partition_types_ext 1032=item @device_partition_property_exts = $device->partition_types_ext
1001 1033
1002Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_TYPES_EXT> and returns the result. 1034Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PARTITION_TYPES_EXT> and returns the result.
1003 1035
1004=item @device_partition_property_exts = $device->affinity_domains_ext 1036=item @device_partition_property_exts = $device->affinity_domains_ext
1005 1037
1006Calls C<clGetDeviceInfo> with C<CL_DEVICE_AFFINITY_DOMAINS_EXT> and returns the result. 1038Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_AFFINITY_DOMAINS_EXT> and returns the result.
1007 1039
1008=item $uint = $device->reference_count_ext 1040=item $uint = $device->reference_count_ext
1009 1041
1010Calls C<clGetDeviceInfo> with C<CL_DEVICE_REFERENCE_COUNT_EXT> and returns the result. 1042Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_REFERENCE_COUNT_EXT> and returns the result.
1011 1043
1012=item @device_partition_property_exts = $device->partition_style_ext 1044=item @device_partition_property_exts = $device->partition_style_ext
1013 1045
1014Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_STYLE_EXT> and returns the result. 1046Calls C<clGetDeviceInfo> with C<OpenCL::DEVICE_PARTITION_STYLE_EXT> and returns the result.
1015 1047
1016=for gengetinfo end device 1048=for gengetinfo end device
1017 1049
1018=back 1050=back
1019 1051
1020=head2 THE OpenCL::Context CLASS 1052=head2 THE OpenCL::Context CLASS
1053
1054An OpenCL::Context is basically a container, or manager, for a number of
1055devices of a platform. It is used to create all sorts of secondary objects
1056such as buffers, queues, programs and so on.
1057
1058All context creation functions and methods take a list of properties
1059(type-value pairs). All property values can be specified as integers -
1060some additionally support other types:
1061
1062=over 4
1063
1064=item OpenCL::CONTEXT_PLATFORM
1065
1066Also accepts OpenCL::Platform objects.
1067
1068=item OpenCL::GLX_DISPLAY_KHR
1069
1070Also accepts C<undef>, in which case a deep and troubling hack is engaged
1071to find the current glx display (see L<GLX SUPPORT>).
1072
1073=item OpenCL::GL_CONTEXT_KHR
1074
1075Also accepts C<undef>, in which case a deep and troubling hack is engaged
1076to find the current glx context (see L<GLX SUPPORT>).
1077
1078=back
1021 1079
1022=over 4 1080=over 4
1023 1081
1024=item $prog = $ctx->build_program ($program, $options = "") 1082=item $prog = $ctx->build_program ($program, $options = "")
1025 1083
1073=item $buf = $ctx->buffer ($flags, $len) 1131=item $buf = $ctx->buffer ($flags, $len)
1074 1132
1075Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object with the 1133Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object with the
1076given flags and octet-size. 1134given flags and octet-size.
1077 1135
1136flags: OpenCL::MEM_READ_WRITE, OpenCL::MEM_WRITE_ONLY, OpenCL::MEM_READ_ONLY,
1137OpenCL::MEM_USE_HOST_PTR, OpenCL::MEM_ALLOC_HOST_PTR, OpenCL::MEM_COPY_HOST_PTR,
1138OpenCL::MEM_HOST_WRITE_ONLY, OpenCL::MEM_HOST_READ_ONLY, OpenCL::MEM_HOST_NO_ACCESS.
1139
1078L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateBuffer.html> 1140L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateBuffer.html>
1079 1141
1080=item $buf = $ctx->buffer_sv ($flags, $data) 1142=item $buf = $ctx->buffer_sv ($flags, $data)
1081 1143
1082Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object and 1144Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object and
1085=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) 1147=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)
1086 1148
1087Creates a new OpenCL::Image object and optionally initialises it with 1149Creates a new OpenCL::Image object and optionally initialises it with
1088the given data values. 1150the given data values.
1089 1151
1152channel_order: OpenCL::R, OpenCL::A, OpenCL::RG, OpenCL::RA, OpenCL::RGB,
1153OpenCL::RGBA, OpenCL::BGRA, OpenCL::ARGB, OpenCL::INTENSITY, OpenCL::LUMINANCE,
1154OpenCL::Rx, OpenCL::RGx, OpenCL::RGBx.
1155
1156channel_type: OpenCL::SNORM_INT8, OpenCL::SNORM_INT16, OpenCL::UNORM_INT8,
1157OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555,
1158OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16,
1159OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16,
1160OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT.
1161
1162
1163type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D,
1164OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY,
1165OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY,
1166OpenCL::MEM_OBJECT_IMAGE1D_BUFFER.
1167
1090L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateImage.html> 1168L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateImage.html>
1091 1169
1092=item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef) 1170=item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef)
1093 1171
1094Creates a new OpenCL::Image2D object and optionally initialises it with 1172Creates a new OpenCL::Image2D object and optionally initialises it with
1106=item $buffer = $ctx->gl_buffer ($flags, $bufobj) 1184=item $buffer = $ctx->gl_buffer ($flags, $bufobj)
1107 1185
1108Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object that refers to the given 1186Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object that refers to the given
1109OpenGL buffer object. 1187OpenGL buffer object.
1110 1188
1189flags: OpenCL::MEM_READ_WRITE, OpenCL::MEM_READ_ONLY, OpenCL::MEM_WRITE_ONLY.
1190
1111http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLBuffer.html 1191http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLBuffer.html
1112 1192
1113=item $img = $ctx->gl_texture ($flags, $target, $miplevel, $texture) 1193=item $img = $ctx->gl_texture ($flags, $target, $miplevel, $texture)
1114 1194
1115Creates a new OpenCL::Image object that refers to the given OpenGL 1195Creates a new OpenCL::Image object that refers to the given OpenGL
1116texture object or buffer. 1196texture object or buffer.
1117 1197
1198target: GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_BUFFER,
1199GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D,
1200GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
1201GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
1202GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
1203GL_TEXTURE_RECTANGLE/GL_TEXTURE_RECTANGLE_ARB.
1204
1118http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLTexture.html 1205http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLTexture.html
1119 1206
1120=item $img = $ctx->gl_texture2d ($flags, $target, $miplevel, $texture) 1207=item $img = $ctx->gl_texture2d ($flags, $target, $miplevel, $texture)
1121 1208
1122Creates a new OpenCL::Image2D object that refers to the given OpenGL 1209Creates a new OpenCL::Image2D object that refers to the given OpenGL
1147 1234
1148=item $sampler = $ctx->sampler ($normalized_coords, $addressing_mode, $filter_mode) 1235=item $sampler = $ctx->sampler ($normalized_coords, $addressing_mode, $filter_mode)
1149 1236
1150Creates a new OpenCL::Sampler object. 1237Creates a new OpenCL::Sampler object.
1151 1238
1239addressing_mode: OpenCL::ADDRESS_NONE, OpenCL::ADDRESS_CLAMP_TO_EDGE,
1240OpenCL::ADDRESS_CLAMP, OpenCL::ADDRESS_REPEAT, OpenCL::ADDRESS_MIRRORED_REPEAT.
1241
1242filter_mode: OpenCL::FILTER_NEAREST, OpenCL::FILTER_LINEAR.
1243
1152L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSampler.html> 1244L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSampler.html>
1153 1245
1154=item $program = $ctx->program_with_source ($string) 1246=item $program = $ctx->program_with_source ($string)
1155 1247
1156Creates a new OpenCL::Program object from the given source code. 1248Creates a new OpenCL::Program object from the given source code.
1157 1249
1158L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateProgramWithSource.html> 1250L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateProgramWithSource.html>
1159 1251
1252=item ($program, \@status) = $ctx->program_with_binary (\@devices, \@binaries)
1253
1254Creates a new OpenCL::Program object from the given binaries.
1255
1256L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateProgramWithBinary.html>
1257
1258Example: clone an existing program object that contains a successfully
1259compiled program, no matter how useless this is.
1260
1261 my $clone = $ctx->program_with_binary ([$prog->devices], [$prog->binaries]);
1262
1263=item $program = $ctx->program_with_built_in_kernels (\@devices, $kernel_names)
1264
1265Creates a new OpenCL::Program object from the given built-in kernel names.
1266
1267L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html>
1268
1160=item $packed_value = $ctx->info ($name) 1269=item $packed_value = $ctx->info ($name)
1161 1270
1162See C<< $platform->info >> for details. 1271See C<< $platform->info >> for details.
1163 1272
1164L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html> 1273L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html>
1165 1274
1166=for gengetinfo begin context 1275=for gengetinfo begin context
1167 1276
1168=item $uint = $context->reference_count 1277=item $uint = $context->reference_count
1169 1278
1170Calls C<clGetContextInfo> with C<CL_CONTEXT_REFERENCE_COUNT> and returns the result. 1279Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_REFERENCE_COUNT> and returns the result.
1171 1280
1172=item @devices = $context->devices 1281=item @devices = $context->devices
1173 1282
1174Calls C<clGetContextInfo> with C<CL_CONTEXT_DEVICES> and returns the result. 1283Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_DEVICES> and returns the result.
1175 1284
1176=item @property_ints = $context->properties 1285=item @property_ints = $context->properties
1177 1286
1178Calls C<clGetContextInfo> with C<CL_CONTEXT_PROPERTIES> and returns the result. 1287Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_PROPERTIES> and returns the result.
1179 1288
1180=item $uint = $context->num_devices 1289=item $uint = $context->num_devices
1181 1290
1182Calls C<clGetContextInfo> with C<CL_CONTEXT_NUM_DEVICES> and returns the result. 1291Calls C<clGetContextInfo> with C<OpenCL::CONTEXT_NUM_DEVICES> and returns the result.
1183 1292
1184=for gengetinfo end context 1293=for gengetinfo end context
1185 1294
1186=back 1295=back
1187 1296
1303reference to an array of local work sizes, with the same number of 1412reference to an array of local work sizes, with the same number of
1304elements as \@global_work_size. 1413elements as \@global_work_size.
1305 1414
1306L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html> 1415L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html>
1307 1416
1417=item $ev = $queue->migrate_mem_objects (\@mem_objects, $flags, $wait_events...)
1418
1419Migrates a number of OpenCL::Memory objects to or from the device.
1420
1421flags: OpenCL::MIGRATE_MEM_OBJECT_HOST, OpenCL::MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED
1422
1423L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueMigrateMemObjects.html>
1424
1308=item $ev = $queue->acquire_gl_objects ([object, ...], $wait_events...) 1425=item $ev = $queue->acquire_gl_objects ([object, ...], $wait_events...)
1309 1426
1310Enqueues a list (an array-ref of OpenCL::Memory objects) to be acquired 1427Enqueues a list (an array-ref of OpenCL::Memory objects) to be acquired
1311for subsequent OpenCL usage. 1428for subsequent OpenCL usage.
1312 1429
1347 1464
1348=for gengetinfo begin command_queue 1465=for gengetinfo begin command_queue
1349 1466
1350=item $ctx = $command_queue->context 1467=item $ctx = $command_queue->context
1351 1468
1352Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_CONTEXT> and returns the result. 1469Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_CONTEXT> and returns the result.
1353 1470
1354=item $device = $command_queue->device 1471=item $device = $command_queue->device
1355 1472
1356Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_DEVICE> and returns the result. 1473Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_DEVICE> and returns the result.
1357 1474
1358=item $uint = $command_queue->reference_count 1475=item $uint = $command_queue->reference_count
1359 1476
1360Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_REFERENCE_COUNT> and returns the result. 1477Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_REFERENCE_COUNT> and returns the result.
1361 1478
1362=item $command_queue_properties = $command_queue->properties 1479=item $command_queue_properties = $command_queue->properties
1363 1480
1364Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_PROPERTIES> and returns the result. 1481Calls C<clGetCommandQueueInfo> with C<OpenCL::QUEUE_PROPERTIES> and returns the result.
1365 1482
1366=for gengetinfo end command_queue 1483=for gengetinfo end command_queue
1484
1485=back
1486
1487=head3 MEMORY MAPPED BUFFERS
1488
1489OpenCL allows you to map buffers and images to host memory (read: perl
1490scalars). This is done much like reading or copying a buffer, by enqueuing
1491a map or unmap operation on the command queue.
1492
1493The map operations return an C<OpenCL::Mapped> object - see L<THE
1494OpenCL::Mapped CLASS> section for details on what to do with these
1495objects.
1496
1497The object will be unmapped automatically when the mapped object is
1498destroyed (you can use a barrier to make sure the unmap has finished,
1499before using the buffer in a kernel), but you can also enqueue an unmap
1500operation manually.
1501
1502=over 4
1503
1504=item $mapped_buffer = $queue->map_buffer ($buf, $blocking=1, $map_flags=OpenCL::MAP_READ|OpenCL::MAP_WRITE, $offset=0, $size=undef, $wait_events...)
1505
1506Maps the given buffer into host memory and returns an
1507C<OpenCL::MappedBuffer> object. If C<$size> is specified as undef, then
1508the map will extend to the end of the buffer.
1509
1510map_flags: OpenCL::MAP_READ, OpenCL::MAP_WRITE, OpenCL::MAP_WRITE_INVALIDATE_REGION.
1511
1512L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMapBuffer.html>
1513
1514Example: map the buffer $buf fully and replace the first 4 bytes by "abcd", then unmap.
1515
1516 {
1517 my $mapped = $queue->map_buffer ($buf, 1, OpenCL::MAP_WRITE);
1518 substr $$mapped, 0, 4, "abcd";
1519 } # asynchronously unmap because $mapped is destroyed
1520
1521=item $mapped_image = $queue->map_image ($img, $blocking=1, $map_flags=OpenCL::MAP_READ|OpenCL::MAP_WRITE, $x=0, $y=0, $z=0, $width=undef, $height=undef, $depth=undef, $wait_events...)
1522
1523Maps the given image area into host memory and return an
1524C<OpenCL::MappedImage> object.
1525
1526If any of C<$width>, C<$height> and/or C<$depth> are C<undef> then they
1527will be replaced by the maximum possible value.
1528
1529L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMapImage.html>
1530
1531Example: map an image (with OpenCL::UNSIGNED_INT8 channel type) and set
1532the first channel of the leftmost column to 5, then explicitly unmap
1533it. You are not necessarily meant to do it this way, this example just
1534shows you the accessors to use :)
1535
1536 my $mapped = $queue->map_image ($image, 1, OpenCL::MAP_WRITE);
1537
1538 $mapped->set ($_ * $mapped->row_pitch, pack "C", 5)
1539 for 0..$image->height;
1540
1541 $mapped->unmap;.
1542 $mapped->wait; # only needed for out of order queues normally
1543
1544=item $ev = $queue->unmap ($mapped, $wait_events...)
1545
1546Unmaps the data from host memory. You must not call any methods that
1547modify the data, or modify the data scalar directly, after calling this
1548method.
1549
1550The mapped event object will always be passed as part of the
1551$wait_events. The mapped event object will be replaced by the new event
1552object that this request creates.
1367 1553
1368=back 1554=back
1369 1555
1370=head2 THE OpenCL::Memory CLASS 1556=head2 THE OpenCL::Memory CLASS
1371 1557
1382 1568
1383=for gengetinfo begin mem 1569=for gengetinfo begin mem
1384 1570
1385=item $mem_object_type = $mem->type 1571=item $mem_object_type = $mem->type
1386 1572
1387Calls C<clGetMemObjectInfo> with C<CL_MEM_TYPE> and returns the result. 1573Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_TYPE> and returns the result.
1388 1574
1389=item $mem_flags = $mem->flags 1575=item $mem_flags = $mem->flags
1390 1576
1391Calls C<clGetMemObjectInfo> with C<CL_MEM_FLAGS> and returns the result. 1577Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_FLAGS> and returns the result.
1392 1578
1393=item $int = $mem->size 1579=item $int = $mem->size
1394 1580
1395Calls C<clGetMemObjectInfo> with C<CL_MEM_SIZE> and returns the result. 1581Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_SIZE> and returns the result.
1396 1582
1397=item $ptr_value = $mem->host_ptr 1583=item $ptr_value = $mem->host_ptr
1398 1584
1399Calls C<clGetMemObjectInfo> with C<CL_MEM_HOST_PTR> and returns the result. 1585Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_HOST_PTR> and returns the result.
1400 1586
1401=item $uint = $mem->map_count 1587=item $uint = $mem->map_count
1402 1588
1403Calls C<clGetMemObjectInfo> with C<CL_MEM_MAP_COUNT> and returns the result. 1589Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_MAP_COUNT> and returns the result.
1404 1590
1405=item $uint = $mem->reference_count 1591=item $uint = $mem->reference_count
1406 1592
1407Calls C<clGetMemObjectInfo> with C<CL_MEM_REFERENCE_COUNT> and returns the result. 1593Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_REFERENCE_COUNT> and returns the result.
1408 1594
1409=item $ctx = $mem->context 1595=item $ctx = $mem->context
1410 1596
1411Calls C<clGetMemObjectInfo> with C<CL_MEM_CONTEXT> and returns the result. 1597Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_CONTEXT> and returns the result.
1412 1598
1413=item $mem = $mem->associated_memobject 1599=item $mem = $mem->associated_memobject
1414 1600
1415Calls C<clGetMemObjectInfo> with C<CL_MEM_ASSOCIATED_MEMOBJECT> and returns the result. 1601Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_ASSOCIATED_MEMOBJECT> and returns the result.
1416 1602
1417=item $int = $mem->offset 1603=item $int = $mem->offset
1418 1604
1419Calls C<clGetMemObjectInfo> with C<CL_MEM_OFFSET> and returns the result. 1605Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_OFFSET> and returns the result.
1420 1606
1421=for gengetinfo end mem 1607=for gengetinfo end mem
1422 1608
1423=item ($type, $name) = $mem->gl_object_info 1609=item ($type, $name) = $mem->gl_object_info
1424 1610
1476 1662
1477=for gengetinfo begin image 1663=for gengetinfo begin image
1478 1664
1479=item $int = $image->element_size 1665=item $int = $image->element_size
1480 1666
1481Calls C<clGetImageInfo> with C<CL_IMAGE_ELEMENT_SIZE> and returns the result. 1667Calls C<clGetImageInfo> with C<OpenCL::IMAGE_ELEMENT_SIZE> and returns the result.
1482 1668
1483=item $int = $image->row_pitch 1669=item $int = $image->row_pitch
1484 1670
1485Calls C<clGetImageInfo> with C<CL_IMAGE_ROW_PITCH> and returns the result. 1671Calls C<clGetImageInfo> with C<OpenCL::IMAGE_ROW_PITCH> and returns the result.
1486 1672
1487=item $int = $image->slice_pitch 1673=item $int = $image->slice_pitch
1488 1674
1489Calls C<clGetImageInfo> with C<CL_IMAGE_SLICE_PITCH> and returns the result. 1675Calls C<clGetImageInfo> with C<OpenCL::IMAGE_SLICE_PITCH> and returns the result.
1490 1676
1491=item $int = $image->width 1677=item $int = $image->width
1492 1678
1493Calls C<clGetImageInfo> with C<CL_IMAGE_WIDTH> and returns the result. 1679Calls C<clGetImageInfo> with C<OpenCL::IMAGE_WIDTH> and returns the result.
1494 1680
1495=item $int = $image->height 1681=item $int = $image->height
1496 1682
1497Calls C<clGetImageInfo> with C<CL_IMAGE_HEIGHT> and returns the result. 1683Calls C<clGetImageInfo> with C<OpenCL::IMAGE_HEIGHT> and returns the result.
1498 1684
1499=item $int = $image->depth 1685=item $int = $image->depth
1500 1686
1501Calls C<clGetImageInfo> with C<CL_IMAGE_DEPTH> and returns the result. 1687Calls C<clGetImageInfo> with C<OpenCL::IMAGE_DEPTH> and returns the result.
1502 1688
1503=for gengetinfo end image 1689=for gengetinfo end image
1504 1690
1505=for gengetinfo begin gl_texture 1691=for gengetinfo begin gl_texture
1506 1692
1507=item $GLenum = $gl_texture->target 1693=item $GLenum = $gl_texture->target
1508 1694
1509Calls C<clGetGLTextureInfo> with C<CL_GL_TEXTURE_TARGET> and returns the result. 1695Calls C<clGetGLTextureInfo> with C<OpenCL::GL_TEXTURE_TARGET> and returns the result.
1510 1696
1511=item $GLint = $gl_texture->gl_mipmap_level 1697=item $GLint = $gl_texture->gl_mipmap_level
1512 1698
1513Calls C<clGetGLTextureInfo> with C<CL_GL_MIPMAP_LEVEL> and returns the result. 1699Calls C<clGetGLTextureInfo> with C<OpenCL::GL_MIPMAP_LEVEL> and returns the result.
1514 1700
1515=for gengetinfo end gl_texture 1701=for gengetinfo end gl_texture
1516 1702
1517=back 1703=back
1518 1704
1528 1714
1529=for gengetinfo begin sampler 1715=for gengetinfo begin sampler
1530 1716
1531=item $uint = $sampler->reference_count 1717=item $uint = $sampler->reference_count
1532 1718
1533Calls C<clGetSamplerInfo> with C<CL_SAMPLER_REFERENCE_COUNT> and returns the result. 1719Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_REFERENCE_COUNT> and returns the result.
1534 1720
1535=item $ctx = $sampler->context 1721=item $ctx = $sampler->context
1536 1722
1537Calls C<clGetSamplerInfo> with C<CL_SAMPLER_CONTEXT> and returns the result. 1723Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_CONTEXT> and returns the result.
1538 1724
1539=item $addressing_mode = $sampler->normalized_coords 1725=item $addressing_mode = $sampler->normalized_coords
1540 1726
1541Calls C<clGetSamplerInfo> with C<CL_SAMPLER_NORMALIZED_COORDS> and returns the result. 1727Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_NORMALIZED_COORDS> and returns the result.
1542 1728
1543=item $filter_mode = $sampler->addressing_mode 1729=item $filter_mode = $sampler->addressing_mode
1544 1730
1545Calls C<clGetSamplerInfo> with C<CL_SAMPLER_ADDRESSING_MODE> and returns the result. 1731Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_ADDRESSING_MODE> and returns the result.
1546 1732
1547=item $boolean = $sampler->filter_mode 1733=item $boolean = $sampler->filter_mode
1548 1734
1549Calls C<clGetSamplerInfo> with C<CL_SAMPLER_FILTER_MODE> and returns the result. 1735Calls C<clGetSamplerInfo> with C<OpenCL::SAMPLER_FILTER_MODE> and returns the result.
1550 1736
1551=for gengetinfo end sampler 1737=for gengetinfo end sampler
1552 1738
1553=back 1739=back
1554 1740
1572not so. So best make sure you don't pass in invalid values. 1758not so. So best make sure you don't pass in invalid values.
1573 1759
1574Some implementations fail with C<OpenCL::INVALID_BINARY> when the 1760Some implementations fail with C<OpenCL::INVALID_BINARY> when the
1575compilation state is successful but some later stage fails. 1761compilation state is successful but some later stage fails.
1576 1762
1763options: C<-D name>, C<-D name=definition>, C<-I dir>,
1764C<-cl-single-precision-constant>, C<-cl-denorms-are-zero>,
1765C<-cl-fp32-correctly-rounded-divide-sqrt>, C<-cl-opt-disable>,
1766C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>,
1767C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>,
1768C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>,
1769C<-create-library>, C<-enable-link-options>.
1770
1577L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> 1771L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1578 1772
1579=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) 1773=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef)
1580 1774
1581Similar to C<< ->build >>, except it starts a thread, and never fails (you 1775Similar to C<< ->build >>, except it starts a thread, and never fails (you
1603 1797
1604=for gengetinfo begin program_build 1798=for gengetinfo begin program_build
1605 1799
1606=item $build_status = $program->build_status ($device) 1800=item $build_status = $program->build_status ($device)
1607 1801
1608Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_STATUS> and returns the result. 1802Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_STATUS> and returns the result.
1803
1804build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE,
1805OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS.
1609 1806
1610=item $string = $program->build_options ($device) 1807=item $string = $program->build_options ($device)
1611 1808
1612Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_OPTIONS> and returns the result. 1809Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result.
1613 1810
1614=item $string = $program->build_log ($device) 1811=item $string = $program->build_log ($device)
1615 1812
1616Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_LOG> and returns the result. 1813Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result.
1617 1814
1618=for gengetinfo end program_build 1815=for gengetinfo end program_build
1619 1816
1620=item $packed_value = $program->info ($name) 1817=item $packed_value = $program->info ($name)
1621 1818
1625 1822
1626=for gengetinfo begin program 1823=for gengetinfo begin program
1627 1824
1628=item $uint = $program->reference_count 1825=item $uint = $program->reference_count
1629 1826
1630Calls C<clGetProgramInfo> with C<CL_PROGRAM_REFERENCE_COUNT> and returns the result. 1827Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_REFERENCE_COUNT> and returns the result.
1631 1828
1632=item $ctx = $program->context 1829=item $ctx = $program->context
1633 1830
1634Calls C<clGetProgramInfo> with C<CL_PROGRAM_CONTEXT> and returns the result. 1831Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_CONTEXT> and returns the result.
1635 1832
1636=item $uint = $program->num_devices 1833=item $uint = $program->num_devices
1637 1834
1638Calls C<clGetProgramInfo> with C<CL_PROGRAM_NUM_DEVICES> and returns the result. 1835Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_NUM_DEVICES> and returns the result.
1639 1836
1640=item @devices = $program->devices 1837=item @devices = $program->devices
1641 1838
1642Calls C<clGetProgramInfo> with C<CL_PROGRAM_DEVICES> and returns the result. 1839Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_DEVICES> and returns the result.
1643 1840
1644=item $string = $program->source 1841=item $string = $program->source
1645 1842
1646Calls C<clGetProgramInfo> with C<CL_PROGRAM_SOURCE> and returns the result. 1843Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_SOURCE> and returns the result.
1647 1844
1648=item @ints = $program->binary_sizes 1845=item @ints = $program->binary_sizes
1649 1846
1650Calls C<clGetProgramInfo> with C<CL_PROGRAM_BINARY_SIZES> and returns the result. 1847Calls C<clGetProgramInfo> with C<OpenCL::PROGRAM_BINARY_SIZES> and returns the result.
1651 1848
1652=for gengetinfo end program 1849=for gengetinfo end program
1653 1850
1654=item @blobs = $program->binaries 1851=item @blobs = $program->binaries
1655 1852
1676 1873
1677=for gengetinfo begin kernel 1874=for gengetinfo begin kernel
1678 1875
1679=item $string = $kernel->function_name 1876=item $string = $kernel->function_name
1680 1877
1681Calls C<clGetKernelInfo> with C<CL_KERNEL_FUNCTION_NAME> and returns the result. 1878Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_FUNCTION_NAME> and returns the result.
1682 1879
1683=item $uint = $kernel->num_args 1880=item $uint = $kernel->num_args
1684 1881
1685Calls C<clGetKernelInfo> with C<CL_KERNEL_NUM_ARGS> and returns the result. 1882Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_NUM_ARGS> and returns the result.
1686 1883
1687=item $uint = $kernel->reference_count 1884=item $uint = $kernel->reference_count
1688 1885
1689Calls C<clGetKernelInfo> with C<CL_KERNEL_REFERENCE_COUNT> and returns the result. 1886Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_REFERENCE_COUNT> and returns the result.
1690 1887
1691=item $ctx = $kernel->context 1888=item $ctx = $kernel->context
1692 1889
1693Calls C<clGetKernelInfo> with C<CL_KERNEL_CONTEXT> and returns the result. 1890Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_CONTEXT> and returns the result.
1694 1891
1695=item $program = $kernel->program 1892=item $program = $kernel->program
1696 1893
1697Calls C<clGetKernelInfo> with C<CL_KERNEL_PROGRAM> and returns the result. 1894Calls C<clGetKernelInfo> with C<OpenCL::KERNEL_PROGRAM> and returns the result.
1698 1895
1699=for gengetinfo end kernel 1896=for gengetinfo end kernel
1700 1897
1701=item $packed_value = $kernel->work_group_info ($device, $name) 1898=item $packed_value = $kernel->work_group_info ($device, $name)
1702 1899
1709 1906
1710=for gengetinfo begin kernel_work_group 1907=for gengetinfo begin kernel_work_group
1711 1908
1712=item $int = $kernel->work_group_size ($device) 1909=item $int = $kernel->work_group_size ($device)
1713 1910
1714Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_WORK_GROUP_SIZE> and returns the result. 1911Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_WORK_GROUP_SIZE> and returns the result.
1715 1912
1716=item @ints = $kernel->compile_work_group_size ($device) 1913=item @ints = $kernel->compile_work_group_size ($device)
1717 1914
1718Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_COMPILE_WORK_GROUP_SIZE> and returns the result. 1915Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_COMPILE_WORK_GROUP_SIZE> and returns the result.
1719 1916
1720=item $ulong = $kernel->local_mem_size ($device) 1917=item $ulong = $kernel->local_mem_size ($device)
1721 1918
1722Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_LOCAL_MEM_SIZE> and returns the result. 1919Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_LOCAL_MEM_SIZE> and returns the result.
1723 1920
1724=item $int = $kernel->preferred_work_group_size_multiple ($device) 1921=item $int = $kernel->preferred_work_group_size_multiple ($device)
1725 1922
1726Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE> and returns the result. 1923Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE> and returns the result.
1727 1924
1728=item $ulong = $kernel->private_mem_size ($device) 1925=item $ulong = $kernel->private_mem_size ($device)
1729 1926
1730Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PRIVATE_MEM_SIZE> and returns the result. 1927Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result.
1731 1928
1732=for gengetinfo end kernel_work_group 1929=for gengetinfo end kernel_work_group
1733 1930
1734=item $kernel->setf ($format, ...) 1931=item $kernel->setf ($format, ...)
1735 1932
1849 2046
1850=for gengetinfo begin event 2047=for gengetinfo begin event
1851 2048
1852=item $queue = $event->command_queue 2049=item $queue = $event->command_queue
1853 2050
1854Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_QUEUE> and returns the result. 2051Calls C<clGetEventInfo> with C<OpenCL::EVENT_COMMAND_QUEUE> and returns the result.
1855 2052
1856=item $command_type = $event->command_type 2053=item $command_type = $event->command_type
1857 2054
1858Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_TYPE> and returns the result. 2055Calls C<clGetEventInfo> with C<OpenCL::EVENT_COMMAND_TYPE> and returns the result.
1859 2056
1860=item $uint = $event->reference_count 2057=item $uint = $event->reference_count
1861 2058
1862Calls C<clGetEventInfo> with C<CL_EVENT_REFERENCE_COUNT> and returns the result. 2059Calls C<clGetEventInfo> with C<OpenCL::EVENT_REFERENCE_COUNT> and returns the result.
1863 2060
1864=item $uint = $event->command_execution_status 2061=item $uint = $event->command_execution_status
1865 2062
1866Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_EXECUTION_STATUS> and returns the result. 2063Calls C<clGetEventInfo> with C<OpenCL::EVENT_COMMAND_EXECUTION_STATUS> and returns the result.
1867 2064
1868=item $ctx = $event->context 2065=item $ctx = $event->context
1869 2066
1870Calls C<clGetEventInfo> with C<CL_EVENT_CONTEXT> and returns the result. 2067Calls C<clGetEventInfo> with C<OpenCL::EVENT_CONTEXT> and returns the result.
1871 2068
1872=for gengetinfo end event 2069=for gengetinfo end event
1873 2070
1874=item $packed_value = $ev->profiling_info ($name) 2071=item $packed_value = $ev->profiling_info ($name)
1875 2072
1882 2079
1883=for gengetinfo begin profiling 2080=for gengetinfo begin profiling
1884 2081
1885=item $ulong = $event->profiling_command_queued 2082=item $ulong = $event->profiling_command_queued
1886 2083
1887Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_QUEUED> and returns the result. 2084Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_QUEUED> and returns the result.
1888 2085
1889=item $ulong = $event->profiling_command_submit 2086=item $ulong = $event->profiling_command_submit
1890 2087
1891Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_SUBMIT> and returns the result. 2088Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_SUBMIT> and returns the result.
1892 2089
1893=item $ulong = $event->profiling_command_start 2090=item $ulong = $event->profiling_command_start
1894 2091
1895Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_START> and returns the result. 2092Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_START> and returns the result.
1896 2093
1897=item $ulong = $event->profiling_command_end 2094=item $ulong = $event->profiling_command_end
1898 2095
1899Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_END> and returns the result. 2096Calls C<clGetEventProfilingInfo> with C<OpenCL::PROFILING_COMMAND_END> and returns the result.
1900 2097
1901=for gengetinfo end profiling 2098=for gengetinfo end profiling
1902 2099
1903=back 2100=back
1904 2101
1911=item $ev->set_status ($execution_status) 2108=item $ev->set_status ($execution_status)
1912 2109
1913Sets the execution status of the user event. Can only be called once, 2110Sets the execution status of the user event. Can only be called once,
1914either with OpenCL::COMPLETE or a negative number as status. 2111either with OpenCL::COMPLETE or a negative number as status.
1915 2112
2113execution_status: OpenCL::COMPLETE or a negative integer.
2114
1916L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetUserEventStatus.html> 2115L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetUserEventStatus.html>
1917 2116
1918=back 2117=back
2118
2119=head2 THE OpenCL::Mapped CLASS
2120
2121This class represents objects mapped into host memory. They are
2122represented by a blessed string scalar. The string data is the mapped
2123memory area, that is, if you read or write it, then the mapped object is
2124accessed directly.
2125
2126You must only ever use operations that modify the string in-place - for
2127example, a C<substr> that doesn't change the length, or maybe a regex that
2128doesn't change the length. Any other operation might cause the data to be
2129copied.
2130
2131When the object is destroyed it will enqueue an implicit unmap operation
2132on the queue that was used to create it.
2133
2134Keep in mind that you I<need> to unmap (or destroy) mapped objects before
2135OpenCL sees the changes, even if some implementations don't need this
2136sometimes.
2137
2138Example, replace the first two floats in the mapped buffer by 1 and 2.
2139
2140 my $mapped = $queue->map_buffer ($buf, ...
2141 $mapped->event->wait; # make sure it's there
2142
2143 # now replace first 8 bytes by new data, which is exactly 8 bytes long
2144 # we blindly assume device endianness to equal host endianness
2145 # (and of course, we assume iee 754 single precision floats :)
2146 substr $$mapped, 0, 8, pack "f*", 1, 2;
2147
2148=over 4
2149
2150=item $ev = $mapped->unmap ($wait_events...)
2151
2152Unmaps the mapped memory object, using the queue originally used to create
2153it, quite similarly to C<< $queue->unmap ($mapped, ...) >>.
2154
2155=item $bool = $mapped->mapped
2156
2157Returns whether the object is still mapped - true before an C<unmap> is
2158enqueued, false afterwards.
2159
2160=item $ev = $mapped->event
2161
2162Return the event object associated with the mapped object. Initially, this
2163will be the event object created when mapping the object, and after an
2164unmap, this will be the event object that the unmap operation created.
2165
2166=item $mapped->wait
2167
2168Same as C<< $mapped->event->wait >> - makes sure no operations on this
2169mapped object are outstanding.
2170
2171=item $bytes = $mapped->size
2172
2173Returns the size of the mapped area, in bytes. Same as C<length $$mapped>.
2174
2175=item $ptr = $mapped->ptr
2176
2177Returns the raw memory address of the mapped area.
2178
2179=item $mapped->set ($offset, $data)
2180
2181Replaces the data at the given C<$offset> in the memory area by the new
2182C<$data>. This method is safer than direct manipulation of C<$mapped>
2183because it does bounds-checking, but also slower.
2184
2185=item $data = $mapped->get ($offset, $length)
2186
2187Returns (without copying) a scalar representing the data at the given
2188C<$offset> and C<$length> in the mapped memory area. This is the same as
2189the following substr, except much slower;
2190
2191 $data = substr $$mapped, $offset, $length
2192
2193=cut
2194
2195sub OpenCL::Mapped::get {
2196 substr ${$_[0]}, $_[1], $_[2]
2197}
2198
2199=back
2200
2201=head2 THE OpenCL::MappedBuffer CLASS
2202
2203This is a subclass of OpenCL::Mapped, representing mapped buffers.
2204
2205=head2 THE OpenCL::MappedImage CLASS
2206
2207This is a subclass of OpenCL::Mapped, representing mapped images.
2208
2209=over 4
2210
2211=item $bytes = $mapped->row_pitch
2212
2213=item $bytes = $mapped->slice_pitch
2214
2215Return the row or slice pitch of the image that has been mapped.
2216
2217=back
2218
1919 2219
1920=cut 2220=cut
1921 2221
19221; 22221;
1923 2223

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines