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}