i965: Support OPCODE_TRUNC in the brw_wm_fp.c code.
authorEric Anholt <eric@anholt.net>
Thu, 28 May 2009 17:34:08 +0000 (10:34 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 2 Jun 2009 13:21:54 +0000 (06:21 -0700)
This gets two more glean glsl1 tests using the non-GLSL path.

src/mesa/drivers/dri/i965/brw_wm_emit.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c
src/mesa/drivers/dri/i965/brw_wm_pass1.c

index 72fc21d2ebaae36371f4aca967fedff5802fd40b..14ab9042de7f2f3ca9a90ae75071f2ce047b8c2d 100644 (file)
@@ -353,6 +353,19 @@ static void emit_mad( struct brw_compile *p,
    }
 }
 
+static void emit_trunc( struct brw_compile *p,
+                     const struct brw_reg *dst,
+                     GLuint mask,
+                     const struct brw_reg *arg0)
+{
+   GLuint i;
+
+   for (i = 0; i < 4; i++) {
+      if (mask & (1<<i)) {
+        brw_RNDZ(p, dst[i], arg0[i]);
+      }
+   }
+}
 
 static void emit_lrp( struct brw_compile *p, 
                      const struct brw_reg *dst,
@@ -1224,6 +1237,10 @@ void brw_wm_emit( struct brw_wm_compile *c )
         emit_dph(p, dst, dst_flags, args[0], args[1]);
         break;
 
+      case OPCODE_TRUNC:
+        emit_trunc(p, dst, dst_flags, args[0]);
+        break;
+
       case OPCODE_LRP:
         emit_lrp(p, dst, dst_flags, args[0], args[1], args[2]);
         break;
index 4936703799157156f9b6f13dcabd3f68889296c4..0e6a2f8ef09f128d18a27aa066d16de2d9aeee6a 100644 (file)
@@ -23,7 +23,6 @@ GLboolean brw_wm_is_glsl(const struct gl_fragment_program *fp)
        const struct prog_instruction *inst = &fp->Base.Instructions[i];
        switch (inst->Opcode) {
            case OPCODE_IF:
-           case OPCODE_TRUNC:
            case OPCODE_ENDIF:
            case OPCODE_CAL:
            case OPCODE_BRK:
index ab9aa2f10d0b6df36ed71cc97b87f8fd2efbe8e6..3436a2471709fddf3ff15e1c472343322cc4209a 100644 (file)
@@ -159,6 +159,7 @@ void brw_wm_pass1( struct brw_wm_compile *c )
       case OPCODE_FRC:
       case OPCODE_MOV:
       case OPCODE_SWZ:
+      case OPCODE_TRUNC:
         read0 = writemask;
         break;