1use crate::{
2 sr::constants::Constant,
3 sr::instructions,
4 sr::ops::{self, Op},
5 sr::storage::*,
6 sr::types::Type,
7};
8
9#[derive(Debug)]
10pub struct EntryPoint {
11 pub execution_model: spirv::ExecutionModel,
12 pub function: Token<Function>,
13 pub name: String,
14 }
16
17#[derive(Debug)]
18pub struct Block {
19 pub arguments: Vec<Token<Type>>,
20 pub ops: Vec<Token<Op>>,
21 pub terminator: ops::Terminator,
22}
23
24#[derive(Clone, Debug, PartialEq, Eq)]
26pub struct Jump {
27 pub block: Token<Block>,
29 pub arguments: Vec<Token<Op>>,
31}
32
33pub struct Function {
34 pub control: spirv::FunctionControl,
35 pub result: Token<Type>,
37 pub parameters: Vec<Token<Type>>,
39 pub blocks: Storage<Block>,
41 pub start_block: Token<Block>,
43}
44
45pub struct Module {
46 pub version: spirv::Word,
48 pub capabilities: Vec<spirv::Capability>,
50 pub extensions: Vec<String>,
52 pub ext_inst_imports: Vec<String>,
54 pub memory_model: instructions::MemoryModel,
56 pub entry_points: Vec<EntryPoint>,
58
59 pub types: Storage<Type>,
61 pub constants: Storage<Constant>,
63
64 pub ops: Storage<Op>,
66
67 pub functions: Vec<Function>,
69}