Mesa (master): i965: Fix ARL to work on gen6.

Eric Anholt anholt at kemper.freedesktop.org
Mon Dec 13 22:05:55 UTC 2010


Module: Mesa
Branch: master
Commit: 7cec7bf56c1b8aa03800e01fa06f29a02edae755
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7cec7bf56c1b8aa03800e01fa06f29a02edae755

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Dec 13 11:44:26 2010 -0800

i965: Fix ARL to work on gen6.

RNDD isn't one of the instructions that can do conversion from
execution type to destination type.

Fixes glsl-vs-arrays-3.

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 09887da..326bb1e 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -658,6 +658,22 @@ static void emit_min( struct brw_compile *p,
    }
 }
 
+static void emit_arl(struct brw_compile *p,
+		     struct brw_reg dst,
+		     struct brw_reg src)
+{
+   struct intel_context *intel = &p->brw->intel;
+
+   if (intel->gen >= 6) {
+      struct brw_reg dst_f = retype(dst, BRW_REGISTER_TYPE_F);
+
+      brw_RNDD(p, dst_f, src);
+      brw_MOV(p, dst, dst_f);
+   } else {
+      brw_RNDD(p, dst, src);
+   }
+}
+
 static void emit_math1_gen4(struct brw_vs_compile *c,
 			    GLuint function,
 			    struct brw_reg dst,
@@ -1963,7 +1979,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
 	 emit_math1(c, BRW_MATH_FUNCTION_EXP, dst, args[0], BRW_MATH_PRECISION_FULL);
 	 break;
       case OPCODE_ARL:
-	 brw_RNDD(p, dst, args[0]);
+	 emit_arl(p, dst, args[0]);
 	 break;
       case OPCODE_FLR:
 	 brw_RNDD(p, dst, args[0]);




More information about the mesa-commit mailing list