mod platform;
mod device;
mod context;
mod program;
mod kernel;
mod queue;
mod buffer;
mod image;
mod sampler;
mod pro_que;
mod event;
mod spatial_dims;
pub use self::platform::Platform;
pub use self::device::{Device, DeviceSpecifier};
pub use self::context::{Context, ContextBuilder};
pub use self::program::{Program, ProgramBuilder, BuildOpt};
pub use self::queue::Queue;
pub use self::kernel::{Kernel, KernelCmd};
pub use self::buffer::{Buffer, BufferCmd, BufferCmdKind, BufferCmdDataShape};
pub use self::image::{Image, ImageCmd, ImageCmdKind, ImageBuilder};
pub use self::sampler::Sampler;
pub use self::pro_que::{ProQue, ProQueBuilder};
pub use self::event::{Event, EventList};
pub use self::spatial_dims::SpatialDims;
pub use self::traits::{MemLen, WorkDims};
mod traits {
use std::fmt::Debug;
use num::{Num, ToPrimitive};
use super::{SpatialDims};
use super::spatial_dims::to_usize;
pub trait WorkDims {
fn dim_count(&self) -> u32;
fn to_work_size(&self) -> Option<[usize; 3]>;
fn to_work_offset(&self) -> Option<[usize; 3]>;
}
pub trait MemLen {
fn to_len(&self) -> usize;
fn to_len_padded(&self, incr: usize) -> usize;
fn to_lens(&self) -> [usize; 3];
}
impl<'a, D> MemLen for &'a D where D: MemLen {
fn to_len(&self) -> usize { (*self).to_len() }
fn to_len_padded(&self, incr: usize) -> usize { (*self).to_len_padded(incr) }
fn to_lens(&self) -> [usize; 3] { (*self).to_lens() }
}
impl<D> MemLen for (D, ) where D: Num + ToPrimitive + Debug + Copy {
fn to_len(&self) -> usize {
SpatialDims::One(to_usize(self.0)).to_len()
}
fn to_len_padded(&self, incr: usize) -> usize {
SpatialDims::One(to_usize(self.0)).to_len_padded(incr)
}
fn to_lens(&self) -> [usize; 3] { [to_usize(self.0), 1, 1] }
}
impl<D> MemLen for [D; 1] where D: Num + ToPrimitive + Debug + Copy {
fn to_len(&self) -> usize {
SpatialDims::One(to_usize(self[0])).to_len()
}
fn to_len_padded(&self, incr: usize) -> usize {
SpatialDims::One(to_usize(self[0])).to_len_padded(incr)
}
fn to_lens(&self) -> [usize; 3] { [to_usize(self[0]), 1, 1] }
}
impl<D> MemLen for (D, D) where D: Num + ToPrimitive + Debug + Copy {
fn to_len(&self) -> usize {
SpatialDims::Two(to_usize(self.0), to_usize(self.1)).to_len()
}
fn to_len_padded(&self, incr: usize) -> usize {
SpatialDims::Two(to_usize(self.0), to_usize(self.1)).to_len_padded(incr)
}
fn to_lens(&self) -> [usize; 3] { [to_usize(self.0), to_usize(self.1), 1] }
}
impl<D> MemLen for [D; 2] where D: Num + ToPrimitive + Debug + Copy {
fn to_len(&self) -> usize {
SpatialDims::Two(to_usize(self[0]), to_usize(self[1])).to_len()
}
fn to_len_padded(&self, incr: usize) -> usize {
SpatialDims::Two(to_usize(self[0]), to_usize(self[1])).to_len_padded(incr)
}
fn to_lens(&self) -> [usize; 3] { [to_usize(self[0]), to_usize(self[1]), 1] }
}
impl<'a, D> MemLen for (D, D, D) where D: Num + ToPrimitive + Debug + Copy {
fn to_len(&self) -> usize {
SpatialDims::Three(to_usize(self.0), to_usize(self.1), to_usize(self.2))
.to_len()
}
fn to_len_padded(&self, incr: usize) -> usize {
SpatialDims::Three(to_usize(self.0), to_usize(self.1), to_usize(self.2))
.to_len_padded(incr)
}
fn to_lens(&self) -> [usize; 3] { [to_usize(self.0), to_usize(self.1), to_usize(self.2)] }
}
impl<'a, D> MemLen for [D; 3] where D: Num + ToPrimitive + Debug + Copy {
fn to_len(&self) -> usize {
SpatialDims::Three(to_usize(self[0]), to_usize(self[1]), to_usize(self[2]))
.to_len()
}
fn to_len_padded(&self, incr: usize) -> usize {
SpatialDims::Three(to_usize(self[0]), to_usize(self[1]), to_usize(self[2]))
.to_len_padded(incr)
}
fn to_lens(&self) -> [usize; 3] { [to_usize(self[0]), to_usize(self[1]), to_usize(self[2])] }
}
}