diff --git a/src/back/wgsl/writer.rs b/src/back/wgsl/writer.rs index 517251ca4b..2a1c7fb543 100644 --- a/src/back/wgsl/writer.rs +++ b/src/back/wgsl/writer.rs @@ -1341,6 +1341,13 @@ impl Writer { } // Write global type self.write_type(module, global.ty)?; + + // Write initializer + if let Some(init) = global.init { + write!(self.out, " = ")?; + self.write_constant(module, init)?; + } + // End with semicolon writeln!(self.out, ";")?; @@ -1368,8 +1375,25 @@ impl Writer { self.write_type(module, ty)?; write!(self.out, "(")?; + let members = match module.types[ty].inner { + TypeInner::Struct { ref members, .. } => Some(members), + _ => None, + }; + // Write the comma separated constants for (index, constant) in components.iter().enumerate() { + if let Some(&Binding::BuiltIn(builtin)) = + members.and_then(|members| members.get(index)?.binding.as_ref()) + { + if builtin_str(builtin).is_none() { + log::warn!( + "Skip constant for struct member with unsupported builtin {:?}", + builtin + ); + continue; + } + } + self.write_constant(module, *constant)?; // Only write a comma if isn't the last element if index != components.len().saturating_sub(1) { diff --git a/tests/out/quad-vert.wgsl b/tests/out/quad-vert.wgsl index 5ff06e8570..92fab9dad0 100644 --- a/tests/out/quad-vert.wgsl +++ b/tests/out/quad-vert.wgsl @@ -10,7 +10,7 @@ struct VertexOutput { var v_uv: vec2; var a_uv: vec2; -var perVertexStruct: gl_PerVertex; +var perVertexStruct: gl_PerVertex = gl_PerVertex(vec4(0.0, 0.0, 0.0, 1.0), ); var a_pos: vec2; fn main() {