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

Comparing OpenCL/OpenCL.xs (file contents):
Revision 1.39 by root, Sat Apr 21 19:48:58 2012 UTC vs.
Revision 1.43 by root, Sat Apr 21 22:16:09 2012 UTC

502 native_vector_width_int = CL_DEVICE_NATIVE_VECTOR_WIDTH_INT 502 native_vector_width_int = CL_DEVICE_NATIVE_VECTOR_WIDTH_INT
503 native_vector_width_long = CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG 503 native_vector_width_long = CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG
504 native_vector_width_float = CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT 504 native_vector_width_float = CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT
505 native_vector_width_double = CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE 505 native_vector_width_double = CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE
506 native_vector_width_half = CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF 506 native_vector_width_half = CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF
507 reference_count_ext = CL_DEVICE_REFERENCE_COUNT_EXT 507 reference_count_ext = CL_DEVICE_REFERENCE_COUNT_EXT
508 PPCODE: 508 PPCODE:
509 cl_uint value [1]; 509 cl_uint value [1];
510 NEED_SUCCESS (GetDeviceInfo, (self, ix, sizeof (value), value, 0)); 510 NEED_SUCCESS (GetDeviceInfo, (self, ix, sizeof (value), value, 0));
511 EXTEND (SP, 1); 511 EXTEND (SP, 1);
512 const int i = 0; 512 const int i = 0;
729 if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR))) 729 if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
730 croak ("OpenCL::Context::buffer_sv: you have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?"); 730 croak ("OpenCL::Context::buffer_sv: you have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?");
731 NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (self, flags, len, ptr, &res)); 731 NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (self, flags, len, ptr, &res));
732 XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem); 732 XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem);
733 733
734#if !CL_VERSION_1_2 || defined CL_USE_DEPRECATED_OPENCL_1_1_APIS 734#if CL_VERSION_1_2
735 735
736void 736void
737image2d (OpenCL::Context self, 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) 737image (OpenCL::Context self, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, cl_mem_object_type type, size_t width, size_t height, size_t depth, size_t array_size = 0, size_t row_pitch = 0, size_t slice_pitch = 0, cl_uint num_mip_level = 0, cl_uint num_samples = 0, SV *data = &PL_sv_undef)
738 PPCODE: 738 PPCODE:
739 STRLEN len; 739 STRLEN len;
740 char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0; 740 char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0;
741 const cl_image_format format = { channel_order, channel_type }; 741 const cl_image_format format = { channel_order, channel_type };
742 const cl_image_desc desc = {
743 type,
744 width, height, depth,
745 array_size, row_pitch, slice_pitch,
746 num_mip_level, num_samples,
747 type == CL_MEM_OBJECT_IMAGE1D_BUFFER ? (cl_mem)SvPTROBJ ("OpenCL::Context::Image", "data", data, "OpenCL::Buffer") : 0
748 };
742 NEED_SUCCESS_ARG (cl_mem mem, CreateImage2D, (self, flags, &format, width, height, row_pitch, ptr, &res)); 749 NEED_SUCCESS_ARG (cl_mem mem, CreateImage, (self, flags, &format, &desc, ptr, &res));
750 char *klass = "OpenCL::Image";
751 switch (type)
752 {
753 case CL_MEM_OBJECT_IMAGE1D_BUFFER: klass = "OpenCL::Image1DBuffer"; break;
754 case CL_MEM_OBJECT_IMAGE1D: klass = "OpenCL::Image1D"; break;
755 case CL_MEM_OBJECT_IMAGE1D_ARRAY: klass = "OpenCL::Image2DArray"; break;
756 case CL_MEM_OBJECT_IMAGE2D: klass = "OpenCL::Image2D"; break;
757 case CL_MEM_OBJECT_IMAGE2D_ARRAY: klass = "OpenCL::Image2DArray"; break;
758 case CL_MEM_OBJECT_IMAGE3D: klass = "OpenCL::Image3D"; break;
759 }
743 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem); 760 XPUSH_NEW_OBJ (klass, mem);
744 761
762#endif
763
745void 764void
746image3d (OpenCL::Context self, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, size_t width, size_t height, size_t depth, size_t row_pitch = 0, size_t slice_pitch = 0, SV *data = &PL_sv_undef) 765image2d (OpenCL::Context self, 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)
747 PPCODE: 766 PPCODE:
748 STRLEN len; 767 STRLEN len;
749 char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0; 768 char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0;
750 const cl_image_format format = { channel_order, channel_type }; 769 const cl_image_format format = { channel_order, channel_type };
770#if CL_VERSION_1_2
771 const cl_image_desc desc = { CL_MEM_OBJECT_IMAGE2D, width, height, 0, 0, row_pitch, 0, 0, 0, 0 };
772 NEED_SUCCESS_ARG (cl_mem mem, CreateImage, (self, flags, &format, &desc, ptr, &res));
773#else
774 NEED_SUCCESS_ARG (cl_mem mem, CreateImage2D, (self, flags, &format, width, height, row_pitch, ptr, &res));
775#endif
776 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem);
777
778void
779image3d (OpenCL::Context self, cl_mem_flags flags, cl_channel_order channel_order, cl_channel_type channel_type, size_t width, size_t height, size_t depth, size_t row_pitch = 0, size_t slice_pitch = 0, SV *data = &PL_sv_undef)
780 PPCODE:
781 STRLEN len;
782 char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0;
783 const cl_image_format format = { channel_order, channel_type };
784#if CL_VERSION_1_2
785 const cl_image_desc desc = { CL_MEM_OBJECT_IMAGE3D, width, height, depth, 0, row_pitch, slice_pitch, 0, 0, 0 };
786 NEED_SUCCESS_ARG (cl_mem mem, CreateImage, (self, flags, &format, &desc, ptr, &res));
787#else
751 NEED_SUCCESS_ARG (cl_mem mem, CreateImage3D, (self, flags, &format, width, height, depth, row_pitch, slice_pitch, ptr, &res)); 788 NEED_SUCCESS_ARG (cl_mem mem, CreateImage3D, (self, flags, &format, width, height, depth, row_pitch, slice_pitch, ptr, &res));
789#endif
752 XPUSH_NEW_OBJ ("OpenCL::Image3D", mem); 790 XPUSH_NEW_OBJ ("OpenCL::Image3D", mem);
753
754#endif
755 791
756#if cl_apple_gl_sharing || cl_khr_gl_sharing 792#if cl_apple_gl_sharing || cl_khr_gl_sharing
757 793
758void 794void
759gl_buffer (OpenCL::Context self, cl_mem_flags flags, cl_GLuint bufobj) 795gl_buffer (OpenCL::Context self, cl_mem_flags flags, cl_GLuint bufobj)
760 PPCODE: 796 PPCODE:
761 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLBuffer, (self, flags, bufobj, &res)); 797 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLBuffer, (self, flags, bufobj, &res));
762 XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem); 798 XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem);
763 799
764#if !CL_VERSION_1_2 || defined CL_USE_DEPRECATED_OPENCL_1_1_APIS
765
766void 800void
767gl_texture2d (OpenCL::Context self, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, cl_GLuint texture) 801gl_renderbuffer (OpenCL::Context self, cl_mem_flags flags, cl_GLuint renderbuffer)
768 PPCODE: 802 PPCODE:
769 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLTexture2D, (self, flags, target, miplevel, texture, &res)); 803 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLRenderbuffer, (self, flags, renderbuffer, &res));
770 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem); 804 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem);
771 805
772void
773gl_texture3d (OpenCL::Context self, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, cl_GLuint texture)
774 PPCODE:
775 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLTexture3D, (self, flags, target, miplevel, texture, &res));
776 XPUSH_NEW_OBJ ("OpenCL::Image3D", mem);
777
778#endif
779
780#if CL_VERSION_1_2 806#if CL_VERSION_1_2
781 807
782void 808void
783gl_texture (OpenCL::Context self, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, cl_GLuint texture) 809gl_texture (OpenCL::Context self, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, cl_GLuint texture)
810 ALIAS:
811 gl_texture2d = 0
812 gl_texture3d = 0
784 PPCODE: 813 PPCODE:
814 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLTexture, (self, flags, target, miplevel, texture, &res));
815 cl_gl_object_type type;
816 NEED_SUCCESS (GetGLObjectInfo, (mem, &type, 0)); // TODO: use target instead?
785 char *klass = "OpenCL::Memory"; 817 char *klass = "OpenCL::Memory";
786 cl_gl_object_type t;
787 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLTexture2D, (self, flags, target, miplevel, texture, &res));
788 NEED_SUCCESS (GetGLObjectInfo, (mem, &t, 0));
789 switch (t) 818 switch (type)
790 { 819 {
791 case CL_GL_OBJECT_TEXTURE_BUFFER: klass = "OpenCL::Image1DBuffer"; break; 820 case CL_GL_OBJECT_TEXTURE_BUFFER: klass = "OpenCL::Image1DBuffer"; break;
792 case CL_GL_OBJECT_TEXTURE1D: klass = "OpenCL::Image1D"; break; 821 case CL_GL_OBJECT_TEXTURE1D: klass = "OpenCL::Image1D"; break;
793 case CL_GL_OBJECT_TEXTURE1D_ARRAY: klass = "OpenCL::Image2DArray"; break; 822 case CL_GL_OBJECT_TEXTURE1D_ARRAY: klass = "OpenCL::Image2DArray"; break;
794 case CL_GL_OBJECT_TEXTURE2D: klass = "OpenCL::Image2D"; break; 823 case CL_GL_OBJECT_TEXTURE2D: klass = "OpenCL::Image2D"; break;
795 case CL_GL_OBJECT_TEXTURE2D_ARRAY: klass = "OpenCL::Image2DArray"; break; 824 case CL_GL_OBJECT_TEXTURE2D_ARRAY: klass = "OpenCL::Image2DArray"; break;
796 case CL_GL_OBJECT_TEXTURE3D: klass = "OpenCL::Image3D"; break; 825 case CL_GL_OBJECT_TEXTURE3D: klass = "OpenCL::Image3D"; break;
797 } 826 }
798 XPUSH_NEW_OBJ (klass, mem); 827 XPUSH_NEW_OBJ (klass, mem);
799 828
829#else
830
831void
832gl_texture2d (OpenCL::Context self, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, cl_GLuint texture)
833 PPCODE:
834 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLTexture2D, (self, flags, target, miplevel, texture, &res));
835 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem);
836
837void
838gl_texture3d (OpenCL::Context self, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, cl_GLuint texture)
839 PPCODE:
840 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLTexture3D, (self, flags, target, miplevel, texture, &res));
841 XPUSH_NEW_OBJ ("OpenCL::Image3D", mem);
842
800#endif 843#endif
801
802void
803gl_renderbuffer (OpenCL::Context self, cl_mem_flags flags, cl_GLuint renderbuffer)
804 PPCODE:
805 NEED_SUCCESS_ARG (cl_mem mem, CreateFromGLRenderbuffer, (self, flags, renderbuffer, &res));
806 XPUSH_NEW_OBJ ("OpenCL::Image2D", mem);
807 844
808#endif 845#endif
809 846
810void 847void
811supported_image_formats (OpenCL::Context self, cl_mem_flags flags, cl_mem_object_type image_type) 848supported_image_formats (OpenCL::Context self, cl_mem_flags flags, cl_mem_object_type image_type)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines