Skip to content

Commit

Permalink
[glsl-in] Support commas in structure definitions (#2400)
Browse files Browse the repository at this point in the history
  • Loading branch information
fornwall authored Jul 17, 2023
1 parent 04ef22f commit dfd88ee
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 25 deletions.
57 changes: 32 additions & 25 deletions src/front/glsl/parser/declarations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -628,35 +628,42 @@ 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);

self.expect(frontend, TokenValue::Semicolon)?;
let info = offset::calculate_offset(
ty,
meta,
layout,
&mut frontend.module.types,
&mut frontend.errors,
);

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;
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)?;

if let TokenValue::RightBrace = self.expect_peek(frontend)?.value {
break;
Expand Down
5 changes: 5 additions & 0 deletions tests/in/glsl/declarations.frag
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
10 changes: 10 additions & 0 deletions tests/out/wgsl/declarations-frag.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -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>,
Expand Down

0 comments on commit dfd88ee

Please sign in to comment.