summaryrefslogtreecommitdiff
path: root/src/command-queue.lisp
diff options
context:
space:
mode:
authorThomas Albers <thomas@thomaslabs.org>2023-03-04 22:47:28 +0100
committerThomas Albers <thomas@thomaslabs.org>2023-03-04 22:47:28 +0100
commit6fe823a614279cceb2d48507bd8e93b0efd87f94 (patch)
tree579e3c5db456667ce2aeda94f909703513179ce1 /src/command-queue.lisp
Initial commit
Diffstat (limited to 'src/command-queue.lisp')
-rw-r--r--src/command-queue.lisp38
1 files changed, 38 insertions, 0 deletions
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))))