mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[ir] Make the interface visitor traverse local variable initializers
Otherwise the backends will panic on e.g. `vec4 local = Global;` if the global isn't used anywere else in the function.
This commit is contained in:
committed by
Dzmitry Malyshau
parent
a89191c234
commit
8618a8a207
@@ -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,
|
||||
|
||||
@@ -2,6 +2,7 @@ use crate::arena::{Arena, Handle};
|
||||
|
||||
pub struct Interface<'a, T> {
|
||||
pub expressions: &'a Arena<crate::Expression>,
|
||||
pub local_variables: &'a Arena<crate::LocalVariable>,
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user