mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[glsl-in] Follow spec when choosing default layout
This commit is contained in:
committed by
Dzmitry Malyshau
parent
5ec129bbf0
commit
de6399a9c7
@@ -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)?;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[[block]]
|
||||
struct PrimeIndices {
|
||||
indices: [[stride(16)]] array<u32>;
|
||||
indices: [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[group(0), binding(0)]]
|
||||
|
||||
Reference in New Issue
Block a user