Convert the clearValue back to floats for sp_tile_cache_clear()
authorBrian <brian.paul@tungstengraphics.com>
Fri, 7 Dec 2007 22:44:58 +0000 (15:44 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 7 Dec 2007 22:44:58 +0000 (15:44 -0700)
It might be nice if sp->clear() took the color/value as floats...

src/mesa/pipe/softpipe/sp_clear.c

index a4276362b99b0b1b60db51b0b8f5feae8d38a99c..2b24ea63ab70f45dc9d85ae4b4931216ffd1943f 100644 (file)
@@ -57,10 +57,38 @@ softpipe_clear(struct pipe_context *pipe, struct pipe_surface *ps,
    }
    else if (ps == sp_tile_cache_get_surface(softpipe->cbuf_cache[0])) {
       float clear[4];
-      clear[0] = 0.2f; /* XXX hack */
-      clear[1] = 0.2f; /* XXX hack */
-      clear[2] = 0.2f; /* XXX hack */
-      clear[3] = 0.2f; /* XXX hack */
+      /* XXX it sure would be nice if the clear color was passed to
+       * this function as float[4]....
+       */
+      uint r, g, b, a;
+      switch (ps->format) {
+      case PIPE_FORMAT_U_R8_G8_B8_A8:
+         r = (clearValue >> 24) & 0xff;
+         g = (clearValue >> 16) & 0xff;
+         g = (clearValue >>  8) & 0xff;
+         a = (clearValue      ) & 0xff;
+         break;
+      case PIPE_FORMAT_U_A8_R8_G8_B8:
+         r = (clearValue >> 16) & 0xff;
+         g = (clearValue >>  8) & 0xff;
+         b = (clearValue      ) & 0xff;
+         a = (clearValue >> 24) & 0xff;
+         break;
+      case PIPE_FORMAT_U_B8_G8_R8_A8:
+         r = (clearValue >>  8) & 0xff;
+         g = (clearValue >> 16) & 0xff;
+         b = (clearValue >> 24) & 0xff;
+         a = (clearValue      ) & 0xff;
+         break;
+      default:
+         assert(0);
+      }
+
+      clear[0] = r / 255.0;
+      clear[1] = g / 255.0;
+      clear[2] = b / 255.0;
+      clear[3] = a / 255.0;
+
       sp_tile_cache_clear(softpipe->cbuf_cache[0], clear);
    }