Added ctx parameter to _mesa_debug()
Added _mesa_printf()
Updated SetDrawBuffer() function in all drivers (ala 4.0.3)
Import 4.0.3/DRI changes.
diff --git a/src/mesa/drivers/common/t_dd_dmatmp.h b/src/mesa/drivers/common/t_dd_dmatmp.h
index d358c3b..b8cf91d 100644
--- a/src/mesa/drivers/common/t_dd_dmatmp.h
+++ b/src/mesa/drivers/common/t_dd_dmatmp.h
@@ -1,4 +1,4 @@
-/* $Id: t_dd_dmatmp.h,v 1.12 2002/02/13 00:53:20 keithw Exp $ */
+/* $Id: t_dd_dmatmp.h,v 1.13 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -49,6 +49,7 @@
 #define ELTS_VARS
 #define ALLOC_ELTS( nr )
 #define EMIT_ELT( offset, elt )
+#define EMIT_TWO_ELTS( offset, elt0, elt1 )
 #define INCR_ELTS( nr )
 #define ELT_INIT(prim)
 #define GET_CURRENT_VB_MAX_ELTS() 0
@@ -480,7 +481,7 @@
 	       NEW_PRIMITIVE();
 	       ALLOC_ELTS_NEW_PRIMITIVE( quads*6 );
 
-	       for ( i = 0 ; i < quads*2 ; i+=2 ) {
+	       for ( i = j-start ; i < j-start+quads*2 ; i+=2 ) {
 		  EMIT_TWO_ELTS( 0, (i+0), (i+1) );
 		  EMIT_TWO_ELTS( 2, (i+2), (i+1) );
 		  EMIT_TWO_ELTS( 4, (i+3), (i+2) );
@@ -601,7 +602,7 @@
 	    NEW_PRIMITIVE();
 	    ALLOC_ELTS_NEW_PRIMITIVE( quads*6 );
 
-	    for ( i = 0 ; i < quads*4 ; i+=4 ) {
+	    for ( i = j-start ; i < j-start+quads*4 ; i+=4 ) {
 	       EMIT_TWO_ELTS( 0, (i+0), (i+1) );
 	       EMIT_TWO_ELTS( 2, (i+3), (i+1) );
 	       EMIT_TWO_ELTS( 4, (i+2), (i+3) );
@@ -996,7 +997,7 @@
 	       NEW_PRIMITIVE();
 	       ALLOC_ELTS_NEW_PRIMITIVE( quads*6 );
 
-	       for ( i = 0 ; i < quads ; i++, elts += 2 ) {
+	       for ( i = j-start ; i < j-start+quads ; i++, elts += 2 ) {
 		  EMIT_TWO_ELTS( 0, elts[0], elts[1] );
 		  EMIT_TWO_ELTS( 2, elts[2], elts[1] );
 		  EMIT_TWO_ELTS( 4, elts[3], elts[2] );
@@ -1064,7 +1065,7 @@
 	    NEW_PRIMITIVE();
 	    ALLOC_ELTS_NEW_PRIMITIVE( quads * 6 );
 
-	    for ( i = 0 ; i < quads ; i++, elts += 4 ) {
+	    for ( i = j-start ; i < j-start+quads ; i++, elts += 4 ) {
 	       EMIT_TWO_ELTS( 0, elts[0], elts[1] );
 	       EMIT_TWO_ELTS( 2, elts[3], elts[1] );
 	       EMIT_TWO_ELTS( 4, elts[2], elts[3] );
diff --git a/src/mesa/drivers/common/t_dd_vbtmp.h b/src/mesa/drivers/common/t_dd_vbtmp.h
index 8f7b638..d88318c 100644
--- a/src/mesa/drivers/common/t_dd_vbtmp.h
+++ b/src/mesa/drivers/common/t_dd_vbtmp.h
@@ -1,4 +1,4 @@
-/* $Id: t_dd_vbtmp.h,v 1.17 2002/06/03 16:06:35 brianp Exp $ */
+/* $Id: t_dd_vbtmp.h,v 1.18 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -189,15 +189,28 @@
    }
 
    if (DO_SPEC) {
-      if (VB->SecondaryColorPtr[0]->Type != GL_UNSIGNED_BYTE)
-	 IMPORT_FLOAT_SPEC_COLORS( ctx );
-      spec = (GLubyte (*)[4])VB->SecondaryColorPtr[0]->Ptr;
-      spec_stride = VB->SecondaryColorPtr[0]->StrideB;
+      if (VB->SecondaryColorPtr[0]) {
+	 if (VB->SecondaryColorPtr[0]->Type != GL_UNSIGNED_BYTE)
+	    IMPORT_FLOAT_SPEC_COLORS( ctx );
+	 spec = (GLubyte (*)[4])VB->SecondaryColorPtr[0]->Ptr;
+	 spec_stride = VB->SecondaryColorPtr[0]->StrideB;
+      } else {
+	 GLubyte tmp[4];
+	 spec = &tmp;
+	 spec_stride = 0;
+      }
    }
 
    if (DO_FOG) {
-      fog = VB->FogCoordPtr->data;
-      fog_stride = VB->FogCoordPtr->stride;
+      if (VB->FogCoordPtr) {
+	 fog = VB->FogCoordPtr->data;
+	 fog_stride = VB->FogCoordPtr->stride;
+      }
+      else {
+	 GLfloat tmp = 0;
+	 fog = &tmp;
+	 fog_stride = 0;
+      }
    }
 
    if (VB->importable_data) {
diff --git a/src/mesa/drivers/common/t_dd_vertex.h b/src/mesa/drivers/common/t_dd_vertex.h
index ba031fc..f275856 100644
--- a/src/mesa/drivers/common/t_dd_vertex.h
+++ b/src/mesa/drivers/common/t_dd_vertex.h
@@ -1,4 +1,4 @@
-/* $Id: t_dd_vertex.h,v 1.11 2002/06/05 16:48:54 brianp Exp $ */
+/* $Id: t_dd_vertex.h,v 1.12 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -77,9 +77,3 @@
    GLubyte ub4[24][4];
 } TAG(Vertex), *TAG(VertexPtr);
 
-typedef struct {
-   GLfloat clip[4];
-   GLuint mask;
-   GLuint pad;			/* alignment */
-   TAG(Vertex) v;
-} TAG(TnlVertex), *TAG(TnlVertexPtr);
diff --git a/src/mesa/drivers/dos/dmesa.c b/src/mesa/drivers/dos/dmesa.c
index 5ac7af4..d05d436 100644
--- a/src/mesa/drivers/dos/dmesa.c
+++ b/src/mesa/drivers/dos/dmesa.c
@@ -526,13 +526,11 @@
 /*

  * Set the destination/draw buffer.

  */

-static GLboolean set_draw_buffer (GLcontext *ctx, GLenum mode)

+static void set_draw_buffer (GLcontext *ctx, GLenum mode)

 {

- if (mode==GL_BACK_LEFT) {

-    return GL_TRUE;

- } else {

-    return GL_FALSE;

- }

+   /*

+     XXX this has to be fixed

+   */

 }

 

 

diff --git a/src/mesa/drivers/ggi/ggimesa.c b/src/mesa/drivers/ggi/ggimesa.c
index 339a708..97ab159 100644
--- a/src/mesa/drivers/ggi/ggimesa.c
+++ b/src/mesa/drivers/ggi/ggimesa.c
@@ -144,7 +144,7 @@
 }
 
 /* Set the buffer used for drawing */
-static GLboolean gl_ggiSetDrawBuffer(GLcontext *ctx, GLenum mode)
+static void gl_ggiSetDrawBuffer(GLcontext *ctx, GLenum mode)
 {
 	ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
 
@@ -155,17 +155,15 @@
 	{
 		ggiSetWriteFrame(ggi_ctx->ggi_visual,
 				 ggiGetDisplayFrame(ggi_ctx->ggi_visual));
-		return GL_TRUE;
 	}
 	else if (mode == GL_BACK_LEFT) 
 	{
 		ggiSetWriteFrame(ggi_ctx->ggi_visual,
 				 ggiGetDisplayFrame(ggi_ctx->ggi_visual)?0 : 1);
-		return GL_TRUE;
 	}
 	else 
 	{
-		return GL_FALSE;
+		/* nothing since we don't have any point/line/triangle functions. */
 	}
 }
 
diff --git a/src/mesa/drivers/glide/fxapi.c b/src/mesa/drivers/glide/fxapi.c
index 2aab6b1..5ba01b6 100644
--- a/src/mesa/drivers/glide/fxapi.c
+++ b/src/mesa/drivers/glide/fxapi.c
@@ -1,4 +1,4 @@
-/* $Id: fxapi.c,v 1.32 2001/09/23 16:50:01 brianp Exp $ */
+/* $Id: fxapi.c,v 1.33 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -283,6 +283,7 @@
    char *errorstr;
    GLboolean useBGR;
    char *system = NULL;
+   __GLimports imports;
 
    if (MESA_VERBOSE & VERBOSE_DRIVER) {
       fprintf(stderr, "fxmesa: fxMesaCreateContext() Start\n");
@@ -508,8 +509,10 @@
       goto errorhandler;
    }
 
-   ctx = fxMesa->glCtx = _mesa_create_context(fxMesa->glVis, shareCtx,	/* share list context */
-					      (void *) fxMesa, GL_TRUE);
+   _mesa_init_default_imports( &imports, (void *) fxMesa);
+   ctx = fxMesa->glCtx = _mesa_create_context(fxMesa->glVis,
+                                              shareCtx,
+					      &imports);
    if (!ctx) {
       errorstr = "_mesa_create_context";
       goto errorhandler;
diff --git a/src/mesa/drivers/glide/fxdd.c b/src/mesa/drivers/glide/fxdd.c
index a5541ec..caff948 100644
--- a/src/mesa/drivers/glide/fxdd.c
+++ b/src/mesa/drivers/glide/fxdd.c
@@ -1,4 +1,4 @@
-/* $Id: fxdd.c,v 1.86 2002/06/13 04:28:30 brianp Exp $ */
+/* $Id: fxdd.c,v 1.87 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -264,7 +264,7 @@
 
 /* Set the buffer used for drawing */
 /* XXX support for separate read/draw buffers hasn't been tested */
-static GLboolean
+static void
 fxDDSetDrawBuffer(GLcontext * ctx, GLenum mode)
 {
    fxMesaContext fxMesa = (fxMesaContext) ctx->DriverCtx;
@@ -276,19 +276,17 @@
    if (mode == GL_FRONT_LEFT) {
       fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
       FX_grRenderBuffer(fxMesa->currentFB);
-      return GL_TRUE;
    }
    else if (mode == GL_BACK_LEFT) {
       fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
       FX_grRenderBuffer(fxMesa->currentFB);
-      return GL_TRUE;
    }
    else if (mode == GL_NONE) {
       FX_grColorMask(FXFALSE, FXFALSE);
-      return GL_TRUE;
    }
    else {
-      return GL_FALSE;
+      /* we'll need a software fallback */
+      /* XXX not implemented */
    }
 }
 
diff --git a/src/mesa/drivers/glide/fxvb.c b/src/mesa/drivers/glide/fxvb.c
index 4983d5f..f0534b6 100644
--- a/src/mesa/drivers/glide/fxvb.c
+++ b/src/mesa/drivers/glide/fxvb.c
@@ -1,4 +1,4 @@
-/* $Id: fxvb.c,v 1.12 2002/06/06 16:19:25 brianp Exp $ */
+/* $Id: fxvb.c,v 1.13 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -352,7 +352,7 @@
 	 ind |= SETUP_TMU0;
       }
    }
-   else if (ctx->Texture._ReallyEnabled & TETURE0_ANY) {
+   else if (ctx->Texture._ReallyEnabled & TEXTURE0_ANY) {
       ind |= SETUP_TMU0;
    }
    
diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c
index 1a5cefe..4b69df6 100644
--- a/src/mesa/drivers/osmesa/osmesa.c
+++ b/src/mesa/drivers/osmesa/osmesa.c
@@ -1,4 +1,4 @@
-/* $Id: osmesa.c,v 1.80 2002/06/13 04:28:30 brianp Exp $ */
+/* $Id: osmesa.c,v 1.81 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -707,15 +707,10 @@
 
 
 
-static GLboolean set_draw_buffer( GLcontext *ctx, GLenum mode )
+static void set_draw_buffer( GLcontext *ctx, GLenum mode )
 {
    (void) ctx;
-   if (mode==GL_FRONT_LEFT) {
-      return GL_TRUE;
-   }
-   else {
-      return GL_FALSE;
-   }
+   (void) mode;
 }
 
 
diff --git a/src/mesa/drivers/svga/svgamesa.c b/src/mesa/drivers/svga/svgamesa.c
index 7e8f810..5d2e3d5 100644
--- a/src/mesa/drivers/svga/svgamesa.c
+++ b/src/mesa/drivers/svga/svgamesa.c
@@ -1,4 +1,4 @@
-/* $Id: svgamesa.c,v 1.18 2002/06/13 04:28:30 brianp Exp $ */
+/* $Id: svgamesa.c,v 1.19 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -217,7 +217,7 @@
    *height = SVGAMesa->height = vga_getydim();
 }
 
-static GLboolean set_draw_buffer( GLcontext *ctx, GLenum buffer )
+static void set_draw_buffer( GLcontext *ctx, GLenum buffer )
 {
    if (buffer == GL_FRONT_LEFT) {
       SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
@@ -229,7 +229,6 @@
       SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
       SVGABuffer.FrontBuffer=tmpptr;
 #endif
-      return GL_TRUE;
    }
    else if (buffer == GL_BACK_LEFT) {
       SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
@@ -237,10 +236,10 @@
       /*    vga_waitretrace(); */
       copy_buffer(SVGABuffer.BackBuffer);
 #endif
-      return GL_TRUE;
    }
-   else
-      return GL_FALSE;
+   else {
+      /* nothing since we don't have any point/line/triangle functions. */
+   }
 }
 
 
diff --git a/src/mesa/drivers/windows/wmesa.c b/src/mesa/drivers/windows/wmesa.c
index b973264..94a23d2 100644
--- a/src/mesa/drivers/windows/wmesa.c
+++ b/src/mesa/drivers/windows/wmesa.c
@@ -1,4 +1,4 @@
-/* $Id: wmesa.c,v 1.29 2002/06/13 04:28:30 brianp Exp $ */
+/* $Id: wmesa.c,v 1.30 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Windows (Win32) device driver for Mesa 3.4
@@ -569,15 +569,13 @@
   }
 }
 
-static GLboolean set_draw_buffer( GLcontext* ctx, GLenum mode )
+static void set_draw_buffer( GLcontext* ctx, GLenum mode )
 {
-  /* TODO: this could be better */
-  if (mode==GL_FRONT_LEFT || mode==GL_BACK_LEFT) {
-    return GL_TRUE;
-  }
-  else {
-    return GL_FALSE;
-  }
+   /* XXX doing nothing for now */
+   /* if front buffer, fine */
+   /* if back buffer, fine */
+   /* else, check swrast->_RasterMask & MULTI_DRAW_BIT, if true, */
+   /* use a swrast fallback function */
 }
 
 
