diff --git a/naga/src/common/mod.rs b/naga/src/common/mod.rs index 34de0185b..e1fe06d5c 100644 --- a/naga/src/common/mod.rs +++ b/naga/src/common/mod.rs @@ -8,11 +8,5 @@ pub mod wgsl; pub use diagnostic_debug::{DiagnosticDebug, ForDebug, ForDebugWithTypes}; pub use diagnostic_display::DiagnosticDisplay; -/// Helper function that returns the string corresponding to the [`VectorSize`](crate::VectorSize) -pub const fn vector_size_str(size: crate::VectorSize) -> &'static str { - match size { - crate::VectorSize::Bi => "2", - crate::VectorSize::Tri => "3", - crate::VectorSize::Quad => "4", - } -} +// Re-exported here for backwards compatibility +pub use super::proc::vector_size_str; diff --git a/naga/src/proc/mod.rs b/naga/src/proc/mod.rs index 64da0a966..cebd98f2e 100644 --- a/naga/src/proc/mod.rs +++ b/naga/src/proc/mod.rs @@ -24,7 +24,9 @@ pub use namer::{EntryPointIndex, ExternalTextureNameKey, NameKey, Namer}; pub use overloads::{Conclusion, MissingSpecialType, OverloadSet, Rule}; pub use terminator::ensure_block_returns; use thiserror::Error; -pub use type_methods::min_max_float_representable_by; +pub use type_methods::{ + concrete_int_scalars, min_max_float_representable_by, vector_size_str, vector_sizes, +}; pub use typifier::{compare_types, ResolveContext, ResolveError, TypeResolution}; use crate::non_max_u32::NonMaxU32; diff --git a/naga/src/proc/overloads/mathfunction.rs b/naga/src/proc/overloads/mathfunction.rs index 132f99aec..82ab96930 100644 --- a/naga/src/proc/overloads/mathfunction.rs +++ b/naga/src/proc/overloads/mathfunction.rs @@ -4,10 +4,10 @@ use crate::proc::overloads::any_overload_set::AnyOverloadSet; use crate::proc::overloads::list::List; use crate::proc::overloads::regular::regular; use crate::proc::overloads::utils::{ - concrete_int_scalars, float_scalars, float_scalars_unimplemented_abstract, list, pairs, rule, - scalar_or_vecn, triples, vector_sizes, + float_scalars, float_scalars_unimplemented_abstract, list, pairs, rule, scalar_or_vecn, triples, }; use crate::proc::overloads::OverloadSet; +use crate::proc::type_methods::{concrete_int_scalars, vector_sizes}; use crate::ir; diff --git a/naga/src/proc/overloads/utils.rs b/naga/src/proc/overloads/utils.rs index 4b4396c21..8adfca2c5 100644 --- a/naga/src/proc/overloads/utils.rs +++ b/naga/src/proc/overloads/utils.rs @@ -9,17 +9,6 @@ use crate::proc::TypeResolution; use alloc::vec::Vec; -/// Produce all vector sizes. -pub fn vector_sizes() -> impl Iterator + Clone { - static SIZES: [ir::VectorSize; 3] = [ - ir::VectorSize::Bi, - ir::VectorSize::Tri, - ir::VectorSize::Quad, - ]; - - SIZES.iter().cloned() -} - /// Produce all the floating-point [`ir::Scalar`]s. /// /// Note that `F32` must appear before other sizes; this is how we @@ -40,20 +29,6 @@ pub fn float_scalars_unimplemented_abstract() -> impl Iterator impl Iterator { - [ - ir::Scalar::I32, - ir::Scalar::U32, - ir::Scalar::I64, - ir::Scalar::U64, - ] - .into_iter() -} - /// Produce the scalar and vector [`ir::TypeInner`]s that have `s` as /// their scalar. pub fn scalar_or_vecn(scalar: ir::Scalar) -> impl Iterator { diff --git a/naga/src/proc/type_methods.rs b/naga/src/proc/type_methods.rs index c59d524f1..85678f564 100644 --- a/naga/src/proc/type_methods.rs +++ b/naga/src/proc/type_methods.rs @@ -1,8 +1,9 @@ -//! Methods on [`TypeInner`], [`Scalar`], and [`ScalarKind`]. +//! Methods on or related to [`TypeInner`], [`Scalar`], [`ScalarKind`], and [`VectorSize`]. //! //! [`TypeInner`]: crate::TypeInner //! [`Scalar`]: crate::Scalar //! [`ScalarKind`]: crate::ScalarKind +//! [`VectorSize`]: crate::VectorSize use crate::{ir, valid::MAX_TYPE_SIZE}; @@ -97,6 +98,31 @@ impl crate::Scalar { } } +/// Produce all concrete integer [`ir::Scalar`]s. +/// +/// Note that `I32` and `U32` must come first; this represents conversion rank +/// in overload resolution. +pub fn concrete_int_scalars() -> impl Iterator { + [ + ir::Scalar::I32, + ir::Scalar::U32, + ir::Scalar::I64, + ir::Scalar::U64, + ] + .into_iter() +} + +/// Produce all vector sizes. +pub fn vector_sizes() -> impl Iterator + Clone { + static SIZES: [ir::VectorSize; 3] = [ + ir::VectorSize::Bi, + ir::VectorSize::Tri, + ir::VectorSize::Quad, + ]; + + SIZES.iter().cloned() +} + const POINTER_SPAN: u32 = 4; impl crate::TypeInner { @@ -612,3 +638,12 @@ pub fn min_max_float_representable_by( _ => unreachable!(), } } + +/// Helper function that returns the string corresponding to the [`VectorSize`](crate::VectorSize) +pub const fn vector_size_str(size: crate::VectorSize) -> &'static str { + match size { + crate::VectorSize::Bi => "2", + crate::VectorSize::Tri => "3", + crate::VectorSize::Quad => "4", + } +}