cubecl_spirv/
lib.rs

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