X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foptimize.h;h=92353a77ee1748c651d8d6f35ab266d6a429593c;hb=c39bb707ff8678d0675538994dc05182e61da193;hp=6250130fb30a39bfd9b18c82cdc9acf654c347ad;hpb=7fd67c4a1ed1c04b09c4bf58489a34809017ba8b;p=libs%2Fgl.git diff --git a/source/glsl/optimize.h b/source/glsl/optimize.h index 6250130f..92353a77 100644 --- a/source/glsl/optimize.h +++ b/source/glsl/optimize.h @@ -210,7 +210,8 @@ private: }; /** Removes conditional statements and loops where the condition can be -determined as constant at compile time. */ +determined as constant at compile time. Also removes such statements where +the body is empty and the condition has no side effects. */ class ConstantConditionEliminator: private TraversingVisitor { private: @@ -224,6 +225,7 @@ private: NodeList::iterator insert_point; std::set nodes_to_remove; RefPtr r_ternary_result; + bool r_external_side_effects; public: void apply(Stage &); @@ -233,7 +235,10 @@ private: virtual void visit(Block &); virtual void visit(RefPtr &); + virtual void visit(UnaryExpression &); + virtual void visit(Assignment &); virtual void visit(TernaryExpression &); + virtual void visit(FunctionCall &); virtual void visit(Conditional &); virtual void visit(Iteration &); };