mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[glsl-in] Support commas in structure definitions (#2400)
This commit is contained in:
@@ -628,36 +628,43 @@ impl<'source> ParsingContext<'source> {
|
||||
loop {
|
||||
// TODO: type_qualifier
|
||||
|
||||
let (mut ty, mut meta) = self.parse_type_non_void(frontend)?;
|
||||
let (name, end_meta) = self.expect_ident(frontend)?;
|
||||
let (base_ty, mut meta) = self.parse_type_non_void(frontend)?;
|
||||
|
||||
meta.subsume(end_meta);
|
||||
loop {
|
||||
let (name, name_meta) = self.expect_ident(frontend)?;
|
||||
let mut ty = base_ty;
|
||||
self.parse_array_specifier(frontend, &mut meta, &mut ty)?;
|
||||
|
||||
self.parse_array_specifier(frontend, &mut meta, &mut ty)?;
|
||||
meta.subsume(name_meta);
|
||||
|
||||
let info = offset::calculate_offset(
|
||||
ty,
|
||||
meta,
|
||||
layout,
|
||||
&mut frontend.module.types,
|
||||
&mut frontend.errors,
|
||||
);
|
||||
|
||||
let member_alignment = info.align;
|
||||
span = member_alignment.round_up(span);
|
||||
align = member_alignment.max(align);
|
||||
|
||||
members.push(StructMember {
|
||||
name: Some(name),
|
||||
ty: info.ty,
|
||||
binding: None,
|
||||
offset: span,
|
||||
});
|
||||
|
||||
span += info.span;
|
||||
|
||||
if self.bump_if(frontend, TokenValue::Comma).is_none() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
self.expect(frontend, TokenValue::Semicolon)?;
|
||||
|
||||
let info = offset::calculate_offset(
|
||||
ty,
|
||||
meta,
|
||||
layout,
|
||||
&mut frontend.module.types,
|
||||
&mut frontend.errors,
|
||||
);
|
||||
|
||||
let member_alignment = info.align;
|
||||
span = member_alignment.round_up(span);
|
||||
align = member_alignment.max(align);
|
||||
|
||||
members.push(StructMember {
|
||||
name: Some(name),
|
||||
ty: info.ty,
|
||||
binding: None,
|
||||
offset: span,
|
||||
});
|
||||
|
||||
span += info.span;
|
||||
|
||||
if let TokenValue::RightBrace = self.expect_peek(frontend)?.value {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,11 @@ struct TestStruct {
|
||||
float array_2d[2][2];
|
||||
float array_toomanyd[2][2][2][2][2][2][2];
|
||||
|
||||
struct LightScatteringParams {
|
||||
float BetaRay, BetaMie[3], HGg, DistanceMul[4], BlendCoeff;
|
||||
vec3 SunDirection, SunColor;
|
||||
};
|
||||
|
||||
void main() {
|
||||
const vec3 positions[2] = vec3[2](
|
||||
vec3(-1.0, 1.0, 0.0),
|
||||
|
||||
@@ -13,6 +13,16 @@ struct TestStruct {
|
||||
b: f32,
|
||||
}
|
||||
|
||||
struct LightScatteringParams {
|
||||
BetaRay: f32,
|
||||
BetaMie: array<f32, 3>,
|
||||
HGg: f32,
|
||||
DistanceMul: array<f32, 4>,
|
||||
BlendCoeff: f32,
|
||||
SunDirection: vec3<f32>,
|
||||
SunColor: vec3<f32>,
|
||||
}
|
||||
|
||||
struct FragmentOutput {
|
||||
@location(0) position: vec2<f32>,
|
||||
@location(1) a: vec2<f32>,
|
||||
|
||||
Reference in New Issue
Block a user