Mesa (glsl2): ir_to_mesa: Fix EmitCondCodes for boolean vars as condition.
Eric Anholt
anholt at kemper.freedesktop.org
Mon Jun 28 20:30:14 UTC 2010
Module: Mesa
Branch: glsl2
Commit: cbe52c8012659abe5d81cf1180659820e704d290
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cbe52c8012659abe5d81cf1180659820e704d290
Author: Eric Anholt <eric at anholt.net>
Date: Mon Jun 28 12:16:03 2010 -0700
ir_to_mesa: Fix EmitCondCodes for boolean vars as condition.
Fixes glsl-vs-if-bool.
---
src/mesa/shader/ir_to_mesa.cpp | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 3141a53..85aedd6 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -1146,12 +1146,26 @@ void
ir_to_mesa_visitor::visit(ir_if *ir)
{
ir_to_mesa_instruction *cond_inst, *if_inst, *else_inst = NULL;
+ ir_to_mesa_instruction *prev_inst;
+
+ prev_inst = (ir_to_mesa_instruction *)this->instructions.get_tail();
ir->condition->accept(this);
assert(this->result.file != PROGRAM_UNDEFINED);
if (ctx->Shader.EmitCondCodes) {
cond_inst = (ir_to_mesa_instruction *)this->instructions.get_tail();
+
+ /* See if we actually generated any instruction for generating
+ * the condition. If not, then cook up a move to a temp so we
+ * have something to set cond_update on.
+ */
+ if (cond_inst == prev_inst) {
+ ir_to_mesa_src_reg temp = get_temp(glsl_type::bool_type);
+ cond_inst = ir_to_mesa_emit_op1(ir->condition, OPCODE_MOV,
+ ir_to_mesa_dst_reg_from_src(temp),
+ result);
+ }
cond_inst->cond_update = GL_TRUE;
if_inst = ir_to_mesa_emit_op1(ir->condition,
More information about the mesa-commit
mailing list