mesa: remove gl_renderbuffer::PutRowRGB()
[mesa.git] / src / mesa / drivers / x11 / xm_span.c
index 2a14d5307723a4a48e4564098fd6f36245a0b7fd..37e88154f4933a74cfeefaaa60ba95867e4004ea 100644 (file)
@@ -136,7 +136,7 @@ static unsigned long read_pixel( XMesaDisplay *dpy,
  *
  * The function naming convention is:
  *
- *   [put|get]_[mono]_[row|values]_[format]_[pixmap|ximage]
+ *   [put|get]_[row|values]_[format]_[pixmap|ximage]
  *
  * New functions optimized for specific cases can be added without too much
  * trouble.  An example might be the 24-bit TrueColor mode 8A8R8G8B which is
@@ -205,41 +205,6 @@ static void put_row_TRUECOLOR_pixmap( PUT_ROW_ARGS )
 }
 
 
-/*
- * Write a span of PF_TRUECOLOR pixels to a pixmap.
- */
-static void put_row_rgb_TRUECOLOR_pixmap( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            unsigned long p;
-            PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-            XMesaSetForeground( dpy, gc, p );
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      for (i=0;i<n;i++) {
-         unsigned long p;
-         PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-         XMesaPutPixel( rowimg, i, 0, p );
-      }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
-   }
-}
-
 /*
  * Write a span of PF_TRUEDITHER pixels to a pixmap.
  */
@@ -275,41 +240,6 @@ static void put_row_TRUEDITHER_pixmap( PUT_ROW_ARGS )
 }
 
 
-/*
- * Write a span of PF_TRUEDITHER pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_TRUEDITHER_pixmap( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            unsigned long p;
-            PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-            XMesaSetForeground( dpy, gc, p );
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
-         }
-      }
-   }
-   else {
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      for (i=0;i<n;i++) {
-         unsigned long p;
-         PACK_TRUEDITHER(p, x+i, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-         XMesaPutPixel( rowimg, i, 0, p );
-      }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
-   }
-}
-
-
 /*
  * Write a span of PF_8A8B8G8R pixels to a pixmap.
  */
@@ -344,39 +274,6 @@ static void put_row_8A8B8G8R_pixmap( PUT_ROW_ARGS )
 }
 
 
-/*
- * Write a span of PF_8A8B8G8R pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_8A8B8G8R_pixmap( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            XMesaSetForeground( dpy, gc,
-                   PACK_8B8G8R(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLuint *ptr4 = (GLuint *) rowimg->data;
-      for (i=0;i<n;i++) {
-         *ptr4++ = PACK_8B8G8R(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-      }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
-   }
-}
-
 /*
  * Write a span of PF_8A8R8G8B pixels to a pixmap.
  */
@@ -411,38 +308,6 @@ static void put_row_8A8R8G8B_pixmap( PUT_ROW_ARGS )
 }
 
 
-/*
- * Write a span of PF_8A8R8G8B pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_8A8R8G8B_pixmap( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            XMesaSetForeground( dpy, gc,
-                   PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLuint *ptr4 = (GLuint *) rowimg->data;
-      for (i=0;i<n;i++) {
-         *ptr4++ = PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-      }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
-   }
-}
 
 /*
  * Write a span of PF_8R8G8B pixels to a pixmap.
@@ -591,12 +456,13 @@ static void put_row_8R8G8B24_pixmap( PUT_ROW_ARGS )
 }
 
 
+
 /*
- * Write a span of PF_8R8G8B pixels to a pixmap (no alpha).
+ * Write a span of PF_5R6G5B pixels to a pixmap.
  */
-static void put_row_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
+static void put_row_5R6G5B_pixmap( PUT_ROW_ARGS )
 {
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
+   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GET_XRB(xrb);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
@@ -607,7 +473,7 @@ static void put_row_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
    if (mask) {
       for (i=0;i<n;i++,x++) {
          if (mask[i]) {
-            XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ));
+            XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
             XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
          }
       }
@@ -615,32 +481,34 @@ static void put_row_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
    else {
       /* draw all pixels */
       XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLuint *ptr4 = (GLuint *) rowimg->data;
+      register GLushort *ptr2 = (GLushort *) rowimg->data;
       for (i=0;i<n;i++) {
-         *ptr4++ = PACK_8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
+         ptr2[i] = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
       }
       XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
    }
 }
 
