From: Brian Paul Date: Wed, 13 Nov 2002 16:46:19 +0000 (+0000) Subject: optimized color buffer clear fallback (use mono-color span functions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4d7a1289ed5e82004ef675ba2fbb084b968d96b7;p=mesa.git optimized color buffer clear fallback (use mono-color span functions --- diff --git a/src/mesa/swrast/s_buffers.c b/src/mesa/swrast/s_buffers.c index 81f8cd1029b..cdb665fc18e 100644 --- a/src/mesa/swrast/s_buffers.c +++ b/src/mesa/swrast/s_buffers.c @@ -1,8 +1,8 @@ -/* $Id: s_buffers.c,v 1.15 2002/10/24 23:57:24 brianp Exp $ */ +/* $Id: s_buffers.c,v 1.16 2002/11/13 16:46:19 brianp Exp $ */ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 5.1 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -68,7 +68,7 @@ clear_color_buffer_with_masking( GLcontext *ctx ) } _mesa_mask_rgba_array( ctx, width, x, y + i, rgba ); (*swrast->Driver.WriteRGBASpan)( ctx, width, x, y + i, - (CONST GLchan (*)[4]) rgba, NULL ); + (CONST GLchan (*)[4]) rgba, NULL ); } } else { @@ -104,7 +104,6 @@ clear_color_buffer(GLcontext *ctx) if (ctx->Visual.rgbMode) { /* RGBA mode */ GLchan clearColor[4]; - GLchan span[MAX_WIDTH][4]; GLint i; CLAMPED_FLOAT_TO_CHAN(clearColor[RCOMP], ctx->Color.ClearColor[0]); @@ -113,38 +112,22 @@ clear_color_buffer(GLcontext *ctx) CLAMPED_FLOAT_TO_CHAN(clearColor[ACOMP], ctx->Color.ClearColor[3]); ASSERT(*((GLuint *) &ctx->Color.ColorMask) == 0xffffffff); + ASSERT(swrast->Driver.WriteRGBASpan); - for (i = 0; i < width; i++) { - COPY_CHAN4(span[i], clearColor); - } for (i = 0; i < height; i++) { - (*swrast->Driver.WriteRGBASpan)( ctx, width, x, y + i, - (CONST GLchan (*)[4]) span, NULL ); + (*swrast->Driver.WriteMonoRGBASpan)( ctx, width, x, y + i, + clearColor, NULL ); } } else { /* Color index mode */ + GLint i; ASSERT((ctx->Color.IndexMask & ((1 << ctx->Visual.indexBits) - 1)) == (GLuint) ((1 << ctx->Visual.indexBits) - 1)); - if (ctx->Visual.indexBits == 8) { - /* 8-bit clear */ - GLubyte span[MAX_WIDTH]; - GLint i; - MEMSET(span, ctx->Color.ClearIndex, width); - for (i = 0; i < height; i++) { - (*swrast->Driver.WriteCI8Span)( ctx, width, x, y + i, span, NULL ); - } - } - else { - /* non 8-bit clear */ - GLuint span[MAX_WIDTH]; - GLint i; - for (i = 0; i < width; i++) { - span[i] = ctx->Color.ClearIndex; - } - for (i = 0; i < height; i++) { - (*swrast->Driver.WriteCI32Span)( ctx, width, x, y + i, span, NULL ); - } + ASSERT(swrast->Driver.WriteMonoCISpan); + for (i = 0; i < height; i++) { + (*swrast->Driver.WriteMonoCISpan)( ctx, width, x, y + i, + ctx->Color.ClearIndex, NULL); } } }