(in-package #:ocl) (defun create-kernel (program kernel-name) (check-error-arg (%create-kernel program kernel-name))) (get-cl-objects create-kernels-in-program (program) %create-kernels-in-program 'cl-kernel) (defun clone-kernel (source-kernel) (check-error-arg (%clone-kernel source-kernel))) (defun retain-kernel (kernel) (check-error (%retain-kernel kernel))) (defun release-kernel (kernel) (check-error (%release-kernel kernel))) (defmacro with-kernel ((kernel program name) &body body) `(let ((,kernel (create-kernel ,program ,name))) (unwind-protect (progn ,@body) (release-kernel ,kernel)))) (defun set-kernel-arg (kernel arg-index arg-type arg-value) (cffi:with-foreign-pointer (value (cffi:foreign-type-size arg-type) size) (setf (cffi:mem-ref value arg-type) arg-value) (check-error (%set-kernel-arg kernel arg-index size value)))) (defparameter +kernel-info-type-alist+ '((:kernel-function-name . :string) (:kernel-num-args . cl-uint) (:kernel-reference-count . cl-uint) (:kernel-context . cl-context) (:kernel-program . cl-program) (:kernel-attributes . :string))) (wrap-get-info-function get-kernel-info %get-kernel-info +kernel-info-type-alist+) (defparameter +kernel-arg-info-type-alist+ '((:kernel-arg-address-qualifier . cl-kernel-arg-address-qualifier) (:kernel-arg-access-qualifier . cl-kernel-arg-access-qualifier) (:kernel-arg-type-name . :string) (:kernel-arg-type-qualifier . cl-kernel-arg-type-qualifier) (:kernel-arg-name . :string))) ;; %get-kernel-arg-info (defparameter +kernel-work-group-info-type-alist+ '((:kernel-global-work-size . (:pointer :size)) (:kernel-work-group-size . :size) (:kernel-compile-work-group-size . (:pointer :size)) (:kernel-local-mem-size . cl-ulong) (:kernel-preferred-work-group-size-multiple . :size) (:kernel-private-mem-size . cl-ulong))) ;; %get-kernel-work-group-info ;; (defparameter +kernel-sub-group-info-type-alist+ ;; '(())) ;; %get-kernel-sub-group-info