mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
129 lines
3.9 KiB
Rust
129 lines
3.9 KiB
Rust
//! Module processing functionality.
|
|
|
|
#[cfg(feature = "petgraph")]
|
|
mod call_graph;
|
|
mod interface;
|
|
mod namer;
|
|
mod terminator;
|
|
mod typifier;
|
|
mod validator;
|
|
|
|
#[cfg(feature = "petgraph")]
|
|
pub use call_graph::{CallGraph, CallGraphBuilder};
|
|
pub use interface::{Interface, Visitor};
|
|
pub use namer::{EntryPointIndex, NameKey, Namer};
|
|
pub use terminator::ensure_block_returns;
|
|
pub use typifier::{check_constant_type, ResolveContext, ResolveError, Typifier};
|
|
pub use validator::{ValidationError, Validator};
|
|
|
|
impl From<super::StorageFormat> for super::ScalarKind {
|
|
fn from(format: super::StorageFormat) -> Self {
|
|
use super::{ScalarKind as Sk, StorageFormat as Sf};
|
|
match format {
|
|
Sf::R8Unorm => Sk::Float,
|
|
Sf::R8Snorm => Sk::Float,
|
|
Sf::R8Uint => Sk::Uint,
|
|
Sf::R8Sint => Sk::Sint,
|
|
Sf::R16Uint => Sk::Uint,
|
|
Sf::R16Sint => Sk::Sint,
|
|
Sf::R16Float => Sk::Float,
|
|
Sf::Rg8Unorm => Sk::Float,
|
|
Sf::Rg8Snorm => Sk::Float,
|
|
Sf::Rg8Uint => Sk::Uint,
|
|
Sf::Rg8Sint => Sk::Sint,
|
|
Sf::R32Uint => Sk::Uint,
|
|
Sf::R32Sint => Sk::Sint,
|
|
Sf::R32Float => Sk::Float,
|
|
Sf::Rg16Uint => Sk::Uint,
|
|
Sf::Rg16Sint => Sk::Sint,
|
|
Sf::Rg16Float => Sk::Float,
|
|
Sf::Rgba8Unorm => Sk::Float,
|
|
Sf::Rgba8Snorm => Sk::Float,
|
|
Sf::Rgba8Uint => Sk::Uint,
|
|
Sf::Rgba8Sint => Sk::Sint,
|
|
Sf::Rgb10a2Unorm => Sk::Float,
|
|
Sf::Rg11b10Float => Sk::Float,
|
|
Sf::Rg32Uint => Sk::Uint,
|
|
Sf::Rg32Sint => Sk::Sint,
|
|
Sf::Rg32Float => Sk::Float,
|
|
Sf::Rgba16Uint => Sk::Uint,
|
|
Sf::Rgba16Sint => Sk::Sint,
|
|
Sf::Rgba16Float => Sk::Float,
|
|
Sf::Rgba32Uint => Sk::Uint,
|
|
Sf::Rgba32Sint => Sk::Sint,
|
|
Sf::Rgba32Float => Sk::Float,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl crate::TypeInner {
|
|
pub fn scalar_kind(&self) -> Option<super::ScalarKind> {
|
|
match *self {
|
|
super::TypeInner::Scalar { kind, .. } | super::TypeInner::Vector { kind, .. } => {
|
|
Some(kind)
|
|
}
|
|
super::TypeInner::Matrix { .. } => Some(super::ScalarKind::Float),
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl crate::MathFunction {
|
|
pub fn argument_count(&self) -> usize {
|
|
match *self {
|
|
// comparison
|
|
Self::Abs => 1,
|
|
Self::Min => 2,
|
|
Self::Max => 2,
|
|
Self::Clamp => 3,
|
|
// trigonometry
|
|
Self::Cos => 1,
|
|
Self::Cosh => 1,
|
|
Self::Sin => 1,
|
|
Self::Sinh => 1,
|
|
Self::Tan => 1,
|
|
Self::Tanh => 1,
|
|
Self::Acos => 1,
|
|
Self::Asin => 1,
|
|
Self::Atan => 1,
|
|
Self::Atan2 => 2,
|
|
// decomposition
|
|
Self::Ceil => 1,
|
|
Self::Floor => 1,
|
|
Self::Round => 1,
|
|
Self::Fract => 1,
|
|
Self::Trunc => 1,
|
|
Self::Modf => 2,
|
|
Self::Frexp => 2,
|
|
Self::Ldexp => 2,
|
|
// exponent
|
|
Self::Exp => 1,
|
|
Self::Exp2 => 1,
|
|
Self::Log => 1,
|
|
Self::Log2 => 1,
|
|
Self::Pow => 2,
|
|
// geometry
|
|
Self::Dot => 2,
|
|
Self::Outer => 2,
|
|
Self::Cross => 2,
|
|
Self::Distance => 2,
|
|
Self::Length => 1,
|
|
Self::Normalize => 1,
|
|
Self::FaceForward => 3,
|
|
Self::Reflect => 2,
|
|
// computational
|
|
Self::Sign => 1,
|
|
Self::Fma => 3,
|
|
Self::Mix => 3,
|
|
Self::Step => 2,
|
|
Self::SmoothStep => 3,
|
|
Self::Sqrt => 1,
|
|
Self::InverseSqrt => 1,
|
|
Self::Determinant => 1,
|
|
// bits
|
|
Self::CountOneBits => 1,
|
|
Self::ReverseBits => 1,
|
|
}
|
|
}
|
|
}
|