diff options
Diffstat (limited to 'third_party/rust/naga/src/front/wgsl/conv.rs')
-rw-r--r-- | third_party/rust/naga/src/front/wgsl/conv.rs | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/third_party/rust/naga/src/front/wgsl/conv.rs b/third_party/rust/naga/src/front/wgsl/conv.rs new file mode 100644 index 0000000000..6fdea89e7a --- /dev/null +++ b/third_party/rust/naga/src/front/wgsl/conv.rs @@ -0,0 +1,117 @@ +use super::Error; + +pub fn map_storage_class(word: &str) -> Result<crate::StorageClass, Error<'_>> { + match word { + "in" => Ok(crate::StorageClass::Input), + "out" => Ok(crate::StorageClass::Output), + "private" => Ok(crate::StorageClass::Private), + "uniform" => Ok(crate::StorageClass::Uniform), + "storage" => Ok(crate::StorageClass::Storage), + _ => Err(Error::UnknownStorageClass(word)), + } +} + +pub fn map_built_in(word: &str) -> Result<crate::BuiltIn, Error<'_>> { + Ok(match word { + // vertex + "position" => crate::BuiltIn::Position, + "vertex_idx" => crate::BuiltIn::VertexIndex, + "instance_idx" => crate::BuiltIn::InstanceIndex, + // fragment + "front_facing" => crate::BuiltIn::FrontFacing, + "frag_coord" => crate::BuiltIn::FragCoord, + "frag_depth" => crate::BuiltIn::FragDepth, + // compute + "global_invocation_id" => crate::BuiltIn::GlobalInvocationId, + "local_invocation_id" => crate::BuiltIn::LocalInvocationId, + "local_invocation_idx" => crate::BuiltIn::LocalInvocationIndex, + _ => return Err(Error::UnknownBuiltin(word)), + }) +} + +pub fn map_shader_stage(word: &str) -> Result<crate::ShaderStage, Error<'_>> { + match word { + "vertex" => Ok(crate::ShaderStage::Vertex), + "fragment" => Ok(crate::ShaderStage::Fragment), + "compute" => Ok(crate::ShaderStage::Compute), + _ => Err(Error::UnknownShaderStage(word)), + } +} + +pub fn map_interpolation(word: &str) -> Result<crate::Interpolation, Error<'_>> { + match word { + "linear" => Ok(crate::Interpolation::Linear), + "flat" => Ok(crate::Interpolation::Flat), + "centroid" => Ok(crate::Interpolation::Centroid), + "sample" => Ok(crate::Interpolation::Sample), + "perspective" => Ok(crate::Interpolation::Perspective), + _ => Err(Error::UnknownDecoration(word)), + } +} + +pub fn map_storage_format(word: &str) -> Result<crate::StorageFormat, Error<'_>> { + use crate::StorageFormat as Sf; + Ok(match word { + "r8unorm" => Sf::R8Unorm, + "r8snorm" => Sf::R8Snorm, + "r8uint" => Sf::R8Uint, + "r8sint" => Sf::R8Sint, + "r16uint" => Sf::R16Uint, + "r16sint" => Sf::R16Sint, + "r16float" => Sf::R16Float, + "rg8unorm" => Sf::Rg8Unorm, + "rg8snorm" => Sf::Rg8Snorm, + "rg8uint" => Sf::Rg8Uint, + "rg8sint" => Sf::Rg8Sint, + "r32uint" => Sf::R32Uint, + "r32sint" => Sf::R32Sint, + "r32float" => Sf::R32Float, + "rg16uint" => Sf::Rg16Uint, + "rg16sint" => Sf::Rg16Sint, + "rg16float" => Sf::Rg16Float, + "rgba8unorm" => Sf::Rgba8Unorm, + "rgba8snorm" => Sf::Rgba8Snorm, + "rgba8uint" => Sf::Rgba8Uint, + "rgba8sint" => Sf::Rgba8Sint, + "rgb10a2unorm" => Sf::Rgb10a2Unorm, + "rg11b10float" => Sf::Rg11b10Float, + "rg32uint" => Sf::Rg32Uint, + "rg32sint" => Sf::Rg32Sint, + "rg32float" => Sf::Rg32Float, + "rgba16uint" => Sf::Rgba16Uint, + "rgba16sint" => Sf::Rgba16Sint, + "rgba16float" => Sf::Rgba16Float, + "rgba32uint" => Sf::Rgba32Uint, + "rgba32sint" => Sf::Rgba32Sint, + "rgba32float" => Sf::Rgba32Float, + _ => return Err(Error::UnknownStorageFormat(word)), + }) +} + +pub fn get_scalar_type(word: &str) -> Option<(crate::ScalarKind, crate::Bytes)> { + match word { + "f32" => Some((crate::ScalarKind::Float, 4)), + "i32" => Some((crate::ScalarKind::Sint, 4)), + "u32" => Some((crate::ScalarKind::Uint, 4)), + _ => None, + } +} + +pub fn get_intrinsic(word: &str) -> Option<crate::IntrinsicFunction> { + match word { + "any" => Some(crate::IntrinsicFunction::Any), + "all" => Some(crate::IntrinsicFunction::All), + "is_nan" => Some(crate::IntrinsicFunction::IsNan), + "is_inf" => Some(crate::IntrinsicFunction::IsInf), + "is_normal" => Some(crate::IntrinsicFunction::IsNormal), + _ => None, + } +} +pub fn get_derivative(word: &str) -> Option<crate::DerivativeAxis> { + match word { + "dpdx" => Some(crate::DerivativeAxis::X), + "dpdy" => Some(crate::DerivativeAxis::Y), + "dwidth" => Some(crate::DerivativeAxis::Width), + _ => None, + } +} |