From 6fe823a614279cceb2d48507bd8e93b0efd87f94 Mon Sep 17 00:00:00 2001 From: Thomas Albers Date: Sat, 4 Mar 2023 22:47:28 +0100 Subject: Initial commit --- src/command-queue.lisp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/command-queue.lisp (limited to 'src/command-queue.lisp') diff --git a/src/command-queue.lisp b/src/command-queue.lisp new file mode 100644 index 0000000..ec9f89c --- /dev/null +++ b/src/command-queue.lisp @@ -0,0 +1,38 @@ +(in-package #:ocl) + +(defun create-command-queue-with-properties (context device &key queue-properties queue-size) + (let ((properties '(0))) + (when queue-properties + (push (cffi:foreign-bitfield-value 'cl-command-queue-properties queue-properties) properties) + (push :queue-properties properties)) + (when queue-size + (push queue-size properties) + (push :queue-size properties)) + (with-foreign-sequence (c-properties properties 'cl-queue-properties) + (check-error-arg (%create-command-queue-with-properties context device c-properties))))) + +(defun retain-command-queue (command-queue) + (check-error (%retain-command-queue command-queue))) + +(defun release-command-queue (command-queue) + (check-error (%release-command-queue command-queue))) + +(defparameter +command-queue-info-type-alist+ + '((:queue-context . cl-context) + (:queue-device . cl-device-id) + (:queue-reference-count . cl-uint) + (:queue-properties . cl-command-queue-properties) + (:queue-properties-array . (:pointer cl-queue-properties)) + (:queue-size . cl-uint) + (:queue-device-default . cl-command-queue))) + +(wrap-get-info-function get-command-queue-info %get-command-queue-info + +command-queue-info-type-alist+) + +(defmacro with-command-queue ((queue context device &key queue-properties queue-size) &body body) + `(let ((,queue (create-command-queue-with-properties ,context ,device + :queue-properties ,queue-properties + :queue-size ,queue-size))) + (unwind-protect + (progn ,@body) + (release-command-queue ,queue)))) -- cgit v1.2.3