X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=b7236feb6fafb4f7e0495b3b6e8260329f91b29b;hb=f76e62a74917dbd850912587a5e79240dec9681f;hp=08455c8ac61412d71fb8cfbb684c857f6a883169;hpb=223e295e4404a3913b8243d3b7eb12da39a68144;p=libs%2Fgl.git diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index 08455c8a..b7236feb 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -41,18 +41,21 @@ void InlineableFunctionLocator::visit(FunctionDeclaration &func) TraversingVisitor::visit(func); } -void InlineableFunctionLocator::visit(Conditional &) +void InlineableFunctionLocator::visit(Conditional &cond) { + TraversingVisitor::visit(cond); inlineable.erase(current_function); } -void InlineableFunctionLocator::visit(Iteration &) +void InlineableFunctionLocator::visit(Iteration &iter) { + TraversingVisitor::visit(iter); inlineable.erase(current_function); } -void InlineableFunctionLocator::visit(Return &) +void InlineableFunctionLocator::visit(Return &ret) { + TraversingVisitor::visit(ret); if(return_count) inlineable.erase(current_function); ++return_count; @@ -274,6 +277,22 @@ void FunctionInliner::visit(FunctionDeclaration &func) TraversingVisitor::visit(func); } +void FunctionInliner::visit(Conditional &cond) +{ + visit_and_inline(cond.condition); + cond.body.visit(*this); +} + +void FunctionInliner::visit(Iteration &iter) +{ + SetForScope set_block(current_block, &iter.body); + if(iter.init_statement) + iter.init_statement->visit(*this); + /* Skip the condition and loop expression parts because they're executed on + every iteration of the loop */ + iter.body.visit(*this); +} + void FunctionInliner::visit(Return &ret) { if(ret.expression)