diff options
author | Eric Anholt <eric@anholt.net> | 2009-12-15 14:32:47 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-12-18 20:35:57 -0800 |
commit | f06c8bd8dd961c9b722759b5d1f8fca78023aba8 (patch) | |
tree | 6fee1b2ffe72f06967d8f63c97453fb3c73dc89b | |
parent | 325f045c04121b989bddfca02711e3d03f7f9c3f (diff) | |
download | mesa-f06c8bd8dd961c9b722759b5d1f8fca78023aba8.tar.gz |
i965: Add support for OPCODE_CMP in the VS to fix GLSL sqrt()
Bug #25628. Fixes piglit case glsl-vs-sqrt-zero.
-rw-r--r-- | 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 00efd3443d1..27aac8b54a9 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; |