GLSL spec boneheadedly says (a ^^ a) must actually be evaluated. Signed-off-by: Matt Turner <matts...@gmail.com> ---
Fortunately, shaders that do this are even more boneheaded. src/glsl/opt_algebraic.cpp | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp index cade961..5fc4fc8 100644 --- a/src/glsl/opt_algebraic.cpp +++ b/src/glsl/opt_algebraic.cpp @@ -320,7 +320,12 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) break; case ir_binop_logic_xor: - /* FINISHME: Also simplify (a ^^ a) to (false). */ + /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec: + * + * "Exclusive or (^^) will always evaluate both operands." + * + * So we can't simplify (a ^^ a) to false. + */ if (is_vec_zero(op_const[0])) { this->progress = true; return ir->operands[1]; -- 1.7.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev