blob: 43177de67fde70e06fbc6075cf9e345282b1129f [file] [log] [blame]
mod derive;
mod glsl;
mod layout;
mod parse;
use proc_macro::TokenStream;
use quote::{format_ident, quote};
use syn::parse_macro_input;
use layout::LayoutModule;
use parse::GpuModule;
#[proc_macro]
pub fn piet_gpu(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as syn::ItemMod);
//println!("input: {:#?}", input);
let module = GpuModule::from_syn(&input).unwrap();
let layout = LayoutModule::from_gpu(&module);
let glsl = glsl::gen_glsl(&layout);
let gen_gpu_fn = format_ident!("gen_gpu_{}", layout.name);
let mut expanded = quote! {
pub fn #gen_gpu_fn() -> String {
#glsl.into()
}
};
if layout.rust_encode {
expanded.extend(derive::gen_derive(&layout));
}
expanded.into()
}