remove DitherValues
[mesa.git] / src / mesa / drivers / x11 / xm_span.c
index 18f7de4f385223aeea9f23d2df139a8227b4aa8f..71a4c8008257f51c4dca7385557b2cc73aabdf8c 100644 (file)
@@ -1,21 +1,19 @@
-/* $Id: xm_span.c,v 1.2 2000/11/14 17:40:15 brianp Exp $ */
-
 /*
  * Mesa 3-D graphics library
- * Version:  3.3
- * 
- * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
- * 
+ * Version:  5.1
+ *
+ * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  * and/or sell copies of the Software, and to permit persons to whom the
  * Software is furnished to do so, subject to the following conditions:
- * 
+ *
  * The above copyright notice and this permission notice shall be included
  * in all copies or substantial portions of the Software.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
-
+/* $XFree86: xc/extras/Mesa/src/X/xm_span.c,v 1.3 2002/02/27 21:07:54 tsi Exp $ */
 
 #include "glxheader.h"
+#include "colormac.h"
 #include "context.h"
-#include "drawpix.h"
-#include "mem.h"
-#include "state.h"
 #include "depth.h"
+#include "drawpix.h"
+#include "extensions.h"
 #include "macros.h"
-#include "vb.h"
-#include "types.h"
+#include "imports.h"
+#include "mtypes.h"
+#include "state.h"
 #include "xmesaP.h"
-#include "extensions.h"
-
 
+#include "swrast/swrast.h"
 
 
 /*
@@ -182,11 +180,12 @@ static unsigned long read_pixel( XMesaDisplay *dpy,
  */
 static void write_span_TRUECOLOR_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
    register GLuint i;
