ocl_macros/
kernel.rs

1#[macro_export]
2/// Builds a kernel with arguments from a program, queue, kernel name and work size. Adds unnamed arguments or named arguments given as tuples of ("name", arg).
3///
4/// Syntax: `(program: Program, queue: Queue, name: &str, size: Into<ocl::SpatialDims>, $(args: T OR (&str, T)),*)`
5macro_rules! kernel {
6    ($p:expr, $q:expr, $name:expr, $n:expr, $( ($argname:expr, $arg:expr)),*) => { // Named arguments as tuples
7        {
8            let mut kernel_builder = ocl::Kernel::builder();
9            kernel_builder.program(&$p).name($name).queue($q.clone()).global_work_size($n);
10            $(
11                kernel_builder.arg_named($argname, $arg);
12            )*
13            kernel_builder.build().unwrap()
14        }
15    };
16    ($p:expr, $q:expr, $name:expr, $n:expr, $( $arg:expr),*) => { // Unnamed arguments
17        {
18            let mut kernel_builder = ocl::Kernel::builder();
19            kernel_builder.program(&$p).name($name).queue($q.clone()).global_work_size($n);
20            $(
21                kernel_builder.arg($arg);
22            )*
23            kernel_builder.build().unwrap()
24        }
25    };
26}
27
28#[macro_export]
29/// Creates a KernelBuilder from a program, queue, kernel name and work size.
30///
31/// Syntax: `(program: Program, queue: Queue, name: &str, size: Into<ocl::SpatialDims>)`
32macro_rules! kernel_builder {
33    ($p:expr, $q:expr, $name:expr, $n:expr) => {{
34        let mut kernel_builder = ocl::Kernel::builder();
35        kernel_builder
36            .program(&$p)
37            .name($name)
38            .queue($q.clone())
39            .global_work_size($n);
40        kernel_builder
41    }};
42}
43
44#[macro_export]
45/// Adds unnamed arguments or named arguments given as tuples of ("name", arg) to Kernel.
46///
47/// Syntax: `(kernel: Kernel, $(args: T OR (&str, T)),*)`
48macro_rules! kernel_args {
49    ($kernel:expr, $( ($argname:expr, $arg:expr)),*) => { // Named arguments
50        $(
51            $kernel.arg_named($argname, $arg);
52        )*
53    };
54    ($kernel:expr, $( $arg:expr),*) => { // Unnamed arguments
55        $(
56            $kernel.arg($arg);
57        )*
58    };
59}