summaryrefslogtreecommitdiff
path: root/src/command-queue.lisp
diff options
context:
space:
mode:
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))))