]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Resolve function calls where argument types need to be converted
[libs/gl.git] / source / glsl / optimize.cpp
index f333ef44b0cfe5ef1a88b26a17203faf1b09ac82..bdaced5c46029299e531b8f3cdbd5055651bc539 100644 (file)
@@ -138,7 +138,7 @@ string InlineContentInjector::apply(Stage &stage, FunctionDeclaration &target_fu
        staging_block.parent = &tgt_blk;
        staging_block.variables.clear();
 
-       std::vector<RefPtr<VariableDeclaration> > params;
+       vector<RefPtr<VariableDeclaration> > params;
        params.reserve(source_func->parameters.size());
        for(NodeArray<VariableDeclaration>::iterator i=source_func->parameters.begin(); i!=source_func->parameters.end(); ++i)
        {
@@ -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)