X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=inline;f=source%2Fglsl%2Foptimize.cpp;h=414cf38754191a85d8b6643811c3dc5c4764f4b4;hb=f526938b407e061c7424adedc34af4d1ff687f90;hp=c1431f2b6e9d9e33ed522cd853bcd326bbb3414a;hpb=041ba4b1acd55337239c5ce24cc310118c621206;p=libs%2Fgl.git diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index c1431f2b..414cf387 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -232,6 +232,11 @@ void FunctionInliner::visit(MemberAccess &memacc) visit_and_inline(memacc.left); } +void FunctionInliner::visit(Swizzle &swizzle) +{ + visit_and_inline(swizzle.left); +} + void FunctionInliner::visit(FunctionCall &call) { for(NodeArray::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i) @@ -439,6 +444,13 @@ void ExpressionInliner::visit(MemberAccess &memacc) r_trivial = false; } +void ExpressionInliner::visit(Swizzle &swizzle) +{ + visit_and_record(swizzle.left, swizzle.oper, false); + r_oper = swizzle.oper; + r_trivial = false; +} + void ExpressionInliner::visit(UnaryExpression &unary) { SetFlag set_target(mutating, mutating || unary.oper->token[1]=='+' || unary.oper->token[1]=='-'); @@ -752,6 +764,13 @@ void UnusedVariableRemover::visit(MemberAccess &memacc) unused_nodes.erase(memacc.declaration); } +void UnusedVariableRemover::visit(Swizzle &swizzle) +{ + if(assignment_target) + r_assign_to_subfield = true; + TraversingVisitor::visit(swizzle); +} + void UnusedVariableRemover::visit(UnaryExpression &unary) { TraversingVisitor::visit(unary);