cubecl_spirv/
lib.rs

1use std::fmt::{Debug, Display};
2
3use cubecl_core::compute::Binding;
4use cubecl_opt::Optimizer;
5use item::Elem;
6use rspirv::{
7    binary::{Assemble, Disassemble},
8    dr::Module,
9};
10
11mod arithmetic;
12mod atomic;
13mod bitwise;
14mod branch;
15mod cmma;
16mod compiler;
17mod debug;
18mod extensions;
19mod globals;
20mod instruction;
21mod item;
22mod lookups;
23mod metadata;
24mod subgroup;
25mod sync;
26mod target;
27mod transformers;
28mod variable;
29
30pub use compiler::*;
31pub use target::*;
32
33#[derive(Debug, Clone)]
34pub struct SpirvKernel {
35    pub module: Module,
36    pub optimizer: Optimizer,
37    pub bindings: Vec<Binding>,
38    pub scalars: Vec<(Elem, usize)>,
39    pub has_metadata: bool,
40}
41
42impl Display for SpirvKernel {
43    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44        write!(f, "{}", self.module.disassemble())
45    }
46}
47
48impl SpirvKernel {
49    pub fn assemble(&self) -> Vec<u32> {
50        self.module.assemble()
51    }
52}