i965/fs: Add support for translating ir_triop_fma into MAD.
[mesa.git] / src / mesa / drivers / dri / i965 / brw_fs_visitor.cpp
index 964ad4074a6f27207bf90df9d2697983c0293096..b0494364a1ddd93cbf384f0ebc51fec52898680d 100644 (file)
@@ -336,6 +336,7 @@ fs_visitor::visit(ir_expression *ir)
         ir->operands[operand]->print();
          printf("\n");
       }
+      assert(this->result.is_valid_3src());
       op[operand] = this->result;
 
       /* Matrix expression operands should have been broken down to vector
@@ -717,6 +718,13 @@ fs_visitor::visit(ir_expression *ir)
       break;
    }
 
+   case ir_triop_fma:
+      /* Note that the instruction's argument order is reversed from GLSL
+       * and the IR.
+       */
+      emit(MAD(this->result, op[2], op[1], op[0]));
+      break;
+
    case ir_triop_lrp:
       emit_lrp(this->result, op[0], op[1], op[2]);
       break;