… | |
… | |
8 | typedef cl_device_id OpenCL__Device; |
8 | typedef cl_device_id OpenCL__Device; |
9 | typedef cl_context OpenCL__Context; |
9 | typedef cl_context OpenCL__Context; |
10 | typedef cl_command_queue OpenCL__Queue; |
10 | typedef cl_command_queue OpenCL__Queue; |
11 | typedef cl_mem OpenCL__Memory; |
11 | typedef cl_mem OpenCL__Memory; |
12 | typedef cl_mem OpenCL__Buffer; |
12 | typedef cl_mem OpenCL__Buffer; |
|
|
13 | typedef cl_mem OpenCL__BufferObj; |
13 | typedef cl_mem OpenCL__Image; |
14 | typedef cl_mem OpenCL__Image; |
14 | typedef cl_mem OpenCL__Image2D; |
15 | typedef cl_mem OpenCL__Image2D; |
15 | typedef cl_mem OpenCL__Image3D; |
16 | typedef cl_mem OpenCL__Image3D; |
16 | typedef cl_mem OpenCL__Memory_ornull; |
17 | typedef cl_mem OpenCL__Memory_ornull; |
17 | typedef cl_mem OpenCL__Buffer_ornull; |
18 | typedef cl_mem OpenCL__Buffer_ornull; |
… | |
… | |
560 | PPCODE: |
561 | PPCODE: |
561 | if (flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)) |
562 | if (flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)) |
562 | croak ("clCreateBuffer: cannot use/copy host ptr when no data is given, use $context->buffer_sv instead?"); |
563 | croak ("clCreateBuffer: cannot use/copy host ptr when no data is given, use $context->buffer_sv instead?"); |
563 | |
564 | |
564 | NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (this, flags, len, 0, &res)); |
565 | NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (this, flags, len, 0, &res)); |
565 | XPUSH_NEW_OBJ ("OpenCL::Buffer", mem); |
566 | XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem); |
566 | |
567 | |
567 | void |
568 | void |
568 | buffer_sv (OpenCL::Context this, cl_mem_flags flags, SV *data) |
569 | buffer_sv (OpenCL::Context this, cl_mem_flags flags, SV *data) |
569 | PPCODE: |
570 | PPCODE: |
570 | STRLEN len; |
571 | STRLEN len; |
… | |
… | |
572 | |
573 | |
573 | if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR))) |
574 | if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR))) |
574 | croak ("clCreateBuffer: have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?"); |
575 | croak ("clCreateBuffer: have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?"); |
575 | |
576 | |
576 | NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (this, flags, len, ptr, &res)); |
577 | NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (this, flags, len, ptr, &res)); |
577 | XPUSH_NEW_OBJ ("OpenCL::Buffer", mem); |
578 | XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem); |
578 | |
579 | |
579 | void |
580 | void |
580 | image2d (OpenCL::Context this, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, size_t width, size_t height, size_t row_pitch = 0, SV *data = &PL_sv_undef) |
581 | image2d (OpenCL::Context this, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, size_t width, size_t height, size_t row_pitch = 0, SV *data = &PL_sv_undef) |
581 | PPCODE: |
582 | PPCODE: |
582 | STRLEN len; |
583 | STRLEN len; |
… | |
… | |
785 | |
786 | |
786 | if (ev) |
787 | if (ev) |
787 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
788 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
788 | |
789 | |
789 | void |
790 | void |
|
|
791 | enqueue_copy_buffer_rect (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Buffer dst, size_t src_x, size_t src_y, size_t src_z, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, ...) |
|
|
792 | PPCODE: |
|
|
793 | cl_event ev = 0; |
|
|
794 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
|
|
795 | const size_t dst_origin[3] = { dst_x, dst_y, dst_z }; |
|
|
796 | const size_t region[3] = { width, height, depth }; |
|
|
797 | EVENT_LIST (16, items - 16); |
|
|
798 | |
|
|
799 | NEED_SUCCESS (EnqueueCopyBufferRect, (this, src, dst, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
|
|
800 | |
|
|
801 | if (ev) |
|
|
802 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
|
|
803 | |
|
|
804 | void |
790 | enqueue_read_image (OpenCL::Queue this, OpenCL::Image src, cl_bool blocking, size_t src_x, size_t src_y, size_t src_z, size_t width, size_t height, size_t depth, size_t row_pitch, size_t slice_pitch, SV *data, ...) |
805 | enqueue_read_image (OpenCL::Queue this, OpenCL::Image src, cl_bool blocking, size_t src_x, size_t src_y, size_t src_z, size_t width, size_t height, size_t depth, size_t row_pitch, size_t slice_pitch, SV *data, ...) |
791 | PPCODE: |
806 | PPCODE: |
792 | cl_event ev = 0; |
807 | cl_event ev = 0; |
793 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
808 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
794 | const size_t region[3] = { width, height, depth }; |
809 | const size_t region[3] = { width, height, depth }; |
… | |
… | |
836 | |
851 | |
837 | if (ev) |
852 | if (ev) |
838 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
853 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
839 | |
854 | |
840 | void |
855 | void |
841 | enqueue_copy_buffer_rect (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Buffer dst, size_t src_x, size_t src_y, size_t src_z, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, ...) |
|
|
842 | PPCODE: |
|
|
843 | cl_event ev = 0; |
|
|
844 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
|
|
845 | const size_t dst_origin[3] = { dst_x, dst_y, dst_z }; |
|
|
846 | const size_t region[3] = { width, height, depth }; |
|
|
847 | EVENT_LIST (16, items - 16); |
|
|
848 | |
|
|
849 | NEED_SUCCESS (EnqueueCopyBufferRect, (this, src, dst, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
|
|
850 | |
|
|
851 | if (ev) |
|
|
852 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
|
|
853 | |
|
|
854 | void |
|
|
855 | enqueue_copy_buffer_to_image (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Image dst, size_t src_offset, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, ...) |
|
|
856 | PPCODE: |
|
|
857 | cl_event ev = 0; |
|
|
858 | const size_t dst_origin[3] = { dst_x, dst_y, dst_z }; |
|
|
859 | const size_t region[3] = { width, height, depth }; |
|
|
860 | EVENT_LIST (10, items - 10); |
|
|
861 | |
|
|
862 | NEED_SUCCESS (EnqueueCopyBufferToImage, (this, src, dst, src_offset, dst_origin, region, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
|
|
863 | |
|
|
864 | if (ev) |
|
|
865 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
|
|
866 | |
|
|
867 | void |
|
|
868 | enqueue_copy_image (OpenCL::Queue this, OpenCL::Image src, OpenCL::Image dst, size_t src_x, size_t src_y, size_t src_z, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, ...) |
856 | enqueue_copy_image (OpenCL::Queue this, OpenCL::Image src, OpenCL::Image dst, size_t src_x, size_t src_y, size_t src_z, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, ...) |
869 | PPCODE: |
857 | PPCODE: |
870 | cl_event ev = 0; |
858 | cl_event ev = 0; |
871 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
859 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
872 | const size_t dst_origin[3] = { dst_x, dst_y, dst_z }; |
860 | const size_t dst_origin[3] = { dst_x, dst_y, dst_z }; |
… | |
… | |
885 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
873 | const size_t src_origin[3] = { src_x, src_y, src_z }; |
886 | const size_t region[3] = { width, height, depth }; |
874 | const size_t region[3] = { width, height, depth }; |
887 | EVENT_LIST (10, items - 10); |
875 | EVENT_LIST (10, items - 10); |
888 | |
876 | |
889 | NEED_SUCCESS (EnqueueCopyImageToBuffer, (this, src, dst, src_origin, region, dst_offset, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
877 | NEED_SUCCESS (EnqueueCopyImageToBuffer, (this, src, dst, src_origin, region, dst_offset, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
|
|
878 | |
|
|
879 | if (ev) |
|
|
880 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
|
|
881 | |
|
|
882 | void |
|
|
883 | enqueue_copy_buffer_to_image (OpenCL::Queue this, OpenCL::Buffer src, OpenCL::Image dst, size_t src_offset, size_t dst_x, size_t dst_y, size_t dst_z, size_t width, size_t height, size_t depth, ...) |
|
|
884 | PPCODE: |
|
|
885 | cl_event ev = 0; |
|
|
886 | const size_t dst_origin[3] = { dst_x, dst_y, dst_z }; |
|
|
887 | const size_t region[3] = { width, height, depth }; |
|
|
888 | EVENT_LIST (10, items - 10); |
|
|
889 | |
|
|
890 | NEED_SUCCESS (EnqueueCopyBufferToImage, (this, src, dst, src_offset, dst_origin, region, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
890 | |
891 | |
891 | if (ev) |
892 | if (ev) |
892 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
893 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
893 | |
894 | |
894 | void |
895 | void |
… | |
… | |
1120 | NEED_SUCCESS (RetainMemObject, (value [i])); |
1121 | NEED_SUCCESS (RetainMemObject, (value [i])); |
1121 | PUSHs (NEW_MORTAL_OBJ ("OpenCL::Memory", value [i])); |
1122 | PUSHs (NEW_MORTAL_OBJ ("OpenCL::Memory", value [i])); |
1122 | } |
1123 | } |
1123 | |
1124 | |
1124 | #END:mem |
1125 | #END:mem |
|
|
1126 | |
|
|
1127 | MODULE = OpenCL PACKAGE = OpenCL::BufferObj |
|
|
1128 | |
|
|
1129 | void |
|
|
1130 | sub_buffer_region (OpenCL::BufferObj this, cl_mem_flags flags, size_t origin, size_t size) |
|
|
1131 | PPCODE: |
|
|
1132 | if (flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR | CL_MEM_ALLOC_HOST_PTR)) |
|
|
1133 | croak ("clCreateSubBuffer: cannot use/copy/alloc host ptr, doesn't make sense, check your flags!"); |
|
|
1134 | |
|
|
1135 | cl_buffer_region crdata = { origin, size }; |
|
|
1136 | |
|
|
1137 | NEED_SUCCESS_ARG (cl_mem mem, CreateSubBuffer, (this, flags, CL_BUFFER_CREATE_TYPE_REGION, &crdata, &res)); |
|
|
1138 | XPUSH_NEW_OBJ ("OpenCL::Buffer", mem); |
1125 | |
1139 | |
1126 | MODULE = OpenCL PACKAGE = OpenCL::Image |
1140 | MODULE = OpenCL PACKAGE = OpenCL::Image |
1127 | |
1141 | |
1128 | void |
1142 | void |
1129 | image_info (OpenCL::Image this, cl_image_info name) |
1143 | image_info (OpenCL::Image this, cl_image_info name) |