X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=88a323992636b0642d05d4134ee81d68bdebce9c;hb=a204b5fac497e2ffbc6791f0f7de9d9d12c16d52;hp=137bd94343190f275eebbaa877dfa554b4785a50;hpb=3a2accb016c9cd01347c71d41e44d5ca45917209;p=libs%2Fgl.git diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index 137bd943..88a32399 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -622,6 +622,38 @@ UnusedVariableRemover::VariableInfo::VariableInfo(): { } +bool UnusedTypeRemover::apply(Stage &stage) +{ + stage.content.visit(*this); + NodeRemover().apply(stage, unused_nodes); + return !unused_nodes.empty(); +} + +void UnusedTypeRemover::visit(BasicTypeDeclaration &type) +{ + if(type.base_type) + unused_nodes.erase(type.base_type); + unused_nodes.insert(&type); +} + +void UnusedTypeRemover::visit(ImageTypeDeclaration &type) +{ + if(type.base_type) + unused_nodes.erase(type.base_type); + unused_nodes.insert(&type); +} + +void UnusedTypeRemover::visit(StructDeclaration &strct) +{ + unused_nodes.insert(&strct); +} + +void UnusedTypeRemover::visit(VariableDeclaration &var) +{ + unused_nodes.erase(var.type_declaration); +} + + UnusedVariableRemover::UnusedVariableRemover(): aggregate(0), r_assignment(0), @@ -760,7 +792,6 @@ void UnusedVariableRemover::visit(ExpressionStatement &expr) void UnusedVariableRemover::visit(StructDeclaration &strct) { SetForScope set(aggregate, &strct); - unused_nodes.insert(&strct); TraversingVisitor::visit(strct); } @@ -774,7 +805,6 @@ void UnusedVariableRemover::visit(VariableDeclaration &var) if(var.init_expression) record_assignment(var, *var.init_expression, false); } - unused_nodes.erase(var.type_declaration); TraversingVisitor::visit(var); }