shader-rt: replace gpu node's args and ret types with Raster<GPU>

This commit is contained in:
firestar99 2025-08-19 15:46:53 +02:00 committed by Keavon Chambers
parent 35d7896450
commit 61b4017398

View file

@ -1,6 +1,7 @@
use crate::parsing::{Input, NodeFnAttributes, ParsedField, ParsedFieldType, ParsedNodeFn, RegularParsedField}; use crate::parsing::{Input, NodeFnAttributes, ParsedField, ParsedFieldType, ParsedNodeFn, RegularParsedField};
use crate::shader_nodes::{CodegenShaderEntryPoint, ShaderNodeType}; use crate::shader_nodes::{CodegenShaderEntryPoint, ShaderNodeType};
use convert_case::{Case, Casing}; use convert_case::{Case, Casing};
use proc_macro_crate::FoundCrate;
use proc_macro2::{Ident, Span, TokenStream}; use proc_macro2::{Ident, Span, TokenStream};
use quote::{ToTokens, format_ident, quote}; use quote::{ToTokens, format_ident, quote};
use std::borrow::Cow; use std::borrow::Cow;
@ -105,14 +106,24 @@ impl CodegenShaderEntryPoint for PerPixelAdjust {
let struct_name = format_ident!("{}", fn_name.to_string().to_case(Case::Pascal)); let struct_name = format_ident!("{}", fn_name.to_string().to_case(Case::Pascal));
let mod_name = fn_name.clone(); let mod_name = fn_name.clone();
let gcore = match &parsed.crate_name {
FoundCrate::Itself => format_ident!("crate"),
FoundCrate::Name(name) => format_ident!("{name}"),
};
let raster_gpu = syn::parse2::<Type>(quote!(#gcore::table::Table<#gcore::raster_types::Raster<#gcore::raster_types::GPU>>))?;
let fields = parsed let fields = parsed
.fields .fields
.iter() .iter()
.map(|f| match &f.ty { .map(|f| match &f.ty {
ParsedFieldType::Regular(reg) => Ok(ParsedField { ParsedFieldType::Regular(reg @ RegularParsedField { gpu_image: true, .. }) => Ok(ParsedField {
ty: ParsedFieldType::Regular(RegularParsedField { gpu_image: false, ..reg.clone() }), ty: ParsedFieldType::Regular(RegularParsedField {
ty: raster_gpu.clone(),
..reg.clone()
}),
..f.clone() ..f.clone()
}), }),
ParsedFieldType::Regular(RegularParsedField { gpu_image: false, .. }) => Ok(f.clone()),
ParsedFieldType::Node { .. } => Err(syn::Error::new_spanned(&f.pat_ident, "PerPixelAdjust shader nodes cannot accept other nodes as generics")), ParsedFieldType::Node { .. } => Err(syn::Error::new_spanned(&f.pat_ident, "PerPixelAdjust shader nodes cannot accept other nodes as generics")),
}) })
.collect::<syn::Result<_>>()?; .collect::<syn::Result<_>>()?;
@ -146,7 +157,7 @@ impl CodegenShaderEntryPoint for PerPixelAdjust {
}), }),
implementations: Default::default(), implementations: Default::default(),
}, },
output_type: parsed.output_type.clone(), output_type: raster_gpu,
is_async: true, is_async: true,
fields, fields,
body, body,