+
 /*
- * Write a span of PF_8R8G8B24 pixels to a pixmap (no alpha).
+ * Write a span of PF_DITHER_5R6G5B pixels to a pixmap.
  */
-static void put_row_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
+static void put_row_DITHER_5R6G5B_pixmap( PUT_ROW_ARGS )
 {
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
+   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GET_XRB(xrb);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
+   register GLuint i;
    y = YFLIP(xrb, y);
    if (mask) {
-      register GLuint i;
       for (i=0;i<n;i++,x++) {
          if (mask[i]) {
-            XMesaSetForeground( dpy, gc,
-                  PACK_8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ));
+            unsigned long p;
+            PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+            XMesaSetForeground( dpy, gc, p );
             XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
          }
       }
@@ -648,76 +516,9 @@ static void put_row_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
    else {
       /* draw all pixels */
       XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLuint *ptr4 = (GLuint *) rowimg->data;
-      register GLuint pixel;
-      static const GLuint shift[4] = {0, 8, 16, 24};
-      unsigned w = n;
-      register GLuint i = 0;
-      while (w > 3) {
-         pixel = 0;
-         pixel |= rgb[i][BCOMP]/* << shift[0]*/;
-         pixel |= rgb[i][GCOMP] << shift[1];
-         pixel |= rgb[i++][RCOMP] << shift[2];
-         pixel |= rgb[i][BCOMP] <<shift[3];
-         *ptr4++ = pixel;
-
-         pixel = 0;
-         pixel |= rgb[i][GCOMP]/* << shift[0]*/;
-         pixel |= rgb[i++][RCOMP] << shift[1];
-         pixel |= rgb[i][BCOMP] << shift[2];
-         pixel |= rgb[i][GCOMP] << shift[3];
-         *ptr4++ = pixel;
-
-         pixel = 0;
-         pixel |= rgb[i++][RCOMP]/* << shift[0]*/;
-         pixel |= rgb[i][BCOMP] << shift[1];
-         pixel |= rgb[i][GCOMP] << shift[2];
-         pixel |= rgb[i++][RCOMP] << shift[3];
-         *ptr4++ = pixel;
-         w -= 4;
-      }
-      switch (w) {
-         case 3:
-            pixel = 0;
-            pixel |= rgb[i][BCOMP]/* << shift[0]*/;
-            pixel |= rgb[i][GCOMP] << shift[1];
-            pixel |= rgb[i++][RCOMP] << shift[2];
-            pixel |= rgb[i][BCOMP] << shift[3];
-            *ptr4++ = pixel;
-            pixel = 0;
-            pixel |= rgb[i][GCOMP]/* << shift[0]*/;
-            pixel |= rgb[i++][RCOMP] << shift[1];
-            pixel |= rgb[i][BCOMP] << shift[2];
-            pixel |= rgb[i][GCOMP] << shift[3];
-            *ptr4++ = pixel;
-            pixel = *ptr4;
-            pixel &= 0xffffff00;
-            pixel |= rgb[i++][RCOMP]/* << shift[0]*/;
-            *ptr4++ = pixel;
-            break;
-         case 2:
-            pixel = 0;
-            pixel |= rgb[i][BCOMP]/* << shift[0]*/;
-            pixel |= rgb[i][GCOMP] << shift[1];
-            pixel |= rgb[i++][RCOMP] << shift[2];
-            pixel |= rgb[i][BCOMP]  << shift[3];
-            *ptr4++ = pixel;
-            pixel = *ptr4;
-            pixel &= 0xffff0000;
-            pixel |= rgb[i][GCOMP]/* << shift[0]*/;
-            pixel |= rgb[i++][RCOMP] << shift[1];
-            *ptr4++ = pixel;
-            break;
-         case 1:
-            pixel = *ptr4;
-            pixel &= 0xff000000;
-            pixel |= rgb[i][BCOMP]/* << shift[0]*/;
-            pixel |= rgb[i][GCOMP] << shift[1];
-            pixel |= rgb[i++][RCOMP] << shift[2];
-            *ptr4++ = pixel;
-            break;
-         case 0:
-            break;
+      register GLushort *ptr2 = (GLushort *) rowimg->data;
+      for (i=0;i<n;i++) {
+         PACK_TRUEDITHER( ptr2[i], x+i, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
       }
       XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
    }
@@ -725,49 +526,45 @@ static void put_row_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
 
 
 /*
- * Write a span of PF_5R6G5B pixels to a pixmap.
+ * Write a span of PF_TRUECOLOR pixels to an XImage.
  */
-static void put_row_5R6G5B_pixmap( PUT_ROW_ARGS )
+static void put_row_TRUECOLOR_ximage( PUT_ROW_ARGS )
 {
    const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
+   XMesaImage *img = xrb->ximage;
    register GLuint i;
    y = YFLIP(xrb, y);
    if (mask) {
       for (i=0;i<n;i++,x++) {
          if (mask[i]) {
-            XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+            unsigned long p;
+            PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+            XMesaPutPixel( img, x, y, p );
          }
       }
    }
    else {
       /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLushort *ptr2 = (GLushort *) rowimg->data;
-      for (i=0;i<n;i++) {
-         ptr2[i] = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+      for (i=0;i<n;i++,x++) {
+         unsigned long p;
+         PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+         XMesaPutPixel( img, x, y, p );
       }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
    }
 }
 
 
 /*
- * Write a span of PF_DITHER_5R6G5B pixels to a pixmap.
+ * Write a span of PF_TRUEDITHER pixels to an XImage.
  */
-static void put_row_DITHER_5R6G5B_pixmap( PUT_ROW_ARGS )
+static void put_row_TRUEDITHER_ximage( PUT_ROW_ARGS )
 {
    const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
+   XMesaImage *img = xrb->ximage;
    register GLuint i;
    y = YFLIP(xrb, y);
    if (mask) {
@@ -775,326 +572,83 @@ static void put_row_DITHER_5R6G5B_pixmap( PUT_ROW_ARGS )
          if (mask[i]) {
             unsigned long p;
             PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
-            XMesaSetForeground( dpy, gc, p );
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+            XMesaPutPixel( img, x, y, p );
          }
       }
    }
    else {
       /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLushort *ptr2 = (GLushort *) rowimg->data;
-      for (i=0;i<n;i++) {
-         PACK_TRUEDITHER( ptr2[i], x+i, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+      for (i=0;i<n;i++,x++) {
+         unsigned long p;
+         PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+         XMesaPutPixel( img, x, y, p );
       }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
    }
 }
 
 
 /*
- * Write a span of PF_5R6G5B pixels to a pixmap (no alpha).
+ * Write a span of PF_8A8B8G8R-format pixels to an ximage.
  */
-static void put_row_rgb_5R6G5B_pixmap( RGB_SPAN_ARGS )
+static void put_row_8A8B8G8R_ximage( PUT_ROW_ARGS )
 {
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
-   y = YFLIP(xrb, y);
+   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
+   (void) ctx;
    if (mask) {
-      for (i=0;i<n;i++,x++) {
+      for (i=0;i<n;i++) {
          if (mask[i]) {
-            XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ));
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+            ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
          }
       }
    }
    else {
       /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLushort *ptr2 = (GLushort *) rowimg->data;
       for (i=0;i<n;i++) {
-         ptr2[i] = PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
+         ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
       }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
    }
 }
 
 
 /*
- * Write a span of PF_DITHER_5R6G5B pixels to a pixmap (no alpha).
+ * Write a span of PF_8A8R8G8B-format pixels to an ximage.
  */
-static void put_row_rgb_DITHER_5R6G5B_pixmap( RGB_SPAN_ARGS )
+static void put_row_8A8R8G8B_ximage( PUT_ROW_ARGS )
 {
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
-   y = YFLIP(xrb, y);
+   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
    if (mask) {
-      for (i=0;i<n;i++,x++) {
+      for (i=0;i<n;i++) {
          if (mask[i]) {
-            unsigned long p;
-            PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-            XMesaSetForeground( dpy, gc, p );
-            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+            ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
          }
       }
    }
    else {
       /* draw all pixels */
-      XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
-      register GLushort *ptr2 = (GLushort *) rowimg->data;
       for (i=0;i<n;i++) {
-         PACK_TRUEDITHER( ptr2[i], x+i, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
+         ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
       }
-      XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
    }
 }
 
 
 /*
- * Write a span of PF_TRUECOLOR pixels to an XImage.
+ * Write a span of PF_8R8G8B-format pixels to an ximage.
  */
-static void put_row_TRUECOLOR_ximage( PUT_ROW_ARGS )
+static void put_row_8R8G8B_ximage( PUT_ROW_ARGS )
 {
    const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GET_XRB(xrb);
-   XMesaImage *img = xrb->ximage;
    register GLuint i;
-   y = YFLIP(xrb, y);
+   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
    if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            unsigned long p;
-            PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
-            XMesaPutPixel( img, x, y, p );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++,x++) {
-         unsigned long p;
-         PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
-         XMesaPutPixel( img, x, y, p );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_TRUECOLOR pixels to an XImage (no alpha).
- */
-static void put_row_rgb_TRUECOLOR_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaImage *img = xrb->ximage;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            unsigned long p;
-            PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-            XMesaPutPixel( img, x, y, p );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++,x++) {
-         unsigned long p;
-         PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-         XMesaPutPixel( img, x, y, p );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_TRUEDITHER pixels to an XImage.
- */
-static void put_row_TRUEDITHER_ximage( PUT_ROW_ARGS )
-{
-   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaImage *img = xrb->ximage;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            unsigned long p;
-            PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
-            XMesaPutPixel( img, x, y, p );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++,x++) {
-         unsigned long p;
-         PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
-         XMesaPutPixel( img, x, y, p );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_TRUEDITHER pixels to an XImage (no alpha).
- */
-static void put_row_rgb_TRUEDITHER_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaImage *img = xrb->ximage;
-   register GLuint i;
-   y = YFLIP(xrb, y);
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            unsigned long p;
-            PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-            XMesaPutPixel( img, x, y, p );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++,x++) {
-         unsigned long p;
-         PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-         XMesaPutPixel( img, x, y, p );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_8A8B8G8R-format pixels to an ximage.
- */
-static void put_row_8A8B8G8R_ximage( PUT_ROW_ARGS )
-{
-   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
-   (void) ctx;
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++) {
-         ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_8A8B8G8R-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8A8B8G8R_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            ptr[i] = PACK_8A8B8G8R( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++) {
-         ptr[i] = PACK_8A8B8G8R( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
-      }
-   }
-}
-
-/*
- * Write a span of PF_8A8R8G8B-format pixels to an ximage.
- */
-static void put_row_8A8R8G8B_ximage( PUT_ROW_ARGS )
-{
-   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++) {
-         ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_8A8R8G8B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8A8R8G8B_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            ptr[i] = PACK_8A8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++) {
-         ptr[i] = PACK_8A8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_8R8G8B-format pixels to an ximage.
- */
-static void put_row_8R8G8B_ximage( PUT_ROW_ARGS )
-{
-   const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
+      for (i=0;i<n;i++) {
          if (mask[i]) {
             ptr[i] = PACK_8R8G8B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
          }
@@ -1259,63 +813,6 @@ static void put_row_8R8G8B24_ximage( PUT_ROW_ARGS )
 }
 
 
-/*
- * Write a span of PF_8R8G8B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8R8G8B_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            ptr[i] = PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++) {
-         ptr[i] = PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-      }
-   }
-}
-
-
-/*
- * Write a span of PF_8R8G8B24-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8R8G8B24_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLubyte *ptr = (GLubyte *) PIXEL_ADDR3(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            *ptr++ = rgb[i][BCOMP];
-            *ptr++ = rgb[i][GCOMP];
-            *ptr++ = rgb[i][RCOMP];
-         }
-         else {
-            ptr += 3;
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-      for (i=0;i<n;i++) {
-         *ptr++ = rgb[i][BCOMP];
-         *ptr++ = rgb[i][GCOMP];
-         *ptr++ = rgb[i][RCOMP];
-      }
-   }
-}
-
-
 /*
  * Write a span of PF_5R6G5B-format pixels to an ximage.
  */
@@ -1398,103 +895,21 @@ static void put_row_DITHER_5R6G5B_ximage( PUT_ROW_ARGS )
 }
 
 
+/**********************************************************************/
+/*** Write COLOR PIXEL functions                                    ***/
+/**********************************************************************/
+
+
+#define PUT_VALUES_ARGS \
+       struct gl_context *ctx, struct gl_renderbuffer *rb,     \
+       GLuint n, const GLint x[], const GLint y[],     \
+       const void *values, const GLubyte mask[]
+
+
 /*
- * Write a span of PF_5R6G5B-format pixels to an ximage (no alpha).
+ * Write an array of PF_TRUECOLOR pixels to a pixmap.
  */
-static void put_row_rgb_5R6G5B_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   GET_XRB(xrb);
-   register GLuint i;
-   register GLushort *ptr = PIXEL_ADDR2(xrb, x, y);
-   if (mask) {
-      for (i=0;i<n;i++) {
-         if (mask[i]) {
-            ptr[i] = PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
-      GLuint *ptr32 = (GLuint *) ptr;
-      GLuint extraPixel = (n & 1);
-      n -= extraPixel;
-      for (i = 0; i < n; i += 2) {
-         GLuint p0, p1;
-         p0 = PACK_5R6G5B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
-         p1 = PACK_5R6G5B(rgb[i+1][RCOMP], rgb[i+1][GCOMP], rgb[i+1][BCOMP]);
-         *ptr32++ = (p1 << 16) | p0;
-      }
-      if (extraPixel) {
-         ptr[n] = PACK_5R6G5B(rgb[n][RCOMP], rgb[n][GCOMP], rgb[n][BCOMP]);
-      }
-#else
-      for (i=0;i<n;i++) {
-         ptr[i] = PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-      }
-#endif
-   }
-}
-
-
-/*
- * Write a span of PF_DITHER_5R6G5B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_DITHER_5R6G5B_ximage( RGB_SPAN_ARGS )
-{
-   const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
-   GET_XRB(xrb);
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   register GLuint i;
-   register GLushort *ptr = PIXEL_ADDR2(xrb, x, y );
-   if (mask) {
-      for (i=0;i<n;i++,x++) {
-         if (mask[i]) {
-            PACK_TRUEDITHER( ptr[i], x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-         }
-      }
-   }
-   else {
-      /* draw all pixels */
-#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
-      GLuint *ptr32 = (GLuint *) ptr;
-      GLuint extraPixel = (n & 1);
-      n -= extraPixel;
-      for (i = 0; i < n; i += 2, x += 2) {
-         GLuint p0, p1;
-         PACK_TRUEDITHER( p0, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-         PACK_TRUEDITHER( p1, x+1, y, rgb[i+1][RCOMP], rgb[i+1][GCOMP], rgb[i+1][BCOMP] );
-         *ptr32++ = (p1 << 16) | p0;
-      }
-      if (extraPixel) {
-         PACK_TRUEDITHER( ptr[n], x+n, y, rgb[n][RCOMP], rgb[n][GCOMP], rgb[n][BCOMP]);
-      }
-#else
-      for (i=0;i<n;i++,x++) {
-         PACK_TRUEDITHER( ptr[i], x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
-      }
-#endif
-   }
-}
-
-
-
-/**********************************************************************/
-/*** Write COLOR PIXEL functions                                    ***/
-/**********************************************************************/
-
-
-#define PUT_VALUES_ARGS \
-       struct gl_context *ctx, struct gl_renderbuffer *rb,     \
-       GLuint n, const GLint x[], const GLint y[],     \
-       const void *values, const GLubyte mask[]
-
-
-/*
- * Write an array of PF_TRUECOLOR pixels to a pixmap.
- */
-static void put_values_TRUECOLOR_pixmap( PUT_VALUES_ARGS )
+static void put_values_TRUECOLOR_pixmap( PUT_VALUES_ARGS )
 {
    const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
@@ -1810,423 +1225,6 @@ static void put_values_DITHER_5R6G5B_ximage( PUT_VALUES_ARGS )
 
 
 
-/**********************************************************************/
-/*** Write MONO COLOR SPAN functions                                ***/
-/**********************************************************************/
-
-#define PUT_MONO_ROW_ARGS \
-       struct gl_context *ctx, struct gl_renderbuffer *rb,     \
-       GLuint n, GLint x, GLint y, const void *value,  \
-       const GLubyte mask[]
-
-
-
-/*
- * Write a span of identical pixels to a pixmap.
- */
-static void put_mono_row_pixmap( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
-               color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   register GLuint i;
-   XMesaSetForeground( xmesa->display, gc, pixel );
-   y = YFLIP(xrb, y);
-
-   /* New code contributed by Jeff Epler and cleaned up by Keith
-    * Whitwell.  
-    */
-   for (i = 0; i < n; ) {
-      GLuint start = i;
-
-      /* Identify and emit contiguous rendered pixels
-       */
-      while (i < n && (!mask || mask[i]))
-        i++;
-
-      if (start < i) 
-        XMesaFillRectangle( dpy, buffer, gc,
-                            (int)(x+start), (int) y,
-                            (int)(i-start), 1);
-
-      /* Eat up non-rendered pixels
-       */
-      while (i < n && !mask[i])
-        i++;
-   }
-}
-
-
-
-/*
- * Write a span of PF_TRUEDITHER pixels to a pixmap.
- */
-static void put_mono_row_TRUEDITHER_pixmap( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   register GLuint i;
-   int yy = YFLIP(xrb, y);
-   for (i=0;i<n;i++,x++) {
-      if (!mask || mask[i]) {
-         unsigned long p;
-         PACK_TRUEDITHER(p, x, yy, r, g, b);
-         XMesaSetForeground( dpy, gc, p );
-         XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) yy );
-      }
-   }
-}
-
-
-/*
- * Write a span of identical pixels to an XImage.
- */
-static void put_mono_row_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   XMesaImage *img = xrb->ximage;
-   register GLuint i;
-   const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
-               color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   y = YFLIP(xrb, y);
-   for (i=0;i<n;i++,x++) {
-      if (!mask || mask[i]) {
-        XMesaPutPixel( img, x, y, pixel );
-      }
-   }
-}
-
-
-/*
- * Write a span of identical PF_TRUEDITHER pixels to an XImage.
- */
-static void put_mono_row_TRUEDITHER_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   XMesaImage *img = xrb->ximage;
-   const GLint r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   GLuint i;
-   y = YFLIP(xrb, y);
-   for (i=0;i<n;i++) {
-      if (!mask || mask[i]) {
-         unsigned long p;
-         PACK_TRUEDITHER( p, x+i, y, r, g, b);
-        XMesaPutPixel( img, x+i, y, p );
-      }
-   }
-}
-
-
-/*
- * Write a span of identical 8A8B8G8R pixels to an XImage.
- */
-static void put_mono_row_8A8B8G8R_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GLuint i, *ptr;
-   const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
-               color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   ptr = PIXEL_ADDR4(xrb, x, y );
-   for (i=0;i<n;i++) {
-      if (!mask || mask[i]) {
-        ptr[i] = pixel;
-      }
-   }
-}
-
-/*
- * Write a span of identical 8A8R8G8B pixels to an XImage.
- */
-static void put_mono_row_8A8R8G8B_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   GLuint i, *ptr;
-   XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
-               color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   ptr = PIXEL_ADDR4(xrb, x, y );
-   for (i=0;i<n;i++) {
-      if (!mask || mask[i]) {
-        ptr[i] = pixel;
-      }
-   }
-}
-
-
-/*
- * Write a span of identical 8R8G8B pixels to an XImage.
- */
-static void put_mono_row_8R8G8B_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const GLuint pixel = PACK_8R8G8B(color[RCOMP], color[GCOMP], color[BCOMP]);
-   GLuint *ptr = PIXEL_ADDR4(xrb, x, y );
-   GLuint i;
-   for (i=0;i<n;i++) {
-      if (!mask || mask[i]) {
-        ptr[i] = pixel;
-      }
-   }
-}
-
-
-/*
- * Write a span of identical 8R8G8B pixels to an XImage.
- */
-static void put_mono_row_8R8G8B24_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const GLubyte r = color[RCOMP];
-   const GLubyte g = color[GCOMP];
-   const GLubyte b = color[BCOMP];
-   GLuint i;
-   bgr_t *ptr = PIXEL_ADDR3(xrb, x, y );
-   for (i=0;i<n;i++) {
-      if (!mask || mask[i]) {
-         ptr[i].r = r;
-         ptr[i].g = g;
-         ptr[i].b = b;
-      }
-   }
-}
-
-
-/*
- * Write a span of identical PF_DITHER_5R6G5B pixels to an XImage.
- */
-static void put_mono_row_DITHER_5R6G5B_ximage( PUT_MONO_ROW_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   register GLushort *ptr = PIXEL_ADDR2(xrb, x, y );
-   const GLint r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   GLuint i;
-   y = YFLIP(xrb, y);
-   for (i=0;i<n;i++) {
-      if (!mask || mask[i]) {
-         PACK_TRUEDITHER(ptr[i], x+i, y, r, g, b);
-      }
-   }
-}
-
-
-
-/**********************************************************************/
-/*** Write MONO COLOR PIXELS functions                              ***/
-/**********************************************************************/
-
-#define PUT_MONO_VALUES_ARGS \
-       struct gl_context *ctx, struct gl_renderbuffer *rb,     \
-       GLuint n, const GLint x[], const GLint y[],     \
-       const void *value, const GLubyte mask[]
-
-
-
-/*
- * Write an array of identical pixels to a pixmap.
- */
-static void put_mono_values_pixmap( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   register GLuint i;
-   const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
-               color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   XMesaSetForeground( xmesa->display, gc, pixel );
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        XMesaDrawPoint( dpy, buffer, gc,
-                         (int) x[i], (int) YFLIP(xrb, y[i]) );
-      }
-   }
-}
-
-
-/*
- * Write an array of PF_TRUEDITHER pixels to a pixmap.
- */
-static void put_mono_values_TRUEDITHER_pixmap( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->drawable;
-   XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
-   register GLuint i;
-   const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-         unsigned long p;
-         PACK_TRUEDITHER(p, x[i], y[i], r, g, b);
-         XMesaSetForeground( dpy, gc, p );
-        XMesaDrawPoint( dpy, buffer, gc,
-                         (int) x[i], (int) YFLIP(xrb, y[i]) );
-      }
-   }
-}
-
-
-/*
- * Write an array of identical pixels to an XImage.
- */
-static void put_mono_values_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaImage *img = xrb->ximage;
-   register GLuint i;
-   const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
-               color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), pixel );
-      }
-   }
-}
-
-
-/*
- * Write an array of identical TRUEDITHER pixels to an XImage.
- */
-static void put_mono_values_TRUEDITHER_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   GET_XRB(xrb);
-   XMesaImage *img = xrb->ximage;
-   register GLuint i;
-   const int r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-         unsigned long p;
-         PACK_TRUEDITHER(p, x[i], YFLIP(xrb, y[i]), r, g, b);
-        XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), p );
-      }
-   }
-}
-
-
-
-/*
- * Write an array of identical 8A8B8G8R pixels to an XImage
- */
-static void put_mono_values_8A8B8G8R_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const GLuint p = PACK_8A8B8G8R(color[RCOMP], color[GCOMP],
-                                  color[BCOMP], color[ACOMP]);
-   register GLuint i;
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
-        *ptr = p;
-      }
-   }
-}
-
-/*
- * Write an array of identical 8A8R8G8B pixels to an XImage
- */
-static void put_mono_values_8A8R8G8B_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const GLuint p = PACK_8A8R8G8B(color[RCOMP], color[GCOMP],
-                                  color[BCOMP], color[ACOMP]);
-   register GLuint i;
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
-        *ptr = p;
-      }
-   }
-}
-
-/*
- * Write an array of identical 8R8G8B pixels to an XImage.
- */
-static void put_mono_values_8R8G8B_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   register GLuint i;
-   const GLuint p = PACK_8R8G8B(color[RCOMP], color[GCOMP], color[BCOMP]);
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
-        *ptr = p;
-      }
-   }
-}
-
-
-/*
- * Write an array of identical 8R8G8B pixels to an XImage.
- */
-static void put_mono_values_8R8G8B24_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   register GLuint i;
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        bgr_t *ptr = PIXEL_ADDR3(xrb, x[i], y[i] );
-         ptr->r = r;
-         ptr->g = g;
-         ptr->b = b;
-      }
-   }
-}
-
-
-/*
- * Write an array of identical PF_DITHER_5R6G5B pixels to an XImage.
- */
-static void put_mono_values_DITHER_5R6G5B_ximage( PUT_MONO_VALUES_ARGS )
-{
-   const GLubyte *color = (const GLubyte *) value;
-   GET_XRB(xrb);
-   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
-   const int r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
-   register GLuint i;
-   for (i=0;i<n;i++) {
-      if (mask[i]) {
-        GLushort *ptr = PIXEL_ADDR2(xrb, x[i], y[i] );
-         PACK_TRUEDITHER(*ptr, x[i], y[i], r, g, b);
-      }
-   }
-}
-
-
-
 /**********************************************************************/
 /*****                      Pixel reading                         *****/
 /**********************************************************************/
