From da00bf2be6a8c3cd27153d820cc15e0470e4a1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Tue, 5 Oct 2021 18:05:47 +0100 Subject: [PATCH] [glsl-in] Always use uint for array size (#1448) --- src/front/glsl/parser/types.rs | 13 ++++++++++++- tests/out/wgsl/bevy-pbr-frag.wgsl | 4 ++-- tests/out/wgsl/constant-array-size-vert.wgsl | 2 +- tests/out/wgsl/expressions-frag.wgsl | 2 +- tests/out/wgsl/global-constant-array-vert.wgsl | 2 +- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/front/glsl/parser/types.rs b/src/front/glsl/parser/types.rs index fe6ed3b961..7fc74e2ddf 100644 --- a/src/front/glsl/parser/types.rs +++ b/src/front/glsl/parser/types.rs @@ -24,7 +24,18 @@ impl<'source> ParsingContext<'source> { return Ok(Some((ArraySize::Dynamic, meta))); } - let (constant, _) = self.parse_constant_expression(parser)?; + let (value, span) = self.parse_uint_constant(parser)?; + let constant = parser.module.constants.fetch_or_append( + crate::Constant { + name: None, + specialization: None, + inner: crate::ConstantInner::Scalar { + width: 4, + value: crate::ScalarValue::Uint(value as u64), + }, + }, + span, + ); let end_meta = self.expect(parser, TokenValue::RightBracket)?.meta; meta.subsume(end_meta); Ok(Some((ArraySize::Constant(constant), meta))) diff --git a/tests/out/wgsl/bevy-pbr-frag.wgsl b/tests/out/wgsl/bevy-pbr-frag.wgsl index 23ca8a5f1e..b2c97f693a 100644 --- a/tests/out/wgsl/bevy-pbr-frag.wgsl +++ b/tests/out/wgsl/bevy-pbr-frag.wgsl @@ -23,8 +23,8 @@ struct CameraPosition { struct Lights { AmbientColor: vec4; NumLights: vec4; - PointLights: [[stride(48)]] array; - DirectionalLights: [[stride(32)]] array; + PointLights: [[stride(48)]] array; + DirectionalLights: [[stride(32)]] array; }; [[block]] diff --git a/tests/out/wgsl/constant-array-size-vert.wgsl b/tests/out/wgsl/constant-array-size-vert.wgsl index 27ff1eb379..4987dae389 100644 --- a/tests/out/wgsl/constant-array-size-vert.wgsl +++ b/tests/out/wgsl/constant-array-size-vert.wgsl @@ -1,6 +1,6 @@ [[block]] struct Data { - vecs: [[stride(16)]] array,42>; + vecs: [[stride(16)]] array,42u>; }; [[group(1), binding(0)]] diff --git a/tests/out/wgsl/expressions-frag.wgsl b/tests/out/wgsl/expressions-frag.wgsl index 8bed050c12..8e13167506 100644 --- a/tests/out/wgsl/expressions-frag.wgsl +++ b/tests/out/wgsl/expressions-frag.wgsl @@ -181,7 +181,7 @@ fn testStructConstructor() { } fn testArrayConstructor() { - var tree1: array = array(0.0); + var tree1: array = array(0.0); } diff --git a/tests/out/wgsl/global-constant-array-vert.wgsl b/tests/out/wgsl/global-constant-array-vert.wgsl index 066088b1f5..0e652c5f80 100644 --- a/tests/out/wgsl/global-constant-array-vert.wgsl +++ b/tests/out/wgsl/global-constant-array-vert.wgsl @@ -1,7 +1,7 @@ var i: u32; fn main1() { - var local: array = array(1.0, 2.0); + var local: array = array(1.0, 2.0); let e2: u32 = i; }