diff --git a/src/front/glsl/ast.rs b/src/front/glsl/ast.rs index 00e72e8852..ad59dd52af 100644 --- a/src/front/glsl/ast.rs +++ b/src/front/glsl/ast.rs @@ -68,6 +68,7 @@ impl From for PrologueStage { #[derive(Debug)] pub struct EntryArg { + pub name: Option, pub binding: Binding, pub handle: Handle, pub prologue: PrologueStage, diff --git a/src/front/glsl/functions.rs b/src/front/glsl/functions.rs index 9bddc953db..aa4e1ba028 100644 --- a/src/front/glsl/functions.rs +++ b/src/front/glsl/functions.rs @@ -586,7 +586,7 @@ impl Program<'_> { let idx = arguments.len() as u32; arguments.push(FunctionArgument { - name: None, + name: arg.name.clone(), ty, binding: Some(arg.binding.clone()), }); diff --git a/src/front/glsl/variables.rs b/src/front/glsl/variables.rs index 3129081e5a..9eafcf88fb 100644 --- a/src/front/glsl/variables.rs +++ b/src/front/glsl/variables.rs @@ -52,6 +52,7 @@ impl Program<'_> { let idx = self.entry_args.len(); self.entry_args.push(EntryArg { + name: None, binding: Binding::BuiltIn(builtin), handle, prologue, @@ -359,7 +360,7 @@ impl Program<'_> { }); let handle = self.module.global_variables.append(GlobalVariable { - name: name.clone(), + name: name.as_ref().map(|n| format!("gen_entry_{}", n)), class: StorageClass::Private, binding: None, ty, @@ -369,6 +370,7 @@ impl Program<'_> { let idx = self.entry_args.len(); self.entry_args.push(EntryArg { + name: name.clone(), binding: Binding::Location { location, interpolation, diff --git a/tests/out/quad-glsl.wgsl b/tests/out/quad-glsl.wgsl index fccd8cc2ab..6e3cb41208 100644 --- a/tests/out/quad-glsl.wgsl +++ b/tests/out/quad-glsl.wgsl @@ -7,32 +7,32 @@ struct FragmentOutput { [[location(0), interpolate(perspective)]] member2: vec4; }; -var a_pos: vec2; -var a_uv: vec2; -var v_uv: vec2; +var gen_entry_a_pos: vec2; +var gen_entry_a_uv: vec2; +var gen_entry_v_uv: vec2; var gl_Position: vec4; -var v_uv1: vec2; -var o_color: vec4; +var gen_entry_v_uv1: vec2; +var gen_entry_o_color: vec4; fn vert_main() { - let _e2: vec2 = a_pos; - let _e4: vec2 = a_uv; - v_uv = _e4; + let _e2: vec2 = gen_entry_a_pos; + let _e4: vec2 = gen_entry_a_uv; + gen_entry_v_uv = _e4; gl_Position = vec4((1.2000000476837158 * _e2), 0.0, 1.0); return; } fn frag_main() { - o_color = vec4(1.0, 1.0, 1.0, 1.0); + gen_entry_o_color = vec4(1.0, 1.0, 1.0, 1.0); return; } [[stage(vertex)]] -fn vert_main1([[location(0), interpolate(perspective)]] param: vec2, [[location(1), interpolate(perspective)]] param1: vec2) -> VertexOutput { - a_pos = param; - a_uv = param1; +fn vert_main1([[location(0), interpolate(perspective)]] a_pos: vec2, [[location(1), interpolate(perspective)]] a_uv: vec2) -> VertexOutput { + gen_entry_a_pos = a_pos; + gen_entry_a_uv = a_uv; vert_main(); - let _e5: vec2 = v_uv; + let _e5: vec2 = gen_entry_v_uv; let _e7: vec4 = gl_Position; return VertexOutput(_e5, _e7); } @@ -40,6 +40,6 @@ fn vert_main1([[location(0), interpolate(perspective)]] param: vec2, [[loca [[stage(fragment)]] fn frag_main1() -> FragmentOutput { frag_main(); - let _e1: vec4 = o_color; + let _e1: vec4 = gen_entry_o_color; return FragmentOutput(_e1); }