use super::api::types as cl;
use super::api::{API, Error};
use super::Context;
use super::Device;
#[derive(Debug, Clone)]
#[allow(missing_copy_implementations)]
pub struct Queue {
id: isize,
}
impl Queue {
pub fn new(context: &Context, device: &Device, queue_flags: Option<&QueueFlags>) -> Result<Queue, Error> {
let default_flags = QueueFlags::default();
let flags = queue_flags.unwrap_or(&default_flags);
API::create_queue(context, device, flags)
}
pub fn from_isize(id: isize) -> Queue {
Queue { id: id }
}
pub fn from_c(id: cl::queue_id) -> Queue {
Queue { id: id as isize }
}
pub fn id(&self) -> isize {
self.id
}
pub fn id_c(&self) -> cl::queue_id {
self.id as cl::queue_id
}
}
bitflags! {
#[allow(missing_docs)]
flags QueueFlags: cl::bitfield {
#[allow(missing_docs)]
const CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE = 1 << 0,
#[allow(missing_docs)]
const CL_QUEUE_PROFILING_ENABLE = 1 << 1,
}
}
impl Default for QueueFlags {
fn default() -> QueueFlags {
QueueFlags::empty()
}
}