diff --git a/src/back/glsl/mod.rs b/src/back/glsl/mod.rs index 09cb1d7f0b..d26dce9af8 100644 --- a/src/back/glsl/mod.rs +++ b/src/back/glsl/mod.rs @@ -2799,6 +2799,17 @@ impl<'a, W: Write> Writer<'a, W> { self.write_zero_init_value(base)?; write!(self.out, ")")?; } + TypeInner::Struct { ref members, .. } => { + let name = &self.names[&NameKey::Type(ty)]; + write!(self.out, "{}(", name)?; + for (i, member) in members.iter().enumerate() { + self.write_zero_init_value(member.ty)?; + if i != members.len().saturating_sub(1) { + write!(self.out, ", ")?; + } + } + write!(self.out, ")")?; + } _ => {} // TODO: } @@ -3086,6 +3097,9 @@ fn is_value_init_supported(module: &crate::Module, ty: Handle) -> b TypeInner::Array { base, size, .. } => { size != crate::ArraySize::Dynamic && is_value_init_supported(module, base) } + TypeInner::Struct { ref members, .. } => members + .iter() + .all(|member| is_value_init_supported(module, member.ty)), _ => false, } } diff --git a/tests/out/glsl/interpolate.vert_main.Vertex.glsl b/tests/out/glsl/interpolate.vert_main.Vertex.glsl index 588b72ac64..ea2920f860 100644 --- a/tests/out/glsl/interpolate.vert_main.Vertex.glsl +++ b/tests/out/glsl/interpolate.vert_main.Vertex.glsl @@ -18,7 +18,7 @@ smooth centroid out float _vs2fs_location5; smooth sample out float _vs2fs_location6; void main() { - FragmentInput out_; + FragmentInput out_ = FragmentInput(vec4(0.0, 0.0, 0.0, 0.0), 0u, 0.0, vec2(0.0, 0.0), vec3(0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), 0.0, 0.0); out_.position = vec4(2.0, 4.0, 5.0, 6.0); out_.flat_ = 8u; out_.linear = 27.0; diff --git a/tests/out/glsl/operators.main.Compute.glsl b/tests/out/glsl/operators.main.Compute.glsl index 10773041f4..d4ad691040 100644 --- a/tests/out/glsl/operators.main.Compute.glsl +++ b/tests/out/glsl/operators.main.Compute.glsl @@ -42,7 +42,7 @@ vec3 bool_cast(vec3 x) { } float constructors() { - Foo foo; + Foo foo = Foo(vec4(0.0, 0.0, 0.0, 0.0), 0); foo = Foo(vec4(1.0), 1); mat2x2 mat2comp = mat2x2(vec2(1.0, 0.0), vec2(0.0, 1.0)); mat4x4 mat4comp = mat4x4(vec4(1.0, 0.0, 0.0, 0.0), vec4(0.0, 1.0, 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0)); diff --git a/tests/out/glsl/quad-vert.main.Vertex.glsl b/tests/out/glsl/quad-vert.main.Vertex.glsl index d3c740e05b..c5a98c7cde 100644 --- a/tests/out/glsl/quad-vert.main.Vertex.glsl +++ b/tests/out/glsl/quad-vert.main.Vertex.glsl @@ -17,7 +17,7 @@ vec2 v_uv = vec2(0.0, 0.0); vec2 a_uv_1 = vec2(0.0, 0.0); -gen_gl_PerVertex perVertexStruct; +gen_gl_PerVertex perVertexStruct = gen_gl_PerVertex(vec4(0.0, 0.0, 0.0, 1.0), 1.0, float[1](0.0), float[1](0.0)); vec2 a_pos_1 = vec2(0.0, 0.0);