diff --git a/src/back/glsl/features.rs b/src/back/glsl/features.rs index 2a706fb1e9..4aac9b2e67 100644 --- a/src/back/glsl/features.rs +++ b/src/back/glsl/features.rs @@ -357,6 +357,7 @@ impl<'a, W> Writer<'a, W> { | StorageFormat::Rg16Uint | StorageFormat::Rg16Sint | StorageFormat::Rg16Float + | StorageFormat::Rgb10a2Uint | StorageFormat::Rgb10a2Unorm | StorageFormat::Rg11b10Float | StorageFormat::Rg32Uint diff --git a/src/back/glsl/mod.rs b/src/back/glsl/mod.rs index eb2c2ed025..ddef6a4c03 100644 --- a/src/back/glsl/mod.rs +++ b/src/back/glsl/mod.rs @@ -4238,7 +4238,8 @@ const fn glsl_storage_format(format: crate::StorageFormat) -> &'static str { Sf::Rgba8Snorm => "rgba8_snorm", Sf::Rgba8Uint => "rgba8ui", Sf::Rgba8Sint => "rgba8i", - Sf::Rgb10a2Unorm => "rgb10_a2ui", + Sf::Rgb10a2Uint => "rgb10_a2ui", + Sf::Rgb10a2Unorm => "rgb10_a2", Sf::Rg11b10Float => "r11f_g11f_b10f", Sf::Rg32Uint => "rg32ui", Sf::Rg32Sint => "rg32i", diff --git a/src/back/hlsl/conv.rs b/src/back/hlsl/conv.rs index aed2dc0ed0..dcbda3d746 100644 --- a/src/back/hlsl/conv.rs +++ b/src/back/hlsl/conv.rs @@ -129,7 +129,8 @@ impl crate::StorageFormat { | Self::Rgba16Uint | Self::R32Uint | Self::Rg32Uint - | Self::Rgba32Uint => "uint4", + | Self::Rgba32Uint + | Self::Rgb10a2Uint => "uint4", Self::Rgba8Sint | Self::Rgba16Sint | Self::R32Sint diff --git a/src/back/spv/instructions.rs b/src/back/spv/instructions.rs index 11794fc73b..86b3fd8656 100644 --- a/src/back/spv/instructions.rs +++ b/src/back/spv/instructions.rs @@ -1064,7 +1064,8 @@ impl From for spirv::ImageFormat { Sf::Rgba8Snorm => Self::Rgba8Snorm, Sf::Rgba8Uint => Self::Rgba8ui, Sf::Rgba8Sint => Self::Rgba8i, - Sf::Rgb10a2Unorm => Self::Rgb10a2ui, + Sf::Rgb10a2Uint => Self::Rgb10a2ui, + Sf::Rgb10a2Unorm => Self::Rgb10A2, Sf::Rg11b10Float => Self::R11fG11fB10f, Sf::Rg32Uint => Self::Rg32ui, Sf::Rg32Sint => Self::Rg32i, diff --git a/src/back/wgsl/writer.rs b/src/back/wgsl/writer.rs index 980d768782..428a413374 100644 --- a/src/back/wgsl/writer.rs +++ b/src/back/wgsl/writer.rs @@ -1830,6 +1830,7 @@ const fn storage_format_str(format: crate::StorageFormat) -> &'static str { Sf::Rgba8Snorm => "rgba8snorm", Sf::Rgba8Uint => "rgba8uint", Sf::Rgba8Sint => "rgba8sint", + Sf::Rgb10a2Uint => "rgb10a2uint", Sf::Rgb10a2Unorm => "rgb10a2unorm", Sf::Rg11b10Float => "rg11b10float", Sf::Rg32Uint => "rg32uint", diff --git a/src/front/glsl/parser/types.rs b/src/front/glsl/parser/types.rs index d2d24b5dab..6316677022 100644 --- a/src/front/glsl/parser/types.rs +++ b/src/front/glsl/parser/types.rs @@ -401,6 +401,7 @@ fn map_image_format(word: &str) -> Option { "r32f" => Sf::R32Float, "r16f" => Sf::R16Float, "rgba16" => Sf::Rgba16Unorm, + "rgb10_a2ui" => Sf::Rgb10a2Uint, "rgb10_a2" => Sf::Rgb10a2Unorm, "rgba8" => Sf::Rgba8Unorm, "rg16" => Sf::Rg16Unorm, diff --git a/src/front/spv/convert.rs b/src/front/spv/convert.rs index 2967555d2b..f547e806a8 100644 --- a/src/front/spv/convert.rs +++ b/src/front/spv/convert.rs @@ -105,7 +105,8 @@ pub(super) fn map_image_format(word: spirv::Word) -> Result Ok(crate::StorageFormat::Rgba8Snorm), Some(spirv::ImageFormat::Rgba8ui) => Ok(crate::StorageFormat::Rgba8Uint), Some(spirv::ImageFormat::Rgba8i) => Ok(crate::StorageFormat::Rgba8Sint), - Some(spirv::ImageFormat::Rgb10a2ui) => Ok(crate::StorageFormat::Rgb10a2Unorm), + Some(spirv::ImageFormat::Rgb10a2ui) => Ok(crate::StorageFormat::Rgb10a2Uint), + Some(spirv::ImageFormat::Rgb10A2) => Ok(crate::StorageFormat::Rgb10a2Unorm), Some(spirv::ImageFormat::R11fG11fB10f) => Ok(crate::StorageFormat::Rg11b10Float), Some(spirv::ImageFormat::Rg32ui) => Ok(crate::StorageFormat::Rg32Uint), Some(spirv::ImageFormat::Rg32i) => Ok(crate::StorageFormat::Rg32Sint), diff --git a/src/front/wgsl/mod.rs b/src/front/wgsl/mod.rs index 2b471a8a93..6982e850b1 100644 --- a/src/front/wgsl/mod.rs +++ b/src/front/wgsl/mod.rs @@ -71,6 +71,7 @@ impl crate::StorageFormat { Sf::Rgba8Snorm => "rgba8snorm", Sf::Rgba8Uint => "rgba8uint", Sf::Rgba8Sint => "rgba8sint", + Sf::Rgb10a2Uint => "rgb10a2uint", Sf::Rgb10a2Unorm => "rgb10a2unorm", Sf::Rg11b10Float => "rg11b10float", Sf::Rg32Uint => "rg32uint", diff --git a/src/front/wgsl/parse/conv.rs b/src/front/wgsl/parse/conv.rs index a69dbbe470..3b14d0aee3 100644 --- a/src/front/wgsl/parse/conv.rs +++ b/src/front/wgsl/parse/conv.rs @@ -84,6 +84,7 @@ pub fn map_storage_format(word: &str, span: Span) -> Result Sf::Rgba8Snorm, "rgba8uint" => Sf::Rgba8Uint, "rgba8sint" => Sf::Rgba8Sint, + "rgb10a2uint" => Sf::Rgb10a2Uint, "rgb10a2unorm" => Sf::Rgb10a2Unorm, "rg11b10float" => Sf::Rg11b10Float, "rg32uint" => Sf::Rg32Uint, diff --git a/src/lib.rs b/src/lib.rs index 9351572892..e7abe1e1c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -601,6 +601,7 @@ pub enum StorageFormat { Rgba8Sint, // Packed 32-bit formats + Rgb10a2Uint, Rgb10a2Unorm, Rg11b10Float, diff --git a/src/proc/mod.rs b/src/proc/mod.rs index bfb2b0d7ac..90fd9500ab 100644 --- a/src/proc/mod.rs +++ b/src/proc/mod.rs @@ -39,6 +39,7 @@ impl From for super::ScalarKind { Sf::Rgba8Snorm => Sk::Float, Sf::Rgba8Uint => Sk::Uint, Sf::Rgba8Sint => Sk::Sint, + Sf::Rgb10a2Uint => Sk::Uint, Sf::Rgb10a2Unorm => Sk::Float, Sf::Rg11b10Float => Sk::Float, Sf::Rg32Uint => Sk::Uint,