|
|
|
@ -1,7 +1,5 @@
|
|
|
|
|
//! SPIR-V shaders.
|
|
|
|
|
|
|
|
|
|
use ash::vk; |
|
|
|
|
|
|
|
|
|
bitflags::bitflags! { |
|
|
|
|
/// A flag set of shader stages.
|
|
|
|
|
pub struct ShaderStage: u8 { |
|
|
|
@ -22,7 +20,7 @@ pub struct Module {
|
|
|
|
|
/// The error type which is returned from reading a shader program.
|
|
|
|
|
#[derive(thiserror::Error, Debug)] |
|
|
|
|
pub enum Err { |
|
|
|
|
#[error("{}", err.emit_to_string(&src))] |
|
|
|
|
#[error("{}", err.emit_to_string(src))] |
|
|
|
|
Parse { err: naga::front::wgsl::ParseError, src: String }, |
|
|
|
|
#[error(transparent)] |
|
|
|
|
Validate(#[from] naga::valid::ValidationError), |
|
|
|
@ -51,14 +49,15 @@ impl Module {
|
|
|
|
|
let modu = naga::front::wgsl::parse_str(source) |
|
|
|
|
.map_err(|err| Err::Parse { err, src: source.to_owned() })?; |
|
|
|
|
|
|
|
|
|
let mut stag = ShaderStage::empty(); |
|
|
|
|
for entry in &modu.entry_points { |
|
|
|
|
stag |= match entry.stage { |
|
|
|
|
let stag = modu |
|
|
|
|
.entry_points |
|
|
|
|
.iter() |
|
|
|
|
.map(|entry| match entry.stage { |
|
|
|
|
| naga::ShaderStage::Vertex => ShaderStage::VERTEX, |
|
|
|
|
| naga::ShaderStage::Fragment => ShaderStage::FRAGMENT, |
|
|
|
|
| naga::ShaderStage::Compute => ShaderStage::COMPUTE, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
.collect(); |
|
|
|
|
|
|
|
|
|
let mut vali = naga::valid::Validator::new( |
|
|
|
|
naga::valid::ValidationFlags::all(), |
|
|
|
|