… | |
… | |
574 | |
574 | |
575 | void |
575 | void |
576 | buffer_sv (OpenCL::Context this, cl_mem_flags flags, SV *data) |
576 | buffer_sv (OpenCL::Context this, cl_mem_flags flags, SV *data) |
577 | PPCODE: |
577 | PPCODE: |
578 | STRLEN len; |
578 | STRLEN len; |
579 | char *ptr = SvPVbyte (data, len); |
579 | char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0; |
580 | |
|
|
581 | if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR))) |
580 | if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR))) |
582 | croak ("clCreateBuffer: have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?"); |
581 | croak ("clCreateBuffer: have to specify use or copy host ptr when buffer data is given, use $context->buffer instead?"); |
583 | |
|
|
584 | NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (this, flags, len, ptr, &res)); |
582 | NEED_SUCCESS_ARG (cl_mem mem, CreateBuffer, (this, flags, len, ptr, &res)); |
585 | XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem); |
583 | XPUSH_NEW_OBJ ("OpenCL::BufferObj", mem); |
586 | |
584 | |
587 | void |
585 | void |
588 | 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) |
586 | 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) |
589 | PPCODE: |
587 | PPCODE: |
590 | STRLEN len; |
588 | STRLEN len; |
591 | char *ptr = SvPVbyte (data, len); |
589 | char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0; |
592 | const cl_image_format format = { channel_order, channel_type }; |
590 | const cl_image_format format = { channel_order, channel_type }; |
593 | NEED_SUCCESS_ARG (cl_mem mem, CreateImage2D, (this, flags, &format, width, height, row_pitch, ptr, &res)); |
591 | NEED_SUCCESS_ARG (cl_mem mem, CreateImage2D, (this, flags, &format, width, height, row_pitch, ptr, &res)); |
594 | XPUSH_NEW_OBJ ("OpenCL::Image2D", mem); |
592 | XPUSH_NEW_OBJ ("OpenCL::Image2D", mem); |
595 | |
593 | |
596 | void |
594 | void |
597 | image3d (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 depth, size_t row_pitch = 0, size_t slice_pitch = 0, SV *data = &PL_sv_undef) |
595 | image3d (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 depth, size_t row_pitch = 0, size_t slice_pitch = 0, SV *data = &PL_sv_undef) |
598 | PPCODE: |
596 | PPCODE: |
599 | STRLEN len; |
597 | STRLEN len; |
600 | char *ptr = SvPVbyte (data, len); |
598 | char *ptr = SvOK (data) ? SvPVbyte (data, len) : 0; |
601 | const cl_image_format format = { channel_order, channel_type }; |
599 | const cl_image_format format = { channel_order, channel_type }; |
602 | NEED_SUCCESS_ARG (cl_mem mem, CreateImage3D, (this, flags, &format, width, height, depth, row_pitch, slice_pitch, ptr, &res)); |
600 | NEED_SUCCESS_ARG (cl_mem mem, CreateImage3D, (this, flags, &format, width, height, depth, row_pitch, slice_pitch, ptr, &res)); |
603 | XPUSH_NEW_OBJ ("OpenCL::Image3D", mem); |
601 | XPUSH_NEW_OBJ ("OpenCL::Image3D", mem); |
604 | |
602 | |
605 | void |
603 | void |