1use morok_dtype::DType;
4
5pub use morok_device::device::{ProgramSpec, Variable};
7pub use morok_dtype::DeviceSpec;
8
9#[derive(Debug, Clone)]
11pub struct RenderedKernel {
12 pub code: String,
14
15 pub name: String,
17
18 pub buffer_args: Vec<BufferArg>,
20
21 pub var_names: Vec<String>,
24
25 pub global_size: Option<[usize; 3]>,
27
28 pub local_size: Option<[usize; 3]>,
30}
31
32#[derive(Debug, Clone)]
34pub struct BufferArg {
35 pub index: usize,
37
38 pub name: String,
40
41 pub dtype: DType,
43
44 pub is_output: bool,
46}
47
48impl RenderedKernel {
49 pub fn new(code: String, name: String) -> Self {
51 Self { code, name, buffer_args: Vec::new(), var_names: Vec::new(), global_size: None, local_size: None }
52 }
53
54 pub fn add_buffer_arg(&mut self, arg: BufferArg) {
56 self.buffer_args.push(arg);
57 }
58
59 pub fn set_work_sizes(&mut self, global: [usize; 3], local: [usize; 3]) {
61 self.global_size = Some(global);
62 self.local_size = Some(local);
63 }
64}