From 619af2f62f359fc8d4d24938fd72a1f5b8ead1e0 Mon Sep 17 00:00:00 2001 From: sagudev <16504129+sagudev@users.noreply.github.com> Date: Mon, 30 Dec 2024 10:07:33 +0100 Subject: [PATCH] Expose `ImplementedLanguageExtension` as `WGSLLanguageExtension` Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com> --- naga/src/front/wgsl/mod.rs | 2 ++ .../parse/directive/language_extension.rs | 22 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/naga/src/front/wgsl/mod.rs b/naga/src/front/wgsl/mod.rs index a54fd66f0af..98efb257e1e 100644 --- a/naga/src/front/wgsl/mod.rs +++ b/naga/src/front/wgsl/mod.rs @@ -20,6 +20,8 @@ pub use crate::front::wgsl::error::ParseError; use crate::front::wgsl::lower::Lowerer; use crate::Scalar; +pub use crate::front::wgsl::parse::directive::language_extension::ImplementedLanguageExtension as WGSLLanguageExtension; + pub struct Frontend { parser: Parser, } diff --git a/naga/src/front/wgsl/parse/directive/language_extension.rs b/naga/src/front/wgsl/parse/directive/language_extension.rs index a80e7aae988..4308fac03cb 100644 --- a/naga/src/front/wgsl/parse/directive/language_extension.rs +++ b/naga/src/front/wgsl/parse/directive/language_extension.rs @@ -41,7 +41,7 @@ impl LanguageExtension { /// Maps this [`LanguageExtension`] into the sentinel word associated with it in WGSL. pub const fn to_ident(self) -> &'static str { match self { - Self::Implemented(kind) => match kind {}, + Self::Implemented(kind) => kind.to_ident(), Self::Unimplemented(kind) => match kind { UnimplementedLanguageExtension::ReadOnlyAndReadWriteStorageTextures => { Self::READONLY_AND_READWRITE_STORAGE_TEXTURES @@ -60,9 +60,25 @@ impl LanguageExtension { } } -/// A variant of [`LanguageExtension::Implemented`]. +// A variant of [`LanguageExtension::Implemented`]. +/// Enum of all WGSL extensions that are implemented +/// WGSL spec.: #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] -pub(crate) enum ImplementedLanguageExtension {} +pub enum ImplementedLanguageExtension {} + +impl ImplementedLanguageExtension { + const ALL: [ImplementedLanguageExtension; 0] = []; + + /// Returns slice of all variants of [`ImplementedLanguageExtension`] + pub const fn all() -> &'static [Self] { + &Self::ALL + } + + /// Maps this [`ImplementedLanguageExtension`] into the sentinel word associated with it in WGSL. + pub const fn to_ident(self) -> &'static str { + match self {} + } +} /// A variant of [`LanguageExtension::Unimplemented`]. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]