From 81a86aea4f0990a1b8795f9e00e7a6c4ba368281 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 14 Sep 2011 11:08:57 +0100 Subject: [PATCH] mesa/colormac: introduce inline helper for 4 unclamped float to ubyte. 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 --- src/mesa/drivers/dri/intel/intel_blit.c | 5 +---- src/mesa/drivers/dri/nouveau/nouveau_util.h | 8 +++----- src/mesa/drivers/dri/r200/r200_state.c | 5 +---- src/mesa/drivers/dri/radeon/radeon_state.c | 5 +---- src/mesa/drivers/x11/xm_dd.c | 15 +++------------ src/mesa/main/colormac.h | 7 ++++++- src/mesa/main/image.c | 8 ++------ src/mesa/swrast/s_blend.c | 8 ++------ src/mesa/swrast/s_clear.c | 10 ++-------- 9 files changed, 21 insertions(+), 50 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c index a45b6e4..45cfb62 100644 --- a/src/mesa/drivers/dri/intel/intel_blit.c +++ b/src/mesa/drivers/dri/intel/intel_blit.c @@ -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: diff --git a/src/mesa/drivers/dri/nouveau/nouveau_util.h b/src/mesa/drivers/dri/nouveau/nouveau_util.h index 8cfe26d..63566a6 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_util.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_util.h @@ -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 diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c index ee13179..b3755d8 100644 --- a/src/mesa/drivers/dri/r200/r200_state.c +++ b/src/mesa/drivers/dri/r200/r200_state.c @@ -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] ); diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c index 2e716c5..979bb65 100644 --- a/src/mesa/drivers/dri/radeon/radeon_state.c +++ b/src/mesa/drivers/dri/radeon/radeon_state.c @@ -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] ); } diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c index 52964dd..a59ffd3 100644 --- a/src/mesa/drivers/x11/xm_dd.c +++ b/src/mesa/drivers/x11/xm_dd.c @@ -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 */ diff --git a/src/mesa/main/colormac.h b/src/mesa/main/colormac.h index d308c48..923c5a3 100644 --- a/src/mesa/main/colormac.h +++ b/src/mesa/main/colormac.h @@ -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. diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c index 3e75e7c..66d7eec 100644 --- a/src/mesa/main/image.c +++ b/src/mesa/main/image.c @@ -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)); diff --git a/src/mesa/swrast/s_blend.c b/src/mesa/swrast/s_blend.c index 7939212..3760f91 100644 --- a/src/mesa/swrast/s_blend.c +++ b/src/mesa/swrast/s_blend.c @@ -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) { diff --git a/src/mesa/swrast/s_clear.c b/src/mesa/swrast/s_clear.c index 16d1cdb..980d29b 100644 --- a/src/mesa/swrast/s_clear.c +++ b/src/mesa/swrast/s_clear.c @@ -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: -- 2.7.4