[glsl-in] Follow spec when choosing default layout

This commit is contained in:
João Capucho
2021-08-02 23:58:20 +01:00
committed by Dzmitry Malyshau
parent 5ec129bbf0
commit de6399a9c7
2 changed files with 19 additions and 8 deletions

View File

@@ -921,13 +921,24 @@ impl<'source, 'program> Parser<'source, 'program> {
ty_name: String,
mut meta: SourceMetadata,
) -> Result<bool> {
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)?;

View File

@@ -1,6 +1,6 @@
[[block]]
struct PrimeIndices {
indices: [[stride(16)]] array<u32>;
indices: [[stride(4)]] array<u32>;
};
[[group(0), binding(0)]]