1use gaia_assembler::{
2 backends::{Backend, GeneratedFiles},
3 config::GaiaConfig,
4 program::GaiaModule,
5};
6use gaia_types::{
7 helpers::{AbiCompatible, ApiCompatible, Architecture, CompilationTarget},
8 Result,
9};
10use std::collections::HashMap;
11
12pub struct SpirvGenerator;
13
14impl Backend for SpirvGenerator {
15 fn name(&self) -> &'static str {
16 "spirv"
17 }
18
19 fn primary_target(&self) -> CompilationTarget {
20 CompilationTarget {
21 build: Architecture::X86_64, host: AbiCompatible::SPIRV,
23 target: ApiCompatible::Vulkan,
24 }
25 }
26
27 fn match_score(&self, target: &CompilationTarget) -> f32 {
28 if target.host == AbiCompatible::SPIRV {
29 100.0
30 }
31 else {
32 0.0
33 }
34 }
35
36 fn generate(&self, program: &GaiaModule, _config: &GaiaConfig) -> Result<GeneratedFiles> {
37 let files = HashMap::new();
38 let diagnostics = Vec::new();
39
40 for function in &program.functions {
41 for block in &function.blocks {
42 for _instruction in &block.instructions {
43 }
45 }
46 }
47
48 Ok(GeneratedFiles { files, diagnostics })
49 }
50}
51
52impl SpirvGenerator {
53 pub fn compile_to_spirv_raw(&self, _source: &str) -> Result<Vec<u8>> {
54 Ok(vec![0x03, 0x02, 0x23, 0x07]) }
57}