i965: Emit conditional code updates as required for GLSL VS if statements.
authorEric Anholt <eric@anholt.net>
Tue, 4 Aug 2009 21:13:27 +0000 (14:13 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 4 Sep 2009 21:12:36 +0000 (14:12 -0700)
Previously, we'd be branching based on whatever condition code happened to be
laying around.
(cherry picked from commit 7007f8b352763af89805f287153cb7972bff0523)

src/mesa/drivers/dri/i965/brw_vs_emit.c

index b95079a5d13a19dc0628822292f7ed612cad6ff6..4887cdea5b2b73db1bdc1029c2a65d7a60fbf448 100644 (file)
@@ -1448,6 +1448,19 @@ void brw_vs_emit(struct brw_vs_compile *c )
                                    "unknown");
       }
 
+      /* Set the predication update on the last instruction of the native
+       * instruction sequence.
+       *
+       * This would be problematic if it was set on a math instruction,
+       * but that shouldn't be the case with the current GLSL compiler.
+       */
+      if (inst->CondUpdate) {
+        struct brw_instruction *hw_insn = &p->store[p->nr_insn - 1];
+
+        assert(hw_insn->header.destreg__conditionalmod == 0);
+        hw_insn->header.destreg__conditionalmod = BRW_CONDITIONAL_NZ;
+      }
+
       if ((inst->DstReg.File == PROGRAM_OUTPUT)
           && (inst->DstReg.Index != VERT_RESULT_HPOS)
           && c->output_regs[inst->DstReg.Index].used_in_src) {