optimized color buffer clear fallback (use mono-color span functions
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 13 Nov 2002 16:46:19 +0000 (16:46 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 13 Nov 2002 16:46:19 +0000 (16:46 +0000)
src/mesa/swrast/s_buffers.c

index 81f8cd1029b8f0833c36738a3331e13a73cb4a35..cdb665fc18e4d812202b2b98240203cac0bf2eb8 100644 (file)
@@ -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);
       }
    }
 }