]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Don't ignore structs entirely in UnusedVariableRemover
[libs/gl.git] / source / glsl / optimize.cpp
index 68d3f1d77a9b1233701629b2f27b319bfec43e3d..bdaced5c46029299e531b8f3cdbd5055651bc539 100644 (file)
@@ -1010,6 +1010,7 @@ UnusedVariableRemover::UnusedVariableRemover():
        r_assignment(0),
        assignment_target(false),
        r_side_effects(false),
+       in_struct(false),
        composite_reference(false)
 { }
 
@@ -1233,8 +1234,19 @@ void UnusedVariableRemover::visit(ExpressionStatement &expr)
                unused_nodes.insert(&expr);
 }
 
+void UnusedVariableRemover::visit(StructDeclaration &strct)
+{
+       SetFlag set_struct(in_struct);
+       TraversingVisitor::visit(strct);
+}
+
 void UnusedVariableRemover::visit(VariableDeclaration &var)
 {
+       TraversingVisitor::visit(var);
+
+       if(in_struct)
+               return;
+
        VariableInfo &var_info = variables[&var];
        var_info.interface_block = interface_block;
 
@@ -1250,7 +1262,6 @@ void UnusedVariableRemover::visit(VariableDeclaration &var)
                var_info.initialized = true;
                record_assignment(&var, *var.init_expression);
        }
-       TraversingVisitor::visit(var);
 }
 
 void UnusedVariableRemover::visit(InterfaceBlock &iface)