i965/vs: Fix support for "IF" instructions by copying brw_fs_visitor.cpp.
authorEric Anholt <eric@anholt.net>
Sat, 6 Aug 2011 02:12:16 +0000 (19:12 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 16 Aug 2011 20:04:41 +0000 (13:04 -0700)
Fixes glsl-vs-if-greater.

src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp

index c3b55db4ac16b5b15ced97bc8dba69b930f96d8b..014f7e62284b4f384b366203c9f58ceac6337e0f 100644 (file)
@@ -1451,12 +1451,18 @@ vec4_visitor::visit(ir_discard *ir)
 void
 vec4_visitor::visit(ir_if *ir)
 {
+   /* Don't point the annotation at the if statement, because then it plus
+    * the then and else blocks get printed.
+    */
    this->base_ir = ir->condition;
-   ir->condition->accept(this);
-   assert(this->result.file != BAD_FILE);
 
-   /* FINISHME: condcode */
-   emit(BRW_OPCODE_IF);
+   if (intel->gen == 6) {
+      emit_if_gen6(ir);
+   } else {
+      emit_bool_to_cond_code(ir->condition);
+      vec4_instruction *inst = emit(BRW_OPCODE_IF);
+      inst->predicate = BRW_PREDICATE_NORMAL;
+   }
 
    visit_instructions(&ir->then_instructions);