@@ -3205,6 +3203,8 @@
     if (ctx->Polygon.SmoothFlag)     return NULL;
     if (ctx->Texture._ReallyEnabled)  return NULL;
     if (!wmesa->db_flag) return NULL;
+    if (ctx->swrast->_RasterMask & MULTI_DRAW_BIT) return NULL;
+
     /*if (wmesa->xm_buffer->buffer==XIMAGE)*/ {
     if (   ctx->Light.ShadeModel==GL_SMOOTH
         && ctx->_RasterMask==DEPTH_BIT
diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c
index 1fdb716..56e63f3 100644
--- a/src/mesa/drivers/x11/xm_dd.c
+++ b/src/mesa/drivers/x11/xm_dd.c
@@ -1,8 +1,8 @@
-/* $Id: xm_dd.c,v 1.31 2002/03/19 16:48:06 brianp Exp $ */
+/* $Id: xm_dd.c,v 1.32 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  4.0.2
+ * Version:  4.0.3
  *
  * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
  *
@@ -115,9 +115,7 @@
 }
 
 
-
-
-static GLboolean
+static void
 set_draw_buffer( GLcontext *ctx, GLenum mode )
 {
    const XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
@@ -125,7 +123,6 @@
       /* write to front buffer */
       xmesa->xm_buffer->buffer = xmesa->xm_buffer->frontbuffer;
       xmesa_update_span_funcs(ctx);
-      return GL_TRUE;
    }
    else if (mode==GL_BACK_LEFT && xmesa->xm_buffer->db_state) {
       /* write to back buffer */
@@ -141,10 +138,11 @@
          xmesa->xm_buffer->buffer = xmesa->xm_buffer->frontbuffer;
       }
       xmesa_update_span_funcs(ctx);
-      return GL_TRUE;
    }
    else {
-      return GL_FALSE;
+      /* the swrast->_RasterMask MULTI_DRAW_BIT will be set and
+       * we'll fall back to swrast to draw points/lines/triangles.
+       */
    }
 }
 
diff --git a/src/mesa/drivers/x11/xm_line.c b/src/mesa/drivers/x11/xm_line.c
index 30e45b6..ce70680 100644
--- a/src/mesa/drivers/x11/xm_line.c
+++ b/src/mesa/drivers/x11/xm_line.c
@@ -1,4 +1,4 @@
-/* $Id: xm_line.c,v 1.18 2001/09/12 03:32:29 brianp Exp $ */
+/* $Id: xm_line.c,v 1.19 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -560,6 +560,7 @@
    if (ctx->Texture._ReallyEnabled)       return (swrast_line_func) NULL;
    if (ctx->Light.ShadeModel != GL_FLAT)  return (swrast_line_func) NULL;
    if (ctx->Line.StippleFlag)             return (swrast_line_func) NULL;
+   if (swrast->_RasterMask & MULTI_DRAW_BIT) return (swrast_line_func) NULL;
 
    if (xmesa->xm_buffer->buffer==XIMAGE
        && swrast->_RasterMask==DEPTH_BIT
diff --git a/src/mesa/drivers/x11/xm_tri.c b/src/mesa/drivers/x11/xm_tri.c
index 6a8b678..f0aef4c 100644
--- a/src/mesa/drivers/x11/xm_tri.c
+++ b/src/mesa/drivers/x11/xm_tri.c
@@ -1,4 +1,4 @@
-/* $Id: xm_tri.c,v 1.22 2002/04/19 14:05:51 brianp Exp $ */
+/* $Id: xm_tri.c,v 1.23 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1505,7 +1505,6 @@
 #define USE(triFunc)                   \
 do {                                   \
     triFuncName = #triFunc;            \
-    /*printf("%s\n", triFuncName);*/   \
     return triFunc;                    \
 } while (0)
 
@@ -1531,6 +1530,7 @@
    if (ctx->RenderMode != GL_RENDER)  return (swrast_tri_func) NULL;
    if (ctx->Polygon.SmoothFlag)       return (swrast_tri_func) NULL;
    if (ctx->Texture._ReallyEnabled)   return (swrast_tri_func) NULL;
