From de6399a9c703305f2cdc5ac4a092b188b59f42c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Mon, 2 Aug 2021 23:58:20 +0100 Subject: [PATCH] [glsl-in] Follow spec when choosing default layout --- src/front/glsl/parser.rs | 25 ++++++++++++++++++------- tests/out/wgsl/246-collatz-comp.wgsl | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/front/glsl/parser.rs b/src/front/glsl/parser.rs index b644de61a4..d9bf53f749 100644 --- a/src/front/glsl/parser.rs +++ b/src/front/glsl/parser.rs @@ -921,13 +921,24 @@ impl<'source, 'program> Parser<'source, 'program> { ty_name: String, mut meta: SourceMetadata, ) -> Result { - let layout = qualifiers - .iter() - .find_map(|&(ref qualifier, _)| match *qualifier { - TypeQualifier::Layout(layout) => Some(layout), - _ => None, - }) - .unwrap_or(StructLayout::Std140); + let mut storage = None; + let mut layout = None; + + for &(ref qualifier, _) in qualifiers { + match *qualifier { + TypeQualifier::StorageQualifier(StorageQualifier::StorageClass(c)) => { + storage = Some(c) + } + TypeQualifier::Layout(l) => layout = Some(l), + _ => continue, + } + } + + let layout = match (layout, storage) { + (Some(layout), _) => layout, + (None, Some(StorageClass::Storage { .. })) => StructLayout::Std430, + _ => StructLayout::Std140, + }; let mut members = Vec::new(); let span = self.parse_struct_declaration_list(&mut members, layout)?; diff --git a/tests/out/wgsl/246-collatz-comp.wgsl b/tests/out/wgsl/246-collatz-comp.wgsl index 3ae8876394..21fde3265c 100644 --- a/tests/out/wgsl/246-collatz-comp.wgsl +++ b/tests/out/wgsl/246-collatz-comp.wgsl @@ -1,6 +1,6 @@ [[block]] struct PrimeIndices { - indices: [[stride(16)]] array; + indices: [[stride(4)]] array; }; [[group(0), binding(0)]]