From cbe52c8012659abe5d81cf1180659820e704d290 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 28 Jun 2010 12:16:03 -0700 Subject: [PATCH] ir_to_mesa: Fix EmitCondCodes for boolean vars as condition. Fixes glsl-vs-if-bool. --- src/mesa/shader/ir_to_mesa.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp index 3141a53f5d2..85aedd69676 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, -- 2.30.2