use crate::error::ShaderCompileError;
use librashader_preprocess::ShaderSource;
pub(crate) mod spirv_passes;
#[cfg(feature = "glslang-in")]
mod glslang;
#[cfg(feature = "glslang-in")]
pub use crate::front::glslang::Glslang;
use crate::reflect::semantics::ShaderSemantics;
#[cfg(feature = "naga-in")]
mod naga;
#[cfg(feature = "naga-in")]
pub use crate::front::naga::NagaWgsl;
pub trait ShaderReflectObject: Sized {
type Compiler;
}
pub trait ShaderInputCompiler<O: ShaderReflectObject>: Sized {
fn compile(source: &ShaderSource) -> Result<O, ShaderCompileError>;
fn apply_mangled_semantics(_semantics: &mut ShaderSemantics) {}
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SpirvCompilation {
pub(crate) vertex: Vec<u32>,
pub(crate) fragment: Vec<u32>,
}
#[derive(Debug, Clone)]
#[cfg(feature = "naga-in")]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct WgslCompilation {
pub(crate) vertex: ::naga::Module,
pub(crate) fragment: ::naga::Module,
}