]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Remove an obsolete variable
[libs/gl.git] / source / glsl / optimize.cpp
index 7473fe2ca598ad996ee6c3263385f938986e80e2..db779d1b01bf4dc574fd6c564b06329287430443 100644 (file)
@@ -66,8 +66,7 @@ void InlineableFunctionLocator::visit(Return &ret)
 
 InlineContentInjector::InlineContentInjector():
        source_func(0),
-       remap_names(false),
-       deps_only(false)
+       remap_names(0)
 { }
 
 const string &InlineContentInjector::apply(Stage &stage, FunctionDeclaration &target_func, Block &tgt_blk, const NodeList<Statement>::iterator &ins_pt, FunctionDeclaration &src)
@@ -90,9 +89,6 @@ const string &InlineContentInjector::apply(Stage &stage, FunctionDeclaration &ta
                inlined.push_back(r_inlined_statement);
        }
 
-       // Insert the variables here to enable further inlinings to avoid conflicts.
-       tgt_blk.variables.insert(variable_map.begin(), variable_map.end());
-
        SetForScope<unsigned> set_remap(remap_names, 1);
        SetForScope<string> set_prefix(remap_prefix, target_func.name);
        variable_map.clear();
@@ -115,7 +111,6 @@ void InlineContentInjector::visit(VariableReference &var)
        }
        else if(var.declaration)
        {
-               SetFlag set_deps(deps_only);
                if(!variable_map.count(var.name))
                {
                        dependencies.insert(var.declaration);
@@ -129,7 +124,6 @@ void InlineContentInjector::visit(InterfaceBlockReference &iface)
 {
        if(!remap_names && iface.declaration)
        {
-               SetFlag set_deps(deps_only);
                dependencies.insert(iface.declaration);
                referenced_names.insert(iface.name);
                iface.declaration->visit(*this);
@@ -161,7 +155,6 @@ void InlineContentInjector::visit(VariableDeclaration &var)
        }
        else if(var.type_declaration)
        {
-               SetFlag set_deps(deps_only);
                dependencies.insert(var.type_declaration);
                referenced_names.insert(var.type_declaration->name);
                var.type_declaration->visit(*this);
@@ -190,7 +183,8 @@ void InlineContentInjector::visit(Return &ret)
 
 FunctionInliner::FunctionInliner():
        current_function(0),
-       r_any_inlined(false)
+       r_any_inlined(false),
+       r_inlined_here(false)
 { }
 
 bool FunctionInliner::apply(Stage &s)
@@ -218,7 +212,7 @@ void FunctionInliner::visit(Block &block)
 {
        SetForScope<Block *> set_block(current_block, &block);
        SetForScope<NodeList<Statement>::iterator> save_insert_point(insert_point, block.body.begin());
-       for(NodeList<Statement>::iterator i=block.body.begin(); i!=block.body.end(); ++i)
+       for(NodeList<Statement>::iterator i=block.body.begin(); (!r_inlined_here && i!=block.body.end()); ++i)
        {
                insert_point = i;
                (*i)->visit(*this);
@@ -227,6 +221,9 @@ void FunctionInliner::visit(Block &block)
 
 void FunctionInliner::visit(FunctionCall &call)
 {
+       if(r_inlined_here)
+               return;
+
        for(NodeArray<Expression>::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
                visit(*i);
 
@@ -249,6 +246,7 @@ void FunctionInliner::visit(FunctionCall &call)
                /* Inlined variables need to be resolved before this function can be
                inlined further. */
                inlineable.erase(current_function);
+               r_inlined_here = true;
        }
 }
 
@@ -256,6 +254,7 @@ void FunctionInliner::visit(FunctionDeclaration &func)
 {
        SetForScope<FunctionDeclaration *> set_func(current_function, &func);
        TraversingVisitor::visit(func);
+       r_inlined_here = false;
 }
 
 void FunctionInliner::visit(Iteration &iter)