macro_rules! buffer { ($($v:expr),+) => { ... }; (|$i:ident| $v:expr; $len:expr) => { ... }; ($v:expr; $len:expr) => { ... }; }
Expand description
Creates a buffer with sensible defaults.
This macro has three forms:
- Create a
Buffer
containing a list of elements
use blaze_rs::{buffer, prelude::*};
#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();
let r#macro: Result<Buffer<i32>> = buffer![1, 2, 3];
let expanded: Result<Buffer<i32>> = Buffer::new(&[1, 2, 3], MemAccess::READ_WRITE, false);
- Create a
Buffer
with a given element and size
use blaze_rs::{buffer, prelude::*};
#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();
let r#macro: Result<Buffer<i32>> = buffer![1; 3];
let expanded: Result<Buffer<i32>> = Buffer::new(&vec![1; 3], MemAccess::READ_WRITE, false);
- Create a
Buffer
with a by-index constructor
use blaze_rs::{buffer, prelude::*};
#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();
let r#macro: Buffer<i32> = buffer![|i| i as i32; 3]?;
let expanded: Buffer<i32> = unsafe {
let mut res = Buffer::new_uninit(3, MemAccess::READ_WRITE, false)?;
for (i, v) in res.map_mut_blocking(.., WaitList::None)?.iter_mut().enumerate() {
v.write(i as i32);
}
res.assume_init()
};
In particular, the by-index constructor facilitates the construction of Buffers of !Copy
types.
use blaze_rs::{buffer, prelude::*};
#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();
#[repr(C)]
struct NoCopyStruct {
lock: bool,
val: i32,
}
let values: Result<Buffer<NoCopyStruct>> = buffer![|i| NoCopyStruct { lock: false, val: i as i32 }; 5];