      parent-device
      partition-affinity-domain
      ^long partition-max-sub-devices
-     ;;:partition-properties partition-properties ;;TODO raises exception when called on CPU
+     partition-properties
      partition-type
-     pipe-max-active-reservations
-     pipe-max-packet-size
+     ^long pipe-max-active-reservations
+     ^long pipe-max-packet-size
      platform
-     preferred-global-atomic-alignment
+     ^long preferred-global-atomic-alignment
      preferred-interop-user-sync
-     preferred-local-atomic-alignment
-     preferred-platform-atomic-alignment
+     ^long preferred-local-atomic-alignment
+     ^long preferred-platform-atomic-alignment
      ^long preferred-vector-width-char
      ^long preferred-vector-width-short
      ^long preferred-vector-width-int

     ^long printf-buffer-size
     profile
     profiling-timer-resolution
     queue-on-device-max-size
     queue-on-device-preferred-size
     queue-on-device-properties
     queue-on-host-properties
     ^long reference-count

(defn profiling-timer-resolution [device]
  (info-size* CL/clGetDeviceInfo device CL/CL_DEVICE_PROFILING_TIMER_RESOLUTION))

(defn queue-on-device-max-size ^long [device]
  (info-int* CL/clGetDeviceInfo device CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE))

(defn queue-on-device-preferred-size ^long [device]
  (info-int* CL/clGetDeviceInfo device CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE))

(defn queue-on-device-properties [device]
  (let [mask (info-long* CL/clGetDeviceInfo device
                         CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES)]
    (disj (hash-set (mask* mask CL/CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
                           :out-of-order-exec-mode)
                    (mask* mask CL/CL_QUEUE_PROFILING_ENABLE :profiling))
          nil)))

(defn queue-on-host-properties [device]
  (let [mask (info-long* CL/clGetDeviceInfo device
                         CL_DEVICE_QUEUE_ON_HOST_PROPERTIES)]
    (disj (hash-set (mask* mask CL/CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
                           :out-of-order-exec-mode)
                    (mask* mask CL/CL_QUEUE_PROFILING_ENABLE :profiling))
          nil)))

(defn single-fp-config [device]
  (let [mask (info-long* CL/clGetDeviceInfo device