+   if (swrast->_RasterMask & MULTI_DRAW_BIT) return (swrast_tri_func) NULL;
 
    if (xmesa->xm_buffer->buffer==XIMAGE) {
       if (   ctx->Light.ShadeModel==GL_SMOOTH
diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c
index acca570..0a39ecd 100644
--- a/src/mesa/main/api_arrayelt.c
+++ b/src/mesa/main/api_arrayelt.c
@@ -1,4 +1,4 @@
-/* $Id: api_arrayelt.c,v 1.8 2002/04/19 00:23:08 brianp Exp $ */
+/* $Id: api_arrayelt.c,v 1.9 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -347,7 +347,7 @@
       _ae_update_state( ctx );
 
    for (ta = actx->texarrays ; ta->func ; ta++) {
-      ta->func( ta->unit, (char *)ta->array->Ptr + elt * ta->array->StrideB );
+      ta->func( ta->unit + GL_TEXTURE0_ARB, (char *)ta->array->Ptr + elt * ta->array->StrideB );
    }
 
    /* Must be last
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index f5f6117..a7f9015 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -1,4 +1,4 @@
-/* $Id: attrib.c,v 1.66 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: attrib.c,v 1.67 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -120,7 +120,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glPushAttrib %x\n", (int) mask);
+      _mesa_debug(ctx, "glPushAttrib %x\n", (int) mask);
 
    if (ctx->AttribStackDepth >= MAX_ATTRIB_STACK_DEPTH) {
       _mesa_error( ctx, GL_STACK_OVERFLOW, "glPushAttrib" );
@@ -802,7 +802,8 @@
    while (attr) {
 
       if (MESA_VERBOSE & VERBOSE_API) {
-         _mesa_debug("glPopAttrib %s\n", _mesa_lookup_enum_by_nr(attr->kind));
+         _mesa_debug(ctx, "glPopAttrib %s\n",
+                     _mesa_lookup_enum_by_nr(attr->kind));
       }
 
       switch (attr->kind) {
@@ -1078,7 +1079,7 @@
                      _mesa_set_enable(ctx, GL_CLIP_PLANE0 + i, GL_FALSE);
                   }
                   if (ctx->Driver.ClipPlane)
-                     ctx->Driver.ClipPlane( ctx, i, eyePlane );
+                     ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, eyePlane );
                }
 
                /* normalize/rescale */
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index 6d5b6a1..97b1187 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -1,4 +1,4 @@
-/* $Id: blend.c,v 1.35 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: blend.c,v 1.36 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -46,9 +46,9 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glBlendFunc %s %s\n",
-	      _mesa_lookup_enum_by_nr(sfactor),
-	      _mesa_lookup_enum_by_nr(dfactor));
+      _mesa_debug(ctx, "glBlendFunc %s %s\n",
+                  _mesa_lookup_enum_by_nr(sfactor),
+                  _mesa_lookup_enum_by_nr(dfactor));
 
    switch (sfactor) {
       case GL_SRC_COLOR:
@@ -127,11 +127,11 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glBlendFuncSeparate %s %s %s %s\n",
-	      _mesa_lookup_enum_by_nr(sfactorRGB),
-	      _mesa_lookup_enum_by_nr(dfactorRGB),
-	      _mesa_lookup_enum_by_nr(sfactorA),
-	      _mesa_lookup_enum_by_nr(dfactorA));
+      _mesa_debug(ctx, "glBlendFuncSeparate %s %s %s %s\n",
+                  _mesa_lookup_enum_by_nr(sfactorRGB),
+                  _mesa_lookup_enum_by_nr(dfactorRGB),
+                  _mesa_lookup_enum_by_nr(sfactorA),
+                  _mesa_lookup_enum_by_nr(dfactorA));
 
    switch (sfactorRGB) {
       case GL_SRC_COLOR:
@@ -268,8 +268,8 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glBlendEquation %s\n",
-	      _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glBlendEquation %s\n",
+                  _mesa_lookup_enum_by_nr(mode));
 
    switch (mode) {
       case GL_FUNC_ADD_EXT:
@@ -445,7 +445,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glColorMask %d %d %d %d\n", red, green, blue, alpha);
+      _mesa_debug(ctx, "glColorMask %d %d %d %d\n", red, green, blue, alpha);
 
    /* Shouldn't have any information about channel depth in core mesa
     * -- should probably store these as the native booleans:
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 295921e..c549e27 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -1,4 +1,4 @@
-/* $Id: buffers.c,v 1.35 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: buffers.c,v 1.36 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -97,7 +97,7 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glClear 0x%x\n", mask);
+      _mesa_debug(ctx, "glClear 0x%x\n", mask);
 
    if (mask & ~(GL_COLOR_BUFFER_BIT |
                 GL_DEPTH_BUFFER_BIT |
@@ -146,7 +146,7 @@
 
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glDrawBuffer %s\n", _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glDrawBuffer %s\n", _mesa_lookup_enum_by_nr(mode));
 
    switch (mode) {
       case GL_AUX0:
@@ -267,23 +267,11 @@
    }
 
    /*
-    * If we get here there can't have been an error.
-    * Now see if device driver can implement the drawing to the target
-    * buffer(s).  The driver may not be able to do GL_FRONT_AND_BACK mode
-    * for example.  We'll take care of that in the core code by looping
-    * over the individual buffers.
+    * If we get here there can't have been an error.  Now tell the
+    * device driver about it.  
     */
    ASSERT(ctx->Driver.SetDrawBuffer);
-   if ( (*ctx->Driver.SetDrawBuffer)(ctx, ctx->Color.DriverDrawBuffer) ) {
-      /* All OK, the driver will do all buffer writes */
-      ctx->Color.MultiDrawBuffer = GL_FALSE;
-   }
-   else {
-      /* We'll have to loop over the multiple draw buffer targets */
-      ctx->Color.MultiDrawBuffer = GL_TRUE;
-      /* Set drawing buffer to front for now */
-      (void) (*ctx->Driver.SetDrawBuffer)(ctx, GL_FRONT_LEFT);
-   }
+   (*ctx->Driver.SetDrawBuffer)(ctx, ctx->Color.DriverDrawBuffer);
 
    ctx->Color.DrawBuffer = mode;
    ctx->NewState |= _NEW_COLOR;
@@ -298,7 +286,7 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glReadBuffer %s\n", _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glReadBuffer %s\n", _mesa_lookup_enum_by_nr(mode));
 
    switch (mode) {
       case GL_AUX0:
@@ -360,7 +348,7 @@
    GLcontext *ctx = _mesa_get_current_context();
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glResizeBuffersMESA\n");
+      _mesa_debug(ctx, "glResizeBuffersMESA\n");
 
    if (ctx) {
       ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx );
@@ -416,7 +404,7 @@
    }
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glScissor %d %d %d %d\n", x, y, width, height);
+      _mesa_debug(ctx, "glScissor %d %d %d %d\n", x, y, width, height);
 
    if (x == ctx->Scissor.X &&
        y == ctx->Scissor.Y &&
diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
index 96dafac..d02baed 100644
--- a/src/mesa/main/config.h
+++ b/src/mesa/main/config.h
@@ -1,4 +1,4 @@
-/* $Id: config.h,v 1.38 2002/05/27 17:04:52 brianp Exp $ */
+/* $Id: config.h,v 1.39 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -151,7 +151,7 @@
 /*
  * Bits per accumulation buffer color component:  8, 16 or 32
  */
-#define ACCUM_BITS 16
+#define ACCUM_BITS 32
 
 
 /*
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index a1975bd..2baff7c 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.166 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: context.c,v 1.167 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -232,12 +232,13 @@
 {
     GLcontext *ctx;
 
-    ctx = (GLcontext *) (*imports->calloc)(0, 1, sizeof(GLcontext));
+    ctx = (GLcontext *) (*imports->calloc)(NULL, 1, sizeof(GLcontext));
     if (ctx == NULL) {
 	return NULL;
     }
     ctx->Driver.CurrentExecPrimitive=0;  /* XXX why is this here??? */
     ctx->imports = *imports;
+    _mesa_init_default_exports(&(ctx->exports));
 
     _mesa_initialize_visual(&ctx->Visual,
                             modes->rgbMode,
@@ -552,7 +553,7 @@
  * This function just calls all the various one-time-init functions in Mesa.
  */
 static void
-one_time_init( void )
+one_time_init( GLcontext *ctx )
 {
    static GLboolean alreadyCalled = GL_FALSE;
    _glthread_LOCK_MUTEX(OneTimeLock);
@@ -573,7 +574,7 @@
 #ifdef USE_SPARC_ASM
       _mesa_init_sparc_glapi_relocs();
 #endif
-      if (getenv("MESA_DEBUG")) {
+      if (ctx->imports.getenv(ctx, "MESA_DEBUG")) {
          _glapi_noop_enable_warnings(GL_TRUE);
       }
       else {
@@ -581,7 +582,7 @@
       }
 
 #if defined(DEBUG) && defined(__DATE__) && defined(__TIME__)
-   fprintf(stderr, "Mesa DEBUG build %s %s\n", __DATE__, __TIME__);
+      fprintf(stderr, "Mesa DEBUG build %s %s\n", __DATE__, __TIME__);
 #endif
 
       alreadyCalled = GL_TRUE;
@@ -1456,13 +1457,13 @@
    ctx->OcclusionResultSaved = GL_FALSE;
 
    /* For debug/development only */
-   ctx->NoRaster = getenv("MESA_NO_RASTER") ? GL_TRUE : GL_FALSE;
+   ctx->NoRaster = ctx->imports.getenv(ctx, "MESA_NO_RASTER") ? GL_TRUE : GL_FALSE;
    ctx->FirstTimeCurrent = GL_TRUE;
 
    /* Dither disable */
-   ctx->NoDither = getenv("MESA_NO_DITHER") ? GL_TRUE : GL_FALSE;
+   ctx->NoDither = ctx->imports.getenv(ctx, "MESA_NO_DITHER") ? GL_TRUE : GL_FALSE;
    if (ctx->NoDither) {
-      if (getenv("MESA_DEBUG")) {
+      if (ctx->imports.getenv(ctx, "MESA_DEBUG")) {
          fprintf(stderr, "MESA_NO_DITHER set - dithering disabled\n");
       }
       ctx->Color.DitherFlag = GL_FALSE;
@@ -1602,11 +1603,14 @@
    ASSERT(imports);
    ASSERT(imports->other); /* other points to the device driver's context */
 
-   /* misc one-time initializations */
-   one_time_init();
+   /* assing imports */
+   ctx->imports = *imports;
 
    /* initialize the exports (Mesa functions called by the window system) */
-    _mesa_init_default_exports( &(ctx->exports) );
+   _mesa_init_default_exports( &(ctx->exports) );
+
+   /* misc one-time initializations */
+   one_time_init(ctx);
 
 #if 0
    /**
@@ -1756,11 +1760,11 @@
 #endif
 
 
-   if (getenv("MESA_DEBUG"))
-      add_debug_flags(getenv("MESA_DEBUG"));
+   if (ctx->imports.getenv(ctx, "MESA_DEBUG"))
+      add_debug_flags(ctx->imports.getenv(ctx, "MESA_DEBUG"));
 
-   if (getenv("MESA_VERBOSE"))
-      add_debug_flags(getenv("MESA_VERBOSE"));
+   if (ctx->imports.getenv(ctx, "MESA_VERBOSE"))
+      add_debug_flags(ctx->imports.getenv(ctx, "MESA_VERBOSE"));
 
    return GL_TRUE;
 }
@@ -1779,16 +1783,23 @@
                       GLcontext *share_list,
                       const __GLimports *imports )
 {
-   GLcontext *ctx = (GLcontext *) CALLOC( sizeof(GLcontext) );
-   if (!ctx) {
+   GLcontext *ctx;
+
+   ASSERT(visual);
+   ASSERT(imports);
+   ASSERT(imports->calloc);
+
+   ctx = (GLcontext *) imports->calloc(NULL, 1, sizeof(GLcontext));
+   if (!ctx)
       return NULL;
-   }
+
    ctx->Driver.CurrentExecPrimitive = 0;  /* XXX why is this here??? */
+
    if (_mesa_initialize_context(ctx, visual, share_list, imports)) {
       return ctx;
    }
    else {
-      FREE(ctx);
+      imports->free(NULL, ctx);
       return NULL;
    }
 }
@@ -2054,7 +2065,7 @@
                      GLframebuffer *readBuffer )
 {
    if (MESA_VERBOSE)
-      fprintf(stderr, "_mesa_make_current2()\n");
+      _mesa_debug(newCtx, "_mesa_make_current2()\n");
 
    /* Check that the context's and framebuffer's visuals are compatible.
     * We could do a lot more checking here but this'll catch obvious
@@ -2102,7 +2113,7 @@
        * information.
        */
       if (newCtx->FirstTimeCurrent) {
-	 if (getenv("MESA_INFO")) {
+	 if (newCtx->imports.getenv(newCtx, "MESA_INFO")) {
 	    print_info();
 	 }
 	 newCtx->FirstTimeCurrent = GL_FALSE;
@@ -2162,13 +2173,23 @@
  */
 void _mesa_problem( const GLcontext *ctx, const char *s )
 {
-   fprintf( stderr, "Mesa implementation error: %s\n", s );
+   if (ctx) {
+      ctx->imports.fprintf((GLcontext *) ctx, stderr, "Mesa implementation error: %s\n", s);
 #ifdef XF86DRI
-   fprintf( stderr, "Please report to the DRI bug database at dri.sourceforge.net\n");
+      ctx->imports.fprintf((GLcontext *) ctx, stderr, "Please report to the DRI bug database at dri.sourceforge.net\n");
 #else
-   fprintf( stderr, "Please report to the Mesa bug database at www.mesa3d.org\n" );
+      ctx->imports.fprintf((GLcontext *) ctx, stderr, "Please report to the Mesa bug database at www.mesa3d.org\n" );
 #endif
-   (void) ctx;
+   }
+   else {
+      /* what can we do if we don't have a context???? */
+      fprintf( stderr, "Mesa implementation error: %s\n", s );
+#ifdef XF86DRI
+      fprintf( stderr, "Please report to the DRI bug database at dri.sourceforge.net\n");
+#else
+      fprintf( stderr, "Please report to the Mesa bug database at www.mesa3d.org\n" );
+#endif
+   }
 }
 
 
@@ -2198,9 +2219,15 @@
 void
 _mesa_error( GLcontext *ctx, GLenum error, const char *where )
 {
-   const char *debugEnv = getenv("MESA_DEBUG");
+   const char *debugEnv;
    GLboolean debug;
 
+   if (ctx)
+      debugEnv = ctx->imports.getenv(ctx, "MESA_DEBUG");
+   else
+      /* what can we do??? */
+      debugEnv = "";
+
 #ifdef DEBUG
    if (debugEnv && strstr(debugEnv, "silent"))
       debug = GL_FALSE;
@@ -2262,20 +2289,32 @@
 
 
 /*
- * Call this to report debug information.
+ * Call this to report debug information.  Uses stderr.
  */
 void
-_mesa_debug( const char *fmtString, ... )
+_mesa_debug( const GLcontext *ctx, const char *fmtString, ... )
 {
-#ifdef DEBUG
    va_list args;
    va_start( args, fmtString );  
-   (void) vfprintf( stderr, fmtString, args );
+   (void) ctx->imports.fprintf( (__GLcontext *) ctx, stderr, fmtString, args );
    va_end( args );
-#endif
 }
 
 
+/*
+ * A wrapper for printf.  Uses stdout.
+ */
+void
+_mesa_printf( const GLcontext *ctx, const char *fmtString, ... )
+{
+   va_list args;
+   va_start( args, fmtString );  
+   (void) ctx->imports.fprintf( (__GLcontext *) ctx, stdout, fmtString, args );
+   va_end( args );
+}
+
+
+
 void
 _mesa_Finish( void )
 {
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
index 23cd7e1..8e9524f 100644
--- a/src/mesa/main/context.h
+++ b/src/mesa/main/context.h
@@ -1,4 +1,4 @@
-/* $Id: context.h,v 1.31 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: context.h,v 1.32 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -238,7 +238,10 @@
 _mesa_error( GLcontext *ctx, GLenum error, const char *s );
 
 extern void
-_mesa_debug( const char *fmtString, ... );
+_mesa_debug( const GLcontext *ctx, const char *fmtString, ... );
+
+extern void
+_mesa_printf( const GLcontext *ctx, const char *fmtString, ... );
 
 
 
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 25b7224..1a10010 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1,10 +1,10 @@
-/* $Id: dd.h,v 1.68 2002/04/21 18:49:18 brianp Exp $ */
+/* $Id: dd.h,v 1.69 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  4.1
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2002  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"),
@@ -77,7 +77,7 @@
     * settings!  Software Mesa can do masked clears if the device driver can't.
     */
 
-   GLboolean (*SetDrawBuffer)( GLcontext *ctx, GLenum buffer );
+   void (*SetDrawBuffer)( GLcontext *ctx, GLenum buffer );
    /*
     * Specifies the current buffer for writing.
     * The following values must be accepted when applicable:
@@ -85,16 +85,15 @@
     *    GL_BACK_LEFT - when double buffering
     *    GL_FRONT_RIGHT - when using stereo
     *    GL_BACK_RIGHT - when using stereo and double buffering
-    * The folowing values may optionally be accepted.  Return GL_TRUE
-    * if accepted, GL_FALSE if not accepted.  In practice, only drivers
-    * which can write to multiple color buffers at once should accept
-    * these values.
     *    GL_FRONT - write to front left and front right if it exists
     *    GL_BACK - write to back left and back right if it exists
     *    GL_LEFT - write to front left and back left if it exists
     *    GL_RIGHT - write to right left and back right if they exist
     *    GL_FRONT_AND_BACK - write to all four buffers if they exist
     *    GL_NONE - disable buffer write in device driver.
+    *
+    * Note the driver must organize fallbacks (eg with swrast) if it
+    * cannot implement the requested mode.
     */
 
    void (*GetBufferSize)( GLframebuffer *buffer,
diff --git a/src/mesa/main/depth.c b/src/mesa/main/depth.c
index 3c25550..1ae9125 100644
--- a/src/mesa/main/depth.c
+++ b/src/mesa/main/depth.c
@@ -1,4 +1,4 @@
-/* $Id: depth.c,v 1.29 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: depth.c,v 1.30 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -70,7 +70,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glDepthFunc %s\n", _mesa_lookup_enum_by_nr(func));
+      _mesa_debug(ctx, "glDepthFunc %s\n", _mesa_lookup_enum_by_nr(func));
 
    switch (func) {
    case GL_LESS:    /* (default) pass if incoming z < stored z */
@@ -106,7 +106,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glDepthMask %d\n", flag);
+      _mesa_debug(ctx, "glDepthMask %d\n", flag);
 
    /*
     * GL_TRUE indicates depth buffer writing is enabled (default)
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 6b67b31..3523db5 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -1,4 +1,4 @@
-/* $Id: dlist.c,v 1.89 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: dlist.c,v 1.90 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -4145,9 +4145,6 @@
    if (ctx->Driver.BeginCallList)
       ctx->Driver.BeginCallList( ctx, list );
 
-/*     _mesa_debug("execute list %d\n", list); */
-/*     mesa_print_display_list( list );  */
-
    ctx->CallDepth++;
 
    n = (Node *) _mesa_HashLookup(ctx->Shared->DisplayList, list);
@@ -4936,7 +4933,8 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glNewList %u %s\n", list, _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glNewList %u %s\n", list,
+                  _mesa_lookup_enum_by_nr(mode));
 
    if (list==0) {
       _mesa_error( ctx, GL_INVALID_VALUE, "glNewList" );
@@ -4983,7 +4981,7 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glEndList\n");
+      _mesa_debug(ctx, "glEndList\n");
 
    /* Check that a list is under construction */
    if (!ctx->CurrentListPtr) {
@@ -5026,7 +5024,7 @@
 
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("_mesa_CallList %d\n", list); 
+      _mesa_debug(ctx, "_mesa_CallList %d\n", list); 
 
 /*     mesa_print_display_list( list ); */
 
@@ -5059,7 +5057,7 @@
    GLboolean save_compile_flag;
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("_mesa_CallLists %d\n", n); 
+      _mesa_debug(ctx, "_mesa_CallLists %d\n", n); 
 
    /* Save the CompileFlag status, turn it off, execute display list,
     * and restore the CompileFlag.
@@ -6162,19 +6160,19 @@
  * Print the commands in a display list.  For debugging only.
  * TODO: many commands aren't handled yet.
  */
-static void print_list( GLcontext *ctx, FILE *f, GLuint list )
+static void print_list( GLcontext *ctx, GLuint list )
 {
    Node *n;
    GLboolean done;
 
    if (!glIsList(list)) {
-      fprintf(f,"%u is not a display list ID\n",list);
+      _mesa_printf(ctx, "%u is not a display list ID\n", list);
       return;
    }
 
    n = (Node *) _mesa_HashLookup(ctx->Shared->DisplayList, list);
 
-   fprintf( f, "START-LIST %u, address %p\n", list, (void*)n );
+   _mesa_printf(ctx, "START-LIST %u, address %p\n", list, (void*)n );
 
    done = n ? GL_FALSE : GL_TRUE;
    while (!done) {
@@ -6188,149 +6186,164 @@
       else {
 	 switch (opcode) {
          case OPCODE_ACCUM:
-            fprintf(f,"accum %s %g\n", enum_string(n[1].e), n[2].f );
+            _mesa_printf(ctx, "accum %s %g\n", enum_string(n[1].e), n[2].f );
 	    break;
 	 case OPCODE_BITMAP:
-            fprintf(f,"Bitmap %d %d %g %g %g %g %p\n", n[1].i, n[2].i,
+            _mesa_printf(ctx, "Bitmap %d %d %g %g %g %g %p\n", n[1].i, n[2].i,
 		       n[3].f, n[4].f, n[5].f, n[6].f, (void *) n[7].data );
 	    break;
          case OPCODE_CALL_LIST:
-            fprintf(f,"CallList %d\n", (int) n[1].ui );
+            _mesa_printf(ctx, "CallList %d\n", (int) n[1].ui );
             break;
          case OPCODE_CALL_LIST_OFFSET:
-            fprintf(f,"CallList %d + offset %u = %u\n", (int) n[1].ui,
+            _mesa_printf(ctx, "CallList %d + offset %u = %u\n", (int) n[1].ui,
                     ctx->List.ListBase, ctx->List.ListBase + n[1].ui );
             break;
          case OPCODE_COLOR_TABLE_PARAMETER_FV:
-            fprintf(f,"ColorTableParameterfv %s %s %f %f %f %f\n",
+            _mesa_printf(ctx, "ColorTableParameterfv %s %s %f %f %f %f\n",
                     enum_string(n[1].e), enum_string(n[2].e),
                     n[3].f, n[4].f, n[5].f, n[6].f);
             break;
          case OPCODE_COLOR_TABLE_PARAMETER_IV:
-            fprintf(f,"ColorTableParameteriv %s %s %d %d %d %d\n",
+            _mesa_printf(ctx, "ColorTableParameteriv %s %s %d %d %d %d\n",
                     enum_string(n[1].e), enum_string(n[2].e),
                     n[3].i, n[4].i, n[5].i, n[6].i);
             break;
 	 case OPCODE_DISABLE:
-            fprintf(f,"Disable %s\n", enum_string(n[1].e));
+            _mesa_printf(ctx, "Disable %s\n", enum_string(n[1].e));
 	    break;
 	 case OPCODE_ENABLE:
-            fprintf(f,"Enable %s\n", enum_string(n[1].e));
+            _mesa_printf(ctx, "Enable %s\n", enum_string(n[1].e));
 	    break;
          case OPCODE_FRUSTUM:
-            fprintf(f,"Frustum %g %g %g %g %g %g\n",
+            _mesa_printf(ctx, "Frustum %g %g %g %g %g %g\n",
                     n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f );
             break;
 	 case OPCODE_LINE_STIPPLE:
-	    fprintf(f,"LineStipple %d %x\n", n[1].i, (int) n[2].us );
+	    _mesa_printf(ctx, "LineStipple %d %x\n", n[1].i, (int) n[2].us );
 	    break;
 	 case OPCODE_LOAD_IDENTITY:
-            fprintf(f,"LoadIdentity\n");
+            _mesa_printf(ctx, "LoadIdentity\n");
 	    break;
 	 case OPCODE_LOAD_MATRIX:
-            fprintf(f,"LoadMatrix\n");
-            fprintf(f,"  %8f %8f %8f %8f\n", n[1].f, n[5].f,  n[9].f, n[13].f);
-            fprintf(f,"  %8f %8f %8f %8f\n", n[2].f, n[6].f, n[10].f, n[14].f);
-            fprintf(f,"  %8f %8f %8f %8f\n", n[3].f, n[7].f, n[11].f, n[15].f);
-            fprintf(f,"  %8f %8f %8f %8f\n", n[4].f, n[8].f, n[12].f, n[16].f);
+            _mesa_printf(ctx, "LoadMatrix\n");
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[1].f, n[5].f,  n[9].f, n[13].f);
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[2].f, n[6].f, n[10].f, n[14].f);
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[3].f, n[7].f, n[11].f, n[15].f);
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[4].f, n[8].f, n[12].f, n[16].f);
 	    break;
 	 case OPCODE_MULT_MATRIX:
-            fprintf(f,"MultMatrix (or Rotate)\n");
-            fprintf(f,"  %8f %8f %8f %8f\n", n[1].f, n[5].f,  n[9].f, n[13].f);
-            fprintf(f,"  %8f %8f %8f %8f\n", n[2].f, n[6].f, n[10].f, n[14].f);
-            fprintf(f,"  %8f %8f %8f %8f\n", n[3].f, n[7].f, n[11].f, n[15].f);
-            fprintf(f,"  %8f %8f %8f %8f\n", n[4].f, n[8].f, n[12].f, n[16].f);
+            _mesa_printf(ctx, "MultMatrix (or Rotate)\n");
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[1].f, n[5].f,  n[9].f, n[13].f);
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[2].f, n[6].f, n[10].f, n[14].f);
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[3].f, n[7].f, n[11].f, n[15].f);
+            _mesa_printf(ctx, "  %8f %8f %8f %8f\n",
+                         n[4].f, n[8].f, n[12].f, n[16].f);
 	    break;
          case OPCODE_ORTHO:
-            fprintf(f,"Ortho %g %g %g %g %g %g\n",
+            _mesa_printf(ctx, "Ortho %g %g %g %g %g %g\n",
                     n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f );
             break;
 	 case OPCODE_POP_ATTRIB:
-            fprintf(f,"PopAttrib\n");
+            _mesa_printf(ctx, "PopAttrib\n");
 	    break;
 	 case OPCODE_POP_MATRIX:
-            fprintf(f,"PopMatrix\n");
+            _mesa_printf(ctx, "PopMatrix\n");
 	    break;
 	 case OPCODE_POP_NAME:
-            fprintf(f,"PopName\n");
+            _mesa_printf(ctx, "PopName\n");
 	    break;
 	 case OPCODE_PUSH_ATTRIB:
-            fprintf(f,"PushAttrib %x\n", n[1].bf );
+            _mesa_printf(ctx, "PushAttrib %x\n", n[1].bf );
 	    break;
 	 case OPCODE_PUSH_MATRIX:
-            fprintf(f,"PushMatrix\n");
+            _mesa_printf(ctx, "PushMatrix\n");
 	    break;
 	 case OPCODE_PUSH_NAME:
-            fprintf(f,"PushName %d\n", (int) n[1].ui );
+            _mesa_printf(ctx, "PushName %d\n", (int) n[1].ui );
 	    break;
 	 case OPCODE_RASTER_POS:
-            fprintf(f,"RasterPos %g %g %g %g\n", n[1].f, n[2].f,n[3].f,n[4].f);
+            _mesa_printf(ctx, "RasterPos %g %g %g %g\n",
+                         n[1].f, n[2].f,n[3].f,n[4].f);
 	    break;
          case OPCODE_ROTATE:
-            fprintf(f,"Rotate %g %g %g %g\n", n[1].f, n[2].f, n[3].f, n[4].f );
+            _mesa_printf(ctx, "Rotate %g %g %g %g\n",
+                         n[1].f, n[2].f, n[3].f, n[4].f );
             break;
          case OPCODE_SCALE:
-            fprintf(f,"Scale %g %g %g\n", n[1].f, n[2].f, n[3].f );
+            _mesa_printf(ctx, "Scale %g %g %g\n", n[1].f, n[2].f, n[3].f );
             break;
          case OPCODE_TRANSLATE:
-            fprintf(f,"Translate %g %g %g\n", n[1].f, n[2].f, n[3].f );
+            _mesa_printf(ctx, "Translate %g %g %g\n", n[1].f, n[2].f, n[3].f );
             break;
          case OPCODE_BIND_TEXTURE:
-	    fprintf(f,"BindTexture %s %d\n", _mesa_lookup_enum_by_nr(n[1].ui),
-		    n[2].ui);
+	    _mesa_printf(ctx, "BindTexture %s %d\n",
+                         _mesa_lookup_enum_by_nr(n[1].ui), n[2].ui);
 	    break;
          case OPCODE_SHADE_MODEL:
-	    fprintf(f,"ShadeModel %s\n", _mesa_lookup_enum_by_nr(n[1].ui));
+	    _mesa_printf(ctx, "ShadeModel %s\n",
+                         _mesa_lookup_enum_by_nr(n[1].ui));
 	    break;
 	 case OPCODE_MAP1:
-	    fprintf(f,"Map1 %s %.3f %.3f %d %d\n", 
+	    _mesa_printf(ctx, "Map1 %s %.3f %.3f %d %d\n", 
 		    _mesa_lookup_enum_by_nr(n[1].ui),
 		    n[2].f, n[3].f, n[4].i, n[5].i);
 	    break;
 	 case OPCODE_MAP2:
-	    fprintf(f,"Map2 %s %.3f %.3f %.3f %.3f %d %d %d %d\n", 
-		    _mesa_lookup_enum_by_nr(n[1].ui),
-		    n[2].f, n[3].f, n[4].f, n[5].f,
-		    n[6].i, n[7].i, n[8].i, n[9].i);
+	    _mesa_printf(ctx, "Map2 %s %.3f %.3f %.3f %.3f %d %d %d %d\n", 
+                         _mesa_lookup_enum_by_nr(n[1].ui),
+                         n[2].f, n[3].f, n[4].f, n[5].f,
+                         n[6].i, n[7].i, n[8].i, n[9].i);
 	    break;
 	 case OPCODE_MAPGRID1:
-	    fprintf(f,"MapGrid1 %d %.3f %.3f\n", n[1].i, n[2].f, n[3].f);
+	    _mesa_printf(ctx, "MapGrid1 %d %.3f %.3f\n",
+                         n[1].i, n[2].f, n[3].f);
 	    break;
 	 case OPCODE_MAPGRID2:
-	    fprintf(f,"MapGrid2 %d %.3f %.3f, %d %.3f %.3f\n", 
-		    n[1].i, n[2].f, n[3].f,
-		    n[4].i, n[5].f, n[6].f);
+	    _mesa_printf(ctx, "MapGrid2 %d %.3f %.3f, %d %.3f %.3f\n", 
+                         n[1].i, n[2].f, n[3].f,
+                         n[4].i, n[5].f, n[6].f);
 	    break;
 	 case OPCODE_EVALMESH1:
-	    fprintf(f,"EvalMesh1 %d %d\n", n[1].i, n[2].i);
+	    _mesa_printf(ctx, "EvalMesh1 %d %d\n", n[1].i, n[2].i);
 	    break;
 	 case OPCODE_EVALMESH2:
-	    fprintf(f,"EvalMesh2 %d %d %d %d\n",
-		    n[1].i, n[2].i, n[3].i, n[4].i);
+	    _mesa_printf(ctx, "EvalMesh2 %d %d %d %d\n",
+                         n[1].i, n[2].i, n[3].i, n[4].i);
 	    break;
 
 	 /*
 	  * meta opcodes/commands
 	  */
          case OPCODE_ERROR:
-            fprintf(f,"Error: %s %s\n", enum_string(n[1].e), (const char *)n[2].data );
+            _mesa_printf(ctx, "Error: %s %s\n",
+                         enum_string(n[1].e), (const char *)n[2].data );
             break;
 	 case OPCODE_CONTINUE:
-            fprintf(f,"DISPLAY-LIST-CONTINUE\n");
+            _mesa_printf(ctx, "DISPLAY-LIST-CONTINUE\n");
 	    n = (Node *) n[1].next;
 	    break;
 	 case OPCODE_END_OF_LIST:
-            fprintf(f,"END-LIST %u\n", list);
+            _mesa_printf(ctx, "END-LIST %u\n", list);
 	    done = GL_TRUE;
 	    break;
          default:
             if (opcode < 0 || opcode > OPCODE_END_OF_LIST) {
-               fprintf(f,"ERROR IN DISPLAY LIST: opcode = %d, address = %p\n",
+               _mesa_printf(ctx,
+                       "ERROR IN DISPLAY LIST: opcode = %d, address = %p\n",
                        opcode, (void*) n);
                return;
             }
             else {
-               fprintf(f,"command %d, %u operands\n",opcode,InstSize[opcode]);
+               _mesa_printf(ctx, "command %d, %u operands\n",
+                            opcode, InstSize[opcode]);
             }
 	 }
 	 /* increment n to point to next compiled command */
@@ -6351,5 +6364,5 @@
 void mesa_print_display_list( GLuint list )
 {
    GET_CURRENT_CONTEXT(ctx);
-   print_list( ctx, stderr, list );
+   print_list( ctx, list );
 }
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index 1c37f5b..edad15b 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -1,4 +1,4 @@
-/* $Id: drawpix.c,v 1.60 2002/05/09 21:54:16 brianp Exp $ */
+/* $Id: drawpix.c,v 1.61 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -223,3 +223,68 @@
    ctx->Current.RasterPos[0] += xmove;
    ctx->Current.RasterPos[1] += ymove;
 }
+
+
+
+#if 0  /* experimental */
+/*
+ * Execute glDrawDepthPixelsMESA().  This function accepts both a color
+ * image and depth (Z) image.  Rasterization produces fragments with
+ * color and Z taken from these images.  This function is intended for
+ * Z-compositing.  Normally, this operation requires two glDrawPixels
+ * calls with stencil testing.
+ */
+void
+_mesa_DrawDepthPixelsMESA( GLsizei width, GLsizei height,
+                           GLenum colorFormat, GLenum colorType,
+                           const GLvoid *colors,
+                           GLenum depthType, const GLvoid *depths )
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
+
+   if (width < 0 || height < 0) {
+      _mesa_error( ctx, GL_INVALID_VALUE,
+                   "glDrawDepthPixelsMESA(width or height < 0" );
+      return;
+   }
+
+   if (ctx->RenderMode==GL_RENDER) {
+      GLint x, y;
+      if (!colors || !depths || !ctx->Current.RasterPosValid) {
+	 return;
+      }
+
+      if (ctx->NewState) {
+         _mesa_update_state(ctx);
+      }
+
+      /* Round, to satisfy conformance tests (matches SGI's OpenGL) */
+      x = IROUND(ctx->Current.RasterPos[0]);
+      y = IROUND(ctx->Current.RasterPos[1]);
+
+      ctx->OcclusionResult = GL_TRUE;
+      ctx->Driver.DrawDepthPixelsMESA(ctx, x, y, width, height,
+                                      colorFormat, colorType, colors,
+                                      depthType, depths, &ctx->Unpack);
+   }
+   else if (ctx->RenderMode==GL_FEEDBACK) {
+      /* Feedback the current raster pos info */
+      if (ctx->Current.RasterPosValid) {
+	 FLUSH_CURRENT( ctx, 0 );
+         FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN );
+         _mesa_feedback_vertex( ctx,
+				ctx->Current.RasterPos,
+				ctx->Current.RasterColor,
+				ctx->Current.RasterIndex,
+				ctx->Current.RasterTexCoords[0] );
+      }
+   }
+   else if (ctx->RenderMode==GL_SELECT) {
+      if (ctx->Current.RasterPosValid) {
+         _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
+      }
+   }
+}
+
+#endif
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index 5d29149..bb0c4b7 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -1,4 +1,4 @@
-/* $Id: enable.c,v 1.64 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: enable.c,v 1.65 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -173,7 +173,7 @@
 void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
 {
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("%s %s (newstate is %x)\n",
+      _mesa_debug(ctx, "%s %s (newstate is %x)\n",
                   state ? "glEnable" : "glDisable",
                   _mesa_lookup_enum_by_nr(cap),
                   ctx->NewState);
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 5770db9..7f718a7 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -1,4 +1,4 @@
-/* $Id: get.c,v 1.80 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: get.c,v 1.81 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -128,7 +128,7 @@
    FLUSH_VERTICES(ctx, 0);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glGetBooleanv %s\n", _mesa_lookup_enum_by_nr(pname));
+      _mesa_debug(ctx, "glGetBooleanv %s\n", _mesa_lookup_enum_by_nr(pname));
 
    if (ctx->Driver.GetBooleanv
        && (*ctx->Driver.GetBooleanv)(ctx, pname, params))
@@ -1465,7 +1465,7 @@
    FLUSH_VERTICES(ctx, 0);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glGetDoublev %s\n", _mesa_lookup_enum_by_nr(pname));
+      _mesa_debug(ctx, "glGetDoublev %s\n", _mesa_lookup_enum_by_nr(pname));
 
    if (ctx->Driver.GetDoublev && (*ctx->Driver.GetDoublev)(ctx, pname, params))
       return;
@@ -2708,7 +2708,7 @@
    FLUSH_VERTICES(ctx, 0);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glGetFloatv %s\n", _mesa_lookup_enum_by_nr(pname));
+      _mesa_debug(ctx, "glGetFloatv %s\n", _mesa_lookup_enum_by_nr(pname));
 
    if (ctx->Driver.GetFloatv && (*ctx->Driver.GetFloatv)(ctx, pname, params))
       return;
@@ -3920,7 +3920,7 @@
    FLUSH_VERTICES(ctx, 0);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glGetIntegerv %s\n", _mesa_lookup_enum_by_nr(pname));
+      _mesa_debug(ctx, "glGetIntegerv %s\n", _mesa_lookup_enum_by_nr(pname));
 
    if (ctx->Driver.GetIntegerv
        && (*ctx->Driver.GetIntegerv)(ctx, pname, params))
@@ -5171,7 +5171,7 @@
       return;
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname));
+      _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname));
 
    if (ctx->Driver.GetPointerv
        && (*ctx->Driver.GetPointerv)(ctx, pname, params))
@@ -5271,7 +5271,7 @@
    ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e));
+      _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e));
 
    ctx->ErrorValue = (GLenum) GL_NO_ERROR;
    return e;
diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
index 8a9cf4b..d6db403 100644
--- a/src/mesa/main/glheader.h
+++ b/src/mesa/main/glheader.h
@@ -1,4 +1,4 @@
-/* $Id: glheader.h,v 1.27 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: glheader.h,v 1.28 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -66,16 +66,13 @@
 #endif
 #endif
 #include <float.h>
+#include <stdarg.h>
 
 
 #ifdef HAVE_CONFIG_H
 #include "conf.h"
 #endif
 
-#ifdef DEBUG
-#include <stdarg.h>  /* for _mesa_debug() only */
-#endif
-
 
 #if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__)
 #	define __WIN32__
@@ -259,6 +256,17 @@
 #endif
 
 
+/*
+ * Provide a reasonable replacement for __FUNCTION__ when using
+ * non-GNU C compilers.
+ */
+#if !defined(__GNUC__)
+#define STRINGIZE(x) #x
+#define STRINGIZE_EVAL(x) STRINGIZE(x)
+#define __FUNCTION__ STRINGIZE_EVAL(__FILE__) ", line " STRINGIZE_EVAL(__LINE__)
+#endif
+
+
 /* Some compilers don't like some of Mesa's const usage */
 #ifdef NO_CONST
 #  define CONST
diff --git a/src/mesa/main/hint.c b/src/mesa/main/hint.c
index d75823f..44da4ab 100644
--- a/src/mesa/main/hint.c
+++ b/src/mesa/main/hint.c
@@ -1,4 +1,4 @@
-/* $Id: hint.c,v 1.11 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: hint.c,v 1.12 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -42,49 +42,43 @@
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
-   (void) _mesa_try_Hint( ctx, target, mode );
-}
 
-
-GLboolean
-_mesa_try_Hint( GLcontext *ctx, GLenum target, GLenum mode )
-{
    if (MESA_VERBOSE & VERBOSE_API)
       _mesa_debug("glHint %s %d\n", _mesa_lookup_enum_by_nr(target), mode);
 
    if (mode != GL_NICEST && mode != GL_FASTEST && mode != GL_DONT_CARE) {
       _mesa_error(ctx, GL_INVALID_ENUM, "glHint(mode)");
-      return GL_FALSE;
+      return;
    }
 
    switch (target) {
       case GL_FOG_HINT:
          if (ctx->Hint.Fog == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
          ctx->Hint.Fog = mode;
          break;
       case GL_LINE_SMOOTH_HINT:
          if (ctx->Hint.LineSmooth == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
          ctx->Hint.LineSmooth = mode;
          break;
       case GL_PERSPECTIVE_CORRECTION_HINT:
          if (ctx->Hint.PerspectiveCorrection == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
          ctx->Hint.PerspectiveCorrection = mode;
          break;
       case GL_POINT_SMOOTH_HINT:
          if (ctx->Hint.PointSmooth == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
          ctx->Hint.PointSmooth = mode;
          break;
       case GL_POLYGON_SMOOTH_HINT:
          if (ctx->Hint.PolygonSmooth == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
          ctx->Hint.PolygonSmooth = mode;
          break;
@@ -92,7 +86,7 @@
       /* GL_EXT_clip_volume_hint */
       case GL_CLIP_VOLUME_CLIPPING_HINT_EXT:
          if (ctx->Hint.ClipVolumeClipping == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
          ctx->Hint.ClipVolumeClipping = mode;
          break;
@@ -101,10 +95,10 @@
       case GL_TEXTURE_COMPRESSION_HINT_ARB:
          if (!ctx->Extensions.ARB_texture_compression) {
             _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)");
-	    return GL_FALSE;
+	    return;
          }
 	 if (ctx->Hint.TextureCompression == mode)
-	    return GL_TRUE;
+	    return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
 	 ctx->Hint.TextureCompression = mode;
          break;
@@ -113,22 +107,20 @@
       case GL_GENERATE_MIPMAP_HINT_SGIS:
          if (!ctx->Extensions.SGIS_generate_mipmap) {
             _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)");
-	    return GL_FALSE;
+	    return;
          }
          if (ctx->Hint.GenerateMipmap == mode)
-            return GL_TRUE;
+            return;
 	 FLUSH_VERTICES(ctx, _NEW_HINT);
 	 ctx->Hint.GenerateMipmap = mode;
          break;
 
       default:
          _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)");
-         return GL_FALSE;
+         return;
    }
 
    if (ctx->Driver.Hint) {
       (*ctx->Driver.Hint)( ctx, target, mode );
    }
-
-   return GL_TRUE;
 }
diff --git a/src/mesa/main/hint.h b/src/mesa/main/hint.h
index dbecab2..6b8f34d 100644
--- a/src/mesa/main/hint.h
+++ b/src/mesa/main/hint.h
@@ -1,10 +1,10 @@
-/* $Id: hint.h,v 1.3 2001/01/24 04:56:20 brianp Exp $ */
+/* $Id: hint.h,v 1.4 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  4.1
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2002  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"),
@@ -32,9 +32,6 @@
 #include "mtypes.h"
 
 
-extern GLboolean
-_mesa_try_Hint( GLcontext *ctx, GLenum target, GLenum mode );
-
 extern void
 _mesa_Hint( GLenum target, GLenum mode );
 
diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c
index 7b93394..db762eb 100644
--- a/src/mesa/main/imports.c
+++ b/src/mesa/main/imports.c
@@ -1,4 +1,4 @@
-/* $Id: imports.c,v 1.12 2002/06/13 08:27:32 joukj Exp $ */
+/* $Id: imports.c,v 1.13 2002/06/15 02:38:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -39,12 +39,20 @@
  * the renderer should use the XFree86-wrapped system calls.
  */
 
-#include <stdarg.h>
+/*
+ * XXX when we fully implement the __GLimports mechanism in Mesa, that
+ * should mean that we can remove <stdio.h>, <stdlib.h>, etc, from
+ * glheader.h.  Strictly speaking, all system includes should be done
+ * from this file, and not glheader to ensure that core Mesa has no
+ * dependencies on external libraries.  Someday...
+ */
+
+
 
 #include "glheader.h"
 #include "imports.h"
 #include "mem.h"
-#include "mtypes.h"
+
 
 static void *
 _mesa_Malloc(__GLcontext *gc, size_t size)
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index b50eba7..4afc047 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -1,4 +1,4 @@
-/* $Id: light.c,v 1.50 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: light.c,v 1.51 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -57,7 +57,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glShadeModel %s\n", _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glShadeModel %s\n", _mesa_lookup_enum_by_nr(mode));
 
    if (mode != GL_FLAT && mode != GL_SMOOTH) {
       _mesa_error( ctx, GL_INVALID_ENUM, "glShadeModel" );
@@ -617,7 +617,7 @@
       bitmask &= ~ctx->Light.ColorMaterialBitmask;
 
    if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
-      _mesa_debug("_mesa_update_material, mask 0x%x\n", bitmask);
+      _mesa_debug(ctx, "_mesa_update_material, mask 0x%x\n", bitmask);
 
    if (!bitmask)
       return;
@@ -714,25 +714,16 @@
       ctx->Light.Material[1].SpecularIndex = src[1].SpecularIndex;
    }
 
-   if (0)
-   {
+   if (0) {
       struct gl_material *mat = &ctx->Light.Material[0];
-      _mesa_debug("update_mat  emission : %f %f %f\n",
-	      mat->Emission[0],
-	      mat->Emission[1],
-	      mat->Emission[2]);
-      _mesa_debug("update_mat  specular : %f %f %f\n",
-	      mat->Specular[0],
-	      mat->Specular[1],
-	      mat->Specular[2]);
-      _mesa_debug("update_mat  diffuse : %f %f %f\n",
-	      mat->Diffuse[0],
-	      mat->Diffuse[1],
-	      mat->Diffuse[2]);
-      _mesa_debug("update_mat  ambient : %f %f %f\n",
-	      mat->Ambient[0],
-	      mat->Ambient[1],
-	      mat->Ambient[2]);
+      _mesa_debug(ctx, "update_mat  emission : %f %f %f\n",
+                  mat->Emission[0], mat->Emission[1], mat->Emission[2]);
+      _mesa_debug(ctx, "update_mat  specular : %f %f %f\n",
+                  mat->Specular[0], mat->Specular[1], mat->Specular[2]);
+      _mesa_debug(ctx, "update_mat  diffuse : %f %f %f\n",
+                  mat->Diffuse[0], mat->Diffuse[1], mat->Diffuse[2]);
+      _mesa_debug(ctx, "update_mat  ambient : %f %f %f\n",
+                  mat->Ambient[0], mat->Ambient[1], mat->Ambient[2]);
    }
 }
 
@@ -754,7 +745,7 @@
    GLuint bitmask = ctx->Light.ColorMaterialBitmask;
 
    if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
-      _mesa_debug("_mesa_update_color_material, mask 0x%x\n", bitmask);
+      _mesa_debug(ctx, "_mesa_update_color_material, mask 0x%x\n", bitmask);
 
    /* update emissive colors */
    if (bitmask & FRONT_EMISSION_BIT) {
@@ -831,25 +822,16 @@
       }
    }
 
-   if (0)
-   {
+   if (0) {
       struct gl_material *mat = &ctx->Light.Material[0];
-      _mesa_debug("update_color_mat  emission : %f %f %f\n",
-	      mat->Emission[0],
-	      mat->Emission[1],
-	      mat->Emission[2]);
-      _mesa_debug("update_color_mat  specular : %f %f %f\n",
-	      mat->Specular[0],
-	      mat->Specular[1],
-	      mat->Specular[2]);
-      _mesa_debug("update_color_mat  diffuse : %f %f %f\n",
-	      mat->Diffuse[0],
-	      mat->Diffuse[1],
-	      mat->Diffuse[2]);
-      _mesa_debug("update_color_mat  ambient : %f %f %f\n",
-	      mat->Ambient[0],
-	      mat->Ambient[1],
-	      mat->Ambient[2]);
+      _mesa_debug(ctx, "update_color_mat  emission : %f %f %f\n",
+                  mat->Emission[0], mat->Emission[1], mat->Emission[2]);
+      _mesa_debug(ctx, "update_color_mat  specular : %f %f %f\n",
+                  mat->Specular[0], mat->Specular[1], mat->Specular[2]);
+      _mesa_debug(ctx, "update_color_mat  diffuse : %f %f %f\n",
+                  mat->Diffuse[0], mat->Diffuse[1], mat->Diffuse[2]);
+      _mesa_debug(ctx, "update_color_mat  ambient : %f %f %f\n",
+                  mat->Ambient[0], mat->Ambient[1], mat->Ambient[2]);
    }
 }
 
@@ -868,9 +850,9 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glColorMaterial %s %s\n",
-	      _mesa_lookup_enum_by_nr(face),
-	      _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glColorMaterial %s %s\n",
+                  _mesa_lookup_enum_by_nr(face),
+                  _mesa_lookup_enum_by_nr(mode));
 
    bitmask = _mesa_material_bitmask(ctx, face, mode, legal, "glColorMaterial");
 
diff --git a/src/mesa/main/matrix.c b/src/mesa/main/matrix.c
index 8ccd65b..bea0711 100644
--- a/src/mesa/main/matrix.c
+++ b/src/mesa/main/matrix.c
@@ -1,4 +1,4 @@
-/* $Id: matrix.c,v 1.41 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: matrix.c,v 1.42 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -157,8 +157,8 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glPushMatrix %s\n",
-	      _mesa_lookup_enum_by_nr(ctx->Transform.MatrixMode));
+      _mesa_debug(ctx, "glPushMatrix %s\n",
+                  _mesa_lookup_enum_by_nr(ctx->Transform.MatrixMode));
 
    if (stack->Depth + 1 >= stack->MaxDepth) {
       _mesa_error( ctx,  GL_STACK_OVERFLOW, "glPushMatrix" );
@@ -181,8 +181,8 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glPopMatrix %s\n",
-	      _mesa_lookup_enum_by_nr(ctx->Transform.MatrixMode));
+      _mesa_debug(ctx, "glPopMatrix %s\n",
+                  _mesa_lookup_enum_by_nr(ctx->Transform.MatrixMode));
 
    if (stack->Depth == 0) {
       _mesa_error( ctx,  GL_STACK_UNDERFLOW, "glPopMatrix" );
@@ -390,7 +390,7 @@
    }
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glViewport %d %d %d %d\n", x, y, width, height);
+      _mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height);
 
    /* clamp width, and height to implementation dependent range */
    width  = CLAMP( width,  1, MAX_WIDTH );
@@ -446,7 +446,7 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glDepthRange %f %f\n", nearval, farval);
+      _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval);
 
    n = (GLfloat) CLAMP( nearval, 0.0, 1.0 );
    f = (GLfloat) CLAMP( farval, 0.0, 1.0 );
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 5c7d642..846ed85 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1,4 +1,4 @@
-/* $Id: mtypes.h,v 1.78 2002/06/13 04:28:29 brianp Exp $ */
+/* $Id: mtypes.h,v 1.79 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1857,15 +1857,6 @@
 
 #define Elements(x) sizeof(x)/sizeof(*(x))
 
-/*
- * Provide a reasonable replacement for __FUNCTION__ when using
- * non-GNU C compilers.
- */
-#if !defined(__GNUC__)
-#define STRINGIZE(x) #x
-#define STRINGIZE_EVAL(x) STRINGIZE(x)
-#define __FUNCTION__ STRINGIZE_EVAL(__FILE__) ", line " STRINGIZE_EVAL(__LINE__)
-#endif
 
 /* Eventually let the driver specify what statechanges require a flush:
  */
diff --git a/src/mesa/main/polygon.c b/src/mesa/main/polygon.c
index ee9eb3a..9537157 100644
--- a/src/mesa/main/polygon.c
+++ b/src/mesa/main/polygon.c
@@ -1,4 +1,4 @@
-/* $Id: polygon.c,v 1.22 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: polygon.c,v 1.23 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -47,7 +47,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glCullFace %s\n", _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glCullFace %s\n", _mesa_lookup_enum_by_nr(mode));
 
    if (mode!=GL_FRONT && mode!=GL_BACK && mode!=GL_FRONT_AND_BACK) {
       _mesa_error( ctx, GL_INVALID_ENUM, "glCullFace" );
@@ -73,7 +73,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glFrontFace %s\n", _mesa_lookup_enum_by_nr(mode));
+      _mesa_debug(ctx, "glFrontFace %s\n", _mesa_lookup_enum_by_nr(mode));
 
    if (mode!=GL_CW && mode!=GL_CCW) {
       _mesa_error( ctx, GL_INVALID_ENUM, "glFrontFace" );
@@ -101,7 +101,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glPolygonMode %s %s\n",
+      _mesa_debug(ctx, "glPolygonMode %s %s\n",
                   _mesa_lookup_enum_by_nr(face),
                   _mesa_lookup_enum_by_nr(mode));
 
@@ -154,7 +154,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glPolygonStipple\n");
+      _mesa_debug(ctx, "glPolygonStipple\n");
 
    FLUSH_VERTICES(ctx, _NEW_POLYGONSTIPPLE);
    _mesa_unpack_polygon_stipple(pattern, ctx->PolygonStipple, &ctx->Unpack);
@@ -172,7 +172,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glGetPolygonStipple\n");
+      _mesa_debug(ctx, "glGetPolygonStipple\n");
 
    _mesa_pack_polygon_stipple(ctx->PolygonStipple, dest, &ctx->Pack);
 }
@@ -186,7 +186,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&VERBOSE_API)
-      _mesa_debug("glPolygonOffset %f %f\n", factor, units);
+      _mesa_debug(ctx, "glPolygonOffset %f %f\n", factor, units);
 
    if (ctx->Polygon.OffsetFactor == factor &&
        ctx->Polygon.OffsetUnits == units)
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index b75a787..ce145d8 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -1,4 +1,4 @@
-/* $Id: texformat.c,v 1.11 2001/06/15 14:18:46 brianp Exp $ */
+/* $Id: texformat.c,v 1.12 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -438,6 +438,153 @@
 };
 
 
+/* Big-endian */
+#if 0
+const struct gl_texture_format _mesa_texformat_abgr8888 = {
+   MESA_FORMAT_ABGR8888,		/* MesaFormat */
+   GL_RGBA,				/* BaseFormat */
+   GL_UNSIGNED_INT_8_8_8_8,		/* Type */
+   8,					/* RedBits */
+   8,					/* GreenBits */
+   8,					/* BlueBits */
+   8,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   4,					/* TexelBytes */
+   fetch_1d_texel_abgr8888,		/* FetchTexel1D */
+   fetch_2d_texel_abgr8888,		/* FetchTexel2D */
+   fetch_3d_texel_abgr8888,		/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_bgra8888 = {
+   MESA_FORMAT_BGRA8888,		/* MesaFormat */
+   GL_RGBA,				/* BaseFormat */
+   GL_UNSIGNED_INT_8_8_8_8,		/* Type */
+   8,					/* RedBits */
+   8,					/* GreenBits */
+   8,					/* BlueBits */
+   8,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   4,					/* TexelBytes */
+   fetch_1d_texel_bgra8888,		/* FetchTexel1D */
+   fetch_2d_texel_bgra8888,		/* FetchTexel2D */
+   fetch_3d_texel_bgra8888,		/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_bgr888 = {
+   MESA_FORMAT_BGR888,			/* MesaFormat */
+   GL_RGB,				/* BaseFormat */
+   GL_UNSIGNED_BYTE,			/* Type */
+   8,					/* RedBits */
+   8,					/* GreenBits */
+   8,					/* BlueBits */
+   0,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   3,					/* TexelBytes */
+   fetch_1d_texel_bgr888,		/* FetchTexel1D */
+   fetch_2d_texel_bgr888,		/* FetchTexel2D */
+   fetch_3d_texel_bgr888,		/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_bgr565 = {
+   MESA_FORMAT_BGR565,			/* MesaFormat */
+   GL_RGB,				/* BaseFormat */
+   GL_UNSIGNED_SHORT_5_6_5,		/* Type */
+   5,					/* RedBits */
+   6,					/* GreenBits */
+   5,					/* BlueBits */
+   0,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   2,					/* TexelBytes */
+   fetch_1d_texel_bgr565,		/* FetchTexel1D */
+   fetch_2d_texel_bgr565,		/* FetchTexel2D */
+   fetch_3d_texel_bgr565,		/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_bgra4444 = {
+   MESA_FORMAT_BGRA4444,		/* MesaFormat */
+   GL_RGBA,				/* BaseFormat */
+   GL_UNSIGNED_SHORT_4_4_4_4_REV,	/* Type */
+   4,					/* RedBits */
+   4,					/* GreenBits */
+   4,					/* BlueBits */
+   4,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   2,					/* TexelBytes */
+   fetch_1d_texel_bgra4444,		/* FetchTexel1D */
+   fetch_2d_texel_bgra4444,		/* FetchTexel2D */
+   fetch_3d_texel_bgra4444,		/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_bgra5551 = {
+   MESA_FORMAT_BGRA5551,		/* MesaFormat */
+   GL_RGBA,				/* BaseFormat */
+   GL_UNSIGNED_SHORT_1_5_5_5_REV,	/* Type */
+   5,					/* RedBits */
+   5,					/* GreenBits */
+   5,					/* BlueBits */
+   1,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   2,					/* TexelBytes */
+   fetch_1d_texel_bgra1555,		/* FetchTexel1D */
+   fetch_2d_texel_bgra1555,		/* FetchTexel2D */
+   fetch_3d_texel_bgra1555,		/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_la88 = {
+   MESA_FORMAT_LA88,			/* MesaFormat */
+   GL_LUMINANCE_ALPHA,			/* BaseFormat */
+   GL_UNSIGNED_BYTE,			/* Type */
+   0,					/* RedBits */
+   0,					/* GreenBits */
+   0,					/* BlueBits */
+   8,					/* AlphaBits */
+   8,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   2,					/* TexelBytes */
+   fetch_1d_texel_la88,			/* FetchTexel1D */
+   fetch_2d_texel_la88,			/* FetchTexel2D */
+   fetch_3d_texel_la88,			/* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_bgr233 = {
+   MESA_FORMAT_BGR233,			/* MesaFormat */
+   GL_RGB,				/* BaseFormat */
+   GL_UNSIGNED_BYTE_3_3_2,		/* Type */
+   3,					/* RedBits */
+   3,					/* GreenBits */
+   2,					/* BlueBits */
+   0,					/* AlphaBits */
+   0,					/* LuminanceBits */
+   0,					/* IntensityBits */
+   0,					/* IndexBits */
+   0,					/* DepthBits */
+   1,					/* TexelBytes */
+   fetch_1d_texel_bgr233,		/* FetchTexel1D */
+   fetch_2d_texel_bgr233,		/* FetchTexel2D */
+   fetch_3d_texel_bgr233,		/* FetchTexel3D */
+};
+#endif
+
 /* =============================================================
  * Null format:
  */
@@ -472,8 +619,8 @@
 /* Given an internal texture format (or 1, 2, 3, 4) return a pointer
  * to a gl_texture_format which which to store the texture.
  * This is called via ctx->Driver.ChooseTextureFormat().
- * Hardware drivers should not use this function, but instead a 
- * specialized function.
+ * Hardware drivers typically override this function with a specialized
+ * version.
  */
 const struct gl_texture_format *
 _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
diff --git a/src/mesa/main/texformat.h b/src/mesa/main/texformat.h
index a8c5b52..9d04977 100644
--- a/src/mesa/main/texformat.h
+++ b/src/mesa/main/texformat.h
@@ -1,4 +1,4 @@
-/* $Id: texformat.h,v 1.8 2002/06/12 00:52:50 brianp Exp $ */
+/* $Id: texformat.h,v 1.9 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -33,12 +33,15 @@
 #include "mtypes.h"
 
 
-/* The Mesa internal texture image types.  These will be set to their
- * default value, but may be changed by drivers as required.
+/*
+ * The Mesa internal texture image types.
+ * All texture images must be stored in one of these formats.
  */
 enum _format {
    /* Hardware-friendly formats.  Drivers can override the default
     * formats and convert texture images to one of these as required.
+    * The driver's ChooseTextureFormat() function will choose one of
+    * these formats.
     * These formats are all little endian, as shown below.  They will be
     * most useful for x86-based PC graphics card drivers.
     *
@@ -85,7 +88,7 @@
     *
     * NOTE: Because these are based on the GLchan datatype, one cannot
     * assume 8 bits per channel with these formats.  If you require
-    * GLubyte per channel, use one of the hardware formats above.
+    * GLubyte channels, use one of the hardware formats above.
     */
    MESA_FORMAT_RGBA,
    MESA_FORMAT_RGB,
diff --git a/src/mesa/main/texformat_tmp.h b/src/mesa/main/texformat_tmp.h
index 7a91e63..8345cfc 100644
--- a/src/mesa/main/texformat_tmp.h
+++ b/src/mesa/main/texformat_tmp.h
@@ -1,4 +1,4 @@
-/* $Id: texformat_tmp.h,v 1.4 2002/05/09 20:51:05 keithw Exp $ */
+/* $Id: texformat_tmp.h,v 1.5 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -284,6 +284,98 @@
 }
 
 
+/* big-endian */
+
+static void FETCH(abgr8888)( const struct gl_texture_image *texImage,
+			     GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 );
+   GLchan *rgba = (GLchan *) texel;
+   rgba[RCOMP] = UBYTE_TO_CHAN( src[3] );
+   rgba[GCOMP] = UBYTE_TO_CHAN( src[2] );
+   rgba[BCOMP] = UBYTE_TO_CHAN( src[1] );
+   rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
+}
+
+static void FETCH(bgra8888)( const struct gl_texture_image *texImage,
+			     GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 );
+   GLchan *rgba = (GLchan *) texel;
+   rgba[RCOMP] = UBYTE_TO_CHAN( src[2] );
+   rgba[GCOMP] = UBYTE_TO_CHAN( src[1] );
+   rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
+   rgba[ACOMP] = UBYTE_TO_CHAN( src[3] );
+}
+
+static void FETCH(bgr888)( const struct gl_texture_image *texImage,
+			   GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 );
+   GLchan *rgba = (GLchan *) texel;
+   rgba[RCOMP] = UBYTE_TO_CHAN( src[2] );
+   rgba[GCOMP] = UBYTE_TO_CHAN( src[1] );
+   rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
+   rgba[ACOMP] = CHAN_MAX;
+}
+
+static void FETCH(bgr565)( const struct gl_texture_image *texImage,
+			   GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLushort *src = USHORT_SRC( texImage, i, j, k );
+   GLchan *rgba = (GLchan *) texel; GLushort s = *src;
+   rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 );
+   rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc );
+   rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 );
+   rgba[ACOMP] = CHAN_MAX;
+}
+
+static void FETCH(bgra4444)( const struct gl_texture_image *texImage,
+			     GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLushort *src = USHORT_SRC( texImage, i, j, k );
+   GLchan *rgba = (GLchan *) texel; GLushort s = *src;
+   rgba[RCOMP] = UBYTE_TO_CHAN( ((s >>  8) & 0xf) * 255 / 0xf );
+   rgba[GCOMP] = UBYTE_TO_CHAN( ((s >>  4) & 0xf) * 255 / 0xf );
+   rgba[BCOMP] = UBYTE_TO_CHAN( ((s      ) & 0xf) * 255 / 0xf );
+   rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf );
+}
+
+static void FETCH(bgra5551)( const struct gl_texture_image *texImage,
+			     GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLushort *src = USHORT_SRC( texImage, i, j, k );
+   GLchan *rgba = (GLchan *) texel; GLushort s = *src;
+   rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f );
+   rgba[GCOMP] = UBYTE_TO_CHAN( ((s >>  5) & 0x1f) * 255 / 0x1f );
+   rgba[BCOMP] = UBYTE_TO_CHAN( ((s      ) & 0x1f) * 255 / 0x1f );
+   rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 );
+}
+
+static void FETCH(la88)( const struct gl_texture_image *texImage,
+			 GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 2 );
+   GLchan *rgba = (GLchan *) texel;
+   rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
+   rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
+   rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
+   rgba[ACOMP] = UBYTE_TO_CHAN( src[1] );
+}
+
+static void FETCH(bgr233)( const struct gl_texture_image *texImage,
+			   GLint i, GLint j, GLint k, GLvoid *texel )
+{
+   const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
+   GLchan *rgba = (GLchan *) texel; GLubyte s = *src;
+   rgba[RCOMP] = UBYTE_TO_CHAN( ((s     ) & 0xe0) * 255 / 0xe0 );
+   rgba[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 );
+   rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 );
+   rgba[ACOMP] = CHAN_MAX;
+}
+
+
+
 #undef CHAN_SRC
 #undef UBYTE_SRC
 #undef USHORT_SRC
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index a2d4095..9714072 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -1,4 +1,4 @@
-/* $Id: texobj.c,v 1.53 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: texobj.c,v 1.54 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -565,7 +565,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glBindTexture %s %d\n",
+      _mesa_debug(ctx, "glBindTexture %s %d\n",
                   _mesa_lookup_enum_by_nr(target), (GLint) texName);
 
    switch (target) {
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 464bd3a..8319613 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -1,4 +1,4 @@
-/* $Id: texstate.c,v 1.73 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: texstate.c,v 1.74 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -454,7 +454,7 @@
    }
 
    if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glTexEnv %s %s %.1f(%s) ...\n",
+      _mesa_debug(ctx, "glTexEnv %s %s %.1f(%s) ...\n",
                   _mesa_lookup_enum_by_nr(target),
                   _mesa_lookup_enum_by_nr(pname),
                   *param,
@@ -950,7 +950,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("texPARAM %s %s %d...\n",
+      _mesa_debug(ctx, "texPARAM %s %s %d...\n",
                   _mesa_lookup_enum_by_nr(target),
                   _mesa_lookup_enum_by_nr(pname),
                   eparam);
@@ -1764,7 +1764,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("texGEN %s %s %x...\n",
+      _mesa_debug(ctx, "texGEN %s %s %x...\n",
                   _mesa_lookup_enum_by_nr(coord),
                   _mesa_lookup_enum_by_nr(pname),
                   *(int *)params);
@@ -2303,7 +2303,7 @@
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
-      _mesa_debug("glActiveTexture %s\n",
+      _mesa_debug(ctx, "glActiveTexture %s\n",
                   _mesa_lookup_enum_by_nr(target));
 
    if (texUnit > ctx->Const.MaxTextureUnits) {
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 4e03f21..e913869 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -1,4 +1,4 @@
-/* $Id: varray.c,v 1.44 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: varray.c,v 1.45 2002/06/15 02:38:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -60,9 +60,8 @@
    }
 
    if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug("glVertexPointer( sz %d type %s stride %d )\n", size,
-	      _mesa_lookup_enum_by_nr( type ),
-	      stride);
+      _mesa_debug(ctx, "glVertexPointer( sz %d type %s stride %d )\n", size,
+                  _mesa_lookup_enum_by_nr( type ), stride);
 
    /* always need to check that <type> is legal */
    switch (type) {
@@ -112,9 +111,8 @@
    }
 
    if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug("glNormalPointer( type %s stride %d )\n",
-	      _mesa_lookup_enum_by_nr( type ),
-	      stride);
+      _mesa_debug(ctx, "glNormalPointer( type %s stride %d )\n",
+                  _mesa_lookup_enum_by_nr( type ), stride);
 
    switch (type) {
       case GL_BYTE:
@@ -168,9 +166,8 @@
    }
 
    if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug("glColorPointer( sz %d type %s stride %d )\n", size,
-	  _mesa_lookup_enum_by_nr( type ),
-	  stride);
+      _mesa_debug(ctx, "glColorPointer( sz %d type %s stride %d )\n", size,
+                  _mesa_lookup_enum_by_nr( type ), stride);
 
    switch (type) {
       case GL_BYTE:
@@ -320,7 +317,7 @@
    }
 
    if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug("glSecondaryColorPointer( sz %d type %s stride %d )\n",
+      _mesa_debug(ctx, "glSecondaryColorPointer( sz %d type %s stride %d )\n",
                   size, _mesa_lookup_enum_by_nr( type ), stride);
 
    switch (type) {
@@ -387,11 +384,8 @@
    }
 
    if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug("glTexCoordPointer( unit %u sz %d type %s stride %d )\n",
-	  texUnit,
-	  size,
-	  _mesa_lookup_enum_by_nr( type ),
-	  stride);
+      _mesa_debug(ctx, "glTexCoordPointer(unit %u sz %d type %s stride %d)\n",
+                  texUnit, size, _mesa_lookup_enum_by_nr( type ), stride);
 
    /* always need to check that <type> is legal */
    switch (type) {
@@ -768,7 +762,7 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glLockArrays %d %d\n", first, count);
+      _mesa_debug(ctx, "glLockArrays %d %d\n", first, count);
 
    if (first == 0 && count > 0 &&
        count <= (GLint) ctx->Const.MaxArrayLockSize) {
@@ -795,7 +789,7 @@
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("glUnlockArrays\n");
+      _mesa_debug(ctx, "glUnlockArrays\n");
 
    ctx->Array.LockFirst = 0;
    ctx->Array.LockCount = 0;
diff --git a/src/mesa/math/m_xform.c b/src/mesa/math/m_xform.c
index 8875594..62f8f61 100644
--- a/src/mesa/math/m_xform.c
+++ b/src/mesa/math/m_xform.c
@@ -1,4 +1,4 @@
-/* $Id: m_xform.c,v 1.15 2002/04/09 14:58:04 keithw Exp $ */
+/* $Id: m_xform.c,v 1.16 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -207,7 +207,7 @@
    _math_test_all_cliptest_functions( "default" );
 #endif
 
-#ifdef USE_X86_ASM
+#ifdef USE_X86_ASM_foo
    _mesa_init_all_x86_transform_asm();
 #endif
 #ifdef USE_SPARC_ASM
diff --git a/src/mesa/swrast/s_accum.c b/src/mesa/swrast/s_accum.c
index be5c4b4..09c4d86 100644
--- a/src/mesa/swrast/s_accum.c
+++ b/src/mesa/swrast/s_accum.c
@@ -1,4 +1,4 @@
-/* $Id: s_accum.c,v 1.16 2002/03/19 16:47:05 brianp Exp $ */
+/* $Id: s_accum.c,v 1.17 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -62,7 +62,7 @@
  */
 
 
-#if CHAN_BITS == 8
+#if CHAN_BITS == 8 && ACCUM_BITS < 32
 #define USE_OPTIMIZED_ACCUM   /* enable the optimization */
 #endif
 
diff --git a/src/mesa/swrast/s_buffers.c b/src/mesa/swrast/s_buffers.c
index d787acf..6c7b447 100644
--- a/src/mesa/swrast/s_buffers.c
+++ b/src/mesa/swrast/s_buffers.c
@@ -1,4 +1,4 @@
-/* $Id: s_buffers.c,v 1.10 2002/03/16 00:53:15 brianp Exp $ */
+/* $Id: s_buffers.c,v 1.11 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -169,20 +169,20 @@
    for (bufferBit = 1; bufferBit <= 8; bufferBit = bufferBit << 1) {
       if (bufferBit & ctx->Color.DrawDestMask) {
          if (bufferBit == FRONT_LEFT_BIT) {
-            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_LEFT);
-            (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_LEFT);
+            (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_LEFT);
+            (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_LEFT);
          }
          else if (bufferBit == FRONT_RIGHT_BIT) {
-            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_RIGHT);
-            (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_RIGHT);
+            (*ctx->Driver.SetDrawBuffer)( ctx, GL_FRONT_RIGHT);
+            (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_FRONT_RIGHT);
          }
          else if (bufferBit == BACK_LEFT_BIT) {
-            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_LEFT);
-            (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_LEFT);
+            (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_LEFT);
+            (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_LEFT);
          }
          else {
-            (void) (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_RIGHT);
-            (void) (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_RIGHT);
+            (*ctx->Driver.SetDrawBuffer)( ctx, GL_BACK_RIGHT);
+            (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, GL_BACK_RIGHT);
          }
 
          if (colorMask != 0xffffffff) {
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c
index 60b389b..e0180d1 100644
--- a/src/mesa/swrast/s_context.c
+++ b/src/mesa/swrast/s_context.c
@@ -1,4 +1,4 @@
-/* $Id: s_context.c,v 1.33 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: s_context.c,v 1.34 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -28,6 +28,7 @@
  */
 
 #include "glheader.h"
+#include "context.h"
 #include "mtypes.h"
 #include "mem.h"
 
@@ -86,10 +87,8 @@
     * MULTI_DRAW_BIT flag.  Also set it if we're drawing to no
     * buffers or the RGBA or CI mask disables all writes.
     */
-   if (ctx->Color.MultiDrawBuffer) {
-      RasterMask |= MULTI_DRAW_BIT;
-   }
-   else if (ctx->Color.DrawBuffer==GL_NONE) {
+   if (ctx->Color.DrawBuffer == GL_FRONT_AND_BACK ||
+       ctx->Color.DrawBuffer == GL_NONE) {
       RasterMask |= MULTI_DRAW_BIT;
    }
    else if (ctx->Visual.rgbMode && *((GLuint *) ctx->Color.ColorMask) == 0) {
@@ -389,7 +388,7 @@
               const SWvertex *v2, const SWvertex *v3 )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_Quad\n");
+      _mesa_debug(ctx, "_swrast_Quad\n");
       _swrast_print_vertex( ctx, v0 );
       _swrast_print_vertex( ctx, v1 );
       _swrast_print_vertex( ctx, v2 );
@@ -404,7 +403,7 @@
                   const SWvertex *v1, const SWvertex *v2 )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_Triangle\n");
+      _mesa_debug(ctx, "_swrast_Triangle\n");
       _swrast_print_vertex( ctx, v0 );
       _swrast_print_vertex( ctx, v1 );
       _swrast_print_vertex( ctx, v2 );
@@ -416,7 +415,7 @@
 _swrast_Line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_Line\n");
+      _mesa_debug(ctx, "_swrast_Line\n");
       _swrast_print_vertex( ctx, v0 );
       _swrast_print_vertex( ctx, v1 );
    }
@@ -427,7 +426,7 @@
 _swrast_Point( GLcontext *ctx, const SWvertex *v0 )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_Point\n");
+      _mesa_debug(ctx, "_swrast_Point\n");
       _swrast_print_vertex( ctx, v0 );
    }
    SWRAST_CONTEXT(ctx)->Point( ctx, v0 );
@@ -437,7 +436,7 @@
 _swrast_InvalidateState( GLcontext *ctx, GLuint new_state )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_InvalidateState\n");
+      _mesa_debug(ctx, "_swrast_InvalidateState\n");
    }
    SWRAST_CONTEXT(ctx)->InvalidateState( ctx, new_state );
 }
@@ -446,7 +445,7 @@
 _swrast_ResetLineStipple( GLcontext *ctx )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_ResetLineStipple\n");
+      _mesa_debug(ctx, "_swrast_ResetLineStipple\n");
    }
    SWRAST_CONTEXT(ctx)->StippleCounter = 0;
 }
@@ -455,7 +454,7 @@
 _swrast_allow_vertex_fog( GLcontext *ctx, GLboolean value )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_allow_vertex_fog %d\n", value);
+      _mesa_debug(ctx, "_swrast_allow_vertex_fog %d\n", value);
    }
    SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
    SWRAST_CONTEXT(ctx)->AllowVertexFog = value;
@@ -465,7 +464,7 @@
 _swrast_allow_pixel_fog( GLcontext *ctx, GLboolean value )
 {
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_allow_pixel_fog %d\n", value);
+      _mesa_debug(ctx, "_swrast_allow_pixel_fog %d\n", value);
    }
    SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
    SWRAST_CONTEXT(ctx)->AllowPixelFog = value;
@@ -479,7 +478,7 @@
    SWcontext *swrast = (SWcontext *)CALLOC(sizeof(SWcontext));
 
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_CreateContext\n");
+      _mesa_debug(ctx, "_swrast_CreateContext\n");
    }
 
    if (!swrast)
@@ -539,7 +538,7 @@
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
 
    if (SWRAST_DEBUG) {
-      _mesa_debug("_swrast_DestroyContext\n");
+      _mesa_debug(ctx, "_swrast_DestroyContext\n");
    }
 
    FREE( swrast->span );
@@ -565,32 +564,32 @@
    GLuint i;
 
    if (SWRAST_DEBUG_VERTICES) {
-      _mesa_debug("win %f %f %f %f\n",
+      _mesa_debug(ctx, "win %f %f %f %f\n",
                   v->win[0], v->win[1], v->win[2], v->win[3]);
 
       for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
 	 if (ctx->Texture.Unit[i]._ReallyEnabled)
-	    _mesa_debug("texcoord[%d] %f %f %f %f\n", i,
+	    _mesa_debug(ctx, "texcoord[%d] %f %f %f %f\n", i,
                         v->texcoord[i][0], v->texcoord[i][1],
                         v->texcoord[i][2], v->texcoord[i][3]);
 
 #if CHAN_TYPE == GL_FLOAT
-      _mesa_debug("color %f %f %f %f\n",
+      _mesa_debug(ctx, "color %f %f %f %f\n",
                   v->color[0], v->color[1], v->color[2], v->color[3]);
-      _mesa_debug("spec %f %f %f %f\n",
+      _mesa_debug(ctx, "spec %f %f %f %f\n",
                   v->specular[0], v->specular[1],
                   v->specular[2], v->specular[3]);
 #else
-      _mesa_debug("color %d %d %d %d\n",
+      _mesa_debug(ctx, "color %d %d %d %d\n",
                   v->color[0], v->color[1], v->color[2], v->color[3]);
-      _mesa_debug("spec %d %d %d %d\n",
+      _mesa_debug(ctx, "spec %d %d %d %d\n",
                   v->specular[0], v->specular[1],
                   v->specular[2], v->specular[3]);
 #endif
-      _mesa_debug("fog %f\n", v->fog);
-      _mesa_debug("index %d\n", v->index);
-      _mesa_debug("pointsize %f\n", v->pointSize);
-      _mesa_debug("\n");
+      _mesa_debug(ctx, "fog %f\n", v->fog);
+      _mesa_debug(ctx, "index %d\n", v->index);
+      _mesa_debug(ctx, "pointsize %f\n", v->pointSize);
+      _mesa_debug(ctx, "\n");
    }
 }
 
diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c
index e0e6e78..ab2dec8 100644
--- a/src/mesa/swrast/s_drawpix.c
+++ b/src/mesa/swrast/s_drawpix.c
@@ -1,4 +1,4 @@
-/* $Id: s_drawpix.c,v 1.33 2002/04/19 14:05:50 brianp Exp $ */
+/* $Id: s_drawpix.c,v 1.34 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -629,6 +629,8 @@
 
    if (ctx->Fog.Enabled)
       _mesa_span_default_fog(ctx, span);
+   if (ctx->Texture._ReallyEnabled)
+      _mesa_span_default_texcoords(ctx, span);
 
    if (type==GL_UNSIGNED_SHORT && ctx->Visual.depthBits == 16
        && !bias_or_scale && !zoom && ctx->Visual.rgbMode) {
@@ -732,6 +734,8 @@
       _mesa_span_default_z(ctx, span);
    if (ctx->Fog.Enabled)
       _mesa_span_default_fog(ctx, span);
+   if (ctx->Texture._ReallyEnabled)
+      _mesa_span_default_texcoords(ctx, span);
 
    if (SWRAST_CONTEXT(ctx)->_RasterMask == 0 && !zoom && x >= 0 && y >= 0
        && x + width <= (GLint) ctx->DrawBuffer->Width
@@ -859,11 +863,11 @@
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
    (void) unpack;
 
-
    if (swrast->NewState)
       _swrast_validate_derived( ctx );
 
    RENDER_START(swrast,ctx);
+
    switch (format) {
    case GL_STENCIL_INDEX:
       draw_stencil_pixels( ctx, x, y, width, height, type, pixels );
@@ -896,3 +900,55 @@
 
    RENDER_FINISH(swrast,ctx);
 }
+
+
+
+#if 0  /* experimental */
+/*
+ * Execute glDrawDepthPixelsMESA().
+ */
+void
+_swrast_DrawDepthPixelsMESA( GLcontext *ctx,
+                             GLint x, GLint y,
+                             GLsizei width, GLsizei height,
+                             GLenum colorFormat, GLenum colorType,
+                             const GLvoid *colors,
+                             GLenum depthType, const GLvoid *depths,
+                             const struct gl_pixelstore_attrib *unpack )
+{
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);
+   (void) unpack;
+
+   if (swrast->NewState)
+      _swrast_validate_derived( ctx );
+
+   RENDER_START(swrast,ctx);
+
+   switch (colorFormat) {
+   case GL_COLOR_INDEX:
+      if (ctx->Visual.rgbMode)
+	 draw_rgba_pixels(ctx, x,y, width, height, colorFormat, colorType, colors);
+      else
+	 draw_index_pixels(ctx, x, y, width, height, colorType, colors);
+      break;
+   case GL_RED:
+   case GL_GREEN:
+   case GL_BLUE:
+   case GL_ALPHA:
+   case GL_LUMINANCE:
+   case GL_LUMINANCE_ALPHA:
+   case GL_RGB:
+   case GL_BGR:
+   case GL_RGBA:
+   case GL_BGRA:
+   case GL_ABGR_EXT:
+      draw_rgba_pixels(ctx, x, y, width, height, colorFormat, colorType, colors);
+      break;
+   default:
+      _mesa_error( ctx, GL_INVALID_ENUM,
+                   "glDrawDepthPixelsMESA(colorFormat)" );
+   }
+
+   RENDER_FINISH(swrast,ctx);
+}
+#endif
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 1e3c710..0a1e317 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -1,4 +1,4 @@
-/* $Id: s_span.c,v 1.42 2002/05/02 00:59:20 brianp Exp $ */
+/* $Id: s_span.c,v 1.43 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -119,6 +119,28 @@
 }
 
 
+/**
+ * Init span's texcoord interpolation values to the RasterPos texcoords.
+ * Used during setup for glDraw/CopyPixels.
+ */
+void
+_mesa_span_default_texcoords( GLcontext *ctx, struct sw_span *span )
+{
+   GLuint i;
+   for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
+      span->tex[i][0] = ctx->Current.RasterTexCoords[i][0];
+      span->tex[i][1] = ctx->Current.RasterTexCoords[i][1];
+      span->tex[i][2] = ctx->Current.RasterTexCoords[i][2];
+      span->tex[i][3] = ctx->Current.RasterTexCoords[i][3];
+      span->texStepX[i][0] = 0.0;
+      span->texStepX[i][1] = 0.0;
+      span->texStepX[i][2] = 0.0;
+      span->texStepX[i][3] = 0.0;
+   }
+   span->interpMask |= SPAN_TEXTURE;
+}
+
+
 /* Fill in the span.color.rgba array from the interpolation values */
 static void
 interpolate_colors(GLcontext *ctx, struct sw_span *span)
diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h
index 54301c3..be577ed 100644
--- a/src/mesa/swrast/s_span.h
+++ b/src/mesa/swrast/s_span.h
@@ -1,4 +1,4 @@
-/* $Id: s_span.h,v 1.16 2002/04/12 15:39:59 brianp Exp $ */
+/* $Id: s_span.h,v 1.17 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -45,6 +45,8 @@
 extern void
 _mesa_span_default_color( GLcontext *ctx, struct sw_span *span );
 
+extern void
+_mesa_span_default_texcoords( GLcontext *ctx, struct sw_span *span );
 
 extern void
 _mesa_write_index_span( GLcontext *ctx, struct sw_span *span);
diff --git a/src/mesa/swrast_setup/ss_vb.c b/src/mesa/swrast_setup/ss_vb.c
index 5a10afe..b47508b 100644
--- a/src/mesa/swrast_setup/ss_vb.c
+++ b/src/mesa/swrast_setup/ss_vb.c
@@ -1,10 +1,10 @@
-/* $Id: ss_vb.c,v 1.17 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: ss_vb.c,v 1.18 2002/06/15 02:38:17 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  4.1
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2002  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"),
@@ -29,6 +29,7 @@
 
 #include "glheader.h"
 #include "colormac.h"
+#include "context.h"
 #include "macros.h"
 #include "mem.h"
 
@@ -291,33 +292,32 @@
  *                         Initialization 
  ***********************************************************************/
 
-
-
-
-
 static void
 emit_invalid( GLcontext *ctx, GLuint start, GLuint end, GLuint newinputs )
 {
-   _mesa_debug("swrast_setup: invalid setup function\n");
+   _mesa_debug(ctx, "swrast_setup: invalid setup function\n");
    (void) (ctx && start && end && newinputs);
 }
 
+
 static void 
 interp_invalid( GLcontext *ctx, GLfloat t,
 		GLuint edst, GLuint eout, GLuint ein,
 		GLboolean force_boundary )
 {
-   _mesa_debug("swrast_setup: invalid interp function\n");
+   _mesa_debug(ctx, "swrast_setup: invalid interp function\n");
    (void) (ctx && t && edst && eout && ein && force_boundary);
 }
 
+
 static void 
 copy_pv_invalid( GLcontext *ctx, GLuint edst, GLuint esrc )
 {
-   _mesa_debug("swrast_setup: invalid copy_pv function\n");
+   _mesa_debug(ctx, "swrast_setup: invalid copy_pv function\n");
    (void) (ctx && edst && esrc );
 }
 
+
 static void init_standard( void )
 {
    GLuint i;
@@ -359,20 +359,22 @@
    init_index_fog_point();
 }
 
-static void printSetupFlags(char *msg, GLuint flags )
-{
-   _mesa_debug("%s(%x): %s%s%s%s%s%s%s\n",
-	   msg,
-	   (int)flags,
-	   (flags & COLOR) ? "color, " : "",
-	   (flags & INDEX) ? "index, " : "",
-	   (flags & TEX0) ? "tex0, " : "",
-	   (flags & MULTITEX) ? "multitex, " : "",
-	   (flags & SPEC) ? "spec, " : "",
-	   (flags & FOG) ? "fog, " : "",
-	   (flags & POINT) ? "point, " : "");
-}
 
+/* debug only */
+static void
+printSetupFlags(const GLcontext *ctx, char *msg, GLuint flags )
+{
+   _mesa_debug(ctx, "%s(%x): %s%s%s%s%s%s%s\n",
+               msg,
+               (int) flags,
+               (flags & COLOR) ? "color, " : "",
+               (flags & INDEX) ? "index, " : "",
+               (flags & TEX0) ? "tex0, " : "",
+               (flags & MULTITEX) ? "multitex, " : "",
+               (flags & SPEC) ? "spec, " : "",
+               (flags & FOG) ? "fog, " : "",
+               (flags & POINT) ? "point, " : "");
+}
 
 
 void
@@ -436,6 +438,8 @@
 {
    (void) ctx;
    init_standard();
-   (void) printSetupFlags;
+   /*
+   printSetupFlags(ctx);
+   */
 }
    
diff --git a/src/mesa/tnl/t_imm_api.c b/src/mesa/tnl/t_imm_api.c
index 5d78d10..8006276 100644
--- a/src/mesa/tnl/t_imm_api.c
+++ b/src/mesa/tnl/t_imm_api.c
@@ -1,4 +1,4 @@
-/* $Id: t_imm_api.c,v 1.28 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: t_imm_api.c,v 1.29 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -60,7 +60,7 @@
    }
 
    if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
-      _mesa_debug("_tnl_flush_immediate IM: %d compiling: %d\n",
+      _mesa_debug(ctx, "_tnl_flush_immediate IM: %d compiling: %d\n",
                   IM->id, ctx->CompileFlag);
 
    if (IM->FlushElt == FLUSH_ELT_EAGER) {
@@ -86,12 +86,15 @@
    struct immediate *IM = TNL_CURRENT_IM(ctx);
 
    if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
-      _mesa_debug("_tnl_flush_vertices flags %x IM(%d) %d..%d Flag[%d]: %x\n", 
+      _mesa_debug(ctx,
+                  "_tnl_flush_vertices flags %x IM(%d) %d..%d Flag[%d]: %x\n", 
                   flags, IM->id, IM->Start, IM->Count, IM->Start,
                   IM->Flag[IM->Start]);
 
    if (IM->Flag[IM->Start])
-      if ((flags & FLUSH_UPDATE_CURRENT) || IM->Count > IM->Start)
+      if ((flags & FLUSH_UPDATE_CURRENT) || 
+	  IM->Count > IM->Start ||
+	  (IM->Flag[IM->Start] & (VERT_BEGIN|VERT_END)))
 	 _tnl_flush_immediate( ctx, IM );
 }
 
@@ -105,7 +108,7 @@
    struct immediate *IM = TNL_CURRENT_IM(ctx);
    GLuint inflags, state;
 
-/*     _mesa_debug("%s: before: %x\n", __FUNCTION__, IM->BeginState); */
+/*     _mesa_debug(ctx, "%s: before: %x\n", __FUNCTION__, IM->BeginState); */
 
    if (mode > GL_POLYGON) {
       _mesa_compile_error( ctx, GL_INVALID_ENUM, "_tnl_Begin" );
@@ -115,12 +118,14 @@
    if (ctx->NewState)
       _mesa_update_state(ctx);
 
+#if 000
    /* if only a very few slots left, might as well flush now
     */
    if (IM->Count > IMM_MAXDATA-8) {
       _tnl_flush_immediate( ctx, IM );
       IM = TNL_CURRENT_IM(ctx);
    }
+#endif
 
    /* Check for and flush buffered vertices from internal operations.
     */
@@ -158,16 +163,9 @@
    ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
    IM->BeginState = state;
 
-   if (ctx->ExecuteFlag) {
-      if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
-	 _mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_Begin" );
-      }
-      else 
-	 ctx->Driver.CurrentExecPrimitive = mode;
-   }
-
-
-   /* Update save_primitive now.
+   /* Update save_primitive now.  Don't touch ExecPrimitive as this is
+    * updated in the replay of this cassette if we are in
+    * COMPILE_AND_EXECUTE mode.
     */
    if (ctx->Driver.CurrentSavePrimitive == PRIM_UNKNOWN)
       ctx->Driver.CurrentSavePrimitive = PRIM_INSIDE_UNKNOWN_PRIM;
@@ -203,8 +201,9 @@
 
       if (IM->Start == IM->Count &&
 	  tnl->Driver.NotifyBegin &&
-	  tnl->Driver.NotifyBegin( ctx, mode )) 
+	  tnl->Driver.NotifyBegin( ctx, mode )) {
 	 return;
+      }
 
       assert( IM->SavedBeginState == 0 );
       assert( IM->BeginState == 0 );
@@ -223,7 +222,7 @@
       IM->LastPrimitive = count;
       IM->BeginState = (VERT_BEGIN_0|VERT_BEGIN_1);
 
-/*        _mesa_debug("%s: %x\n", __FUNCTION__, IM->BeginState);  */
+/*        _mesa_debug(ctx, "%s: %x\n", __FUNCTION__, IM->BeginState);  */
 
       ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
       ctx->Driver.CurrentExecPrimitive = mode;
@@ -238,12 +237,12 @@
 GLboolean
 _tnl_hard_begin( GLcontext *ctx, GLenum p )
 {
-/*     _mesa_debug("%s\n", __FUNCTION__); */
+/*     _mesa_debug(ctx, "%s\n", __FUNCTION__); */
 
    if (!ctx->CompileFlag) {
       /* If not compiling, treat as a normal begin().
        */
-/*        _mesa_debug("%s: treating as glBegin\n", __FUNCTION__); */
+/*        _mesa_debug(ctx, "%s: treating as glBegin\n", __FUNCTION__); */
       glBegin( p );
       return GL_TRUE;
    }
@@ -358,7 +357,7 @@
 
    IM->BeginState = state;
 
-   if (ctx->ExecuteFlag) {
+   if (!ctx->CompileFlag) {
       if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) 
 	 _mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_End" );
       else
@@ -368,8 +367,7 @@
    /* You can set this flag to get the old 'flush_vb on glEnd()'
     * behaviour.
     */
-   /* XXXX tempory change here */
-   if (1 /*(MESA_DEBUG_FLAGS&DEBUG_ALWAYS_FLUSH)*/ )
+   if (MESA_DEBUG_FLAGS & DEBUG_ALWAYS_FLUSH)
       _tnl_flush_immediate( ctx, IM );
 }
 
@@ -1205,7 +1203,7 @@
       return;
    
    if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug("_tnl_Materialfv\n");
+      _mesa_debug(ctx, "_tnl_Materialfv\n");
 
    if (tnl->IsolateMaterials &&
        !(IM->BeginState & VERT_BEGIN_1)) /* heuristic */
diff --git a/src/mesa/tnl/t_imm_dlist.c b/src/mesa/tnl/t_imm_dlist.c
index b269c75..66285b4 100644
--- a/src/mesa/tnl/t_imm_dlist.c
+++ b/src/mesa/tnl/t_imm_dlist.c
@@ -1,4 +1,4 @@
-/* $Id: t_imm_dlist.c,v 1.41 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: t_imm_dlist.c,v 1.42 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -129,7 +129,7 @@
    GLuint new_beginstate;
 
    if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST)
-      _mesa_debug("_tnl_compiled_cassette IM: %d\n", IM->id); 
+      _mesa_debug(ctx, "_tnl_compiled_cassette IM: %d\n", IM->id); 
 
    if (IM->FlushElt) {
       ASSERT (IM->FlushElt == FLUSH_ELT_LAZY); 
@@ -317,7 +317,7 @@
       _tnl_print_cassette( IM );
 
    if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) {
-      _mesa_debug("Run cassette %d, rows %d..%d, beginstate %x ",
+      _mesa_debug(ctx, "Run cassette %d, rows %d..%d, beginstate %x ",
                   IM->id, IM->Start, IM->Count, IM->BeginState);
       _tnl_print_vert_flags("orflag", IM->OrFlag);
    }
@@ -400,7 +400,7 @@
    TNLvertexcassette *node = (TNLvertexcassette *)data;
    struct immediate *IM = node->IM;
 
-   _mesa_debug("TNL-VERTEX-CASSETTE, id %u, rows %u..%u\n",
+   _mesa_debug(ctx, "TNL-VERTEX-CASSETTE, id %u, rows %u..%u\n",
                node->IM->id, node->Start, node->Count);
 
    IM->Start = node->Start;
diff --git a/src/mesa/tnl/t_imm_elt.c b/src/mesa/tnl/t_imm_elt.c
index c7cb0b0..f0c470d 100644
--- a/src/mesa/tnl/t_imm_elt.c
+++ b/src/mesa/tnl/t_imm_elt.c
@@ -1,4 +1,4 @@
-/* $Id: t_imm_elt.c,v 1.17 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: t_imm_elt.c,v 1.18 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -758,8 +758,8 @@
    GLuint translate = ctx->Array._Enabled;
    GLuint i;
 
-   if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
-      _mesa_debug("exec_array_elements %d .. %d\n", start, count);
+   if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
+      _mesa_debug(ctx, "exec_array_elements %d .. %d\n", start, count);
 
    if (translate & VERT_BIT_POS) {
       _tnl_trans_elt_4f( IM->Attrib[VERT_ATTRIB_POS],
diff --git a/src/mesa/tnl/t_imm_exec.c b/src/mesa/tnl/t_imm_exec.c
index f4ee150..02643ce 100644
--- a/src/mesa/tnl/t_imm_exec.c
+++ b/src/mesa/tnl/t_imm_exec.c
@@ -1,4 +1,4 @@
-/* $Id: t_imm_exec.c,v 1.40 2002/06/13 04:49:17 brianp Exp $ */
+/* $Id: t_imm_exec.c,v 1.41 2002/06/15 02:38:18 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -72,7 +72,7 @@
       MEMSET(IM->Flag + start, 0, sizeof(GLuint) * (IM->Count+2-start));
 
    if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
-      _mesa_debug("reset_input: IM(%d) new %x\n", IM->id, beginstate);
+      _mesa_debug(ctx, "reset_input: IM(%d) new %x\n", IM->id, beginstate);
 
    IM->Start = start;
    IM->Count = start;