+
    y = FLIP(xmesa->xm_buffer, y);
    if (mask) {
       for (i=0;i<n;i++,x++) {
@@ -216,7 +215,7 @@ static void write_span_TRUECOLOR_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_TRUECOLOR_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -250,7 +249,7 @@ static void write_span_rgb_TRUECOLOR_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_TRUEDITHER_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -283,7 +282,7 @@ static void write_span_TRUEDITHER_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_TRUEDITHER_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -317,7 +316,7 @@ static void write_span_rgb_TRUEDITHER_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_8A8B8G8R_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -349,7 +348,7 @@ static void write_span_8A8B8G8R_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_8A8B8G8R_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -381,7 +380,7 @@ static void write_span_rgb_8A8B8G8R_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_8R8G8B_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -412,7 +411,7 @@ static void write_span_8R8G8B_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_8R8G8B24_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -506,7 +505,7 @@ static void write_span_8R8G8B24_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -537,7 +536,7 @@ static void write_span_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -636,7 +635,7 @@ static void write_span_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_5R6G5B_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -667,7 +666,7 @@ static void write_span_5R6G5B_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_DITHER_5R6G5B_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -700,7 +699,7 @@ static void write_span_DITHER_5R6G5B_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_5R6G5B_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -731,7 +730,7 @@ static void write_span_rgb_5R6G5B_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_rgb_DITHER_5R6G5B_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -765,7 +764,7 @@ static void write_span_rgb_DITHER_5R6G5B_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_DITHER_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -796,7 +795,7 @@ static void write_span_DITHER_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_DITHER_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -827,7 +826,7 @@ static void write_span_rgb_DITHER_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_1BIT_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -860,7 +859,7 @@ static void write_span_1BIT_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_1BIT_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -893,7 +892,7 @@ static void write_span_rgb_1BIT_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_HPCR_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -924,7 +923,7 @@ static void write_span_HPCR_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_HPCR_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -955,7 +954,7 @@ static void write_span_rgb_HPCR_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_LOOKUP_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -985,7 +984,7 @@ static void write_span_LOOKUP_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_LOOKUP_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -1016,7 +1015,7 @@ static void write_span_rgb_LOOKUP_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_GRAYSCALE_pixmap( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -1045,7 +1044,7 @@ static void write_span_GRAYSCALE_pixmap( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_GRAYSCALE_pixmap( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -1074,7 +1073,7 @@ static void write_span_rgb_GRAYSCALE_pixmap( RGB_SPAN_ARGS )
  */
 static void write_span_TRUECOLOR_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -1103,7 +1102,7 @@ static void write_span_TRUECOLOR_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_TRUECOLOR_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -1132,7 +1131,7 @@ static void write_span_rgb_TRUECOLOR_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_TRUEDITHER_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -1161,7 +1160,7 @@ static void write_span_TRUEDITHER_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_TRUEDITHER_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -1190,7 +1189,7 @@ static void write_span_rgb_TRUEDITHER_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_8A8B8G8R_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLuint *ptr = PIXELADDR4( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1214,7 +1213,7 @@ static void write_span_8A8B8G8R_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_8A8B8G8R_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLuint *ptr = PIXELADDR4( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1238,7 +1237,7 @@ static void write_span_rgb_8A8B8G8R_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_8R8G8B_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLuint *ptr = PIXELADDR4( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1261,7 +1260,7 @@ static void write_span_8R8G8B_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_8R8G8B24_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = (GLubyte *) PIXELADDR3( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1411,7 +1410,7 @@ static void write_span_8R8G8B24_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_8R8G8B_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLuint *ptr = PIXELADDR4( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1435,7 +1434,7 @@ static void write_span_rgb_8R8G8B_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_rgb_8R8G8B24_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = (GLubyte *) PIXELADDR3( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1466,7 +1465,7 @@ static void write_span_rgb_8R8G8B24_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_5R6G5B_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLushort *ptr = PIXELADDR2( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1505,13 +1504,14 @@ static void write_span_5R6G5B_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_DITHER_5R6G5B_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLushort *ptr = PIXELADDR2( xmesa->xm_buffer, x, y );
+   const GLint y2 = FLIP(xmesa->xm_buffer, y);
    if (mask) {
       for (i=0;i<n;i++,x++) {
          if (mask[i]) {
-            PACK_TRUEDITHER( ptr[i], x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+            PACK_TRUEDITHER( ptr[i], x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
          }
       }
    }
@@ -1523,16 +1523,16 @@ static void write_span_DITHER_5R6G5B_ximage( RGBA_SPAN_ARGS )
       n -= extraPixel;
       for (i = 0; i < n; i += 2, x += 2) {
          GLuint p0, p1;
-         PACK_TRUEDITHER( p0, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
-         PACK_TRUEDITHER( p1, x+1, y, rgba[i+1][RCOMP], rgba[i+1][GCOMP], rgba[i+1][BCOMP] );
+         PACK_TRUEDITHER( p0, x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+         PACK_TRUEDITHER( p1, x+1, y2, rgba[i+1][RCOMP], rgba[i+1][GCOMP], rgba[i+1][BCOMP] );
          *ptr32++ = (p1 << 16) | p0;
       }
       if (extraPixel) {
-         PACK_TRUEDITHER( ptr[n], x+n, y, rgba[n][RCOMP], rgba[n][GCOMP], rgba[n][BCOMP]);
+         PACK_TRUEDITHER( ptr[n], x+n, y2, rgba[n][RCOMP], rgba[n][GCOMP], rgba[n][BCOMP]);
       }
 #else
       for (i = 0; i < n; i++, x++) {
-         PACK_TRUEDITHER( ptr[i], x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+         PACK_TRUEDITHER( ptr[i], x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
       }
 #endif
    }
@@ -1544,7 +1544,7 @@ static void write_span_DITHER_5R6G5B_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_5R6G5B_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLushort *ptr = PIXELADDR2( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1583,7 +1583,7 @@ static void write_span_rgb_5R6G5B_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_rgb_DITHER_5R6G5B_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLushort *ptr = PIXELADDR2( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1622,7 +1622,7 @@ static void write_span_rgb_DITHER_5R6G5B_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_DITHER_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    int yy = FLIP(xmesa->xm_buffer, y);
@@ -1648,7 +1648,7 @@ static void write_span_DITHER_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_DITHER_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    int yy = FLIP(xmesa->xm_buffer, y);
@@ -1675,7 +1675,7 @@ static void write_span_rgb_DITHER_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_DITHER8_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    XDITHER_SETUP(y);
@@ -1696,7 +1696,7 @@ static void write_span_DITHER8_ximage( RGBA_SPAN_ARGS )
 
 static void write_span_rgb_DITHER8_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    XDITHER_SETUP(y);
@@ -1723,7 +1723,7 @@ static void write_span_rgb_DITHER8_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_1BIT_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    SETUP_1BIT;
@@ -1748,7 +1748,7 @@ static void write_span_1BIT_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_1BIT_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    SETUP_1BIT;
@@ -1773,7 +1773,7 @@ static void write_span_rgb_1BIT_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_HPCR_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1797,7 +1797,7 @@ static void write_span_HPCR_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_HPCR_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1821,7 +1821,7 @@ static void write_span_rgb_HPCR_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_LOOKUP_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    LOOKUP_SETUP;
@@ -1847,7 +1847,7 @@ static void write_span_LOOKUP_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_LOOKUP_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    LOOKUP_SETUP;
@@ -1873,7 +1873,7 @@ static void write_span_rgb_LOOKUP_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_LOOKUP8_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    LOOKUP_SETUP;
@@ -1898,7 +1898,7 @@ static void write_rgb_LOOKUP8_ximage( const GLcontext *ctx,
                                       CONST GLubyte rgb[][3],
                                       const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    LOOKUP_SETUP;
@@ -1925,7 +1925,7 @@ static void write_rgb_LOOKUP8_ximage( const GLcontext *ctx,
  */
 static void write_span_GRAYSCALE_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -1950,7 +1950,7 @@ static void write_span_GRAYSCALE_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_GRAYSCALE_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -1975,7 +1975,7 @@ static void write_span_rgb_GRAYSCALE_ximage( RGB_SPAN_ARGS )
  */
 static void write_span_GRAYSCALE8_ximage( RGBA_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -1999,7 +1999,7 @@ static void write_span_GRAYSCALE8_ximage( RGBA_SPAN_ARGS )
  */
 static void write_span_rgb_GRAYSCALE8_ximage( RGB_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer, x, y );
    if (mask) {
@@ -2035,7 +2035,7 @@ static void write_span_rgb_GRAYSCALE8_ximage( RGB_SPAN_ARGS )
  */
 static void write_pixels_TRUECOLOR_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2056,7 +2056,7 @@ static void write_pixels_TRUECOLOR_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_TRUEDITHER_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2077,7 +2077,7 @@ static void write_pixels_TRUEDITHER_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_8A8B8G8R_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2097,7 +2097,7 @@ static void write_pixels_8A8B8G8R_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_8R8G8B_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2116,7 +2116,7 @@ static void write_pixels_8R8G8B_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_8R8G8B24_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2135,7 +2135,7 @@ static void write_pixels_8R8G8B24_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_5R6G5B_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2154,7 +2154,7 @@ static void write_pixels_5R6G5B_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_DITHER_5R6G5B_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2175,7 +2175,7 @@ static void write_pixels_DITHER_5R6G5B_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_DITHER_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2196,7 +2196,7 @@ static void write_pixels_DITHER_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_1BIT_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2217,7 +2217,7 @@ static void write_pixels_1BIT_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_HPCR_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2237,7 +2237,7 @@ static void write_pixels_HPCR_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_LOOKUP_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2257,7 +2257,7 @@ static void write_pixels_LOOKUP_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_GRAYSCALE_pixmap( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2276,7 +2276,7 @@ static void write_pixels_GRAYSCALE_pixmap( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_TRUECOLOR_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2294,13 +2294,13 @@ static void write_pixels_TRUECOLOR_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_TRUEDITHER_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
          unsigned long p;
-         PACK_TRUEDITHER(p, x[i], FLIP(xmesa->xm_buffer, y[i]), rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+         PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
         XMesaPutPixel( img, x[i], FLIP(xmesa->xm_buffer, y[i]), p );
       }
    }
@@ -2312,7 +2312,7 @@ static void write_pixels_TRUEDITHER_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_8A8B8G8R_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2328,7 +2328,7 @@ static void write_pixels_8A8B8G8R_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_8R8G8B_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2344,7 +2344,7 @@ static void write_pixels_8R8G8B_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_8R8G8B24_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2362,7 +2362,7 @@ static void write_pixels_8R8G8B24_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_5R6G5B_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2378,7 +2378,7 @@ static void write_pixels_5R6G5B_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_DITHER_5R6G5B_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2394,7 +2394,7 @@ static void write_pixels_DITHER_5R6G5B_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_DITHER_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    DITHER_SETUP;
@@ -2412,7 +2412,7 @@ static void write_pixels_DITHER_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_DITHER8_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    DITHER_SETUP;
    for (i=0;i<n;i++) {
@@ -2429,7 +2429,7 @@ static void write_pixels_DITHER8_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_1BIT_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    SETUP_1BIT;
@@ -2447,7 +2447,7 @@ static void write_pixels_1BIT_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_HPCR_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2463,7 +2463,7 @@ static void write_pixels_HPCR_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_LOOKUP_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    LOOKUP_SETUP;
@@ -2480,7 +2480,7 @@ static void write_pixels_LOOKUP_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_LOOKUP8_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    LOOKUP_SETUP;
    for (i=0;i<n;i++) {
@@ -2497,7 +2497,7 @@ static void write_pixels_LOOKUP8_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_GRAYSCALE_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2514,7 +2514,7 @@ static void write_pixels_GRAYSCALE_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_pixels_GRAYSCALE8_ximage( RGBA_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    for (i=0;i<n;i++) {
       if (mask[i]) {
@@ -2541,64 +2541,70 @@ static void write_pixels_GRAYSCALE8_ximage( RGBA_PIXEL_ARGS )
  */
 static void write_span_mono_pixmap( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
    const unsigned long pixel = xmesa_color_to_pixel(xmesa, color[RCOMP],
                color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
-   register GLboolean write_all;
    register GLuint i;
    XMesaSetForeground( xmesa->display, gc, pixel );
    y = FLIP(xmesa->xm_buffer, y);
-   write_all = GL_TRUE;
-   for (i=0;i<n;i++) {
-      if (!mask[i]) {
-        write_all = GL_FALSE;
-        break;
-      }
-   }
-   if (write_all) {
-      XMesaFillRectangle( dpy, buffer, gc, (int) x, (int) y, n, 1 );
-   }
-   else {
-      for (i=0;i<n;i++,x++) {
-        if (mask[i]) {
-           XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) 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++;
    }
 }
 
 
+
 static void write_span_mono_index_pixmap( const GLcontext *ctx, GLuint n,
                                           GLint x, GLint y, GLuint colorIndex,
                                           const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
-   register GLboolean write_all;
    register GLuint i;
    XMesaSetForeground( xmesa->display, gc, colorIndex );
    y = FLIP(xmesa->xm_buffer, y);
-   write_all = GL_TRUE;
-   for (i=0;i<n;i++) {
-      if (!mask[i]) {
-        write_all = GL_FALSE;
-        break;
-      }
-   }
-   if (write_all) {
-      XMesaFillRectangle( dpy, buffer, gc, (int) x, (int) y, n, 1 );
-   }
-   else {
-      for (i=0;i<n;i++,x++) {
-        if (mask[i]) {
-           XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
-        }
-      }
+
+   for (i = 0 ; i < n ;) {
+      GLuint start = i;
+      
+      /* Identify and emit contiguous rendered pixels 
+       */
+      while (i < n && 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++;
    }
 }
 
@@ -2609,7 +2615,7 @@ static void write_span_mono_index_pixmap( const GLcontext *ctx, GLuint n,
  */
 static void write_span_mono_TRUEDITHER_pixmap( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2632,7 +2638,7 @@ static void write_span_mono_TRUEDITHER_pixmap( MONO_SPAN_ARGS )
  */
 static void write_span_mono_DITHER_pixmap( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2654,7 +2660,7 @@ static void write_span_mono_DITHER_pixmap( MONO_SPAN_ARGS )
  */
 static void write_span_mono_1BIT_pixmap( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2676,7 +2682,7 @@ static void write_span_mono_1BIT_pixmap( MONO_SPAN_ARGS )
  */
 static void write_span_mono_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    const unsigned long pixel = xmesa_color_to_pixel(xmesa, color[RCOMP],
@@ -2695,7 +2701,7 @@ static void write_span_mono_index_ximage( const GLcontext *ctx, GLuint n,
                                           GLuint colorIndex,
                                           const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
@@ -2712,7 +2718,7 @@ static void write_span_mono_index_ximage( const GLcontext *ctx, GLuint n,
  */
 static void write_span_mono_TRUEDITHER_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    const GLint r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    GLuint i;
@@ -2732,7 +2738,7 @@ static void write_span_mono_TRUEDITHER_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_8A8B8G8R_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GLuint i, *ptr;
    const unsigned long pixel = xmesa_color_to_pixel(xmesa, color[RCOMP],
                color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
@@ -2750,12 +2756,12 @@ static void write_span_mono_8A8B8G8R_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_8R8G8B_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLuint pixel = PACK_8R8G8B(color[RCOMP], color[GCOMP], color[BCOMP]);
    GLuint *ptr = PIXELADDR4( xmesa->xm_buffer, x, y );
    GLuint i;
    for (i=0;i<n;i++) {
-      if (mask[i]) {
+      if (!mask || mask[i]) {
         ptr[i] = pixel;
       }
    }
@@ -2767,7 +2773,7 @@ static void write_span_mono_8R8G8B_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_8R8G8B24_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP];
    const GLubyte g = color[GCOMP];
    const GLubyte b = color[BCOMP];
@@ -2788,7 +2794,7 @@ static void write_span_mono_8R8G8B24_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_DITHER_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    XMesaImage *img = xmesa->xm_buffer->backimage;
    int yy = FLIP(xmesa->xm_buffer, y);
@@ -2807,7 +2813,7 @@ static void write_span_mono_DITHER_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_DITHER8_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer,x,y);
    register GLuint i;
@@ -2825,7 +2831,7 @@ static void write_span_mono_DITHER8_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_LOOKUP8_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer,x,y);
    GLubyte pixel;
@@ -2844,7 +2850,7 @@ static void write_span_mono_LOOKUP8_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_1BIT_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
@@ -2863,7 +2869,7 @@ static void write_span_mono_1BIT_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_HPCR_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLubyte *ptr = PIXELADDR1( xmesa->xm_buffer,x,y);
    register GLuint i;
@@ -2880,7 +2886,7 @@ static void write_span_mono_HPCR_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_GRAYSCALE8_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte p = GRAY_RGB(color[RCOMP], color[GCOMP], color[BCOMP]);
    GLubyte *ptr = (GLubyte *) PIXELADDR1( xmesa->xm_buffer,x,y);
    GLuint i;
@@ -2898,7 +2904,7 @@ static void write_span_mono_GRAYSCALE8_ximage( MONO_SPAN_ARGS )
  */
 static void write_span_mono_DITHER_5R6G5B_ximage( MONO_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLushort *ptr = PIXELADDR2( xmesa->xm_buffer, x, y );
    const GLint r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    GLuint i;
@@ -2925,7 +2931,7 @@ static void write_span_mono_DITHER_5R6G5B_ximage( MONO_SPAN_ARGS )
  */
 static void write_pixels_mono_pixmap( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2948,7 +2954,7 @@ static void write_pixels_mono_index_pixmap(const GLcontext *ctx,
                                            GLuint colorIndex,
                                            const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2968,7 +2974,7 @@ static void write_pixels_mono_index_pixmap(const GLcontext *ctx,
  */
 static void write_pixels_mono_TRUEDITHER_pixmap( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -2991,7 +2997,7 @@ static void write_pixels_mono_TRUEDITHER_pixmap( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_DITHER_pixmap( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -3012,7 +3018,7 @@ static void write_pixels_mono_DITHER_pixmap( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_1BIT_pixmap( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -3033,7 +3039,7 @@ static void write_pixels_mono_1BIT_pixmap( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    const unsigned long pixel = xmesa_color_to_pixel(xmesa, color[RCOMP],
@@ -3051,7 +3057,7 @@ static void write_pixels_mono_index_ximage( const GLcontext *ctx, GLuint n,
                                             GLuint colorIndex,
                                             const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -3067,7 +3073,7 @@ static void write_pixels_mono_index_ximage( const GLcontext *ctx, GLuint n,
  */
 static void write_pixels_mono_TRUEDITHER_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    const int r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
@@ -3087,7 +3093,7 @@ static void write_pixels_mono_TRUEDITHER_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_8A8B8G8R_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLuint p = PACK_8A8B8G8R(color[RCOMP], color[GCOMP],
                                   color[BCOMP], color[ACOMP]);
    register GLuint i;
@@ -3105,7 +3111,7 @@ static void write_pixels_mono_8A8B8G8R_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_8R8G8B_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    const GLuint p = PACK_8R8G8B(color[RCOMP], color[GCOMP], color[BCOMP]);
    for (i=0;i<n;i++) {
@@ -3122,7 +3128,7 @@ static void write_pixels_mono_8R8G8B_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_8R8G8B24_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -3141,7 +3147,7 @@ static void write_pixels_mono_8R8G8B24_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_DITHER_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
@@ -3159,7 +3165,7 @@ static void write_pixels_mono_DITHER_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_DITHER8_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLuint i;
    DITHER_SETUP;
@@ -3177,7 +3183,7 @@ static void write_pixels_mono_DITHER8_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_LOOKUP8_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    GLubyte pixel;
    LOOKUP_SETUP;
@@ -3197,7 +3203,7 @@ static void write_pixels_mono_LOOKUP8_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_1BIT_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
@@ -3216,7 +3222,7 @@ static void write_pixels_mono_1BIT_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_HPCR_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -3233,7 +3239,7 @@ static void write_pixels_mono_HPCR_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_GRAYSCALE8_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
    register GLubyte p = GRAY_RGB(color[RCOMP], color[GCOMP], color[BCOMP]);
    for (i=0;i<n;i++) {
@@ -3250,7 +3256,7 @@ static void write_pixels_mono_GRAYSCALE8_ximage( MONO_PIXEL_ARGS )
  */
 static void write_pixels_mono_DITHER_5R6G5B_ximage( MONO_PIXEL_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   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++) {
@@ -3281,16 +3287,24 @@ static void write_pixels_mono_DITHER_5R6G5B_ximage( MONO_PIXEL_ARGS )
  */
 static void write_span_index_pixmap( INDEX_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-        XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
-        XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+   if (mask) {
+      for (i=0;i<n;i++,x++) {
+         if (mask[i]) {
+            XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
+            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+         }
+      }
+   }
+   else {
+      for (i=0;i<n;i++,x++) {
+         XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
+         XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
       }
    }
 }
@@ -3301,16 +3315,24 @@ static void write_span_index_pixmap( INDEX_SPAN_ARGS )
  */
 static void write_span_index8_pixmap( INDEX8_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-        XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
-        XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+   if (mask) {
+      for (i=0;i<n;i++,x++) {
+         if (mask[i]) {
+            XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
+            XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+         }
+      }
+   }
+   else {
+      for (i=0;i<n;i++,x++) {
+         XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
+         XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
       }
    }
 }
@@ -3321,13 +3343,20 @@ static void write_span_index8_pixmap( INDEX8_SPAN_ARGS )
  */
 static void write_span_index_ximage( INDEX_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    y = FLIP(xmesa->xm_buffer, y);
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-        XMesaPutPixel( img, x, y, (unsigned long) index[i] );
+   if (mask) {
+      for (i=0;i<n;i++,x++) {
+         if (mask[i]) {
+            XMesaPutPixel( img, x, y, (unsigned long) index[i] );
+         }
+      }
+   }
+   else {
+      for (i=0;i<n;i++,x++) {
+         XMesaPutPixel( img, x, y, (unsigned long) index[i] );
       }
    }
 }
@@ -3336,11 +3365,9 @@ static void write_span_index_ximage( INDEX_SPAN_ARGS )
 /*
  * Write a span of 8-bit CI pixels to a non 8-bit XImage.
  */
-static void write_span_index8_ximage( const GLcontext *ctx, GLuint n,
-                                      GLint x, GLint y, const GLubyte index[],
-                                      const GLubyte mask[] )
+static void write_span_index8_ximage( INDEX8_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    if (mask) {
       GLuint i;
       for (i=0;i<n;i++) {
@@ -3360,11 +3387,9 @@ static void write_span_index8_ximage( const GLcontext *ctx, GLuint n,
 /*
  * Write a span of 8-bit CI pixels to an 8-bit XImage.
  */
-static void write_span_index8_ximage8( const GLcontext *ctx, GLuint n,
-                                      GLint x, GLint y, const GLubyte index[],
-                                      const GLubyte mask[] )
+static void write_span_index8_ximage8( INDEX8_SPAN_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    GLubyte *dst = PIXELADDR1( xmesa->xm_buffer,x,y);
    if (mask) {
       GLuint i;
@@ -3395,7 +3420,7 @@ static void write_span_index8_ximage8( const GLcontext *ctx, GLuint n,
  */
 static void write_pixels_index_pixmap( INDEX_PIXELS_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
@@ -3414,7 +3439,7 @@ static void write_pixels_index_pixmap( INDEX_PIXELS_ARGS )
  */
 static void write_pixels_index_ximage( INDEX_PIXELS_ARGS )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaImage *img = xmesa->xm_buffer->backimage;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -3439,15 +3464,10 @@ static void write_pixels_index_ximage( INDEX_PIXELS_ARGS )
 static void read_index_span( const GLcontext *ctx,
                             GLuint n, GLint x, GLint y, GLuint index[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   XMesaBuffer source;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+   XMesaBuffer source = xmesa->xm_buffer;
    GLuint i;
 
-   if (xmesa->use_read_buffer)
-      source = xmesa->xm_read_buffer;
-   else
-      source = xmesa->xm_buffer;
-
    y = FLIP(source, y);
 
    if (source->buffer) {
@@ -3495,13 +3515,8 @@ static void read_color_span( const GLcontext *ctx,
                             GLuint n, GLint x, GLint y,
                              GLubyte rgba[][4] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   XMesaBuffer source;
-
-   if (xmesa->use_read_buffer)
-      source = xmesa->xm_read_buffer;
-   else
-      source = xmesa->xm_buffer;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+   XMesaBuffer source = xmesa->xm_buffer;
 
    if (source->buffer) {
       /* Read from Pixmap or Window */
@@ -3522,8 +3537,8 @@ static void read_color_span( const GLcontext *ctx,
 #endif
       if (span && !error) {
         switch (xmesa->pixelformat) {
-           case PF_TRUECOLOR:
-           case PF_TRUEDITHER:
+           case PF_Truecolor:
+           case PF_Dither_True:
                {
                   const GLubyte *pixelToR = xmesa->xm_visual->PixelToR;
                   const GLubyte *pixelToG = xmesa->xm_visual->PixelToG;
@@ -3546,7 +3561,7 @@ static void read_color_span( const GLcontext *ctx,
                }
               break;
             case PF_5R6G5B:
-            case PF_DITHER_5R6G5B:
+            case PF_Dither_5R6G5B:
                {
                   const GLubyte *pixelToR = xmesa->xm_visual->PixelToR;
                   const GLubyte *pixelToG = xmesa->xm_visual->PixelToG;
@@ -3617,9 +3632,9 @@ static void read_color_span( const GLcontext *ctx,
                   }
                }
                break;
-           case PF_DITHER:
-           case PF_LOOKUP:
-           case PF_GRAYSCALE:
+           case PF_Dither:
+           case PF_Lookup:
+           case PF_Grayscale:
                {
                   GLubyte *rTable = source->pixel_to_r;
                   GLubyte *gTable = source->pixel_to_g;
@@ -3647,7 +3662,7 @@ static void read_color_span( const GLcontext *ctx,
                   }
                }
               break;
-           case PF_1BIT:
+           case PF_1Bit:
                {
                   int bitFlip = xmesa->xm_visual->bitFlip;
                   GLuint i;
@@ -3662,7 +3677,7 @@ static void read_color_span( const GLcontext *ctx,
                }
               break;
            default:
-              gl_problem(NULL,"Problem in DD.read_color_span (1)");
+              _mesa_problem(NULL,"Problem in DD.read_color_span (1)");
                return;
         }
       }
@@ -3680,8 +3695,8 @@ static void read_color_span( const GLcontext *ctx,
    else if (source->backimage) {
       /* Read from XImage back buffer */
       switch (xmesa->pixelformat) {
-         case PF_TRUECOLOR:
-         case PF_TRUEDITHER:
+         case PF_Truecolor:
+         case PF_Dither_True:
             {
                const GLubyte *pixelToR = xmesa->xm_visual->PixelToR;
                const GLubyte *pixelToG = xmesa->xm_visual->PixelToG;
@@ -3706,15 +3721,15 @@ static void read_color_span( const GLcontext *ctx,
             }
             break;
          case PF_5R6G5B:
-         case PF_DITHER_5R6G5B:
+         case PF_Dither_5R6G5B:
             {
                const GLubyte *pixelToR = xmesa->xm_visual->PixelToR;
                const GLubyte *pixelToG = xmesa->xm_visual->PixelToG;
                const GLubyte *pixelToB = xmesa->xm_visual->PixelToB;
                const GLushort *ptr2 = PIXELADDR2( source, x, y );
-               const GLuint *ptr4 = (const GLuint *) ptr2;
                GLuint i;
 #if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
+               const GLuint *ptr4 = (const GLuint *) ptr2;
                GLuint extraPixel = (n & 1);
                n -= extraPixel;
                for (i = 0; i < n; i += 2) {
@@ -3804,9 +3819,9 @@ static void read_color_span( const GLcontext *ctx,
                }
             }
             break;
-        case PF_DITHER:
-        case PF_LOOKUP:
-        case PF_GRAYSCALE:
+        case PF_Dither:
+        case PF_Lookup:
+        case PF_Grayscale:
             {
                const GLubyte *rTable = source->pixel_to_r;
                const GLubyte *gTable = source->pixel_to_g;
@@ -3836,7 +3851,7 @@ static void read_color_span( const GLcontext *ctx,
                }
             }
            break;
-        case PF_1BIT:
+        case PF_1Bit:
             {
                XMesaImage *img = source->backimage;
                int bitFlip = xmesa->xm_visual->bitFlip;
@@ -3853,7 +3868,7 @@ static void read_color_span( const GLcontext *ctx,
            }
            break;
         default:
-           gl_problem(NULL,"Problem in DD.read_color_span (2)");
+           _mesa_problem(NULL,"Problem in DD.read_color_span (2)");
             return;
       }
    }
@@ -3868,14 +3883,9 @@ static void read_index_pixels( const GLcontext *ctx,
                               GLuint n, const GLint x[], const GLint y[],
                                GLuint indx[], const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    register GLuint i;
-   XMesaBuffer source;
-
-   if (xmesa->use_read_buffer)
-      source = xmesa->xm_read_buffer;
-   else
-      source = xmesa->xm_buffer;
+   XMesaBuffer source = xmesa->xm_buffer;
 
    if (source->buffer) {
       for (i=0;i<n;i++) {
@@ -3902,25 +3912,18 @@ static void read_color_pixels( const GLcontext *ctx,
                               GLuint n, const GLint x[], const GLint y[],
                                GLubyte rgba[][4], const GLubyte mask[] )
 {
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    register GLuint i;
-   XMesaBuffer source;
-   XMesaDrawable buffer;
-
-   if (xmesa->use_read_buffer)
-      source = xmesa->xm_read_buffer;
-   else
-      source = xmesa->xm_buffer;
-
-   buffer = source->buffer;  /* the X drawable */
+   XMesaBuffer source = xmesa->xm_buffer;
+   XMesaDrawable buffer = source->buffer;  /* the X drawable */
 
    if (source->buffer) {
       switch (xmesa->pixelformat) {
-        case PF_TRUECOLOR:
-         case PF_TRUEDITHER:
+        case PF_Truecolor:
+         case PF_Dither_True:
          case PF_5R6G5B:
-         case PF_DITHER_5R6G5B:
+         case PF_Dither_5R6G5B:
             {
                unsigned long rMask = GET_REDMASK(xmesa->xm_visual);
                unsigned long gMask = GET_GREENMASK(xmesa->xm_visual);
@@ -3993,9 +3996,9 @@ static void read_color_pixels( const GLcontext *ctx,
                }
             }
             break;
-        case PF_DITHER:
-        case PF_LOOKUP:
-        case PF_GRAYSCALE:
+        case PF_Dither:
+        case PF_Lookup:
+        case PF_Grayscale:
             {
                GLubyte *rTable = source->pixel_to_r;
                GLubyte *gTable = source->pixel_to_g;
@@ -4012,7 +4015,7 @@ static void read_color_pixels( const GLcontext *ctx,
                }
            }
            break;
-        case PF_1BIT:
+        case PF_1Bit:
             {
                int bitFlip = xmesa->xm_visual->bitFlip;
                for (i=0;i<n;i++) {
@@ -4028,16 +4031,16 @@ static void read_color_pixels( const GLcontext *ctx,
            }
            break;
         default:
-           gl_problem(NULL,"Problem in DD.read_color_pixels (1)");
+           _mesa_problem(NULL,"Problem in DD.read_color_pixels (1)");
             return;
       }
    }
    else if (source->backimage) {
       switch (xmesa->pixelformat) {
-        case PF_TRUECOLOR:
-         case PF_TRUEDITHER:
+        case PF_Truecolor:
+         case PF_Dither_True:
          case PF_5R6G5B:
-         case PF_DITHER_5R6G5B:
+         case PF_Dither_5R6G5B:
             {
                unsigned long rMask = GET_REDMASK(xmesa->xm_visual);
                unsigned long gMask = GET_GREENMASK(xmesa->xm_visual);
@@ -4108,9 +4111,9 @@ static void read_color_pixels( const GLcontext *ctx,
                }
             }
             break;
-        case PF_DITHER:
-        case PF_LOOKUP:
-        case PF_GRAYSCALE:
+        case PF_Dither:
+        case PF_Lookup:
+        case PF_Grayscale:
             {
                GLubyte *rTable = source->pixel_to_r;
                GLubyte *gTable = source->pixel_to_g;
@@ -4128,7 +4131,7 @@ static void read_color_pixels( const GLcontext *ctx,
                }
            }
            break;
-        case PF_1BIT:
+        case PF_1Bit:
             {
                XMesaImage *img = source->backimage;
                int bitFlip = xmesa->xm_visual->bitFlip;
@@ -4145,7 +4148,7 @@ static void read_color_pixels( const GLcontext *ctx,
            }
            break;
         default:
-           gl_problem(NULL,"Problem in DD.read_color_pixels (1)");
+           _mesa_problem(NULL,"Problem in DD.read_color_pixels (1)");
             return;
       }
    }
@@ -4153,17 +4156,17 @@ static void read_color_pixels( const GLcontext *ctx,
 
 
 static void
-clear_color_HPCR_ximage( GLcontext *ctx,
-                         GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+clear_color_HPCR_ximage( GLcontext *ctx, const GLfloat color[4] )
 {
    int i;
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   xmesa->clearcolor[0] = r;
-   xmesa->clearcolor[1] = g;
-   xmesa->clearcolor[2] = b;
-   xmesa->clearcolor[3] = a;
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[0], color[0]);
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[1], color[1]);
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[2], color[2]);
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[3], color[3]);
 
-   if (r == 0 && g == 0 && b == 0) {
+   if (color[0] == 0.0 && color[1] == 0.0 && color[2] == 0.0) {
       /* black is black */
       MEMSET( xmesa->xm_visual->hpcr_clear_ximage_pattern, 0x0 ,
               sizeof(xmesa->xm_visual->hpcr_clear_ximage_pattern));
@@ -4171,28 +4174,33 @@ clear_color_HPCR_ximage( GLcontext *ctx,
    else {
       /* build clear pattern */
       for (i=0; i<16; i++) {
-         xmesa->xm_visual->hpcr_clear_ximage_pattern[0][i]    =
-            DITHER_HPCR(i, 0, r, g, b);
+         xmesa->xm_visual->hpcr_clear_ximage_pattern[0][i] =
+            DITHER_HPCR(i, 0,
+                        xmesa->clearcolor[0],
+                        xmesa->clearcolor[1],
+                        xmesa->clearcolor[2]);
          xmesa->xm_visual->hpcr_clear_ximage_pattern[1][i]    =
-            DITHER_HPCR(i, 1, r, g, b);
+            DITHER_HPCR(i, 1,
+                        xmesa->clearcolor[0],
+                        xmesa->clearcolor[1],
+                        xmesa->clearcolor[2]);
       }
    }
 }
 
 
 static void
-clear_color_HPCR_pixmap( GLcontext *ctx,
-                         GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+clear_color_HPCR_pixmap( GLcontext *ctx, const GLfloat color[4] )
 {
    int i;
-   const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   xmesa->clearcolor[0] = r;
-   xmesa->clearcolor[1] = g;
-   xmesa->clearcolor[2] = b;
-   xmesa->clearcolor[3] = a;
-
-   if (0x0==r && 0x0==g && 0x0==b) {
+   const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[0], color[0]);
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[1], color[1]);
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[2], color[2]);
+   CLAMPED_FLOAT_TO_UBYTE(xmesa->clearcolor[3], color[3]);
+
+   if (color[0] == 0.0 && color[1] == 0.0 && color[2] == 0.0) {
       /* black is black */
       for (i=0; i<16; i++) {
          XMesaPutPixel(xmesa->xm_visual->hpcr_clear_ximage, i, 0, 0);
@@ -4201,14 +4209,22 @@ clear_color_HPCR_pixmap( GLcontext *ctx,
    }
    else {
       for (i=0; i<16; i++) {
-         XMesaPutPixel(xmesa->xm_visual->hpcr_clear_ximage, i, 0, DITHER_HPCR(i, 0, r, g, b));
-         XMesaPutPixel(xmesa->xm_visual->hpcr_clear_ximage, i, 1, DITHER_HPCR(i, 1, r, g, b));
+         XMesaPutPixel(xmesa->xm_visual->hpcr_clear_ximage, i, 0,
+                       DITHER_HPCR(i, 0,
+                                   xmesa->clearcolor[0],
+                                   xmesa->clearcolor[1],
+                                   xmesa->clearcolor[2]));
+         XMesaPutPixel(xmesa->xm_visual->hpcr_clear_ximage, i, 1,
+                       DITHER_HPCR(i, 1,
+                                   xmesa->clearcolor[0],
+                                   xmesa->clearcolor[1],
+                                   xmesa->clearcolor[2]));
       }
    }
    /* change tile pixmap content */
-   XMesaPutImage(xmesa->display, 
-                (XMesaDrawable)xmesa->xm_visual->hpcr_clear_pixmap, 
-                xmesa->xm_buffer->cleargc, 
+   XMesaPutImage(xmesa->display,
+                (XMesaDrawable)xmesa->xm_visual->hpcr_clear_pixmap,
+                xmesa->xm_buffer->cleargc,
                 xmesa->xm_visual->hpcr_clear_ximage, 0, 0, 0, 0, 16, 2);
 }
 
@@ -4216,8 +4232,9 @@ clear_color_HPCR_pixmap( GLcontext *ctx,
 
 void xmesa_update_span_funcs( GLcontext *ctx )
 {
-   XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
+   XMesaContext xmesa = XMESA_CONTEXT(ctx);
    int depth=GET_VISUAL_DEPTH(xmesa->xm_visual);
+   struct swrast_device_driver *dd = _swrast_GetDeviceDriverReference( ctx );
 
    /*
     * These drawing functions depend on color buffer config:
@@ -4225,244 +4242,242 @@ void xmesa_update_span_funcs( GLcontext *ctx )
    if (xmesa->xm_buffer->buffer!=XIMAGE) {
       /* Writing to window or back pixmap */
       switch (xmesa->pixelformat) {
-        case PF_INDEX:
-           ctx->Driver.WriteCI32Span     = write_span_index_pixmap;
-           ctx->Driver.WriteCI8Span      = write_span_index8_pixmap;
-           ctx->Driver.WriteMonoCISpan   = write_span_mono_index_pixmap;
-           ctx->Driver.WriteCI32Pixels   = write_pixels_index_pixmap;
-           ctx->Driver.WriteMonoCIPixels = write_pixels_mono_index_pixmap;
+        case PF_Index:
+           dd->WriteCI32Span     = write_span_index_pixmap;
+           dd->WriteCI8Span      = write_span_index8_pixmap;
+           dd->WriteMonoCISpan   = write_span_mono_index_pixmap;
+           dd->WriteCI32Pixels   = write_pixels_index_pixmap;
+           dd->WriteMonoCIPixels = write_pixels_mono_index_pixmap;
            break;
-        case PF_TRUECOLOR:
-           ctx->Driver.WriteRGBASpan       = write_span_TRUECOLOR_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_TRUECOLOR_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_TRUECOLOR_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+        case PF_Truecolor:
+           dd->WriteRGBASpan       = write_span_TRUECOLOR_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_TRUECOLOR_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_TRUECOLOR_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
            break;
-        case PF_TRUEDITHER:
-           ctx->Driver.WriteRGBASpan       = write_span_TRUEDITHER_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_TRUEDITHER_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_TRUEDITHER_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_TRUEDITHER_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_TRUEDITHER_pixmap;
+        case PF_Dither_True:
+           dd->WriteRGBASpan       = write_span_TRUEDITHER_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_TRUEDITHER_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_TRUEDITHER_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_TRUEDITHER_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_TRUEDITHER_pixmap;
            break;
         case PF_8A8B8G8R:
-           ctx->Driver.WriteRGBASpan       = write_span_8A8B8G8R_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_8A8B8G8R_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_8A8B8G8R_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+           dd->WriteRGBASpan       = write_span_8A8B8G8R_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_8A8B8G8R_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_8A8B8G8R_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
            break;
         case PF_8R8G8B:
-           ctx->Driver.WriteRGBASpan       = write_span_8R8G8B_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_8R8G8B_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_8R8G8B_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
-            ctx->Driver.DrawPixels          = NULL; /*drawpixels_8R8G8B;*/
+           dd->WriteRGBASpan       = write_span_8R8G8B_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_8R8G8B_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_8R8G8B_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
            break;
         case PF_8R8G8B24:
-           ctx->Driver.WriteRGBASpan       = write_span_8R8G8B24_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_8R8G8B24_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_8R8G8B24_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+           dd->WriteRGBASpan       = write_span_8R8G8B24_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_8R8G8B24_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_8R8G8B24_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
            break;
         case PF_5R6G5B:
-           ctx->Driver.WriteRGBASpan       = write_span_5R6G5B_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_5R6G5B_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_5R6G5B_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+           dd->WriteRGBASpan       = write_span_5R6G5B_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_5R6G5B_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_5R6G5B_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
            break;
-        case PF_DITHER_5R6G5B:
-           ctx->Driver.WriteRGBASpan       = write_span_DITHER_5R6G5B_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_DITHER_5R6G5B_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_TRUEDITHER_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_DITHER_5R6G5B_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_TRUEDITHER_pixmap;
+        case PF_Dither_5R6G5B:
+           dd->WriteRGBASpan       = write_span_DITHER_5R6G5B_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_DITHER_5R6G5B_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_TRUEDITHER_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_DITHER_5R6G5B_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_TRUEDITHER_pixmap;
            break;
-        case PF_DITHER:
-           ctx->Driver.WriteRGBASpan       = write_span_DITHER_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_DITHER_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_DITHER_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_DITHER_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_DITHER_pixmap;
+        case PF_Dither:
+           dd->WriteRGBASpan       = write_span_DITHER_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_DITHER_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_DITHER_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_DITHER_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_DITHER_pixmap;
            break;
-        case PF_1BIT:
-           ctx->Driver.WriteRGBASpan       = write_span_1BIT_pixmap;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_1BIT_pixmap;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_1BIT_pixmap;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_1BIT_pixmap;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_1BIT_pixmap;
+        case PF_1Bit:
+           dd->WriteRGBASpan       = write_span_1BIT_pixmap;
+           dd->WriteRGBSpan        = write_span_rgb_1BIT_pixmap;
+           dd->WriteMonoRGBASpan   = write_span_mono_1BIT_pixmap;
+           dd->WriteRGBAPixels     = write_pixels_1BIT_pixmap;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_1BIT_pixmap;
            break;
          case PF_HPCR:
-            ctx->Driver.WriteRGBASpan       = write_span_HPCR_pixmap;
-            ctx->Driver.WriteRGBSpan        = write_span_rgb_HPCR_pixmap;
-            ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-            ctx->Driver.WriteRGBAPixels     = write_pixels_HPCR_pixmap;
-            ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+            dd->WriteRGBASpan       = write_span_HPCR_pixmap;
+            dd->WriteRGBSpan        = write_span_rgb_HPCR_pixmap;
+            dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+            dd->WriteRGBAPixels     = write_pixels_HPCR_pixmap;
+            dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
            if (xmesa->xm_visual->hpcr_clear_flag) {
-               ctx->Driver.ClearColor = clear_color_HPCR_pixmap;
+              ctx->Driver.ClearColor = clear_color_HPCR_pixmap;
            }
             break;
-         case PF_LOOKUP:
-            ctx->Driver.WriteRGBASpan       = write_span_LOOKUP_pixmap;
-            ctx->Driver.WriteRGBSpan        = write_span_rgb_LOOKUP_pixmap;
-            ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-            ctx->Driver.WriteRGBAPixels     = write_pixels_LOOKUP_pixmap;
-            ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+         case PF_Lookup:
+            dd->WriteRGBASpan       = write_span_LOOKUP_pixmap;
+            dd->WriteRGBSpan        = write_span_rgb_LOOKUP_pixmap;
+            dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+            dd->WriteRGBAPixels     = write_pixels_LOOKUP_pixmap;
+            dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
             break;
-         case PF_GRAYSCALE:
-            ctx->Driver.WriteRGBASpan       = write_span_GRAYSCALE_pixmap;
-            ctx->Driver.WriteRGBSpan        = write_span_rgb_GRAYSCALE_pixmap;
-            ctx->Driver.WriteMonoRGBASpan   = write_span_mono_pixmap;
-            ctx->Driver.WriteRGBAPixels     = write_pixels_GRAYSCALE_pixmap;
-            ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_pixmap;
+         case PF_Grayscale:
+            dd->WriteRGBASpan       = write_span_GRAYSCALE_pixmap;
+            dd->WriteRGBSpan        = write_span_rgb_GRAYSCALE_pixmap;
+            dd->WriteMonoRGBASpan   = write_span_mono_pixmap;
+            dd->WriteRGBAPixels     = write_pixels_GRAYSCALE_pixmap;
+            dd->WriteMonoRGBAPixels = write_pixels_mono_pixmap;
             break;
         default:
-           gl_problem(NULL,"Bad pixel format in xmesa_update_state (1)");
+           _mesa_problem(NULL,"Bad pixel format in xmesa_update_state (1)");
             return;
       }
    }
    else if (xmesa->xm_buffer->buffer==XIMAGE) {
       /* Writing to back XImage */
       switch (xmesa->pixelformat) {
-        case PF_INDEX:
-           ctx->Driver.WriteCI32Span     = write_span_index_ximage;
+        case PF_Index:
+           dd->WriteCI32Span     = write_span_index_ximage;
            if (depth==8)
-               ctx->Driver.WriteCI8Span   = write_span_index8_ximage8;
+               dd->WriteCI8Span   = write_span_index8_ximage8;
             else
-               ctx->Driver.WriteCI8Span   = write_span_index8_ximage;
-           ctx->Driver.WriteMonoCISpan   = write_span_mono_index_ximage;
-           ctx->Driver.WriteCI32Pixels   = write_pixels_index_ximage;
-           ctx->Driver.WriteMonoCIPixels = write_pixels_mono_index_ximage;
+               dd->WriteCI8Span   = write_span_index8_ximage;
+           dd->WriteMonoCISpan   = write_span_mono_index_ximage;
+           dd->WriteCI32Pixels   = write_pixels_index_ximage;
+           dd->WriteMonoCIPixels = write_pixels_mono_index_ximage;
            break;
-        case PF_TRUECOLOR:
+        case PF_Truecolor:
            /* Generic RGB */
-           ctx->Driver.WriteRGBASpan       = write_span_TRUECOLOR_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_TRUECOLOR_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_TRUECOLOR_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_ximage;
+           dd->WriteRGBASpan       = write_span_TRUECOLOR_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_TRUECOLOR_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_ximage;
+           dd->WriteRGBAPixels     = write_pixels_TRUECOLOR_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_ximage;
            break;
-        case PF_TRUEDITHER:
-           ctx->Driver.WriteRGBASpan       = write_span_TRUEDITHER_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_TRUEDITHER_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_TRUEDITHER_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_TRUEDITHER_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_TRUEDITHER_ximage;
+        case PF_Dither_True:
+           dd->WriteRGBASpan       = write_span_TRUEDITHER_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_TRUEDITHER_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_TRUEDITHER_ximage;
+           dd->WriteRGBAPixels     = write_pixels_TRUEDITHER_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_TRUEDITHER_ximage;
            break;
         case PF_8A8B8G8R:
-           ctx->Driver.WriteRGBASpan       = write_span_8A8B8G8R_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_8A8B8G8R_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_8A8B8G8R_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_8A8B8G8R_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_8A8B8G8R_ximage;
+           dd->WriteRGBASpan       = write_span_8A8B8G8R_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_8A8B8G8R_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_8A8B8G8R_ximage;
+           dd->WriteRGBAPixels     = write_pixels_8A8B8G8R_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_8A8B8G8R_ximage;
            break;
         case PF_8R8G8B:
-           ctx->Driver.WriteRGBASpan       = write_span_8R8G8B_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_8R8G8B_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_8R8G8B_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_8R8G8B_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_8R8G8B_ximage;
-            ctx->Driver.DrawPixels          = NULL;
+           dd->WriteRGBASpan       = write_span_8R8G8B_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_8R8G8B_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_8R8G8B_ximage;
+           dd->WriteRGBAPixels     = write_pixels_8R8G8B_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_8R8G8B_ximage;
            break;
         case PF_8R8G8B24:
-           ctx->Driver.WriteRGBASpan       = write_span_8R8G8B24_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_8R8G8B24_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_8R8G8B24_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_8R8G8B24_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_8R8G8B24_ximage;
+           dd->WriteRGBASpan       = write_span_8R8G8B24_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_8R8G8B24_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_8R8G8B24_ximage;
+           dd->WriteRGBAPixels     = write_pixels_8R8G8B24_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_8R8G8B24_ximage;
            break;
         case PF_5R6G5B:
-           ctx->Driver.WriteRGBASpan       = write_span_5R6G5B_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_5R6G5B_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_5R6G5B_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_ximage;
+           dd->WriteRGBASpan       = write_span_5R6G5B_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_5R6G5B_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_ximage;
+           dd->WriteRGBAPixels     = write_pixels_5R6G5B_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_ximage;
            break;
-        case PF_DITHER_5R6G5B:
-           ctx->Driver.WriteRGBASpan       = write_span_DITHER_5R6G5B_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_DITHER_5R6G5B_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_DITHER_5R6G5B_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_DITHER_5R6G5B_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_DITHER_5R6G5B_ximage;
+        case PF_Dither_5R6G5B:
+           dd->WriteRGBASpan       = write_span_DITHER_5R6G5B_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_DITHER_5R6G5B_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_DITHER_5R6G5B_ximage;
+           dd->WriteRGBAPixels     = write_pixels_DITHER_5R6G5B_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_DITHER_5R6G5B_ximage;
            break;
-        case PF_DITHER:
+        case PF_Dither:
            if (depth==8) {
-              ctx->Driver.WriteRGBASpan      = write_span_DITHER8_ximage;
-              ctx->Driver.WriteRGBSpan       = write_span_rgb_DITHER8_ximage;
-              ctx->Driver.WriteMonoRGBASpan  = write_span_mono_DITHER8_ximage;
-              ctx->Driver.WriteRGBAPixels    = write_pixels_DITHER8_ximage;
-              ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_DITHER8_ximage;
+              dd->WriteRGBASpan      = write_span_DITHER8_ximage;
+              dd->WriteRGBSpan       = write_span_rgb_DITHER8_ximage;
+              dd->WriteMonoRGBASpan  = write_span_mono_DITHER8_ximage;
+              dd->WriteRGBAPixels    = write_pixels_DITHER8_ximage;
+              dd->WriteMonoRGBAPixels = write_pixels_mono_DITHER8_ximage;
            }
            else {
-              ctx->Driver.WriteRGBASpan       = write_span_DITHER_ximage;
-              ctx->Driver.WriteRGBSpan        = write_span_rgb_DITHER_ximage;
-              ctx->Driver.WriteMonoRGBASpan   = write_span_mono_DITHER_ximage;
-              ctx->Driver.WriteRGBAPixels     = write_pixels_DITHER_ximage;
-              ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_DITHER_ximage;
+              dd->WriteRGBASpan       = write_span_DITHER_ximage;
+              dd->WriteRGBSpan        = write_span_rgb_DITHER_ximage;
+              dd->WriteMonoRGBASpan   = write_span_mono_DITHER_ximage;
+              dd->WriteRGBAPixels     = write_pixels_DITHER_ximage;
+              dd->WriteMonoRGBAPixels = write_pixels_mono_DITHER_ximage;
            }
            break;
-        case PF_1BIT:
-           ctx->Driver.WriteRGBASpan       = write_span_1BIT_ximage;
-           ctx->Driver.WriteRGBSpan        = write_span_rgb_1BIT_ximage;
-           ctx->Driver.WriteMonoRGBASpan   = write_span_mono_1BIT_ximage;
-           ctx->Driver.WriteRGBAPixels     = write_pixels_1BIT_ximage;
-           ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_1BIT_ximage;
+        case PF_1Bit:
+           dd->WriteRGBASpan       = write_span_1BIT_ximage;
+           dd->WriteRGBSpan        = write_span_rgb_1BIT_ximage;
+           dd->WriteMonoRGBASpan   = write_span_mono_1BIT_ximage;
+           dd->WriteRGBAPixels     = write_pixels_1BIT_ximage;
+           dd->WriteMonoRGBAPixels = write_pixels_mono_1BIT_ximage;
            break;
          case PF_HPCR:
-            ctx->Driver.WriteRGBASpan       = write_span_HPCR_ximage;
-            ctx->Driver.WriteRGBSpan        = write_span_rgb_HPCR_ximage;
-            ctx->Driver.WriteMonoRGBASpan   = write_span_mono_HPCR_ximage;
-            ctx->Driver.WriteRGBAPixels     = write_pixels_HPCR_ximage;
-            ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_HPCR_ximage;
+            dd->WriteRGBASpan       = write_span_HPCR_ximage;
+            dd->WriteRGBSpan        = write_span_rgb_HPCR_ximage;
+            dd->WriteMonoRGBASpan   = write_span_mono_HPCR_ximage;
+            dd->WriteRGBAPixels     = write_pixels_HPCR_ximage;
+            dd->WriteMonoRGBAPixels = write_pixels_mono_HPCR_ximage;
            if (xmesa->xm_visual->hpcr_clear_flag) {
                ctx->Driver.ClearColor = clear_color_HPCR_ximage;
            }
             break;
-         case PF_LOOKUP:
+         case PF_Lookup:
            if (depth==8) {
-               ctx->Driver.WriteRGBASpan       = write_span_LOOKUP8_ximage;
-               ctx->Driver.WriteRGBSpan        = write_rgb_LOOKUP8_ximage;
-               ctx->Driver.WriteMonoRGBASpan   = write_span_mono_LOOKUP8_ximage;
-               ctx->Driver.WriteRGBAPixels     = write_pixels_LOOKUP8_ximage;
-               ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_LOOKUP8_ximage;
+               dd->WriteRGBASpan       = write_span_LOOKUP8_ximage;
+               dd->WriteRGBSpan        = write_rgb_LOOKUP8_ximage;
+               dd->WriteMonoRGBASpan   = write_span_mono_LOOKUP8_ximage;
+               dd->WriteRGBAPixels     = write_pixels_LOOKUP8_ximage;
+               dd->WriteMonoRGBAPixels = write_pixels_mono_LOOKUP8_ximage;
             }
             else {
-               ctx->Driver.WriteRGBASpan       = write_span_LOOKUP_ximage;
-               ctx->Driver.WriteRGBSpan        = write_span_rgb_LOOKUP_ximage;
-               ctx->Driver.WriteMonoRGBASpan   = write_span_mono_ximage;
-               ctx->Driver.WriteRGBAPixels     = write_pixels_LOOKUP_ximage;
-               ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_ximage;
+               dd->WriteRGBASpan       = write_span_LOOKUP_ximage;
+               dd->WriteRGBSpan        = write_span_rgb_LOOKUP_ximage;
+               dd->WriteMonoRGBASpan   = write_span_mono_ximage;
+               dd->WriteRGBAPixels     = write_pixels_LOOKUP_ximage;
+               dd->WriteMonoRGBAPixels = write_pixels_mono_ximage;
             }
             break;
-         case PF_GRAYSCALE:
+         case PF_Grayscale:
            if (depth==8) {
-              ctx->Driver.WriteRGBASpan       = write_span_GRAYSCALE8_ximage;
-              ctx->Driver.WriteRGBSpan        = write_span_rgb_GRAYSCALE8_ximage;
-              ctx->Driver.WriteMonoRGBASpan   = write_span_mono_GRAYSCALE8_ximage;
-              ctx->Driver.WriteRGBAPixels     = write_pixels_GRAYSCALE8_ximage;
-              ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_GRAYSCALE8_ximage;
+              dd->WriteRGBASpan       = write_span_GRAYSCALE8_ximage;
+              dd->WriteRGBSpan        = write_span_rgb_GRAYSCALE8_ximage;
+              dd->WriteMonoRGBASpan   = write_span_mono_GRAYSCALE8_ximage;
+              dd->WriteRGBAPixels     = write_pixels_GRAYSCALE8_ximage;
+              dd->WriteMonoRGBAPixels = write_pixels_mono_GRAYSCALE8_ximage;
            }
            else {
-              ctx->Driver.WriteRGBASpan       = write_span_GRAYSCALE_ximage;
-              ctx->Driver.WriteRGBSpan        = write_span_rgb_GRAYSCALE_ximage;
-              ctx->Driver.WriteMonoRGBASpan   = write_span_mono_ximage;
-              ctx->Driver.WriteRGBAPixels     = write_pixels_GRAYSCALE_ximage;
-              ctx->Driver.WriteMonoRGBAPixels = write_pixels_mono_ximage;
+              dd->WriteRGBASpan       = write_span_GRAYSCALE_ximage;
+              dd->WriteRGBSpan        = write_span_rgb_GRAYSCALE_ximage;
+              dd->WriteMonoRGBASpan   = write_span_mono_ximage;
+              dd->WriteRGBAPixels     = write_pixels_GRAYSCALE_ximage;
+              dd->WriteMonoRGBAPixels = write_pixels_mono_ximage;
            }
            break;
         default:
-           gl_problem(NULL,"Bad pixel format in xmesa_update_state (2)");
+           _mesa_problem(NULL,"Bad pixel format in xmesa_update_state (2)");
             return;
       }
    }
 
    /* Pixel/span reading functions: */
-   ctx->Driver.ReadCI32Span = read_index_span;
-   ctx->Driver.ReadRGBASpan = read_color_span;
-   ctx->Driver.ReadCI32Pixels = read_index_pixels;
-   ctx->Driver.ReadRGBAPixels = read_color_pixels;
+   dd->ReadCI32Span = read_index_span;
+   dd->ReadRGBASpan = read_color_span;
+   dd->ReadCI32Pixels = read_index_pixels;
+   dd->ReadRGBAPixels = read_color_pixels;
 }