@@ -2722,129 +1720,81 @@ xmesa_set_renderbuffer_funcs(struct xmesa_renderbuffer *xrb,
    case PF_Truecolor:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_TRUECOLOR_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_TRUECOLOR_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_pixmap;
          xrb->Base.PutValues     = put_values_TRUECOLOR_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_TRUECOLOR_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_TRUECOLOR_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_ximage;
          xrb->Base.PutValues     = put_values_TRUECOLOR_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_ximage;
       }
       break;
    case PF_Dither_True:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_TRUEDITHER_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_TRUEDITHER_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_TRUEDITHER_pixmap;
          xrb->Base.PutValues     = put_values_TRUEDITHER_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_TRUEDITHER_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_TRUEDITHER_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_TRUEDITHER_ximage;
          xrb->Base.PutValues     = put_values_TRUEDITHER_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_ximage;
       }
       break;
    case PF_8A8B8G8R:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_8A8B8G8R_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_8A8B8G8R_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_pixmap;
          xrb->Base.PutValues     = put_values_8A8B8G8R_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_8A8B8G8R_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_8A8B8G8R_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_8A8B8G8R_ximage;
          xrb->Base.PutValues     = put_values_8A8B8G8R_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_8A8B8G8R_ximage;
       }
       break;
    case PF_8A8R8G8B:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_8A8R8G8B_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_8A8R8G8B_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_pixmap;
          xrb->Base.PutValues     = put_values_8A8R8G8B_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_8A8R8G8B_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_8A8R8G8B_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_8A8R8G8B_ximage;
          xrb->Base.PutValues     = put_values_8A8R8G8B_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_8A8R8G8B_ximage;
       }
       break;
    case PF_8R8G8B:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_8R8G8B_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_8R8G8B_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_pixmap;
          xrb->Base.PutValues     = put_values_8R8G8B_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_8R8G8B_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_8R8G8B_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_8R8G8B_ximage;
          xrb->Base.PutValues     = put_values_8R8G8B_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_8R8G8B_ximage;
       }
       break;
    case PF_8R8G8B24:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_8R8G8B24_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_8R8G8B24_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_pixmap;
          xrb->Base.PutValues     = put_values_8R8G8B24_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_8R8G8B24_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_8R8G8B24_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_8R8G8B24_ximage;
          xrb->Base.PutValues     = put_values_8R8G8B24_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_8R8G8B24_ximage;
       }
       break;
    case PF_5R6G5B:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_5R6G5B_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_5R6G5B_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_pixmap;
          xrb->Base.PutValues     = put_values_5R6G5B_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_5R6G5B_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_5R6G5B_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_ximage;
          xrb->Base.PutValues     = put_values_5R6G5B_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_ximage;
       }
       break;
    case PF_Dither_5R6G5B:
       if (pixmap) {
          xrb->Base.PutRow        = put_row_DITHER_5R6G5B_pixmap;
-         xrb->Base.PutRowRGB     = put_row_rgb_DITHER_5R6G5B_pixmap;
-         xrb->Base.PutMonoRow    = put_mono_row_TRUEDITHER_pixmap;
          xrb->Base.PutValues     = put_values_DITHER_5R6G5B_pixmap;
-         xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
       }
       else {
          xrb->Base.PutRow        = put_row_DITHER_5R6G5B_ximage;
-         xrb->Base.PutRowRGB     = put_row_rgb_DITHER_5R6G5B_ximage;
-         xrb->Base.PutMonoRow    = put_mono_row_DITHER_5R6G5B_ximage;
          xrb->Base.PutValues     = put_values_DITHER_5R6G5B_ximage;
-         xrb->Base.PutMonoValues = put_mono_values_DITHER_5R6G5B_ximage;
       }
       break;
    default: