X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=9ab8ef70ef94dfc235e08ecee479792f9ae9cf2b;hp=441a73a072e8df7740c27b62f9d3c5cc1f9596b2;hb=7335009e18ecbf53ad9f59d64eed2ed5abbe7b8b;hpb=801c209fa0a2878c0675b7808154de93bc42f5fd diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index 441a73a0..9ab8ef70 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -809,29 +809,6 @@ void UnusedVariableRemover::visit(InterfaceBlock &iface) } } -void UnusedVariableRemover::visit(FunctionDeclaration &func) -{ - if(func.body.body.empty()) - return; - - BlockVariableMap saved_vars = variables; - // Assignments from other functions should not be visible. - for(BlockVariableMap::iterator i=variables.begin(); i!=variables.end(); ++i) - i->second.assignments.resize(i->second.initialized); - TraversingVisitor::visit(func); - swap(variables, saved_vars); - merge_variables(saved_vars); - - /* Always treat function parameters as referenced. Removing unused - parameters is not currently supported. */ - for(NodeArray::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i) - { - BlockVariableMap::iterator j = variables.find(i->get()); - if(j!=variables.end()) - j->second.referenced = true; - } -} - void UnusedVariableRemover::merge_variables(const BlockVariableMap &other_vars) { for(BlockVariableMap::const_iterator i=other_vars.begin(); i!=other_vars.end(); ++i) @@ -855,6 +832,29 @@ void UnusedVariableRemover::merge_variables(const BlockVariableMap &other_vars) } } +void UnusedVariableRemover::visit(FunctionDeclaration &func) +{ + if(func.body.body.empty()) + return; + + BlockVariableMap saved_vars = variables; + // Assignments from other functions should not be visible. + for(BlockVariableMap::iterator i=variables.begin(); i!=variables.end(); ++i) + i->second.assignments.resize(i->second.initialized); + TraversingVisitor::visit(func); + swap(variables, saved_vars); + merge_variables(saved_vars); + + /* Always treat function parameters as referenced. Removing unused + parameters is not currently supported. */ + for(NodeArray::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i) + { + BlockVariableMap::iterator j = variables.find(i->get()); + if(j!=variables.end()) + j->second.referenced = true; + } +} + void UnusedVariableRemover::visit(Conditional &cond) { cond.condition->visit(*this);