diff --git a/src/back/glsl.rs b/src/back/glsl.rs index 52122cedba..29e677eaea 100644 --- a/src/back/glsl.rs +++ b/src/back/glsl.rs @@ -1811,6 +1811,7 @@ fn collect_texture_mapping<'a>( for func in functions { let mut interface = Interface { expressions: &func.expressions, + local_variables: &func.local_variables, visitor: TextureMappingVisitor { expressions: &func.expressions, map: &mut mappings, diff --git a/src/proc/interface.rs b/src/proc/interface.rs index 670f2da506..ca20d1958b 100644 --- a/src/proc/interface.rs +++ b/src/proc/interface.rs @@ -2,6 +2,7 @@ use crate::arena::{Arena, Handle}; pub struct Interface<'a, T> { pub expressions: &'a Arena, + pub local_variables: &'a Arena, pub visitor: T, } @@ -36,7 +37,13 @@ where self.traverse_expr(comp); } } - E::FunctionParameter(_) | E::GlobalVariable(_) | E::LocalVariable(_) => {} + E::FunctionParameter(_) | E::GlobalVariable(_) => {} + E::LocalVariable(var) => { + let var = &self.local_variables[var]; + if let Some(init) = var.init { + self.traverse_expr(init); + } + } E::Load { pointer } => { self.traverse_expr(pointer); } @@ -201,6 +208,7 @@ impl crate::Function { let mut io = Interface { expressions: &self.expressions, + local_variables: &self.local_variables, visitor: GlobalUseVisitor(&mut self.global_usage), }; io.traverse(&self.body);