Mesa (mesa_7_7_branch): i965: Add support for OPCODE_CMP in the VS to fix GLSL sqrt()

Eric Anholt anholt at kemper.freedesktop.org
Fri Dec 18 20:36:04 PST 2009


Module: Mesa
Branch: mesa_7_7_branch
Commit: f06c8bd8dd961c9b722759b5d1f8fca78023aba8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f06c8bd8dd961c9b722759b5d1f8fca78023aba8

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Dec 15 14:32:47 2009 -0800

i965: Add support for OPCODE_CMP in the VS to fix GLSL sqrt()

Bug #25628.  Fixes piglit case glsl-vs-sqrt-zero.

---

 src/mesa/drivers/dri/i965/brw_vs_emit.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 00efd34..27aac8b 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -392,6 +392,17 @@ static void emit_sge( struct brw_vs_compile *c,
   emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_GE);
 }
 
+static void emit_cmp( struct brw_compile *p,
+		      struct brw_reg dst,
+		      struct brw_reg arg0,
+		      struct brw_reg arg1,
+		      struct brw_reg arg2 )
+{
+   brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0, brw_imm_f(0));
+   brw_SEL(p, dst, arg1, arg2);
+   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
+}
+
 static void emit_max( struct brw_compile *p, 
 		      struct brw_reg dst,
 		      struct brw_reg arg0,
@@ -1485,6 +1496,9 @@ void brw_vs_emit(struct brw_vs_compile *c )
 	    brw_MOV(p, brw_acc_reg(), args[2]);
 	 brw_MAC(p, dst, args[0], args[1]);
 	 break;
+      case OPCODE_CMP:
+	 emit_cmp(p, dst, args[0], args[1], args[2]);
+	 break;
       case OPCODE_MAX:
 	 emit_max(p, dst, args[0], args[1]);
 	 break;



More information about the mesa-commit mailing list