summaryrefslogtreecommitdiff
path: root/src/command-queue.lisp
blob: ec9f89c12c84d85c3d1b79043d98f5c06a552e20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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))))