X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=da95158903d2fea799d1aba55c3faca0762f7434;hb=5871764de7aa23d2c40cac03ad9d07088fb57e06;hp=64ceddcc16ba92968c2f0d517f0230bb8e739598;hpb=76cc18518fc8b0b4fa11fda153e7d9b3899ed112;p=libs%2Fgl.git diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index 64ceddcc..da951589 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -449,7 +449,7 @@ void ExpressionInliner::visit(Assignment &assign) if(targets_overlap(i->first, assign.target)) i->second->blocked = true; - expressions.push_back(ExpressionInfo()); + expressions.emplace_back(); ExpressionInfo &info = expressions.back(); info.target = assign.target; // Self-referencing assignments can't be inlined without additional work. @@ -496,7 +496,7 @@ void ExpressionInliner::visit(VariableDeclaration &var) analyze and non-trivial expressions could be expensive to inline. */ if((current_block->parent || (constant && r_trivial)) && var.interface.empty()) { - expressions.push_back(ExpressionInfo()); + expressions.emplace_back(); ExpressionInfo &info = expressions.back(); info.target = &var; /* Assume variables declared in an iteration initialization statement @@ -1057,10 +1057,11 @@ void ConstantFolder::visit(Iteration &iter) } -void ConstantConditionEliminator::apply(Stage &stage) +bool ConstantConditionEliminator::apply(Stage &stage) { stage.content.visit(*this); NodeRemover().apply(stage, nodes_to_remove); + return !nodes_to_remove.empty(); } ConstantConditionEliminator::ConstantStatus ConstantConditionEliminator::check_constant_condition(const Expression &expr) @@ -1419,7 +1420,7 @@ void UnusedVariableRemover::visit(FunctionCall &call) void UnusedVariableRemover::record_assignment(const Assignment::Target &target, Node &node) { - assignments.push_back(AssignmentInfo()); + assignments.emplace_back(); AssignmentInfo &assign_info = assignments.back(); assign_info.node = &node; assign_info.target = target;