1use ocl::{flags, Buffer, MemFlags, Queue};
2
3#[allow(unused)]
4pub fn create_buffer<T: ocl::OclPrm, I: Into<ocl::SpatialDims> + Clone>(
6 queue: &Queue,
7 size: I,
8 fill_value: T,
9 flags: MemFlags,
10) -> Buffer<T> {
11 if (size.clone().into() as ocl::SpatialDims).to_len() >= 1 {
12 return Buffer::<T>::builder()
13 .queue(queue.clone())
14 .len(size)
15 .fill_val(fill_value)
16 .flags(flags::MEM_READ_WRITE)
17 .build()
18 .unwrap();
19 }
20 return Buffer::<T>::builder()
22 .queue(queue.clone())
23 .len([1])
24 .fill_val(fill_value)
25 .flags(flags::MEM_READ_WRITE)
26 .build()
27 .unwrap();
28}
29
30#[allow(unused)]
31pub fn create_vec_from_buffer<T: ocl::OclPrm>(buffer: &Buffer<T>) -> Vec<T> {
33 let s = buffer.len();
34 let v: Vec<T> = vec![T::default(); s];
35 v
36}
37
38#[macro_export]
39macro_rules! buffer {
43 ($queue:expr, $size:expr, $fill:expr) => {{
44 buffer::create_buffer($queue, $size, $fill, ocl::flags::MEM_READ_WRITE)
45 }};
46}
47
48#[macro_export]
49macro_rules! buffer_flags {
53 ($queue:expr, $size:expr, $fill:expr, $flags:expr) => {{
54 buffer::create_buffer($queue, $size, $fill, $flags)
55 }};
56}
57
58#[macro_export]
59macro_rules! bread {
63 ($buffer:expr, $vec:expr) => {{
64 $buffer.read(&mut $vec).enq().unwrap();
65 }};
66}
67
68#[macro_export]
69macro_rules! bwrite {
73 ($buffer:expr, $vec:expr) => {{
74 $buffer.write(&$vec).enq().unwrap();
75 }};
76}
77
78#[macro_export]
79macro_rules! bget {
83 ($buffer:expr) => {{
84 let mut vec = buffer::create_vec_from_buffer(&$buffer);
85 $buffer.read(&mut vec).enq().unwrap();
86 vec
87 }};
88}