X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=bdaced5c46029299e531b8f3cdbd5055651bc539;hb=001cdc10d0e0b7e006a4dce5363a5c593e35b7ae;hp=f333ef44b0cfe5ef1a88b26a17203faf1b09ac82;hpb=55a18f710f07c51f05d0dc55741a7f3cc8e70cdd;p=libs%2Fgl.git diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index f333ef44..bdaced5c 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -138,7 +138,7 @@ string InlineContentInjector::apply(Stage &stage, FunctionDeclaration &target_fu staging_block.parent = &tgt_blk; staging_block.variables.clear(); - std::vector > params; + vector > params; params.reserve(source_func->parameters.size()); for(NodeArray::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)