tgsi: Saturate modifier obeys ExecMask.
authorMichal Krol <michal@tungstengraphics.com>
Mon, 18 Aug 2008 15:09:20 +0000 (17:09 +0200)
committerMichal Krol <michal@tungstengraphics.com>
Mon, 18 Aug 2008 15:20:12 +0000 (17:20 +0200)
Implement NVIDIA [-1;+1] saturate mode.

src/gallium/auxiliary/tgsi/tgsi_exec.c

index 1217ee71a5378b58635c59d57f77ee31f91868d8..dfd22270c8b2b5c89d7cf5e1dde9adcb3bc2d945 100644 (file)
@@ -1263,13 +1263,27 @@ store_dest(
       break;
 
    case TGSI_SAT_ZERO_ONE:
-      /* XXX need to obey ExecMask here */
-      micro_max( dst, chan, &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C] );
-      micro_min( dst, dst, &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C] );
+      for (i = 0; i < QUAD_SIZE; i++)
+         if (execmask & (1 << i)) {
+            if (chan->f[i] < 0.0f)
+               dst->f[i] = 0.0f;
+            else if (chan->f[i] > 1.0f)
+               dst->f[i] = 1.0f;
+            else
+               dst->i[i] = chan->i[i];
+         }
       break;
 
    case TGSI_SAT_MINUS_PLUS_ONE:
-      assert( 0 );
+      for (i = 0; i < QUAD_SIZE; i++)
+         if (execmask & (1 << i)) {
+            if (chan->f[i] < -1.0f)
+               dst->f[i] = -1.0f;
+            else if (chan->f[i] > 1.0f)
+               dst->f[i] = 1.0f;
+            else
+               dst->i[i] = chan->i[i];
+         }
       break;
 
    default: