mesa/colormac: introduce inline helper for 4 unclamped float to ubyte.
authorDave Airlie <airlied@redhat.com>
Wed, 14 Sep 2011 10:08:57 +0000 (11:08 +0100)
committerDave Airlie <airlied@redhat.com>
Wed, 14 Sep 2011 10:18:08 +0000 (11:18 +0100)
This introduces an UNCLAMPED_FLOAT_TO_UBYTE x 4 inline function, as
suggested by Brian. It uses it in a few places I noticed from previous
color changes, and also some core mesa places. I haven't updated other places
yet.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/drivers/dri/intel/intel_blit.c
src/mesa/drivers/dri/nouveau/nouveau_util.h
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/radeon/radeon_state.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/main/colormac.h
src/mesa/main/image.c
src/mesa/swrast/s_blend.c
src/mesa/swrast/s_clear.c

index a45b6e40ecc049286906be1ac55663d8aba17f64..45cfb62014ef7ac8fa2a22e591bb641a8bb89be2 100644 (file)
@@ -322,10 +322,7 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
         uint8_t clear[4];
         GLfloat *color = ctx->Color.ClearColor.f;
 
-        UNCLAMPED_FLOAT_TO_UBYTE(clear[0], color[0]);
-        UNCLAMPED_FLOAT_TO_UBYTE(clear[1], color[1]);
-        UNCLAMPED_FLOAT_TO_UBYTE(clear[2], color[2]);
-        UNCLAMPED_FLOAT_TO_UBYTE(clear[3], color[3]);
+        _mesa_unclamped_float_rgba_to_ubyte(clear, color);
 
         switch (irb->Base.Format) {
         case MESA_FORMAT_ARGB8888:
index 8cfe26dfb44f523a45203bd0d63cc0269132bc3c..63566a63abcf51c8b4b8716a9fff991d8b83862b 100644 (file)
@@ -81,11 +81,9 @@ pack_rgba_f(gl_format f, float c[])
 static inline unsigned
 pack_rgba_clamp_f(gl_format f, float c[])
 {
-       return pack_rgba_i(f, (uint8_t []) {
-                          UNCLAMPED_FLOAT_TO_UBYTE(c[RCOMP]),
-                          UNCLAMPED_FLOAT_TO_UBYTE(c[GCOMP]),
-                          UNCLAMPED_FLOAT_TO_UBYTE(c[BCOMP]),
-                          UNCLAMPED_FLOAT_TO_UBYTE(c[ACOMP]) });
+       GLubyte bytes[4];
+       _mesa_unclamped_float_rgba_to_ubyte(bytes, c);
+       return pack_rgba_i(f, bytes);
 }
 
 static inline unsigned
index ee13179c2be041df231d52a4926b9d9f3813fc1a..b3755d8ddfe6c80626fc8df47602764d85e0641a 100644 (file)
@@ -1734,10 +1734,7 @@ static void r200ClearColor( struct gl_context *ctx,
    rrb = radeon_get_colorbuffer(&rmesa->radeon);
    if (!rrb)
      return;
-   UNCLAMPED_FLOAT_TO_UBYTE(color[0], c.f[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(color[1], c.f[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(color[2], c.f[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(color[3], c.f[3]);
+   _mesa_unclamped_float_rgba_to_ubyte(color, c.f);
    rmesa->radeon.state.color.clear = radeonPackColor( rrb->cpp,
                                              color[0], color[1],
                                              color[2], color[3] );
index 2e716c5622151a1e6c40c46946154cb4b5ad2d9d..979bb65f0bed781ecd4ac71f8a1603152d9f5dda 100644 (file)
@@ -1519,10 +1519,7 @@ static void radeonClearColor( struct gl_context *ctx,
    if (!rrb)
      return;
      
-   UNCLAMPED_FLOAT_TO_UBYTE(c[0], color.f[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(c[1], color.f[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(c[2], color.f[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(c[3], color.f[3]);
+   _mesa_unclamped_float_rgba_to_ubyte(c, color.f);
    rmesa->radeon.state.color.clear = radeonPackColor( rrb->cpp,
                                               c[0], c[1], c[2], c[3] );
 }
index 52964ddd04796f212b08b83f8f9c331cac76fc8d..a59ffd3755a827add1b82a423e00b5b6ce54e9a8 100644 (file)
@@ -111,10 +111,7 @@ clear_color( struct gl_context *ctx,
       const XMesaContext xmesa = XMESA_CONTEXT(ctx);
       XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
 
-      UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[0], color.f[0]);
-      UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[1], color.f[1]);
-      UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[2], color.f[2]);
-      UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[3], color.f[3]);
+      _mesa_unclamped_float_rgba_to_ubyte(xmesa->clearcolor, color.f);
       xmesa->clearpixel = xmesa_color_to_pixel( ctx,
                                                 xmesa->clearcolor[0],
                                                 xmesa->clearcolor[1],
@@ -777,10 +774,7 @@ clear_color_HPCR_ximage( struct gl_context *ctx,
    int i;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
 
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[0], color.f[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[1], color.f[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[2], color.f[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[3], color.f[3]);
+   _mesa_unclamped_float_rgba_to_ubyte(xmesa->clearcolor, color.f);
 
    if (color.f[0] == 0.0 && color.f[1] == 0.0 && color.f[2] == 0.0) {
       /* black is black */
@@ -812,10 +806,7 @@ clear_color_HPCR_pixmap( struct gl_context *ctx,
    int i;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
 
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[0], color.f[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[1], color.f[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[2], color.f[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[3], color.f[3]);
+   _mesa_unclamped_float_rgba_to_ubyte(xmesa->clearcolor, color.f);
 
    if (color.f[0] == 0.0 && color.f[1] == 0.0 && color.f[2] == 0.0) {
       /* black is black */
index d308c48b6c544465401176570a61c6ffd60312b6..923c5a37c3323eb30981fe8aff7ced0352bd08e2 100644 (file)
@@ -168,7 +168,12 @@ do {                                               \
    UNCLAMPED_FLOAT_TO_CHAN((dst)[3], (f)[3]);  \
 } while (0)
 
-
+static inline void _mesa_unclamped_float_rgba_to_ubyte(GLubyte dst[4], const GLfloat src[4])
+{
+   int i;
+   for (i = 0; i < 4; i++)
+      UNCLAMPED_FLOAT_TO_UBYTE(dst[i], src[i]);
+}
 
 /**
  * \name Generic color packing macros.  All inputs should be GLubytes.
index 3e75e7c6bd958e1b9f4d4f44faaa7d85d30f2815..66d7eec6588de763f1962aa65842bad8eec25a9c 100644 (file)
@@ -1513,12 +1513,8 @@ _mesa_convert_colors(GLenum srcType, const GLvoid *src,
          GLubyte (*dst1)[4] = (GLubyte (*)[4]) (useTemp ? tempBuffer : dst);
          GLuint i;
          for (i = 0; i < count; i++) {
-            if (!mask || mask[i]) {
-               UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][RCOMP], src4[i][RCOMP]);
-               UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][GCOMP], src4[i][GCOMP]);
-               UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][BCOMP], src4[i][BCOMP]);
-               UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][ACOMP], src4[i][ACOMP]);
-            }
+            if (!mask || mask[i])
+               _mesa_unclamped_float_rgba_to_ubyte(dst1[i], src4[i]);
          }
          if (useTemp)
             memcpy(dst, tempBuffer, count * 4 * sizeof(GLubyte));
index 793921250ad874c23a70ce1ec704f52673e82a91..3760f91d64bd256c1d044c3fd94832389800b918 100644 (file)
@@ -851,12 +851,8 @@ blend_general(struct gl_context *ctx, GLuint n, const GLubyte mask[],
       blend_general_float(ctx, n, mask, rgbaF, destF, chanType);
       /* convert back to ubytes */
       for (i = 0; i < n; i++) {
-         if (mask[i]) {
-            UNCLAMPED_FLOAT_TO_UBYTE(rgba[i][RCOMP], rgbaF[i][RCOMP]);
-            UNCLAMPED_FLOAT_TO_UBYTE(rgba[i][GCOMP], rgbaF[i][GCOMP]);
-            UNCLAMPED_FLOAT_TO_UBYTE(rgba[i][BCOMP], rgbaF[i][BCOMP]);
-            UNCLAMPED_FLOAT_TO_UBYTE(rgba[i][ACOMP], rgbaF[i][ACOMP]);
-         }
+         if (mask[i])
+          _mesa_unclamped_float_rgba_to_ubyte(rgba[i], rgbaF[i]);
       }
    }
    else if (chanType == GL_UNSIGNED_SHORT) {
index 16d1cdbfcc8c3be61c49d408d36fb1ba396c60b3..980d29bbade5e3343cce5dc9c1d4245a1b86d14e 100644 (file)
@@ -60,10 +60,7 @@ clear_rgba_buffer_with_masking(struct gl_context *ctx, struct gl_renderbuffer *r
    span.array->ChanType = rb->DataType;
    if (span.array->ChanType == GL_UNSIGNED_BYTE) {
       GLubyte clearColor[4];
-      UNCLAMPED_FLOAT_TO_UBYTE(clearColor[RCOMP], ctx->Color.ClearColor.f[0]);
-      UNCLAMPED_FLOAT_TO_UBYTE(clearColor[GCOMP], ctx->Color.ClearColor.f[1]);
-      UNCLAMPED_FLOAT_TO_UBYTE(clearColor[BCOMP], ctx->Color.ClearColor.f[2]);
-      UNCLAMPED_FLOAT_TO_UBYTE(clearColor[ACOMP], ctx->Color.ClearColor.f[3]);
+      _mesa_unclamped_float_rgba_to_ubyte(clearColor, ctx->Color.ClearColor.f);
       for (i = 0; i < width; i++) {
          COPY_4UBV(span.array->rgba[i], clearColor);
       }
@@ -127,10 +124,7 @@ clear_rgba_buffer(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint buf
 
    switch (rb->DataType) {
       case GL_UNSIGNED_BYTE:
-         UNCLAMPED_FLOAT_TO_UBYTE(clear8[0], ctx->Color.ClearColor.f[0]);
-         UNCLAMPED_FLOAT_TO_UBYTE(clear8[1], ctx->Color.ClearColor.f[1]);
-         UNCLAMPED_FLOAT_TO_UBYTE(clear8[2], ctx->Color.ClearColor.f[2]);
-         UNCLAMPED_FLOAT_TO_UBYTE(clear8[3], ctx->Color.ClearColor.f[3]);
+         _mesa_unclamped_float_rgba_to_ubyte(clear8, ctx->Color.ClearColor.f);
          clearVal = clear8;
          break;
       case GL_UNSIGNED_SHORT: