gallium: print warning rather than assert(0) for LOG/EXP opcodes
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 14 Mar 2008 17:24:28 +0000 (11:24 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 14 Mar 2008 17:24:28 +0000 (11:24 -0600)
Glean vertProg1 runs all the way through, rather than aborting.

src/gallium/auxiliary/tgsi/exec/tgsi_exec.c

index f2ed9e0353e4f31c27697645dbe0ef16bf3399f2..ad871d2bdfbe33830464b888169f1cf6d64cca81 100644 (file)
@@ -1516,11 +1516,41 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_EXP:
-      assert (0);
+      printf("TGSI: EXP opcode not implemented\n");
+      /* from ARB_v_p:
+      tmp = ScalarLoad(op0);
+      result.x = 2^floor(tmp);
+      result.y = tmp - floor(tmp);
+      result.z = RoughApprox2ToX(tmp);
+      result.w = 1.0;
+      */
+#if 0
+      /* something like this: */
+      FETCH( &r[0], 0, CHAN_X );
+      micro_exp2( &r[0], &r[0] );
+      FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+        STORE( &r[0], 0, chan_index );
+      }
+#endif
       break;
 
    case TGSI_OPCODE_LOG:
-      assert (0);
+      printf("TGSI: LOG opcode not implemented\n");
+      /* from ARB_v_p:
+      tmp = fabs(ScalarLoad(op0));
+      result.x = floor(log2(tmp));
+      result.y = tmp / 2^(floor(log2(tmp)));
+      result.z = RoughApproxLog2(tmp);
+      result.w = 1.0;
+      */
+#if 0
+      /* something like this: */
+      FETCH( &r[0], 0, CHAN_X );
+      micro_lg2( &r[0], &r[0] );
+      FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+        STORE( &r[0], 0, chan_index );
+      }
+#endif
       break;
 
    case TGSI_OPCODE_MUL: