[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

X Strike Force XFree86 SVN commit: r1957 - in trunk/debian: . patches



Author: branden
Date: 2004-10-15 15:57:56 -0500 (Fri, 15 Oct 2004)
New Revision: 1957

Added:
   trunk/debian/patches/036_fix_r200_DRI_driver_assertion_failures.diff
Modified:
   trunk/debian/CHANGESETS
   trunk/debian/changelog
Log:
Apply patch (#036) submitted to XFree86 Bugzilla on 2003-04-03 by the DRI
Developers to fix OpenGL application crashes with "Assertion `vb.context
== ctx' failed." for ATI R200 DRI users (thanks, Martin Dickopp).
(Closes: #241534)


Modified: trunk/debian/CHANGESETS
===================================================================
--- trunk/debian/CHANGESETS	2004-10-15 20:53:23 UTC (rev 1956)
+++ trunk/debian/CHANGESETS	2004-10-15 20:57:56 UTC (rev 1957)
@@ -151,4 +151,10 @@
 Update FAQ entry: How does the keyboard work in the X Window System?
     1956
 
+Apply patch (#036) submitted to XFree86 Bugzilla on 2003-04-03 by the DRI
+Developers to fix OpenGL application crashes with "Assertion `vb.context
+== ctx' failed." for ATI R200 DRI users (thanks, Martin Dickopp).
+(Closes: #241534)
+    1957
+
 vim:set ai et sts=4 sw=4 tw=80:

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2004-10-15 20:53:23 UTC (rev 1956)
+++ trunk/debian/changelog	2004-10-15 20:57:56 UTC (rev 1957)
@@ -59,6 +59,11 @@
 
   * Update FAQ entry: How does the keyboard work in the X Window System?
 
+  * Apply patch (#036) submitted to XFree86 Bugzilla on 2003-04-03 by the DRI
+    Developers to fix OpenGL application crashes with "Assertion `vb.context
+    == ctx' failed." for ATI R200 DRI users (thanks, Martin Dickopp).
+    (Closes: #241534)
+
   Changes by Denis Barbier and Fabio M. Di Nitto:
 
   * Edit xc/programs/xkbcomp/symbols/pc/Imakefile so that the new pc/us_intl
@@ -129,7 +134,7 @@
     + Set UseBios default to "no" for PROSAVAGE_DDR and PROSAVAGE_DDRK, as
       described at <URL: http://www.probo.com/timr/savage40.html >.
 
- -- Branden Robinson <branden@debian.org>  Fri, 15 Oct 2004 11:34:49 -0500
+ -- Branden Robinson <branden@debian.org>  Fri, 15 Oct 2004 15:54:53 -0500
 
 xfree86 (4.3.0.dfsg.1-8) unstable; urgency=high
 

Added: trunk/debian/patches/036_fix_r200_DRI_driver_assertion_failures.diff
===================================================================
--- trunk/debian/patches/036_fix_r200_DRI_driver_assertion_failures.diff	2004-10-15 20:53:23 UTC (rev 1956)
+++ trunk/debian/patches/036_fix_r200_DRI_driver_assertion_failures.diff	2004-10-15 20:57:56 UTC (rev 1957)
@@ -0,0 +1,1617 @@
+$Id$
+
+Fix OpenGL application crashes with "Assertion `vb.context == ctx'
+failed." for ATI R200 DRI users.  (See Debian #241534.)
+
+This patch by the DRI Developers <dri-devel@lists.sourceforge.net>, and
+submitted to XFree86 Bugzilla on 2003-04-03.
+
+See <URL: http://bugs.xfree86.org/show_bug.cgi?id=25 >.
+
+diff -ur xc/lib/GL/mesa/src/drv/r200/r200_context.h~ xc/lib/GL/mesa/src/drv/r200/r200_context.h
+--- xc/lib/GL/mesa/src/drv/r200/r200_context.h~	2002-12-16 17:18:54.000000000 +0100
++++ xc/lib/GL/mesa/src/drv/r200/r200_context.h	2004-10-14 15:18:52.750256199 +0200
+@@ -683,8 +683,6 @@
+    struct dynfn MultiTexCoord1fvARB;
+ };
+ 
+-struct _vb;
+-
+ struct dfn_generators {
+    struct dynfn *(*Vertex2f)( GLcontext *, const int * );
+    struct dynfn *(*Vertex2fv)( GLcontext *, const int * );
+@@ -715,9 +713,14 @@
+ };
+ 
+ 
+-struct r200_vb {
+-   /* Keep these first: referenced from codegen templates:
+-    */
++
++struct r200_prim {
++   GLuint start;
++   GLuint end;
++   GLuint prim;
++};
++
++struct r200_vbinfo {
+    GLint counter, initial_counter;
+    GLint *dmaptr;
+    void (*notify)( void );
+@@ -742,23 +745,13 @@
+    r200_color_t *specptr;
+    GLfloat *texcoordptr[2];
+ 
+-   GLcontext *context;		/* current context : Single thread only! */
+-};
+ 
+-struct r200_prim {
+-   GLuint start;
+-   GLuint end;
+-   GLuint prim;
+-};
+-
+-struct r200_vbinfo {
+    GLenum *prim;		/* &ctx->Driver.CurrentExecPrimitive */
+    GLuint primflags;
+    GLboolean enabled;		/* R200_NO_VTXFMT//R200_NO_TCL env vars */
+    GLboolean installed;
+    GLboolean fell_back;
+    GLboolean recheck;
+-   GLint initial_counter;
+    GLint nrverts;
+    GLuint vtxfmt_0, vtxfmt_1;
+ 
+diff -ur xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c~ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c
+--- xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c~	2004-10-14 15:19:26.097689194 +0200
++++ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c	2004-10-14 15:18:52.752255866 +0200
+@@ -58,8 +58,6 @@
+ #include "tnl/t_context.h"
+ #include "tnl/t_array_api.h"
+ 
+-struct r200_vb vb;
+-
+ static void r200VtxFmtFlushVertices( GLcontext *, GLuint );
+ 
+ static void count_func( const char *name,  struct dynfn *l )
+@@ -109,33 +107,32 @@
+       fprintf(stderr, "%s\n", __FUNCTION__);
+ 
+    assert(ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT);
+-   assert(vb.context == ctx);
+ 
+    if (rmesa->vb.vtxfmt_0 & R200_VTX_N0) {
+-      ctx->Current.Normal[0] = vb.normalptr[0];
+-      ctx->Current.Normal[1] = vb.normalptr[1];
+-      ctx->Current.Normal[2] = vb.normalptr[2];
++      ctx->Current.Normal[0] = rmesa->vb.normalptr[0];
++      ctx->Current.Normal[1] = rmesa->vb.normalptr[1];
++      ctx->Current.Normal[2] = rmesa->vb.normalptr[2];
+    }
+ 
+    switch( VTX_COLOR(rmesa->vb.vtxfmt_0, 0) ) {
+    case R200_VTX_PK_RGBA:
+-      ctx->Current.Color[0] = UBYTE_TO_FLOAT( vb.colorptr->red );
+-      ctx->Current.Color[1] = UBYTE_TO_FLOAT( vb.colorptr->green );
+-      ctx->Current.Color[2] = UBYTE_TO_FLOAT( vb.colorptr->blue );
+-      ctx->Current.Color[3] = UBYTE_TO_FLOAT( vb.colorptr->alpha );
++      ctx->Current.Color[0] = UBYTE_TO_FLOAT( rmesa->vb.colorptr->red );
++      ctx->Current.Color[1] = UBYTE_TO_FLOAT( rmesa->vb.colorptr->green );
++      ctx->Current.Color[2] = UBYTE_TO_FLOAT( rmesa->vb.colorptr->blue );
++      ctx->Current.Color[3] = UBYTE_TO_FLOAT( rmesa->vb.colorptr->alpha );
+       break;
+ 
+    case R200_VTX_FP_RGB:
+-      ctx->Current.Color[0] = vb.floatcolorptr[0];
+-      ctx->Current.Color[1] = vb.floatcolorptr[1];
+-      ctx->Current.Color[2] = vb.floatcolorptr[2];
++      ctx->Current.Color[0] = rmesa->vb.floatcolorptr[0];
++      ctx->Current.Color[1] = rmesa->vb.floatcolorptr[1];
++      ctx->Current.Color[2] = rmesa->vb.floatcolorptr[2];
+       break;
+ 
+    case R200_VTX_FP_RGBA:
+-      ctx->Current.Color[0] = vb.floatcolorptr[0];
+-      ctx->Current.Color[1] = vb.floatcolorptr[1];
+-      ctx->Current.Color[2] = vb.floatcolorptr[2];
+-      ctx->Current.Color[3] = vb.floatcolorptr[3];
++      ctx->Current.Color[0] = rmesa->vb.floatcolorptr[0];
++      ctx->Current.Color[1] = rmesa->vb.floatcolorptr[1];
++      ctx->Current.Color[2] = rmesa->vb.floatcolorptr[2];
++      ctx->Current.Color[3] = rmesa->vb.floatcolorptr[3];
+       break;
+       
+    default:
+@@ -143,21 +140,21 @@
+    }
+       
+    if (VTX_COLOR(rmesa->vb.vtxfmt_0, 1) == R200_VTX_PK_RGBA) {
+-      ctx->Current.SecondaryColor[0] = UBYTE_TO_FLOAT( vb.specptr->red );
+-      ctx->Current.SecondaryColor[1] = UBYTE_TO_FLOAT( vb.specptr->green );
+-      ctx->Current.SecondaryColor[2] = UBYTE_TO_FLOAT( vb.specptr->blue );
++      ctx->Current.SecondaryColor[0] = UBYTE_TO_FLOAT( rmesa->vb.specptr->red );
++      ctx->Current.SecondaryColor[1] = UBYTE_TO_FLOAT( rmesa->vb.specptr->green );
++      ctx->Current.SecondaryColor[2] = UBYTE_TO_FLOAT( rmesa->vb.specptr->blue );
+    } 
+ 
+    if (rmesa->vb.vtxfmt_1 & (7 << R200_VTX_TEX0_COMP_CNT_SHIFT)) {
+-      ctx->Current.Texcoord[0][0] = vb.texcoordptr[0][0];
+-      ctx->Current.Texcoord[0][1] = vb.texcoordptr[0][1];
++      ctx->Current.Texcoord[0][0] = rmesa->vb.texcoordptr[0][0];
++      ctx->Current.Texcoord[0][1] = rmesa->vb.texcoordptr[0][1];
+       ctx->Current.Texcoord[0][2] = 0.0F;
+       ctx->Current.Texcoord[0][3] = 1.0F;
+    }
+ 
+    if (rmesa->vb.vtxfmt_1 & (7 << R200_VTX_TEX1_COMP_CNT_SHIFT)) {
+-      ctx->Current.Texcoord[1][0] = vb.texcoordptr[1][0];
+-      ctx->Current.Texcoord[1][1] = vb.texcoordptr[1][1];
++      ctx->Current.Texcoord[1][0] = rmesa->vb.texcoordptr[1][0];
++      ctx->Current.Texcoord[1][1] = rmesa->vb.texcoordptr[1][1];
+       ctx->Current.Texcoord[1][2] = 0.0F;
+       ctx->Current.Texcoord[1][3] = 1.0F;
+    }
+@@ -184,12 +181,13 @@
+    struct r200_dma_region tmp = rmesa->dma.current;
+    
+    tmp.buf->refcount++;
+-   tmp.aos_size = vb.vertex_size;
+-   tmp.aos_stride = vb.vertex_size;
++   tmp.aos_size = rmesa->vb.vertex_size;
++   tmp.aos_stride = rmesa->vb.vertex_size;
+    tmp.aos_start = GET_START(&tmp);
+ 
+    rmesa->dma.current.ptr = rmesa->dma.current.start += 
+-      (vb.initial_counter - vb.counter) * vb.vertex_size * 4; 
++      (rmesa->vb.initial_counter - rmesa->vb.counter) * 
++      rmesa->vb.vertex_size * 4; 
+ 
+    rmesa->tcl.vertex_format = rmesa->vb.vtxfmt_0;
+    rmesa->tcl.aos_components[0] = &tmp;
+@@ -232,7 +230,7 @@
+ 		 rmesa->vb.primlist[i].end);
+ 
+       if (rmesa->vb.primlist[i].start < rmesa->vb.primlist[i].end)
+-	 r200EmitPrimitive( vb.context,
++	 r200EmitPrimitive( rmesa->glCtx,
+ 			    rmesa->vb.primlist[i].start,
+ 			    rmesa->vb.primlist[i].end,
+ 			    rmesa->vb.primlist[i].prim );
+@@ -246,20 +244,24 @@
+ static void start_prim( r200ContextPtr rmesa, GLuint mode )
+ {
+    if (R200_DEBUG & DEBUG_VFMT)
+-      fprintf(stderr, "%s %d\n", __FUNCTION__, vb.initial_counter - vb.counter);
++      fprintf(stderr, "%s %d\n", __FUNCTION__, 
++	      rmesa->vb.initial_counter - rmesa->vb.counter);
+ 
+-   rmesa->vb.primlist[rmesa->vb.nrprims].start = vb.initial_counter - vb.counter;
++   rmesa->vb.primlist[rmesa->vb.nrprims].start = 
++      rmesa->vb.initial_counter - rmesa->vb.counter;
+    rmesa->vb.primlist[rmesa->vb.nrprims].prim = mode;
+ }
+ 
+ static void note_last_prim( r200ContextPtr rmesa, GLuint flags )
+ {
+    if (R200_DEBUG & DEBUG_VFMT)
+-      fprintf(stderr, "%s %d\n", __FUNCTION__, vb.initial_counter - vb.counter);
++      fprintf(stderr, "%s %d\n", __FUNCTION__, 
++	      rmesa->vb.initial_counter - rmesa->vb.counter);
+ 
+    if (rmesa->vb.prim[0] != GL_POLYGON+1) {
+       rmesa->vb.primlist[rmesa->vb.nrprims].prim |= flags;
+-      rmesa->vb.primlist[rmesa->vb.nrprims].end = vb.initial_counter - vb.counter;
++      rmesa->vb.primlist[rmesa->vb.nrprims].end = 
++	 rmesa->vb.initial_counter - rmesa->vb.counter;
+ 
+       if (++(rmesa->vb.nrprims) == R200_MAX_PRIMS)
+ 	 flush_prims( rmesa );
+@@ -273,12 +275,12 @@
+    GLfloat *src = (GLfloat *)(rmesa->dma.current.address + 
+ 			      rmesa->dma.current.ptr + 
+ 			      (rmesa->vb.primlist[rmesa->vb.nrprims].start + n) * 
+-			      vb.vertex_size * 4);
++			      rmesa->vb.vertex_size * 4);
+ 
+    if (R200_DEBUG & DEBUG_VFMT) 
+       fprintf(stderr, "copy_vertex %d\n", rmesa->vb.primlist[rmesa->vb.nrprims].start + n);
+ 
+-   for (i = 0 ; i < vb.vertex_size; i++) {
++   for (i = 0 ; i < rmesa->vb.vertex_size; i++) {
+       dst[i] = src[i];
+    }
+ }
+@@ -290,7 +292,8 @@
+ static GLuint copy_dma_verts( r200ContextPtr rmesa, GLfloat (*tmp)[15] )
+ {
+    GLuint ovf, i;
+-   GLuint nr = (vb.initial_counter - vb.counter) - rmesa->vb.primlist[rmesa->vb.nrprims].start;
++   GLuint nr = (rmesa->vb.initial_counter - rmesa->vb.counter) - 
++      rmesa->vb.primlist[rmesa->vb.nrprims].start;
+ 
+    if (R200_DEBUG & DEBUG_VFMT)
+       fprintf(stderr, "%s %d verts\n", __FUNCTION__, nr);
+@@ -351,7 +354,7 @@
+ 
+ static void VFMT_FALLBACK_OUTSIDE_BEGIN_END( const char *caller )
+ {
+-   GLcontext *ctx = vb.context;
++   GET_CURRENT_CONTEXT(ctx);
+    r200ContextPtr rmesa = R200_CONTEXT(ctx);
+ 
+    if (R200_DEBUG & (DEBUG_VFMT|DEBUG_FALLBACKS))
+@@ -369,13 +372,12 @@
+    assert( rmesa->dma.flush == 0 );
+    rmesa->vb.fell_back = GL_TRUE;
+    rmesa->vb.installed = GL_FALSE;
+-/*    vb.context = 0; */
+ }
+ 
+ 
+ static void VFMT_FALLBACK( const char *caller )
+ {
+-   GLcontext *ctx = vb.context;
++   GET_CURRENT_CONTEXT(ctx);
+    r200ContextPtr rmesa = R200_CONTEXT(ctx);
+    GLfloat tmp[3][15];
+    GLuint i, prim;
+@@ -411,7 +413,6 @@
+    assert(rmesa->dma.flush == 0);
+    rmesa->vb.fell_back = GL_TRUE;
+    rmesa->vb.installed = GL_FALSE;
+-   vb.context = 0;
+    glBegin( prim );
+    
+    if (rmesa->vb.installed_color_3f_sz == 4)
+@@ -460,50 +461,51 @@
+    /* Replay current vertex
+     */
+    if (ind0 & R200_VTX_N0) 
+-      glNormal3fv( vb.normalptr );
++      glNormal3fv( rmesa->vb.normalptr );
+ 
+    if (VTX_COLOR(ind0, 0) == R200_VTX_PK_RGBA) 
+-         glColor4ub( vb.colorptr->red, vb.colorptr->green, vb.colorptr->blue, vb.colorptr->alpha );
++         glColor4ub( rmesa->vb.colorptr->red, rmesa->vb.colorptr->green, rmesa->vb.colorptr->blue, rmesa->vb.colorptr->alpha );
+    else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGBA) 
+-      glColor4fv( vb.floatcolorptr );
++      glColor4fv( rmesa->vb.floatcolorptr );
+    else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGB) {
+       if (rmesa->vb.installed_color_3f_sz == 4 && alpha != 1.0)
+-	 glColor4f( vb.floatcolorptr[0],
+-		    vb.floatcolorptr[1],
+-		    vb.floatcolorptr[2],
++	 glColor4f( rmesa->vb.floatcolorptr[0],
++		    rmesa->vb.floatcolorptr[1],
++		    rmesa->vb.floatcolorptr[2],
+ 		    alpha );
+       else
+-	 glColor3fv( vb.floatcolorptr );
++	 glColor3fv( rmesa->vb.floatcolorptr );
+    }
+ 
+    if (VTX_COLOR(ind0, 1) == R200_VTX_PK_RGBA) 
+-      _glapi_Dispatch->SecondaryColor3ubEXT( vb.specptr->red, vb.specptr->green, vb.specptr->blue ); 
++      _glapi_Dispatch->SecondaryColor3ubEXT( rmesa->vb.specptr->red, rmesa->vb.specptr->green, rmesa->vb.specptr->blue ); 
+ 
+    if (ind1 & (7 << R200_VTX_TEX0_COMP_CNT_SHIFT)) 
+-      glTexCoord2fv( vb.texcoordptr[0] );
++      glTexCoord2fv( rmesa->vb.texcoordptr[0] );
+ 
+    if (ind1 & (7 << R200_VTX_TEX1_COMP_CNT_SHIFT)) 
+-      glMultiTexCoord2fvARB( GL_TEXTURE1_ARB, vb.texcoordptr[1] );
++      glMultiTexCoord2fvARB( GL_TEXTURE1_ARB, rmesa->vb.texcoordptr[1] );
+ }
+ 
+ 
+ 
+ static void wrap_buffer( void )
+ {
+-   GLcontext *ctx = vb.context;
++   GET_CURRENT_CONTEXT(ctx);
+    r200ContextPtr rmesa = R200_CONTEXT(ctx);
+    GLfloat tmp[3][15];
+    GLuint i, nrverts;
+ 
+    if (R200_DEBUG & (DEBUG_VFMT|DEBUG_PRIMS))
+-      fprintf(stderr, "%s %d\n", __FUNCTION__, vb.initial_counter - vb.counter);
++      fprintf(stderr, "%s %d\n", __FUNCTION__,
++	      rmesa->vb.initial_counter - rmesa->vb.counter);
+ 
+    /* Don't deal with parity.
+     */
+-   if ((((vb.initial_counter - vb.counter) -  
++   if ((((rmesa->vb.initial_counter - rmesa->vb.counter) -  
+ 	 rmesa->vb.primlist[rmesa->vb.nrprims].start) & 1)) {
+-      vb.counter++;
+-      vb.initial_counter++;
++      rmesa->vb.counter++;
++      rmesa->vb.initial_counter++;
+       return;
+    }
+ 
+@@ -532,12 +534,12 @@
+ 
+    /* Reset counter, dmaptr
+     */
+-   vb.dmaptr = (int *)(rmesa->dma.current.ptr + rmesa->dma.current.address);
+-   vb.counter = (rmesa->dma.current.end - rmesa->dma.current.ptr) / 
+-      (vb.vertex_size * 4);
+-   vb.counter--;
+-   vb.initial_counter = vb.counter;
+-   vb.notify = wrap_buffer;
++   rmesa->vb.dmaptr = (int *)(rmesa->dma.current.ptr + rmesa->dma.current.address);
++   rmesa->vb.counter = (rmesa->dma.current.end - rmesa->dma.current.ptr) / 
++      (rmesa->vb.vertex_size * 4);
++   rmesa->vb.counter--;
++   rmesa->vb.initial_counter = rmesa->vb.counter;
++   rmesa->vb.notify = wrap_buffer;
+ 
+    rmesa->dma.flush = flush_prims;
+ 
+@@ -552,15 +554,15 @@
+    for (i = 0 ; i < nrverts; i++) {
+       if (R200_DEBUG & DEBUG_VERTS) {
+ 	 int j;
+-	 fprintf(stderr, "re-emit vertex %d to %p\n", i, vb.dmaptr);
++	 fprintf(stderr, "re-emit vertex %d to %p\n", i, rmesa->vb.dmaptr);
+ 	 if (R200_DEBUG & DEBUG_VERBOSE)
+-	    for (j = 0 ; j < vb.vertex_size; j++) 
++	    for (j = 0 ; j < rmesa->vb.vertex_size; j++) 
+ 	       fprintf(stderr, "\t%08x/%f\n", *(int*)&tmp[i][j], tmp[i][j]);
+       }
+ 
+-      memcpy( vb.dmaptr, tmp[i], vb.vertex_size * 4 );
+-      vb.dmaptr += vb.vertex_size;
+-      vb.counter--;
++      memcpy( rmesa->vb.dmaptr, tmp[i], rmesa->vb.vertex_size * 4 );
++      rmesa->vb.dmaptr += rmesa->vb.vertex_size;
++      rmesa->vb.counter--;
+    }
+ }
+ 
+@@ -645,71 +647,71 @@
+    rmesa->vb.vtxfmt_1 = ind1;
+    rmesa->vb.prim = &ctx->Driver.CurrentExecPrimitive;
+ 
+-   vb.vertex_size = 3;
+-   vb.normalptr = ctx->Current.Normal;
+-   vb.colorptr = NULL;
+-   vb.floatcolorptr = ctx->Current.Color;
+-   vb.specptr = NULL;
+-   vb.floatspecptr = ctx->Current.SecondaryColor;
+-   vb.texcoordptr[0] = ctx->Current.Texcoord[0];
+-   vb.texcoordptr[1] = ctx->Current.Texcoord[1];
++   rmesa->vb.vertex_size = 3;
++   rmesa->vb.normalptr = ctx->Current.Normal;
++   rmesa->vb.colorptr = NULL;
++   rmesa->vb.floatcolorptr = ctx->Current.Color;
++   rmesa->vb.specptr = NULL;
++   rmesa->vb.floatspecptr = ctx->Current.SecondaryColor;
++   rmesa->vb.texcoordptr[0] = ctx->Current.Texcoord[0];
++   rmesa->vb.texcoordptr[1] = ctx->Current.Texcoord[1];
+ 
+    /* Run through and initialize the vertex components in the order
+     * the hardware understands:
+     */
+    if (ind0 & R200_VTX_N0) {
+-      vb.normalptr = &vb.vertex[vb.vertex_size].f;
+-      vb.vertex_size += 3;
+-      vb.normalptr[0] = ctx->Current.Normal[0];
+-      vb.normalptr[1] = ctx->Current.Normal[1];
+-      vb.normalptr[2] = ctx->Current.Normal[2];
++      rmesa->vb.normalptr = &rmesa->vb.vertex[rmesa->vb.vertex_size].f;
++      rmesa->vb.vertex_size += 3;
++      rmesa->vb.normalptr[0] = ctx->Current.Normal[0];
++      rmesa->vb.normalptr[1] = ctx->Current.Normal[1];
++      rmesa->vb.normalptr[2] = ctx->Current.Normal[2];
+    }
+ 
+    if (VTX_COLOR(ind0, 0) == R200_VTX_PK_RGBA) {
+-      vb.colorptr = &vb.vertex[vb.vertex_size].color;
+-      vb.vertex_size += 1;
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.colorptr->red,   ctx->Current.Color[0] );
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.colorptr->green, ctx->Current.Color[1] );
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.colorptr->blue,  ctx->Current.Color[2] );
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.colorptr->alpha, ctx->Current.Color[3] );
++      rmesa->vb.colorptr = &rmesa->vb.vertex[rmesa->vb.vertex_size].color;
++      rmesa->vb.vertex_size += 1;
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.colorptr->red,   ctx->Current.Color[0] );
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.colorptr->green, ctx->Current.Color[1] );
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.colorptr->blue,  ctx->Current.Color[2] );
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.colorptr->alpha, ctx->Current.Color[3] );
+    }
+    else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGBA) {
+-      vb.floatcolorptr = &vb.vertex[vb.vertex_size].f;
+-      vb.vertex_size += 4;
+-      vb.floatcolorptr[0] = ctx->Current.Color[0];
+-      vb.floatcolorptr[1] = ctx->Current.Color[1];
+-      vb.floatcolorptr[2] = ctx->Current.Color[2];
+-      vb.floatcolorptr[3] = ctx->Current.Color[3];
++      rmesa->vb.floatcolorptr = &rmesa->vb.vertex[rmesa->vb.vertex_size].f;
++      rmesa->vb.vertex_size += 4;
++      rmesa->vb.floatcolorptr[0] = ctx->Current.Color[0];
++      rmesa->vb.floatcolorptr[1] = ctx->Current.Color[1];
++      rmesa->vb.floatcolorptr[2] = ctx->Current.Color[2];
++      rmesa->vb.floatcolorptr[3] = ctx->Current.Color[3];
+    }
+    else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGB) {
+-      vb.floatcolorptr = &vb.vertex[vb.vertex_size].f;
+-      vb.vertex_size += 3;
+-      vb.floatcolorptr[0] = ctx->Current.Color[0];
+-      vb.floatcolorptr[1] = ctx->Current.Color[1];
+-      vb.floatcolorptr[2] = ctx->Current.Color[2];
++      rmesa->vb.floatcolorptr = &rmesa->vb.vertex[rmesa->vb.vertex_size].f;
++      rmesa->vb.vertex_size += 3;
++      rmesa->vb.floatcolorptr[0] = ctx->Current.Color[0];
++      rmesa->vb.floatcolorptr[1] = ctx->Current.Color[1];
++      rmesa->vb.floatcolorptr[2] = ctx->Current.Color[2];
+    }   
+    
+    if (VTX_COLOR(ind0, 1) == R200_VTX_PK_RGBA) {
+-      vb.specptr = &vb.vertex[vb.vertex_size].color;
+-      vb.vertex_size += 1;
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.specptr->red,   ctx->Current.SecondaryColor[0] );
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.specptr->green, ctx->Current.SecondaryColor[1] );
+-      UNCLAMPED_FLOAT_TO_CHAN( vb.specptr->blue,  ctx->Current.SecondaryColor[2] );
++      rmesa->vb.specptr = &rmesa->vb.vertex[rmesa->vb.vertex_size].color;
++      rmesa->vb.vertex_size += 1;
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.specptr->red,   ctx->Current.SecondaryColor[0] );
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.specptr->green, ctx->Current.SecondaryColor[1] );
++      UNCLAMPED_FLOAT_TO_CHAN( rmesa->vb.specptr->blue,  ctx->Current.SecondaryColor[2] );
+    }
+ 
+ 
+    if (ind1 & (7 << R200_VTX_TEX0_COMP_CNT_SHIFT)) {
+-      vb.texcoordptr[0] = &vb.vertex[vb.vertex_size].f;
+-      vb.vertex_size += 2;
+-      vb.texcoordptr[0][0] = ctx->Current.Texcoord[0][0];
+-      vb.texcoordptr[0][1] = ctx->Current.Texcoord[0][1];   
++      rmesa->vb.texcoordptr[0] = &rmesa->vb.vertex[rmesa->vb.vertex_size].f;
++      rmesa->vb.vertex_size += 2;
++      rmesa->vb.texcoordptr[0][0] = ctx->Current.Texcoord[0][0];
++      rmesa->vb.texcoordptr[0][1] = ctx->Current.Texcoord[0][1];   
+    } 
+ 
+    if (ind1 & (7 << R200_VTX_TEX1_COMP_CNT_SHIFT)) {
+-      vb.texcoordptr[1] = &vb.vertex[vb.vertex_size].f;
+-      vb.vertex_size += 2;
+-      vb.texcoordptr[1][0] = ctx->Current.Texcoord[1][0];
+-      vb.texcoordptr[1][1] = ctx->Current.Texcoord[1][1];
++      rmesa->vb.texcoordptr[1] = &rmesa->vb.vertex[rmesa->vb.vertex_size].f;
++      rmesa->vb.vertex_size += 2;
++      rmesa->vb.texcoordptr[1][0] = ctx->Current.Texcoord[1][0];
++      rmesa->vb.texcoordptr[1][1] = ctx->Current.Texcoord[1][1];
+    } 
+ 
+    if (rmesa->vb.installed_vertex_format != rmesa->vb.vtxfmt_0) {
+@@ -762,7 +764,6 @@
+ 	 ctx->Driver.FlushVertices = r200VtxFmtFlushVertices;
+ 	 ctx->Driver.NewList = r200NewList;
+ 	 rmesa->vb.installed = GL_TRUE;
+-	 vb.context = ctx;
+       }
+       else if (R200_DEBUG & DEBUG_VFMT)
+ 	 fprintf(stderr, "%s: already installed", __FUNCTION__);
+@@ -777,7 +778,6 @@
+ 	 _tnl_wakeup_exec( ctx );
+ 	 ctx->Driver.FlushVertices = r200FlushVertices;
+ 	 rmesa->vb.installed = GL_FALSE;
+-	 vb.context = 0;
+       }
+    }      
+ }
+@@ -789,7 +789,7 @@
+ static void r200_Materialfv( GLenum face, GLenum pname, 
+ 			       const GLfloat *params )
+ {
+-   GLcontext *ctx = vb.context;
++   GET_CURRENT_CONTEXT(ctx);
+    r200ContextPtr rmesa = R200_CONTEXT( ctx );
+ 
+    if (R200_DEBUG & DEBUG_VFMT)
+@@ -801,7 +801,7 @@
+       return;
+    }
+    _mesa_noop_Materialfv( face, pname, params );
+-   r200UpdateMaterial( vb.context );
++   r200UpdateMaterial( ctx );
+ }
+ 
+ 
+@@ -809,7 +809,7 @@
+  */
+ static void r200_Begin( GLenum mode )
+ {
+-   GLcontext *ctx = vb.context;
++   GET_CURRENT_CONTEXT(ctx);
+    r200ContextPtr rmesa = R200_CONTEXT(ctx);
+ 
+    if (R200_DEBUG & DEBUG_VFMT)
+@@ -841,7 +841,7 @@
+    }
+ 
+ 
+-   if (rmesa->dma.flush && vb.counter < 12) {
++   if (rmesa->dma.flush && rmesa->vb.counter < 12) {
+       if (R200_DEBUG & DEBUG_VFMT)
+ 	 fprintf(stderr, "%s: flush almost-empty buffers\n", __FUNCTION__);
+       flush_prims( rmesa );
+@@ -850,20 +850,20 @@
+    /* Need to arrange to save vertices here?  Or always copy from dma (yuk)?
+     */
+    if (!rmesa->dma.flush) {
+-      if (rmesa->dma.current.ptr + 12*vb.vertex_size*4 > 
++      if (rmesa->dma.current.ptr + 12*rmesa->vb.vertex_size*4 > 
+ 	  rmesa->dma.current.end) {
+ 	 R200_NEWPRIM( rmesa );
+ 	 r200RefillCurrentDmaRegion( rmesa );
+       }
+ 
+-      vb.dmaptr = (int *)(rmesa->dma.current.address + rmesa->dma.current.ptr);
+-      vb.counter = (rmesa->dma.current.end - rmesa->dma.current.ptr) / 
+-	 (vb.vertex_size * 4);
+-      vb.counter--;
+-      vb.initial_counter = vb.counter;
+-      vb.notify = wrap_buffer;
++      rmesa->vb.dmaptr = (int *)(rmesa->dma.current.address + rmesa->dma.current.ptr);
++      rmesa->vb.counter = (rmesa->dma.current.end - rmesa->dma.current.ptr) / 
++	 (rmesa->vb.vertex_size * 4);
++      rmesa->vb.counter--;
++      rmesa->vb.initial_counter = rmesa->vb.counter;
++      rmesa->vb.notify = wrap_buffer;
+       rmesa->dma.flush = flush_prims;
+-      vb.context->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
++      ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
+    }
+    
+    
+@@ -875,7 +875,7 @@
+ 
+ static void r200_End( void )
+ {
+-   GLcontext *ctx = vb.context;
++   GET_CURRENT_CONTEXT(ctx);
+    r200ContextPtr rmesa = R200_CONTEXT(ctx);
+ 
+    if (R200_DEBUG & DEBUG_VFMT)
+@@ -943,7 +943,6 @@
+       fprintf(stderr, "%s\n", __FUNCTION__);
+ 
+    assert(rmesa->vb.installed);
+-   assert(vb.context == ctx);
+ 
+    if (flags & FLUSH_UPDATE_CURRENT) {
+       r200_copy_to_current( ctx );
+@@ -954,11 +953,10 @@
+    }
+ 
+    if (flags & FLUSH_STORED_VERTICES) {
+-      r200ContextPtr rmesa = R200_CONTEXT( ctx );
+       assert (rmesa->dma.flush == 0 ||
+ 	      rmesa->dma.flush == flush_prims);
+       if (rmesa->dma.flush == flush_prims)
+-	 flush_prims( R200_CONTEXT( ctx ) );
++	 flush_prims( rmesa );
+       ctx->Driver.NeedFlush &= ~FLUSH_STORED_VERTICES;
+    }
+ }
+@@ -1036,7 +1034,6 @@
+ 
+    TNL_CONTEXT(ctx)->Driver.NotifyBegin = r200NotifyBegin;
+ 
+-   vb.context = ctx;
+    rmesa->vb.enabled = 1;
+    rmesa->vb.prim = &ctx->Driver.CurrentExecPrimitive;
+    rmesa->vb.primflags = 0;
+@@ -1083,42 +1080,11 @@
+ 
+ void r200VtxfmtUnbindContext( GLcontext *ctx )
+ {
+-   if (R200_CONTEXT(ctx)->vb.installed) {
+-      assert(vb.context == ctx);
+-      VFMT_FALLBACK_OUTSIDE_BEGIN_END( __FUNCTION__ );
+-   }
+-
+-   TNL_CONTEXT(ctx)->Driver.NotifyBegin = 0;
+ }
+ 
+ 
+ void r200VtxfmtMakeCurrent( GLcontext *ctx )
+ {
+-   r200ContextPtr rmesa = R200_CONTEXT( ctx );
+-
+-#if defined(THREADS)
+-   static GLboolean ThreadSafe = GL_FALSE;  /* In thread-safe mode? */
+-   if (!ThreadSafe) {
+-      static unsigned long knownID;
+-      static GLboolean firstCall = GL_TRUE;
+-      if (firstCall) {
+-         knownID = _glthread_GetID();
+-         firstCall = GL_FALSE;
+-      }
+-      else if (knownID != _glthread_GetID()) {
+-         ThreadSafe = GL_TRUE;
+-
+-	 if (R200_DEBUG & (DEBUG_DRI|DEBUG_VFMT))
+-	    fprintf(stderr, "**** Multithread situation!\n");
+-      }
+-   }
+-   if (ThreadSafe) 
+-      return;
+-#endif
+-
+-   if (rmesa->vb.enabled) {
+-      TNL_CONTEXT(ctx)->Driver.NotifyBegin = r200NotifyBegin;
+-   }
+ }
+ 
+ 
+diff -ur xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.h~ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.h
+--- xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.h~	2002-10-30 13:51:53.000000000 +0100
++++ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.h	2004-10-14 15:18:52.752255866 +0200
+@@ -41,9 +41,6 @@
+ 
+ 
+ 
+-extern struct r200_vb vb;
+-
+-
+ extern void r200VtxfmtUpdate( GLcontext *ctx );
+ extern void r200VtxfmtInit( GLcontext *ctx );
+ extern void r200VtxfmtInvalidate( GLcontext *ctx );
+diff -ur xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_c.c~ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_c.c
+--- xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_c.c~	2002-12-16 17:18:56.000000000 +0100
++++ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_c.c	2004-10-14 15:18:52.753255699 +0200
+@@ -46,65 +46,73 @@
+  */
+ static void r200_Vertex3f( GLfloat x, GLfloat y, GLfloat z )
+ {
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
+    int i;
+ 
+-   *vb.dmaptr++ = *(int *)&x;
+-   *vb.dmaptr++ = *(int *)&y;
+-   *vb.dmaptr++ = *(int *)&z;
++   *rmesa->vb.dmaptr++ = *(int *)&x;
++   *rmesa->vb.dmaptr++ = *(int *)&y;
++   *rmesa->vb.dmaptr++ = *(int *)&z;
+ 
+-   for (i = 3; i < vb.vertex_size; i++)
+-      *vb.dmaptr++ = vb.vertex[i].i;
++   for (i = 3; i < rmesa->vb.vertex_size; i++)
++      *rmesa->vb.dmaptr++ = rmesa->vb.vertex[i].i;
+    
+-   if (--vb.counter == 0)
+-      vb.notify();
++   if (--rmesa->vb.counter == 0)
++      rmesa->vb.notify();
+ }
+ 
+ 
+ static void r200_Vertex3fv( const GLfloat *v )
+ {
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
+    int i;
+ 
+-   *vb.dmaptr++ = *(int *)&v[0];
+-   *vb.dmaptr++ = *(int *)&v[1];
+-   *vb.dmaptr++ = *(int *)&v[2];
++   *rmesa->vb.dmaptr++ = *(int *)&v[0];
++   *rmesa->vb.dmaptr++ = *(int *)&v[1];
++   *rmesa->vb.dmaptr++ = *(int *)&v[2];
+ 
+-   for (i = 3; i < vb.vertex_size; i++)
+-      *vb.dmaptr++ = vb.vertex[i].i;
++   for (i = 3; i < rmesa->vb.vertex_size; i++)
++      *rmesa->vb.dmaptr++ = rmesa->vb.vertex[i].i;
+    
+-   if (--vb.counter == 0)
+-      vb.notify();
++   if (--rmesa->vb.counter == 0)
++      rmesa->vb.notify();
+ }
+ 
+ 
+ static void r200_Vertex2f( GLfloat x, GLfloat y )
+ {
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
+    int i;
+    
+-   *vb.dmaptr++ = *(int *)&x;
+-   *vb.dmaptr++ = *(int *)&y;
+-   *vb.dmaptr++ = 0;
++   *rmesa->vb.dmaptr++ = *(int *)&x;
++   *rmesa->vb.dmaptr++ = *(int *)&y;
++   *rmesa->vb.dmaptr++ = 0;
+ 
+-   for (i = 3; i < vb.vertex_size; i++)
+-      *vb.dmaptr++ = vb.vertex[i].i;
++   for (i = 3; i < rmesa->vb.vertex_size; i++)
++      *rmesa->vb.dmaptr++ = rmesa->vb.vertex[i].i;
+ 
+-   if (--vb.counter == 0)
+-      vb.notify();
++   if (--rmesa->vb.counter == 0)
++      rmesa->vb.notify();
+ }
+ 
+ 
+ static void r200_Vertex2fv( const GLfloat *v )
+ {
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
+    int i;
+ 
+-   *vb.dmaptr++ = *(int *)&v[0];
+-   *vb.dmaptr++ = *(int *)&v[1];
+-   *vb.dmaptr++ = 0;
++   *rmesa->vb.dmaptr++ = *(int *)&v[0];
++   *rmesa->vb.dmaptr++ = *(int *)&v[1];
++   *rmesa->vb.dmaptr++ = 0;
+ 
+-   for (i = 3; i < vb.vertex_size; i++)
+-      *vb.dmaptr++ = vb.vertex[i].i;
++   for (i = 3; i < rmesa->vb.vertex_size; i++)
++      *rmesa->vb.dmaptr++ = rmesa->vb.vertex[i].i;
+    
+-   if (--vb.counter == 0)
+-      vb.notify();
++   if (--rmesa->vb.counter == 0)
++      rmesa->vb.notify();
+ }
+ 
+ 
+@@ -113,7 +121,9 @@
+  */
+ static void r200_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    dest->red	= r;
+    dest->green	= g;
+    dest->blue	= b;
+@@ -122,7 +132,9 @@
+ 
+ static void r200_Color3ubv_ub( const GLubyte *v )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    dest->red	= v[0];
+    dest->green	= v[1];
+    dest->blue	= v[2];
+@@ -131,7 +143,9 @@
+ 
+ static void r200_Color4ub_ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    dest->red	= r;
+    dest->green	= g;
+    dest->blue	= b;
+@@ -140,13 +154,17 @@
+ 
+ static void r200_Color4ubv_ub( const GLubyte *v )
+ {
+-   *(GLuint *)vb.colorptr = LE32_TO_CPU(*(GLuint *)v);
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v);
+ }
+ 
+ 
+ static void r200_Color3f_ub( GLfloat r, GLfloat g, GLfloat b )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->red,   r );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->green, g );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->blue,  b );
+@@ -155,7 +173,9 @@
+ 
+ static void r200_Color3fv_ub( const GLfloat *v )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->red,   v[0] );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->green, v[1] );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->blue,  v[2] );
+@@ -164,7 +184,9 @@
+ 
+ static void r200_Color4f_ub( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->red,   r );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->green, g );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->blue,  b );
+@@ -173,7 +195,9 @@
+ 
+ static void r200_Color4fv_ub( const GLfloat *v )
+ {
+-   r200_color_t *dest = vb.colorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.colorptr;
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->red,	  v[0] );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->green, v[1] );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->blue,  v[2] );
+@@ -185,7 +209,9 @@
+  */
+ static void r200_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(r);
+    dest[1] = UBYTE_TO_FLOAT(g);
+    dest[2] = UBYTE_TO_FLOAT(b);
+@@ -194,7 +220,9 @@
+ 
+ static void r200_Color3ubv_4f( const GLubyte *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(v[0]);
+    dest[1] = UBYTE_TO_FLOAT(v[1]);
+    dest[2] = UBYTE_TO_FLOAT(v[2]);
+@@ -203,7 +231,9 @@
+ 
+ static void r200_Color4ub_4f( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(r);
+    dest[1] = UBYTE_TO_FLOAT(g);
+    dest[2] = UBYTE_TO_FLOAT(b);
+@@ -212,7 +242,9 @@
+ 
+ static void r200_Color4ubv_4f( const GLubyte *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(v[0]);
+    dest[1] = UBYTE_TO_FLOAT(v[1]);
+    dest[2] = UBYTE_TO_FLOAT(v[2]);
+@@ -222,7 +254,9 @@
+ 
+ static void r200_Color3f_4f( GLfloat r, GLfloat g, GLfloat b )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = r;
+    dest[1] = g;
+    dest[2] = b;
+@@ -231,7 +265,9 @@
+ 
+ static void r200_Color3fv_4f( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = v[0];
+    dest[1] = v[1];
+    dest[2] = v[2];
+@@ -240,7 +276,9 @@
+ 
+ static void r200_Color4f_4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = r;
+    dest[1] = g;
+    dest[2] = b;
+@@ -249,7 +287,9 @@
+ 
+ static void r200_Color4fv_4f( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = v[0];
+    dest[1] = v[1];
+    dest[2] = v[2];
+@@ -261,7 +301,9 @@
+  */
+ static void r200_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(r);
+    dest[1] = UBYTE_TO_FLOAT(g);
+    dest[2] = UBYTE_TO_FLOAT(b);
+@@ -269,7 +311,9 @@
+ 
+ static void r200_Color3ubv_3f( const GLubyte *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(v[0]);
+    dest[1] = UBYTE_TO_FLOAT(v[1]);
+    dest[2] = UBYTE_TO_FLOAT(v[2]);
+@@ -277,26 +321,32 @@
+ 
+ static void r200_Color4ub_3f( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(r);
+    dest[1] = UBYTE_TO_FLOAT(g);
+    dest[2] = UBYTE_TO_FLOAT(b);
+-   vb.context->Current.Color[3] = UBYTE_TO_FLOAT(a);
++   ctx->Current.Color[3] = UBYTE_TO_FLOAT(a);
+ }
+ 
+ static void r200_Color4ubv_3f( const GLubyte *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = UBYTE_TO_FLOAT(v[0]);
+    dest[1] = UBYTE_TO_FLOAT(v[1]);
+    dest[2] = UBYTE_TO_FLOAT(v[2]);
+-   vb.context->Current.Color[3] = UBYTE_TO_FLOAT(v[3]);
++   ctx->Current.Color[3] = UBYTE_TO_FLOAT(v[3]);
+ }
+ 
+ 
+ static void r200_Color3f_3f( GLfloat r, GLfloat g, GLfloat b )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = r;
+    dest[1] = g;
+    dest[2] = b;
+@@ -304,7 +354,9 @@
+ 
+ static void r200_Color3fv_3f( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = v[0];
+    dest[1] = v[1];
+    dest[2] = v[2];
+@@ -312,20 +364,24 @@
+ 
+ static void r200_Color4f_3f( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = r;
+    dest[1] = g;
+    dest[2] = b;
+-   vb.context->Current.Color[3] = a;
++   ctx->Current.Color[3] = a;
+ }
+ 
+ static void r200_Color4fv_3f( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.floatcolorptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatcolorptr;
+    dest[0] = v[0];
+    dest[1] = v[1];
+    dest[2] = v[2];
+-   vb.context->Current.Color[3] = v[3]; 
++   ctx->Current.Color[3] = v[3]; 
+ }
+ 
+ 
+@@ -333,7 +389,9 @@
+  */
+ static void r200_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b )
+ {
+-   r200_color_t *dest = vb.specptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.specptr;
+    dest->red	= r;
+    dest->green	= g;
+    dest->blue	= b;
+@@ -342,7 +400,9 @@
+ 
+ static void r200_SecondaryColor3ubvEXT_ub( const GLubyte *v )
+ {
+-   r200_color_t *dest = vb.specptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.specptr;
+    dest->red	= v[0];
+    dest->green	= v[1];
+    dest->blue	= v[2];
+@@ -351,7 +411,9 @@
+ 
+ static void r200_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b )
+ {
+-   r200_color_t *dest = vb.specptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.specptr;
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->red,	  r );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->green, g );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->blue,  b );
+@@ -360,7 +422,9 @@
+ 
+ static void r200_SecondaryColor3fvEXT_ub( const GLfloat *v )
+ {
+-   r200_color_t *dest = vb.specptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   r200_color_t *dest = rmesa->vb.specptr;
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->red,	  v[0] );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->green, v[1] );
+    UNCLAMPED_FLOAT_TO_UBYTE( dest->blue,  v[2] );
+@@ -369,7 +433,9 @@
+ 
+ static void r200_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b )
+ {
+-   GLfloat *dest = vb.floatspecptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatspecptr;
+    dest[0] = UBYTE_TO_FLOAT(r);
+    dest[1] = UBYTE_TO_FLOAT(g);
+    dest[2] = UBYTE_TO_FLOAT(b);
+@@ -378,7 +444,9 @@
+ 
+ static void r200_SecondaryColor3ubvEXT_3f( const GLubyte *v )
+ {
+-   GLfloat *dest = vb.floatspecptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatspecptr;
+    dest[0] = UBYTE_TO_FLOAT(v[0]);
+    dest[1] = UBYTE_TO_FLOAT(v[1]);
+    dest[2] = UBYTE_TO_FLOAT(v[2]);
+@@ -387,7 +455,9 @@
+ 
+ static void r200_SecondaryColor3fEXT_3f( GLfloat r, GLfloat g, GLfloat b )
+ {
+-   GLfloat *dest = vb.floatspecptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatspecptr;
+    dest[0] = r;
+    dest[1] = g;
+    dest[2] = b;
+@@ -396,7 +466,9 @@
+ 
+ static void r200_SecondaryColor3fvEXT_3f( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.floatspecptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.floatspecptr;
+    dest[0] = v[0];
+    dest[1] = v[1];
+    dest[2] = v[2];
+@@ -409,7 +481,9 @@
+  */
+ static void r200_Normal3f( GLfloat n0, GLfloat n1, GLfloat n2 )
+ {
+-   GLfloat *dest = vb.normalptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.normalptr;
+    dest[0] = n0;
+    dest[1] = n1;
+    dest[2] = n2;
+@@ -417,7 +491,9 @@
+ 
+ static void r200_Normal3fv( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.normalptr;
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.normalptr;
+    dest[0] = v[0];
+    dest[1] = v[1];
+    dest[2] = v[2];
+@@ -428,28 +504,36 @@
+  */
+ static void r200_TexCoord1f( GLfloat s )
+ {
+-   GLfloat *dest = vb.texcoordptr[0];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[0];
+    dest[0] = s;
+    dest[1] = 0;
+ }
+ 
+ static void r200_TexCoord1fv( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.texcoordptr[0];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[0];
+    dest[0] = v[0];
+    dest[1] = 0;
+ }
+ 
+ static void r200_TexCoord2f( GLfloat s, GLfloat t )
+ {
+-   GLfloat *dest = vb.texcoordptr[0];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[0];
+    dest[0] = s;
+    dest[1] = t;
+ }
+ 
+ static void r200_TexCoord2fv( const GLfloat *v )
+ {
+-   GLfloat *dest = vb.texcoordptr[0];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[0];
+    dest[0] = v[0];
+    dest[1] = v[1];
+ }
+@@ -459,28 +543,36 @@
+  */
+ static void r200_MultiTexCoord1fARB( GLenum target, GLfloat s  )
+ {
+-   GLfloat *dest = vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
+    dest[0] = s;
+    dest[1] = 0;
+ }
+ 
+ static void r200_MultiTexCoord1fvARB( GLenum target, const GLfloat *v )
+ {
+-   GLfloat *dest = vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
+    dest[0] = v[0];
+    dest[1] = 0;
+ }
+ 
+ static void r200_MultiTexCoord2fARB( GLenum target, GLfloat s, GLfloat t )
+ {
+-   GLfloat *dest = vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
+    dest[0] = s;
+    dest[1] = t;
+ }
+ 
+ static void r200_MultiTexCoord2fvARB( GLenum target, const GLfloat *v )
+ {
+-   GLfloat *dest = vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
++   GET_CURRENT_CONTEXT(ctx);
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);
++   GLfloat *dest = rmesa->vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
+    dest[0] = v[0];
+    dest[1] = v[1];
+ }
+@@ -503,29 +595,30 @@
+ #define CHOOSE(FN, FNTYPE, MASK0, MASK1, ARGS1, ARGS2 )			\
+ static void choose_##FN ARGS1						\
+ {									\
+-   r200ContextPtr rmesa = R200_CONTEXT(vb.context);			\
++   GET_CURRENT_CONTEXT(ctx);						\
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
+    int key[2];								\
+    struct dynfn *dfn;							\
+ 									\
+-   key[0] = rmesa->vb.vtxfmt_0 & MASK0;				\
+-   key[1] = rmesa->vb.vtxfmt_1 & MASK1;				\
++   key[0] = rmesa->vb.vtxfmt_0 & MASK0;					\
++   key[1] = rmesa->vb.vtxfmt_1 & MASK1;					\
+ 									\
+    dfn = lookup( &rmesa->vb.dfn_cache.FN, key );			\
+    if (dfn == 0)							\
+-      dfn = rmesa->vb.codegen.FN( vb.context, key );			\
++      dfn = rmesa->vb.codegen.FN( ctx, key );				\
+    else if (R200_DEBUG & DEBUG_CODEGEN)					\
+       fprintf(stderr, "%s -- cached codegen\n", __FUNCTION__ );		\
+ 									\
+    if (dfn)								\
+-      vb.context->Exec->FN = (FNTYPE)(dfn->code);			\
++      ctx->Exec->FN = (FNTYPE)(dfn->code);				\
+    else {								\
+       if (R200_DEBUG & DEBUG_CODEGEN)					\
+ 	 fprintf(stderr, "%s -- generic version\n", __FUNCTION__ );	\
+-      vb.context->Exec->FN = r200_##FN;					\
++      ctx->Exec->FN = r200_##FN;					\
+    }									\
+ 									\
+-   vb.context->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;		\
+-   vb.context->Exec->FN ARGS2;						\
++   ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;			\
++   ctx->Exec->FN ARGS2;							\
+ }
+ 
+ 
+@@ -540,8 +633,8 @@
+ #define CHOOSE_COLOR(FN, FNTYPE, NR, MASK0, MASK1, ARGS1, ARGS2 )	\
+ static void choose_##FN ARGS1						\
+ {									\
+-   GLcontext *ctx = vb.context;						\
+-   r200ContextPtr rmesa = R200_CONTEXT(vb.context);			\
++   GET_CURRENT_CONTEXT(ctx);						\
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);			\
+    int key[2];								\
+    struct dynfn *dfn;							\
+ 									\
+@@ -597,7 +690,8 @@
+ #define CHOOSE_SECONDARY_COLOR(FN, FNTYPE, MASK0, MASK1, ARGS1, ARGS2 )	\
+ static void choose_##FN ARGS1						\
+ {									\
+-   r200ContextPtr rmesa = R200_CONTEXT(vb.context);			\
++   GET_CURRENT_CONTEXT(ctx);						\
++   r200ContextPtr rmesa = R200_CONTEXT(ctx);			\
+    int key[2];								\
+    struct dynfn *dfn;							\
+ 									\
+@@ -606,21 +700,21 @@
+ 									\
+    dfn = lookup( &rmesa->vb.dfn_cache.FN, key );			\
+    if (dfn == 0)							\
+-      dfn = rmesa->vb.codegen.FN( vb.context, key );			\
++      dfn = rmesa->vb.codegen.FN( ctx, key );			\
+    else  if (R200_DEBUG & DEBUG_CODEGEN)				\
+       fprintf(stderr, "%s -- cached version\n", __FUNCTION__ );		\
+ 									\
+    if (dfn)								\
+-      vb.context->Exec->FN = (FNTYPE)(dfn->code);			\
++      ctx->Exec->FN = (FNTYPE)(dfn->code);			\
+    else {								\
+       if (R200_DEBUG & DEBUG_CODEGEN)					\
+          fprintf(stderr, "%s -- generic version\n", __FUNCTION__ );	\
+-      vb.context->Exec->FN = (VTX_COLOR(rmesa->vb.vtxfmt_0,1) == R200_VTX_PK_RGBA) \
++      ctx->Exec->FN = (VTX_COLOR(rmesa->vb.vtxfmt_0,1) == R200_VTX_PK_RGBA) \
+ 	  ? r200_##FN##_ub : r200_##FN##_3f;				\
+    }									\
+ 									\
+-   vb.context->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;		\
+-   vb.context->Exec->FN ARGS2;						\
++   ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;		\
++   ctx->Exec->FN ARGS2;						\
+ }
+ 
+ 
+diff -ur xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_sse.c~ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_sse.c
+--- xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_sse.c~	2002-10-30 13:51:53.000000000 +0100
++++ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_sse.c	2004-10-14 15:18:52.753255699 +0200
+@@ -68,7 +68,7 @@
+ 
+    dfn->code = ALIGN_MALLOC( sizeof(temp), 16 );
+    memcpy (dfn->code, temp, sizeof(temp));
+-   FIXUP(dfn->code, 5, 0x0, (int)vb.normalptr); 
++   FIXUP(dfn->code, 5, 0x0, (int)rmesa->vb.normalptr); 
+    return dfn;
+ }
+ 
+diff -ur xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_x86.c~ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_x86.c
+--- xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_x86.c~	2002-12-16 17:18:56.000000000 +0100
++++ xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt_x86.c	2004-10-14 15:18:52.754255532 +0200
+@@ -77,43 +77,43 @@
+ 
+    if (R200_DEBUG & DEBUG_CODEGEN)
+       fprintf(stderr, "%s 0x%08x 0x%08x %d\n", __FUNCTION__, 
+-	      key[0], key[1], vb.vertex_size );
++	      key[0], key[1], rmesa->vb.vertex_size );
+ 
+-   switch (vb.vertex_size) {
++   switch (rmesa->vb.vertex_size) {
+    case 4: {
+ 
+       DFN ( _x86_Vertex3f_4, rmesa->vb.dfn_cache.Vertex3f );
+-      FIXUP(dfn->code, 2, 0x0, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 25, 0x0, (int)&vb.vertex[3]);
+-      FIXUP(dfn->code, 36, 0x0, (int)&vb.counter);
+-      FIXUP(dfn->code, 46, 0x0, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 51, 0x0, (int)&vb.counter);
+-      FIXUP(dfn->code, 60, 0x0, (int)&vb.notify);
++      FIXUP(dfn->code, 2, 0x0, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 25, 0x0, (int)&rmesa->vb.vertex[3]);
++      FIXUP(dfn->code, 36, 0x0, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 46, 0x0, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 51, 0x0, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 60, 0x0, (int)&rmesa->vb.notify);
+       break;
+    }
+    case 6: {
+ 
+       DFN ( _x86_Vertex3f_6, rmesa->vb.dfn_cache.Vertex3f );
+-      FIXUP(dfn->code, 3, 0x0, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 28, 0x0, (int)&vb.vertex[3]);
+-      FIXUP(dfn->code, 34, 0x0, (int)&vb.vertex[4]);
+-      FIXUP(dfn->code, 40, 0x0, (int)&vb.vertex[5]);
+-      FIXUP(dfn->code, 57, 0x0, (int)&vb.counter);
+-      FIXUP(dfn->code, 63, 0x0, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 70, 0x0, (int)&vb.counter);
+-      FIXUP(dfn->code, 79, 0x0, (int)&vb.notify);
++      FIXUP(dfn->code, 3, 0x0, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 28, 0x0, (int)&rmesa->vb.vertex[3]);
++      FIXUP(dfn->code, 34, 0x0, (int)&rmesa->vb.vertex[4]);
++      FIXUP(dfn->code, 40, 0x0, (int)&rmesa->vb.vertex[5]);
++      FIXUP(dfn->code, 57, 0x0, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 63, 0x0, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 70, 0x0, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 79, 0x0, (int)&rmesa->vb.notify);
+       break;
+    }
+    default: {
+ 
+       DFN ( _x86_Vertex3f, rmesa->vb.dfn_cache.Vertex3f );
+-      FIXUP(dfn->code, 3, 0x0, (int)&vb.vertex[3]);
+-      FIXUP(dfn->code, 9, 0x0, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 37, 0x0, vb.vertex_size-3);
+-      FIXUP(dfn->code, 44, 0x0, (int)&vb.counter);
+-      FIXUP(dfn->code, 50, 0x0, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 56, 0x0, (int)&vb.counter);
+-      FIXUP(dfn->code, 67, 0x0, (int)&vb.notify);
++      FIXUP(dfn->code, 3, 0x0, (int)&rmesa->vb.vertex[3]);
++      FIXUP(dfn->code, 9, 0x0, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 37, 0x0, rmesa->vb.vertex_size-3);
++      FIXUP(dfn->code, 44, 0x0, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 50, 0x0, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 56, 0x0, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 67, 0x0, (int)&rmesa->vb.notify);
+    break;
+    }
+    }
+@@ -130,20 +130,20 @@
+ 
+    if (R200_DEBUG & DEBUG_CODEGEN)
+       fprintf(stderr, "%s 0x%08x 0x%08x %d\n", __FUNCTION__, 
+-	      key[0], key[1], vb.vertex_size );
++	      key[0], key[1], rmesa->vb.vertex_size );
+ 
+-   switch (vb.vertex_size) {
++   switch (rmesa->vb.vertex_size) {
+    case 6: {
+ 
+       DFN ( _x86_Vertex3fv_6, rmesa->vb.dfn_cache.Vertex3fv );
+-      FIXUP(dfn->code, 1, 0x00000000, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 27, 0x0000001c, (int)&vb.vertex[3]);
+-      FIXUP(dfn->code, 33, 0x00000020, (int)&vb.vertex[4]);
+-      FIXUP(dfn->code, 45, 0x00000024, (int)&vb.vertex[5]);
+-      FIXUP(dfn->code, 56, 0x00000000, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 61, 0x00000004, (int)&vb.counter);
+-      FIXUP(dfn->code, 67, 0x00000004, (int)&vb.counter);
+-      FIXUP(dfn->code, 76, 0x00000008, (int)&vb.notify);
++      FIXUP(dfn->code, 1, 0x00000000, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 27, 0x0000001c, (int)&rmesa->vb.vertex[3]);
++      FIXUP(dfn->code, 33, 0x00000020, (int)&rmesa->vb.vertex[4]);
++      FIXUP(dfn->code, 45, 0x00000024, (int)&rmesa->vb.vertex[5]);
++      FIXUP(dfn->code, 56, 0x00000000, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 61, 0x00000004, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 67, 0x00000004, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 76, 0x00000008, (int)&rmesa->vb.notify);
+       break;
+    }
+    
+@@ -151,16 +151,16 @@
+    case 8: {
+ 
+       DFN ( _x86_Vertex3fv_8, rmesa->vb.dfn_cache.Vertex3fv );
+-      FIXUP(dfn->code, 1, 0x00000000, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 27, 0x0000001c, (int)&vb.vertex[3]);
+-      FIXUP(dfn->code, 33, 0x00000020, (int)&vb.vertex[4]);
+-      FIXUP(dfn->code, 45, 0x0000001c, (int)&vb.vertex[5]);
+-      FIXUP(dfn->code, 51, 0x00000020, (int)&vb.vertex[6]);
+-      FIXUP(dfn->code, 63, 0x00000024, (int)&vb.vertex[7]);
+-      FIXUP(dfn->code, 74, 0x00000000, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 79, 0x00000004, (int)&vb.counter);
+-      FIXUP(dfn->code, 85, 0x00000004, (int)&vb.counter);
+-      FIXUP(dfn->code, 94, 0x00000008, (int)&vb.notify);
++      FIXUP(dfn->code, 1, 0x00000000, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 27, 0x0000001c, (int)&rmesa->vb.vertex[3]);
++      FIXUP(dfn->code, 33, 0x00000020, (int)&rmesa->vb.vertex[4]);
++      FIXUP(dfn->code, 45, 0x0000001c, (int)&rmesa->vb.vertex[5]);
++      FIXUP(dfn->code, 51, 0x00000020, (int)&rmesa->vb.vertex[6]);
++      FIXUP(dfn->code, 63, 0x00000024, (int)&rmesa->vb.vertex[7]);
++      FIXUP(dfn->code, 74, 0x00000000, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 79, 0x00000004, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 85, 0x00000004, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 94, 0x00000008, (int)&rmesa->vb.notify);
+       break;
+    }
+    
+@@ -169,13 +169,13 @@
+    default: {
+ 
+       DFN ( _x86_Vertex3fv, rmesa->vb.dfn_cache.Vertex3fv );
+-      FIXUP(dfn->code, 8, 0x01010101, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 32, 0x00000006, vb.vertex_size-3);
+-      FIXUP(dfn->code, 37, 0x00000058, (int)&vb.vertex[3]);
+-      FIXUP(dfn->code, 45, 0x01010101, (int)&vb.dmaptr);
+-      FIXUP(dfn->code, 50, 0x02020202, (int)&vb.counter);
+-      FIXUP(dfn->code, 58, 0x02020202, (int)&vb.counter);
+-      FIXUP(dfn->code, 67, 0x0, (int)&vb.notify);
++      FIXUP(dfn->code, 8, 0x01010101, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 32, 0x00000006, rmesa->vb.vertex_size-3);
++      FIXUP(dfn->code, 37, 0x00000058, (int)&rmesa->vb.vertex[3]);
++      FIXUP(dfn->code, 45, 0x01010101, (int)&rmesa->vb.dmaptr);
++      FIXUP(dfn->code, 50, 0x02020202, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 58, 0x02020202, (int)&rmesa->vb.counter);
++      FIXUP(dfn->code, 67, 0x0, (int)&rmesa->vb.notify);
+    break;
+    }
+    }
+@@ -194,9 +194,9 @@
+ 
+    DFN ( _x86_Normal3fv, rmesa->vb.dfn_cache.Normal3fv );
+ 
+-   FIXUP2(dfn->code, i, 0x0, (int)vb.normalptr); 
+-   FIXUP2(dfn->code, i, 0x4, 4+(int)vb.normalptr); 
+-   FIXUP2(dfn->code, i, 0x8, 8+(int)vb.normalptr); 
++   FIXUP2(dfn->code, i, 0x0, (int)rmesa->vb.normalptr); 
++   FIXUP2(dfn->code, i, 0x4, 4+(int)rmesa->vb.normalptr); 
++   FIXUP2(dfn->code, i, 0x8, 8+(int)rmesa->vb.normalptr); 
+    fprintf(stderr, "%s done\n", __FUNCTION__);
+    return dfn;
+ }
+@@ -210,7 +210,7 @@
+       fprintf(stderr, "%s 0x%08x\n", __FUNCTION__, key[0] );
+ 
+    DFN ( _x86_Normal3f, rmesa->vb.dfn_cache.Normal3f );
+-   FIXUP(dfn->code, 1, 0x12345678, (int)vb.normalptr); 
++   FIXUP(dfn->code, 1, 0x12345678, (int)rmesa->vb.normalptr); 
+    return dfn;
+ }
+ 
+@@ -225,17 +225,17 @@
+ 
+    if (VTX_COLOR(key[0],0) == R200_VTX_PK_RGBA) {
+       DFN ( _x86_Color4ubv_ub, rmesa->vb.dfn_cache.Color4ubv);
+-      FIXUP(dfn->code, 5, 0x12345678, (int)vb.colorptr); 
++      FIXUP(dfn->code, 5, 0x12345678, (int)rmesa->vb.colorptr); 
+       return dfn;
+    } 
+    else {
+ 
+       DFN ( _x86_Color4ubv_4f, rmesa->vb.dfn_cache.Color4ubv);
+       FIXUP(dfn->code, 2, 0x00000000, (int)_mesa_ubyte_to_float_color_tab); 
+-      FIXUP(dfn->code, 27, 0xdeadbeaf, (int)vb.floatcolorptr); 
+-      FIXUP(dfn->code, 33, 0xdeadbeaf, (int)vb.floatcolorptr+4); 
+-      FIXUP(dfn->code, 55, 0xdeadbeaf, (int)vb.floatcolorptr+8); 
+-      FIXUP(dfn->code, 61, 0xdeadbeaf, (int)vb.floatcolorptr+12); 
++      FIXUP(dfn->code, 27, 0xdeadbeaf, (int)rmesa->vb.floatcolorptr); 
++      FIXUP(dfn->code, 33, 0xdeadbeaf, (int)rmesa->vb.floatcolorptr+4); 
++      FIXUP(dfn->code, 55, 0xdeadbeaf, (int)rmesa->vb.floatcolorptr+8); 
++      FIXUP(dfn->code, 61, 0xdeadbeaf, (int)rmesa->vb.floatcolorptr+12); 
+       return dfn;
+    }
+ }
+@@ -250,10 +250,10 @@
+       r200ContextPtr rmesa = R200_CONTEXT(ctx);
+ 
+       DFN ( _x86_Color4ub_ub, rmesa->vb.dfn_cache.Color4ub );
+-      FIXUP(dfn->code, 18, 0x0, (int)vb.colorptr); 
+-      FIXUP(dfn->code, 24, 0x0, (int)vb.colorptr+1); 
+-      FIXUP(dfn->code, 30, 0x0, (int)vb.colorptr+2); 
+-      FIXUP(dfn->code, 36, 0x0, (int)vb.colorptr+3); 
++      FIXUP(dfn->code, 18, 0x0, (int)rmesa->vb.colorptr); 
++      FIXUP(dfn->code, 24, 0x0, (int)rmesa->vb.colorptr+1); 
++      FIXUP(dfn->code, 30, 0x0, (int)rmesa->vb.colorptr+2); 
++      FIXUP(dfn->code, 36, 0x0, (int)rmesa->vb.colorptr+3); 
+       return dfn;
+    }
+    else
+@@ -274,7 +274,7 @@
+ 	 fprintf(stderr, "%s 0x%08x\n", __FUNCTION__, key[0] );
+ 
+       DFN ( _x86_Color3fv_3f, rmesa->vb.dfn_cache.Color3fv );
+-      FIXUP(dfn->code, 5, 0x0, (int)vb.floatcolorptr); 
++      FIXUP(dfn->code, 5, 0x0, (int)rmesa->vb.floatcolorptr); 
+       return dfn;
+    }
+ }
+@@ -292,7 +292,7 @@
+ 	 fprintf(stderr, "%s 0x%08x\n", __FUNCTION__, key[0] );
+ 
+       DFN ( _x86_Color3f_3f, rmesa->vb.dfn_cache.Color3f );
+-      FIXUP(dfn->code, 1, 0x12345678, (int)vb.floatcolorptr); 
++      FIXUP(dfn->code, 1, 0x12345678, (int)rmesa->vb.floatcolorptr); 
+       return dfn;
+    }
+ }
+@@ -309,7 +309,7 @@
+       fprintf(stderr, "%s 0x%08x 0x%08x\n", __FUNCTION__, key[0], key[1] );
+ 
+    DFN ( _x86_TexCoord2fv, rmesa->vb.dfn_cache.TexCoord2fv );
+-   FIXUP(dfn->code, 5, 0x12345678, (int)vb.texcoordptr[0]); 
++   FIXUP(dfn->code, 5, 0x12345678, (int)rmesa->vb.texcoordptr[0]); 
+    return dfn;
+ }
+ 
+@@ -323,7 +323,7 @@
+       fprintf(stderr, "%s 0x%08x 0x%08x\n", __FUNCTION__, key[0], key[1] );
+ 
+    DFN ( _x86_TexCoord2f, rmesa->vb.dfn_cache.TexCoord2f );
+-   FIXUP(dfn->code, 1, 0x12345678, (int)vb.texcoordptr[0]); 
++   FIXUP(dfn->code, 1, 0x12345678, (int)rmesa->vb.texcoordptr[0]); 
+    return dfn;
+ }
+ 
+@@ -362,13 +362,13 @@
+    if (R200_DEBUG & DEBUG_CODEGEN)
+       fprintf(stderr, "%s 0x%08x 0x%08x\n", __FUNCTION__, key[0], key[1] );
+ 
+-   if (vb.texcoordptr[1] == vb.texcoordptr[0]+4) {
++   if (rmesa->vb.texcoordptr[1] == rmesa->vb.texcoordptr[0]+4) {
+       DFN ( _x86_MultiTexCoord2fvARB, rmesa->vb.dfn_cache.MultiTexCoord2fvARB );
+-      FIXUP(dfn->code, 26, 0xdeadbeef, (int)vb.texcoordptr[0]);	
+-      FIXUP(dfn->code, 32, 0xdeadbeef, (int)vb.texcoordptr[0]+4);
++      FIXUP(dfn->code, 26, 0xdeadbeef, (int)rmesa->vb.texcoordptr[0]);	
++      FIXUP(dfn->code, 32, 0xdeadbeef, (int)rmesa->vb.texcoordptr[0]+4);
+    } else {
+       DFN ( _x86_MultiTexCoord2fvARB_2, rmesa->vb.dfn_cache.MultiTexCoord2fvARB );
+-      FIXUP(dfn->code, 19, 0x0, (int)vb.texcoordptr);
++      FIXUP(dfn->code, 19, 0x0, (int)rmesa->vb.texcoordptr);
+    }
+    return dfn;
+ }
+@@ -407,17 +407,17 @@
+    if (R200_DEBUG & DEBUG_CODEGEN)
+       fprintf(stderr, "%s 0x%08x 0x%08x\n", __FUNCTION__, key[0], key[1] );
+ 
+-   if (vb.texcoordptr[1] == vb.texcoordptr[0]+4) {
++   if (rmesa->vb.texcoordptr[1] == rmesa->vb.texcoordptr[0]+4) {
+       DFN ( _x86_MultiTexCoord2fARB, rmesa->vb.dfn_cache.MultiTexCoord2fARB );
+-      FIXUP(dfn->code, 25, 0xdeadbeef, (int)vb.texcoordptr[0]); 
+-      FIXUP(dfn->code, 31, 0xdeadbeef, (int)vb.texcoordptr[0]+4); 
++      FIXUP(dfn->code, 25, 0xdeadbeef, (int)rmesa->vb.texcoordptr[0]); 
++      FIXUP(dfn->code, 31, 0xdeadbeef, (int)rmesa->vb.texcoordptr[0]+4); 
+    }
+    else {
+       /* Note: this might get generated multiple times, even though the
+        * actual emitted code is the same.
+        */
+       DFN ( _x86_MultiTexCoord2fARB_2, rmesa->vb.dfn_cache.MultiTexCoord2fARB );
+-      FIXUP(dfn->code, 23, 0x0, (int)vb.texcoordptr); 
++      FIXUP(dfn->code, 23, 0x0, (int)rmesa->vb.texcoordptr); 
+    }      
+    return dfn;
+ }


Property changes on: trunk/debian/patches/036_fix_r200_DRI_driver_assertion_failures.diff
___________________________________________________________________
Name: svn:keywords
   + Id



Reply to: