Support for swappable t&l modules, including an example one in the FX
driver (enable with FX_ALLOW_VTXFMT=t).
diff --git a/src/mesa/Makefile.X11 b/src/mesa/Makefile.X11
index acec47b..84384f4 100644
--- a/src/mesa/Makefile.X11
+++ b/src/mesa/Makefile.X11
@@ -1,4 +1,4 @@
-# $Id: Makefile.X11,v 1.33 2000/11/16 21:05:34 keithw Exp $
+# $Id: Makefile.X11,v 1.34 2000/11/24 10:25:05 keithw Exp $
 
 # Mesa 3-D graphics library
 # Version:  3.5
@@ -21,6 +21,7 @@
 
 
 CORE_SOURCES = \
+	tnl/t_vtxfmt.c \
 	tnl/t_bbox.c \
 	tnl/t_clip.c \
 	tnl/t_context.c \
@@ -31,7 +32,6 @@
 	tnl/t_fog.c \
 	tnl/t_light.c \
 	tnl/t_pipeline.c \
-	tnl/t_rect.c \
 	tnl/t_shade.c \
 	tnl/t_stages.c \
 	tnl/t_texture.c \
@@ -39,10 +39,11 @@
 	tnl/t_varray.c \
 	tnl/t_vb.c \
 	tnl/t_vbcull.c \
-	tnl/t_vbfill.c \
 	tnl/t_vbindirect.c \
 	tnl/t_vbrender.c \
 	tnl/t_vbxform.c \
+	api_loopback.c \
+	api_noop.c \
 	accum.c \
 	alpha.c \
 	attrib.c \
@@ -90,7 +91,6 @@
 	polygon.c \
 	rastpos.c \
 	readpix.c \
-	rect.c \
 	scissor.c \
 	state.c \
 	stencil.c \
@@ -100,6 +100,7 @@
 	texture.c \
 	texutil.c \
 	varray.c \
+	vtxfmt.c \
 	winpos.c \
 	X86/x86.c \
 	X86/common_x86.c \
@@ -147,6 +148,8 @@
 
 
 DRIVER_SOURCES = \
+	FX/fxvtxfmt.c \
+	FX/fxvtxprims.c \
 	FX/fxapi.c \
 	FX/fxdd.c \
 	FX/fxddspan.c \
diff --git a/src/mesa/drivers/glide/fxdd.c b/src/mesa/drivers/glide/fxdd.c
index fc375f0..c722956 100644
--- a/src/mesa/drivers/glide/fxdd.c
+++ b/src/mesa/drivers/glide/fxdd.c
@@ -710,13 +710,11 @@
       fxMesa->currentFB=GR_BUFFER_FRONTBUFFER;
       FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
    }
-
-   fxMesa->state 	= NULL;
-   fxMesa->fogTable 	= NULL;
-
-   fxMesa->state 	= malloc(FX_grGetInteger(FX_GLIDE_STATE_SIZE));
-   fxMesa->fogTable 	= malloc(FX_grGetInteger(FX_FOG_TABLE_ENTRIES)*sizeof(GrFog_t));
-
+    
+   fxMesa->state = malloc(FX_grGetInteger(FX_GLIDE_STATE_SIZE));
+   fxMesa->fogTable = malloc(FX_grGetInteger(FX_FOG_TABLE_ENTRIES) * 
+			     sizeof(GrFog_t));
+  
    if (!fxMesa->state || !fxMesa->fogTable) {
       if (fxMesa->state) free(fxMesa->state);
       if (fxMesa->fogTable) free(fxMesa->fogTable);
@@ -756,7 +754,8 @@
    _swrast_allow_vertex_fog( fxMesa->glCtx, GL_FALSE );
    _swrast_allow_pixel_fog( fxMesa->glCtx, GL_TRUE );
 
-   fxDDInitExtensions(fxMesa->glCtx);
+   fxDDInitExtensions(fxMesa->glCtx);  
+   fxDDInitVtxfmt(fxMesa->glCtx);
 
    FX_grGlideGetState((GrState*)fxMesa->state);
 
@@ -902,41 +901,75 @@
   return GL_TRUE;
 }
 
+static void update_texture_scales( GLcontext *ctx )
+{
+   fxMesaContext fxMesa = FX_CONTEXT(ctx);
+   struct gl_texture_unit *t0 = &ctx->Texture.Unit[fxMesa->tmu_source[0]];
+   struct gl_texture_unit *t1 = &ctx->Texture.Unit[fxMesa->tmu_source[1]];
+     
+   if (t0 && t0->_Current && FX_TEXTURE_DATA(t0)) {
+      fxMesa->s0scale = FX_TEXTURE_DATA(t0)->sScale;
+      fxMesa->t0scale = FX_TEXTURE_DATA(t0)->tScale;
+      fxMesa->inv_s0scale = 1.0 / fxMesa->s0scale;
+      fxMesa->inv_t0scale = 1.0 / fxMesa->t0scale;
+   }
+   
+   if (t1 && t1->_Current && FX_TEXTURE_DATA(t1)) {
+      fxMesa->s1scale = FX_TEXTURE_DATA(t1)->sScale;
+      fxMesa->t1scale = FX_TEXTURE_DATA(t1)->tScale;
+      fxMesa->inv_s1scale = 1.0 / fxMesa->s1scale;
+      fxMesa->inv_t1scale = 1.0 / fxMesa->t1scale;
+   }
+}
 
 static void fxDDUpdateDDPointers(GLcontext *ctx)
 {
-  GLuint new_state = ctx->NewState;
+   fxMesaContext fxMesa = FX_CONTEXT(ctx);
+   GLuint new_state = ctx->NewState;
 
-  _swrast_InvalidateState( ctx, new_state );
-  _swsetup_InvalidateState( ctx, new_state );
-  _tnl_InvalidateState( ctx, new_state );
+   _swrast_InvalidateState( ctx, new_state );
+   _swsetup_InvalidateState( ctx, new_state );
+   _tnl_InvalidateState( ctx, new_state );
 
-  /* Recalculate fog table on projection matrix changes.  This used to
-   * be triggered by the NearFar callback.
-   */
-  if (new_state & _NEW_PROJECTION) {
-     FX_CONTEXT(ctx)->new_state |= FX_NEW_FOG;
-     ctx->Driver.RenderStart = fxSetupFXUnits;
-  }
+   /* Recalculate fog table on projection matrix changes.  This used to
+    * be triggered by the NearFar callback.
+    */
+   if (new_state & _NEW_PROJECTION) 
+      fxMesa->new_state |= FX_NEW_FOG;
 
-  if (new_state & (_FX_NEW_IS_IN_HARDWARE |
-		   _FX_NEW_RENDERSTATE |
-		   _FX_NEW_SETUP_FUNCTION))
-  {
-    fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
+   if (new_state & (_FX_NEW_IS_IN_HARDWARE |
+		    _FX_NEW_RENDERSTATE |
+		    _FX_NEW_SETUP_FUNCTION | 
+		    _NEW_TEXTURE))
+   {
+      fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
 
-    if (new_state & _FX_NEW_IS_IN_HARDWARE)
-      fxMesa->is_in_hardware = fxIsInHardware(ctx);
+      if (new_state & _FX_NEW_IS_IN_HARDWARE)
+	 fxMesa->is_in_hardware = fxIsInHardware(ctx);
+    
+      if (fxMesa->new_state)
+	 fxSetupFXUnits(ctx);
 
-    if (fxMesa->new_state)
-      fxSetupFXUnits(ctx);
+      if (new_state & _FX_NEW_RENDERSTATE) 
+	 fxDDChooseRenderState( ctx );
+    
+      if (new_state & _FX_NEW_SETUP_FUNCTION)
+	 ctx->Driver.RasterSetup = fxDDChooseSetupFunction(ctx);      
 
-    if (new_state & _FX_NEW_RENDERSTATE)
-      fxDDChooseRenderState( ctx );
+      if (new_state & _NEW_TEXTURE) 
+	 update_texture_scales( ctx );
 
-    if (new_state & _FX_NEW_SETUP_FUNCTION)
-      ctx->Driver.RasterSetup = fxDDChooseSetupFunction(ctx);
-  }
+   }
+
+   if (fxMesa->allow_vfmt) {
+      if (new_state & _NEW_LIGHT)
+	 fx_update_lighting( ctx );
+
+      if (new_state & _FX_NEW_VTXFMT)
+	 fxDDCheckVtxfmt( ctx );
+      else if (fxMesa->vtxfmt_fallback_count > 1)
+	 fxMesa->vtxfmt_fallback_count--;
+   }
 }
 
 
@@ -971,7 +1004,7 @@
   ctx->Driver.Finish=fxDDFinish;
   ctx->Driver.Flush=NULL;
 
-  ctx->Driver.RenderStart=NULL;
+  ctx->Driver.RenderStart=fxSetupFXUnits;
   ctx->Driver.RenderFinish=_swrast_flush;
 
   ctx->Driver.TexImage2D = fxDDTexImage2D;
@@ -1013,6 +1046,7 @@
  * Need this to provide at least one external definition.
  */
 
+extern int gl_fx_dummy_function_dd(void);
 int gl_fx_dummy_function_dd(void)
 {
   return 0;
diff --git a/src/mesa/drivers/glide/fxddspan.c b/src/mesa/drivers/glide/fxddspan.c
index 7eb8591..fceeb0e 100644
--- a/src/mesa/drivers/glide/fxddspan.c
+++ b/src/mesa/drivers/glide/fxddspan.c
@@ -565,6 +565,7 @@
  * Need this to provide at least one external definition.
  */
 
+extern int gl_fx_dummy_function_span(void);
 int gl_fx_dummy_function_span(void)
 {
   return 0;
diff --git a/src/mesa/drivers/glide/fxddtex.c b/src/mesa/drivers/glide/fxddtex.c
index 85d2271..f7beaf7 100644
--- a/src/mesa/drivers/glide/fxddtex.c
+++ b/src/mesa/drivers/glide/fxddtex.c
@@ -99,7 +99,6 @@
 
   ti->validated=GL_FALSE;
   fxMesa->new_state|=FX_NEW_TEXTURING;
-  ctx->Driver.RenderStart = fxSetupFXUnits;
 }
 
 static tfxTexInfo *fxAllocTexObjData(fxMesaContext fxMesa)
@@ -159,7 +158,6 @@
   ti->lastTimeUsed=fxMesa->texBindNumber;
 
   fxMesa->new_state|=FX_NEW_TEXTURING;
-  ctx->Driver.RenderStart = fxSetupFXUnits;
 }
 
 void fxDDTexEnv(GLcontext *ctx, GLenum target, GLenum pname, const GLfloat *param)
@@ -184,7 +182,6 @@
    }
 
    fxMesa->new_state|=FX_NEW_TEXTURING;
-   ctx->Driver.RenderStart = fxSetupFXUnits;
 }
 
 void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj,
@@ -282,7 +279,6 @@
       break;
     }
     fxMesa->new_state|=FX_NEW_TEXTURING;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
     break;
 
   case GL_TEXTURE_WRAP_T:
@@ -297,7 +293,6 @@
       break;
     }
     fxMesa->new_state|=FX_NEW_TEXTURING;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
     break;
 
   case GL_TEXTURE_BORDER_COLOR:
@@ -439,7 +434,6 @@
     }
     convertPalette(fxMesa->glbPalette.data, &ctx->Texture.Palette);
     fxMesa->new_state |= FX_NEW_TEXTURING;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 }
 
@@ -1191,6 +1185,7 @@
  * Need this to provide at least one external definition.
  */
 
+extern int gl_fx_dummy_function_ddtex(void);
 int gl_fx_dummy_function_ddtex(void)
 {
   return 0;
diff --git a/src/mesa/drivers/glide/fxdrv.h b/src/mesa/drivers/glide/fxdrv.h
index f708a27..4c84475 100644
--- a/src/mesa/drivers/glide/fxdrv.h
+++ b/src/mesa/drivers/glide/fxdrv.h
@@ -68,18 +68,6 @@
 
 #include "math/m_vector.h"
 
-/* use gl/gl.h GLAPI/GLAPIENTRY/GLCALLBACK in place of
- * WINGDIAPI/APIENTRY/CALLBACK, these are defined in mesa gl/gl.h -
- * tjump@spgs.com
- */
-
-
-
-extern void fx_sanity_triangle( GrVertex *, GrVertex *, GrVertex * );
-#if defined(MESA_DEBUG) && 0
-#define grDrawTriangle fx_sanity_triangle
-#endif
-
 
 /* Define some shorter names for these things.
  */
@@ -99,18 +87,6 @@
 #define T1COORD  GR_VERTEX_TOW_TMU1_OFFSET
 
 
-
-#define CLIP_XCOORD 0		/* normal place */
-#define CLIP_YCOROD 1		/* normal place */
-#define CLIP_ZCOORD 2		/* GR_VERTEX_Z_OFFSET */
-#define CLIP_WCOORD 3		/* GR_VERTEX_R_OFFSET */
-#define CLIP_GCOORD 4		/* normal place */
-#define CLIP_BCOORD 5		/* normal place */
-#define CLIP_RCOORD 6		/* GR_VERTEX_OOZ_OFFSET */
-#define CLIP_ACOORD 7		/* normal place */
-
-
-
 /* Should have size == 16 * sizeof(float).
  */
 typedef union {
@@ -119,6 +95,26 @@
   GLuint ui[16];
 } fxVertex;
 
+/* Used in the fxvtxfmt t&l engine.
+ */
+typedef struct {
+   GrVertex v;
+   GLfloat clip[4];
+   GLfloat win[4];	
+   GLfloat texcoord[2][2];
+   GLubyte mask;
+   GLfloat normal[3];		/* for replay & fallback */
+} fxClipVertex;
+
+
+
+typedef void (*vfmt_project_func)( GLcontext *ctx, fxClipVertex *v );
+typedef void (*vfmt_interpolate_func)( GLfloat t, 
+				       fxClipVertex *O,
+				       const fxClipVertex *I, 
+				       const fxClipVertex *J );
+
+
 
 #if defined(FXMESA_USE_ARGB)
 #define FXCOLOR4( c ) (      \
@@ -141,16 +137,14 @@
 
 
 
-/* Mergable items first
+/* fastpath/vtxfmt flags first
  */
-#define SETUP_RGBA 0x1
-#define SETUP_TMU0 0x2
-#define SETUP_TMU1 0x4
+#define SETUP_TMU0 0x1
+#define SETUP_TMU1 0x2
+#define SETUP_RGBA 0x4
 #define SETUP_XYZW 0x8
 #define MAX_SETUP  0x10
 
-#define MAX_MERGABLE 0x8
-
 
 #define FX_NUM_TMU 2
 
@@ -199,7 +193,6 @@
 #define FX_UM_ALPHA_ITERATED        0x04000000
 #define FX_UM_ALPHA_CONSTANT        0x08000000
 
-typedef void (*tfxRenderVBFunc)(GLcontext *);
 
 /*
   Memory range from startAddr to endAddr-1
@@ -355,6 +348,15 @@
 			        _NEW_COLOR)	\
 
 
+/* Covers the state referenced in fxDDCheckVtxfmt.
+ */
+#define _FX_NEW_VTXFMT (_NEW_TEXTURE |		\
+			_NEW_TEXTURE_MATRIX |	\
+			_NEW_TRANSFORM |	\
+			_NEW_LIGHT |		\
+			_FX_NEW_RENDERSTATE)
+			
+
 /* These lookup table are used to extract RGB values in [0,255] from
  * 16-bit pixel values.
  */
@@ -369,101 +371,127 @@
 typedef void (*fxRenderEltsFunc)( struct vertex_buffer * );
 
 struct tfxMesaContext {
-  GuTexPalette glbPalette;
+   GuTexPalette glbPalette;
 
-  GLcontext *glCtx;              /* the core Mesa context */
-  GLvisual *glVis;               /* describes the color buffer */
-  GLframebuffer *glBuffer;       /* the ancillary buffers */
+   GLcontext *glCtx;              /* the core Mesa context */
+   GLvisual *glVis;               /* describes the color buffer */
+   GLframebuffer *glBuffer;       /* the ancillary buffers */
 
-  GLint board;                   /* the board used for this context */
-  GLint width, height;           /* size of color buffer */
+   GLint board;                   /* the board used for this context */
+   GLint width, height;           /* size of color buffer */
 
-  GrBuffer_t currentFB;
+   GrBuffer_t currentFB;
 
-  GLboolean bgrOrder;
-  GrColor_t color;
-  GrColor_t clearC;
-  GrAlpha_t clearA;
-  GLuint constColor;
-  GrCullMode_t cullMode;
+   GLboolean bgrOrder;
+   GrColor_t color;
+   GrColor_t clearC;
+   GrAlpha_t clearA;
+   GLuint constColor;
+   GrCullMode_t cullMode;
 
-  tfxUnitsState unitsState;
-  tfxUnitsState restoreUnitsState; /* saved during multipass */
+   tfxUnitsState unitsState;
+   tfxUnitsState restoreUnitsState; /* saved during multipass */
 
-  GLuint tmu_source[FX_NUM_TMU];
-  GLuint tex_dest[MAX_TEXTURE_UNITS];
-  GLuint render_index;
-  GLuint setupindex;
-  GLuint setupdone;
-  GLuint stw_hint_state;		/* for grHints */
-  GLuint is_in_hardware;
-  GLuint new_state;
-  GLuint using_fast_path, passes, multipass;
+   GLuint tmu_source[FX_NUM_TMU];
+   GLuint tex_dest[MAX_TEXTURE_UNITS];
+   GLuint render_index;
+   GLuint setupindex;
+   GLuint setupdone;
+   GLuint stw_hint_state;		/* for grHints */
+   GLuint is_in_hardware;
+   GLuint new_state;   
+   GLuint using_fast_path, passes, multipass;
 
-  /* Texture Memory Manager Data */
+   /* Texture Memory Manager Data */
 
-  GLuint texBindNumber;
-  GLint tmuSrc;
-  GLuint lastUnitsMode;
-  GLuint freeTexMem[FX_NUM_TMU];
-  MemRange *tmPool;
-  MemRange *tmFree[FX_NUM_TMU];
+   GLuint texBindNumber;
+   GLint tmuSrc;
+   GLuint lastUnitsMode;
+   GLuint freeTexMem[FX_NUM_TMU];
+   MemRange *tmPool;
+   MemRange *tmFree[FX_NUM_TMU];
 
-  GLenum fogTableMode;
-  GLfloat fogDensity;
-  GLfloat fogStart, fogEnd;
-  GrFog_t *fogTable;
-  GLint textureAlign;
+   GLenum fogTableMode;
+   GLfloat fogDensity;
+   GLfloat fogStart, fogEnd;
+   GrFog_t *fogTable;
+   GLint textureAlign;
 
-  /* Acc. functions */
+   /* Acc. functions */
 
-  fx_point_func draw_point;
-  fx_line_func draw_line;
-  fx_tri_func draw_tri;
+   fx_point_func draw_point;
+   fx_line_func draw_line;
+   fx_tri_func draw_tri;
 
-  fxRenderEltsFunc RenderElementsRaw;
+   fxRenderEltsFunc RenderElementsRaw;
 
    /* System to turn culling on/off for tris/lines/points.
     */
-  fx_point_func initial_point;
-  fx_line_func initial_line;
-  fx_tri_func initial_tri;
+   fx_point_func initial_point;
+   fx_line_func initial_line;
+   fx_tri_func initial_tri;
 
-  fx_point_func subsequent_point;
-  fx_line_func subsequent_line;
-  fx_tri_func subsequent_tri;
+   fx_point_func subsequent_point;
+   fx_line_func subsequent_line;
+   fx_tri_func subsequent_tri;
 
+   GLfloat s0scale;
+   GLfloat s1scale;
+   GLfloat t0scale;
+   GLfloat t1scale;
 
    GLfloat inv_s0scale;
    GLfloat inv_s1scale;
    GLfloat inv_t0scale;
    GLfloat inv_t1scale;
 
-  tfxStats stats;
+   tfxStats stats;
 
-  void *state;
+   void *state;
 
-  /* Options */
+   /* Options */
 
-  GLboolean verbose;
-  GLboolean haveTwoTMUs;	/* True if we really have 2 tmu's  */
-  GLboolean emulateTwoTMUs;	/* True if we present 2 tmu's to mesa.  */
-  GLboolean haveAlphaBuffer;
-  GLboolean haveZBuffer;
-  GLboolean haveDoubleBuffer;
-  GLboolean haveGlobalPaletteTexture;
-  GLint swapInterval;
-  GLint maxPendingSwapBuffers;
+   GLboolean verbose;
+   GLboolean haveTwoTMUs;	/* True if we really have 2 tmu's  */
+   GLboolean emulateTwoTMUs;	/* True if we present 2 tmu's to mesa.  */
+   GLboolean haveAlphaBuffer;
+   GLboolean haveZBuffer;
+   GLboolean haveDoubleBuffer;
+   GLboolean haveGlobalPaletteTexture;
+   GLint swapInterval;
+   GLint maxPendingSwapBuffers;
+  
+   FX_GrContext_t glideContext;
 
-  FX_GrContext_t glideContext;
+   int screen_width;
+   int screen_height;
+   int initDone;
+   int clipMinX;
+   int clipMaxX;
+   int clipMinY;
+   int clipMaxY;
 
-  int screen_width;
-  int screen_height;
-  int initDone;
-  int clipMinX;
-  int clipMaxX;
-  int clipMinY;
-  int clipMaxY;
+   /* fxvtxfmt
+    */
+   GLboolean allow_vfmt;
+   GLvertexformat vtxfmt;
+   fxClipVertex current;
+   fxClipVertex verts[4];
+   fxClipVertex *vert;		/* points into verts[] */
+   void (*fire_on_vertex)( GLcontext * );
+   void (*fire_on_end)( GLcontext * );
+   void (*fire_on_fallback)( GLcontext * );
+   
+   vfmt_project_func project_vertex;
+   vfmt_interpolate_func interpolate_vertices;
+
+   int vtxfmt_fallback_count;
+   int vtxfmt_installed;
+   void (*old_begin)( GLenum );
+   GLenum prim;
+   
+   GLuint accel_light;
+   GLfloat basecolor[4];
 };
 
 typedef void (*tfxSetupFunc)(struct vertex_buffer *, GLuint, GLuint);
@@ -594,4 +622,7 @@
 				GLint where);
 extern void fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder);
 
+extern void fxDDCheckVtxfmt( GLcontext *ctx );
+extern void fx_update_lighting( GLcontext *ctx );
+
 #endif
diff --git a/src/mesa/drivers/glide/fxglidew.c b/src/mesa/drivers/glide/fxglidew.c
index ba345fc..400f1fb 100644
--- a/src/mesa/drivers/glide/fxglidew.c
+++ b/src/mesa/drivers/glide/fxglidew.c
@@ -436,6 +436,7 @@
  * Need this to provide at least one external definition.
  */
 
+extern int gl_fx_dummy_function_glidew(void);
 int gl_fx_dummy_function_glidew(void)
 {
   return 0;
diff --git a/src/mesa/drivers/glide/fxsetup.c b/src/mesa/drivers/glide/fxsetup.c
index a5af36c..f4fde12 100644
--- a/src/mesa/drivers/glide/fxsetup.c
+++ b/src/mesa/drivers/glide/fxsetup.c
@@ -69,7 +69,7 @@
 static void fxSetupDepthTest(GLcontext *ctx);
 static void fxSetupScissor(GLcontext *ctx);
 static void fxSetupCull(GLcontext *ctx);
-static void gl_print_fx_state_flags( const char *msg, GLuint flags);
+static void fx_print_state_flags( const char *msg, GLuint flags);
 /*static GLboolean fxMultipassBlend(struct vertex_buffer *, GLuint);*/
 static GLboolean fxMultipassTexture( struct vertex_buffer *, GLuint );
 
@@ -1181,7 +1181,6 @@
     us->blendSrcFuncRGB=sfact;
     us->blendSrcFuncAlpha=asfact;
     fxMesa->new_state |= FX_NEW_BLEND;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 
   switch(dfactor) {
@@ -1235,7 +1234,6 @@
     us->blendDstFuncRGB=dfact;
     us->blendDstFuncAlpha=adfact;
     fxMesa->new_state |= FX_NEW_BLEND;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 }
 
@@ -1296,13 +1294,11 @@
   if(newfunc!=us->alphaTestFunc) {
     us->alphaTestFunc=newfunc;
     fxMesa->new_state |= FX_NEW_ALPHA;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 
   if(ctx->Color.AlphaRef!=us->alphaTestRefValue) {
     us->alphaTestRefValue=ctx->Color.AlphaRef;
     fxMesa->new_state |= FX_NEW_ALPHA;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 }
 
@@ -1363,7 +1359,6 @@
   if(dfunc!=us->depthTestFunc) {
     us->depthTestFunc=dfunc;
     fxMesa->new_state |= FX_NEW_DEPTH;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 
 }
@@ -1376,7 +1371,6 @@
   if(flag!=us->depthMask) {
     us->depthMask=flag;
     fxMesa->new_state |= FX_NEW_DEPTH;
-    ctx->Driver.RenderStart = fxSetupFXUnits;
   }
 }
 
@@ -1405,7 +1399,6 @@
 {
   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
   fxMesa->new_state |= FX_NEW_COLOR_MASK;
-  ctx->Driver.RenderStart = fxSetupFXUnits;
   (void) r; (void) g; (void) b; (void) a;
 }
 
@@ -1482,7 +1475,6 @@
 void fxDDFogfv( GLcontext *ctx, GLenum pname, const GLfloat *params )
 {
    FX_CONTEXT(ctx)->new_state |= FX_NEW_FOG;
-   ctx->Driver.RenderStart = fxSetupFXUnits;  /* XXX why is this here? */
 }
 
 /************************************************************************/
@@ -1528,7 +1520,6 @@
 void fxDDScissor( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h )
 {
    FX_CONTEXT(ctx)->new_state |= FX_NEW_SCISSOR;
-   ctx->Driver.RenderStart = fxSetupFXUnits;
 }
 
 /************************************************************************/
@@ -1540,14 +1531,12 @@
 {
    (void) mode;
    FX_CONTEXT(ctx)->new_state |= FX_NEW_CULL;
-   ctx->Driver.RenderStart = fxSetupFXUnits;   
 }
 
 void fxDDFrontFace(GLcontext *ctx, GLenum mode)
 {
    (void) mode;
    FX_CONTEXT(ctx)->new_state |= FX_NEW_CULL;
-   ctx->Driver.RenderStart = fxSetupFXUnits;   
 }
 
 
@@ -1597,21 +1586,18 @@
     if(state!=us->alphaTestEnabled) {
       us->alphaTestEnabled=state;
       fxMesa->new_state |= FX_NEW_ALPHA;
-      ctx->Driver.RenderStart = fxSetupFXUnits;
     }
     break;
   case GL_BLEND:
     if(state!=us->blendEnabled) {
       us->blendEnabled=state;
       fxMesa->new_state |= FX_NEW_BLEND;
-      ctx->Driver.RenderStart = fxSetupFXUnits;
     }
     break;
   case GL_DEPTH_TEST:
     if(state!=us->depthTestEnabled) {
       us->depthTestEnabled=state;
       fxMesa->new_state |= FX_NEW_DEPTH;
-      ctx->Driver.RenderStart = fxSetupFXUnits;
     }
     break;
   case GL_DITHER:
@@ -1623,18 +1609,15 @@
     break;
   case GL_SCISSOR_TEST:
      fxMesa->new_state |= FX_NEW_SCISSOR;
-     ctx->Driver.RenderStart = fxSetupFXUnits;
      break;
   case GL_SHARED_TEXTURE_PALETTE_EXT:
      fxDDTexUseGlbPalette(ctx, state);
      break;
   case GL_FOG:
      fxMesa->new_state |= FX_NEW_FOG;
-     ctx->Driver.RenderStart = fxSetupFXUnits;
      break;
   case GL_CULL_FACE:
      fxMesa->new_state |= FX_NEW_CULL;
-     ctx->Driver.RenderStart = fxSetupFXUnits;
      break;
   case GL_LINE_SMOOTH:
   case GL_LINE_STIPPLE:
@@ -1642,7 +1625,6 @@
   case GL_POLYGON_SMOOTH:
   case GL_TEXTURE_2D:
       fxMesa->new_state |= FX_NEW_TEXTURING;
-      ctx->Driver.RenderStart = fxSetupFXUnits;
       break;
   default:
     ;  /* XXX no-op? */
@@ -1781,7 +1763,6 @@
 void fxDDShadeModel(GLcontext *ctx, GLenum mode)
 {
    FX_CONTEXT(ctx)->new_state |= FX_NEW_TEXTURING;
-   ctx->Driver.RenderStart = fxSetupFXUnits;
 }
 
 
@@ -1789,7 +1770,7 @@
 /************************************************************************/
 /****************************** Units SetUp *****************************/
 /************************************************************************/
-static void gl_print_fx_state_flags( const char *msg, GLuint flags )
+static void fx_print_state_flags( const char *msg, GLuint flags )
 {
    fprintf(stderr, 
 	   "%s: (0x%x) %s%s%s%s%s%s%s\n",
@@ -1810,7 +1791,7 @@
   GLuint newstate = fxMesa->new_state;
 
   if (MESA_VERBOSE&VERBOSE_DRIVER)
-     gl_print_fx_state_flags("fxmesa: fxSetupFXUnits", newstate);
+     fx_print_state_flags("fxmesa: fxSetupFXUnits", newstate);
 
   if (newstate) {
      if (newstate & FX_NEW_TEXTURING)
@@ -1834,10 +1815,8 @@
      if (newstate & FX_NEW_COLOR_MASK)
 	fxSetupColorMask(ctx);
 
-     if (newstate & FX_NEW_CULL) {
-
+     if (newstate & FX_NEW_CULL)
 	fxSetupCull(ctx);     
-     }
 
      fxMesa->draw_point = fxMesa->initial_point;
      fxMesa->draw_line = fxMesa->initial_line;
@@ -1855,6 +1834,7 @@
  * Need this to provide at least one external definition.
  */
 
+extern int gl_fx_dummy_function_setup(void);
 int gl_fx_dummy_function_setup(void)
 {
   return 0;
diff --git a/src/mesa/drivers/glide/fxtexman.c b/src/mesa/drivers/glide/fxtexman.c
index 3944ea2..b98cced 100644
--- a/src/mesa/drivers/glide/fxtexman.c
+++ b/src/mesa/drivers/glide/fxtexman.c
@@ -738,6 +738,7 @@
  * Need this to provide at least one external definition.
  */
 
+extern int gl_fx_dummy_function_texman(void);
 int gl_fx_dummy_function_texman(void)
 {
   return 0;
diff --git a/src/mesa/drivers/x11/xm_tri.c b/src/mesa/drivers/x11/xm_tri.c
index 1ffe277..97235c0 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.12 2000/11/22 07:32:18 joukj Exp $ */
+/* $Id: xm_tri.c,v 1.13 2000/11/24 10:25:09 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1410,8 +1410,8 @@
 
 
 #ifdef DEBUG
-static void
-_xmesa_print_triangle_func( swrast_tri_func triFunc )
+extern void _xmesa_print_triangle_func( swrast_tri_func triFunc );
+void _xmesa_print_triangle_func( swrast_tri_func triFunc )
 {
    printf("XMesa tri func = ");
    if (triFunc ==smooth_TRUECOLOR_z_triangle)
diff --git a/src/mesa/main/Makefile.X11 b/src/mesa/main/Makefile.X11
index acec47b..84384f4 100644
--- a/src/mesa/main/Makefile.X11
+++ b/src/mesa/main/Makefile.X11
@@ -1,4 +1,4 @@
-# $Id: Makefile.X11,v 1.33 2000/11/16 21:05:34 keithw Exp $
+# $Id: Makefile.X11,v 1.34 2000/11/24 10:25:05 keithw Exp $
 
 # Mesa 3-D graphics library
 # Version:  3.5
@@ -21,6 +21,7 @@
 
 
 CORE_SOURCES = \
+	tnl/t_vtxfmt.c \
 	tnl/t_bbox.c \
 	tnl/t_clip.c \
 	tnl/t_context.c \
@@ -31,7 +32,6 @@
 	tnl/t_fog.c \
 	tnl/t_light.c \
 	tnl/t_pipeline.c \
-	tnl/t_rect.c \
 	tnl/t_shade.c \
 	tnl/t_stages.c \
 	tnl/t_texture.c \
@@ -39,10 +39,11 @@
 	tnl/t_varray.c \
 	tnl/t_vb.c \
 	tnl/t_vbcull.c \
-	tnl/t_vbfill.c \
 	tnl/t_vbindirect.c \
 	tnl/t_vbrender.c \
 	tnl/t_vbxform.c \
+	api_loopback.c \
+	api_noop.c \
 	accum.c \
 	alpha.c \
 	attrib.c \
@@ -90,7 +91,6 @@
 	polygon.c \
 	rastpos.c \
 	readpix.c \
-	rect.c \
 	scissor.c \
 	state.c \
 	stencil.c \
@@ -100,6 +100,7 @@
 	texture.c \
 	texutil.c \
 	varray.c \
+	vtxfmt.c \
 	winpos.c \
 	X86/x86.c \
 	X86/common_x86.c \
@@ -147,6 +148,8 @@
 
 
 DRIVER_SOURCES = \
+	FX/fxvtxfmt.c \
+	FX/fxvtxprims.c \
 	FX/fxapi.c \
 	FX/fxdd.c \
 	FX/fxddspan.c \
diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c
index 2df12db..0dc3651 100644
--- a/src/mesa/main/clip.c
+++ b/src/mesa/main/clip.c
@@ -1,4 +1,4 @@
-/* $Id: clip.c,v 1.16 2000/11/22 07:32:16 joukj Exp $ */
+/* $Id: clip.c,v 1.17 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -78,7 +78,7 @@
     * whenever the projection matrix changes.
     */
    if (ctx->ModelView.flags & MAT_DIRTY)
-      _math_matrix_analyze( &ctx->ModelView );
+      _math_matrix_analyse( &ctx->ModelView );
 
    gl_transform_vector( ctx->Transform.EyeUserPlane[p], equation,
 		        ctx->ModelView.inv );
@@ -90,7 +90,7 @@
     */
    if (ctx->Transform.ClipEnabled[p]) {
       if (ctx->ProjectionMatrix.flags & MAT_DIRTY)
-	 _math_matrix_analyze( &ctx->ProjectionMatrix );
+	 _math_matrix_analyse( &ctx->ProjectionMatrix );
 
       gl_transform_vector( ctx->Transform._ClipUserPlane[p],
 			   ctx->Transform.EyeUserPlane[p],
@@ -98,6 +98,9 @@
    }
 
    ctx->NewState |= _NEW_TRANSFORM;
+
+   if (ctx->Driver.ClipPlane)
+      ctx->Driver.ClipPlane( ctx, plane, equation );
 }
 
 
diff --git a/src/mesa/main/colormac.h b/src/mesa/main/colormac.h
index 57d4350..f0a7cc9 100644
--- a/src/mesa/main/colormac.h
+++ b/src/mesa/main/colormac.h
@@ -1,4 +1,4 @@
-/* $Id: colormac.h,v 1.3 2000/11/16 21:05:34 keithw Exp $ */
+/* $Id: colormac.h,v 1.4 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -38,7 +38,7 @@
 #include "config.h"
 #include "macros.h"
 #include "mmath.h"
-/* Do not reference types.h from this file.
+/* Do not reference mtypes.h from this file.
  */
 
 
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 170bb37..3fdeb28 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.108 2000/11/22 07:32:16 joukj Exp $ */
+/* $Id: context.c,v 1.109 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -690,70 +690,6 @@
 }
 
 
-static void
-init_fallback_arrays( GLcontext *ctx )
-{
-   struct gl_client_array *cl;
-   GLuint i;
-
-   cl = &ctx->Fallback.Normal;
-   cl->Size = 3;
-   cl->Type = GL_FLOAT;
-   cl->Stride = 0;
-   cl->StrideB = 0;
-   cl->Ptr = (void *) ctx->Current.Normal;
-   cl->Enabled = 1;
-
-   cl = &ctx->Fallback.Color;
-   cl->Size = 4;
-   cl->Type = GL_UNSIGNED_BYTE;
-   cl->Stride = 0;
-   cl->StrideB = 0;
-   cl->Ptr = (void *) ctx->Current.Color;
-   cl->Enabled = 1;
-
-   cl = &ctx->Fallback.SecondaryColor;
-   cl->Size = 3;
-   cl->Type = GL_UNSIGNED_BYTE;
-   cl->Stride = 0;
-   cl->StrideB = 0;
-   cl->Ptr = (void *) ctx->Current.SecondaryColor;
-   cl->Enabled = 1;
-
-   cl = &ctx->Fallback.FogCoord;
-   cl->Size = 1;
-   cl->Type = GL_FLOAT;
-   cl->Stride = 0;
-   cl->StrideB = 0;
-   cl->Ptr = (void *) &ctx->Current.FogCoord;
-   cl->Enabled = 1;
-
-   cl = &ctx->Fallback.Index;
-   cl->Size = 1;
-   cl->Type = GL_UNSIGNED_INT;
-   cl->Stride = 0;
-   cl->StrideB = 0;
-   cl->Ptr = (void *) &ctx->Current.Index;
-   cl->Enabled = 1;
-
-   for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++) {
-      cl = &ctx->Fallback.TexCoord[i];
-      cl->Size = 4;
-      cl->Type = GL_FLOAT;
-      cl->Stride = 0;
-      cl->StrideB = 0;
-      cl->Ptr = (void *) ctx->Current.Texcoord[i];
-      cl->Enabled = 1;
-   }
-
-   cl = &ctx->Fallback.EdgeFlag;
-   cl->Size = 1;
-   cl->Type = GL_UNSIGNED_BYTE;
-   cl->Stride = 0;
-   cl->StrideB = 0;
-   cl->Ptr = (void *) &ctx->Current.EdgeFlag;
-   cl->Enabled = 1;
-}
 
 
 /* Initialize a 1-D evaluator map */
@@ -908,7 +844,6 @@
    ctx->Current.EdgeFlag = GL_TRUE;
    ASSIGN_3V( ctx->Current.Normal, 0.0, 0.0, 1.0 );
 
-   init_fallback_arrays( ctx );
 
    /* Depth buffer group */
    ctx->Depth.Test = GL_FALSE;
@@ -1525,6 +1460,9 @@
    _mesa_init_dlist_table(ctx->Save, dispatchSize);
    ctx->CurrentDispatch = ctx->Exec;
 
+   ctx->ExecPrefersFloat = GL_FALSE;
+   ctx->SavePrefersFloat = GL_FALSE;
+
 #if defined(MESA_TRACE)
    ctx->TraceCtx = CALLOC( sizeof(trace_context_t) );
 #if 0
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 2c9a024..250c63d 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1,4 +1,4 @@
-/* $Id: dd.h,v 1.42 2000/11/16 21:05:34 keithw Exp $ */
+/* $Id: dd.h,v 1.43 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,7 +29,7 @@
 #ifndef DD_INCLUDED
 #define DD_INCLUDED
 
-/* THIS FILE ONLY INCLUDED BY types.h !!!!! */
+/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
 
 
 struct gl_pixelstore_attrib;
@@ -872,6 +872,12 @@
     */
 
 
+   void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count );
+   void (*UnlockArraysEXT)( GLcontext *ctx );
+   /* 
+    */
+
+
    /*
     * State-changing functions (drawing functions are above)
     *
@@ -888,9 +894,11 @@
 			      GLenum dfactorRGB, GLenum sfactorA,
 			      GLenum dfactorA );
    void (*ClearDepth)(GLcontext *ctx, GLclampd d);
+   void (*ClearStencil)(GLcontext *ctx, GLint s);
    void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
                      GLboolean bmask, GLboolean amask );
    void (*CullFace)(GLcontext *ctx, GLenum mode);
+   void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation );
    void (*FrontFace)(GLcontext *ctx, GLenum mode);
    void (*DepthFunc)(GLcontext *ctx, GLenum func);
    void (*DepthMask)(GLcontext *ctx, GLboolean flag);
@@ -909,10 +917,12 @@
    void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
    void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
    void (*ShadeModel)(GLcontext *ctx, GLenum mode);
-   void (*ClearStencil)(GLcontext *ctx, GLint s);
    void (*StencilFunc)(GLcontext *ctx, GLenum func, GLint ref, GLuint mask);
    void (*StencilMask)(GLcontext *ctx, GLuint mask);
    void (*StencilOp)(GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass);
+   void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname, 
+		  const GLfloat *params );
+   void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat);
    void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
 
    /* State-query functions
@@ -945,5 +955,114 @@
 
 
 
+
+
+
+
+typedef struct {
+
+   void (*ArrayElement)( GLint ); /* NOTE */
+   void (*Color3f)( GLfloat, GLfloat, GLfloat );
+   void (*Color3fv)( const GLfloat * );
+   void (*Color3ub)( GLubyte, GLubyte, GLubyte );
+   void (*Color3ubv)( const GLubyte * );
+   void (*Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (*Color4fv)( const GLfloat * );
+   void (*Color4ub)( GLubyte, GLubyte, GLubyte, GLubyte );
+   void (*Color4ubv)( const GLubyte * );
+   void (*EdgeFlag)( GLboolean );
+   void (*EdgeFlagv)( const GLboolean * );
+   void (*EvalCoord1f)( GLfloat );          /* NOTE */
+   void (*EvalCoord1fv)( const GLfloat * );          /* NOTE */
+   void (*EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
+   void (*EvalCoord2fv)( const GLfloat * ); /* NOTE */
+   void (*EvalPoint1)( GLint );             /* NOTE */
+   void (*EvalPoint2)( GLint, GLint );      /* NOTE */
+   void (*FogCoordfEXT)( GLfloat );
+   void (*FogCoordfvEXT)( const GLfloat * );
+   void (*Indexi)( GLint );
+   void (*Indexiv)( const GLint * );
+   void (*Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */ 
+   void (*MultiTexCoord1fARB)( GLenum, GLfloat );
+   void (*MultiTexCoord1fvARB)( GLenum, const GLfloat * );
+   void (*MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
+   void (*MultiTexCoord2fvARB)( GLenum, const GLfloat * );
+   void (*MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
+   void (*MultiTexCoord3fvARB)( GLenum, const GLfloat * );
+   void (*MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
+   void (*MultiTexCoord4fvARB)( GLenum, const GLfloat * );
+   void (*Normal3f)( GLfloat, GLfloat, GLfloat );
+   void (*Normal3fv)( const GLfloat * );
+   void (*SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
+   void (*SecondaryColor3fvEXT)( const GLfloat * );
+   void (*SecondaryColor3ubEXT)( GLubyte, GLubyte, GLubyte );
+   void (*SecondaryColor3ubvEXT)( const GLubyte * );
+   void (*TexCoord1f)( GLfloat );
+   void (*TexCoord1fv)( const GLfloat * );
+   void (*TexCoord2f)( GLfloat, GLfloat );
+   void (*TexCoord2fv)( const GLfloat * );
+   void (*TexCoord3f)( GLfloat, GLfloat, GLfloat );
+   void (*TexCoord3fv)( const GLfloat * );
+   void (*TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (*TexCoord4fv)( const GLfloat * );
+   void (*Vertex2f)( GLfloat, GLfloat );
+   void (*Vertex2fv)( const GLfloat * );
+   void (*Vertex3f)( GLfloat, GLfloat, GLfloat );
+   void (*Vertex3fv)( const GLfloat * );
+   void (*Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (*Vertex4fv)( const GLfloat * );
+   void (*CallList)( GLuint );	/* NOTE */
+   void (*Begin)( GLenum );
+   void (*End)( void );
+   /* Drivers present a reduced set of the functions possible in
+    * begin/end objects.  Core mesa provides translation stubs for the
+    * remaining functions to map down to these entrypoints.  
+    *
+    * These are the initial values to be installed into dispatch by
+    * mesa.  If the t&l driver wants to modify the dispatch table
+    * while installed, it must do so itself.  It would be possible for
+    * the vertexformat to install it's own initial values for these
+    * functions, but this way there is an obvious list of what is
+    * expected of the driver.
+    *
+    * If the driver wants to hook in entrypoints other than those
+    * listed above, it must restore them to their original values in
+    * the disable() callback, below.  
+    */
+
+   void (*Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
+   /* 
+    */
+
+
+   void (*DrawArrays)( GLenum mode, GLint start, GLsizei count );
+   void (*DrawElements)( GLenum mode, GLsizei count, GLenum type, 
+			 const GLvoid *indices );
+   void (*DrawRangeElements)(GLenum mode, GLuint start,
+			     GLuint end, GLsizei count,
+			     GLenum type, const GLvoid *indices);
+   /* These may or may not belong here.  Heuristic: If an array is
+    * enabled, the installed vertex format should support that array and
+    * it's current size natively.
+    */
+
+   void (*EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
+   void (*EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
+   /* If you don't support eval, fallback to the default vertex format
+    * on receiving an eval call and use the pipeline mechanism to
+    * provide partial t&l acceleration.
+    *
+    * Mesa will provide a set of helper functions to do eval within
+    * accelerated vertex formats, eventually...
+    */
+
+   GLboolean prefer_float_colors;
+   /* Should core send non-standard colors to glColor4f or glColor4ub
+    */
+
+
+} GLvertexformat;
+
+
 #endif
 
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 01f222c..171ae32 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -1,4 +1,4 @@
-/* $Id: dlist.c,v 1.52 2000/11/22 07:32:16 joukj Exp $ */
+/* $Id: dlist.c,v 1.53 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -30,6 +30,7 @@
 #else
 #include "glheader.h"
 #include "accum.h"
+#include "api_loopback.h"
 #include "attrib.h"
 #include "bitmap.h"
 #include "blend.h"
@@ -62,7 +63,6 @@
 #include "points.h"
 #include "polygon.h"
 #include "readpix.h"
-#include "rect.h"
 #include "state.h"
 #include "texobj.h"
 #include "teximage.h"
@@ -73,9 +73,6 @@
 #include "math/m_matrix.h"
 #include "math/m_xform.h"
 
-#include "tnl/t_vbfill.h"
-#include "tnl/t_eval.h"
-#include "tnl/t_varray.h"
 #endif
 
 
@@ -216,7 +213,6 @@
 	OPCODE_PUSH_MATRIX,
 	OPCODE_PUSH_NAME,
 	OPCODE_RASTER_POS,
-	OPCODE_RECTF,
 	OPCODE_READ_BUFFER,
         OPCODE_RESET_HISTOGRAM,
         OPCODE_RESET_MIN_MAX,
@@ -605,7 +601,6 @@
       InstSize[OPCODE_PUSH_MATRIX] = 1;
       InstSize[OPCODE_PUSH_NAME] = 2;
       InstSize[OPCODE_RASTER_POS] = 5;
-      InstSize[OPCODE_RECTF] = 5;
       InstSize[OPCODE_READ_BUFFER] = 2;
       InstSize[OPCODE_RESET_HISTOGRAM] = 2;
       InstSize[OPCODE_RESET_MIN_MAX] = 2;
@@ -2852,59 +2847,6 @@
 }
 
 
-static void save_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
-{
-   GET_CURRENT_CONTEXT(ctx);
-   Node *n;
-   FLUSH_TNL( ctx, FLUSH_STORED_VERTICES );
-   n = ALLOC_INSTRUCTION( ctx, OPCODE_RECTF, 4 );
-   if (n) {
-      n[1].f = x1;
-      n[2].f = y1;
-      n[3].f = x2;
-      n[4].f = y2;
-   }
-   if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Rectf)( x1, y1, x2, y2 );
-   }
-}
-
-static void save_Rectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
-{
-   save_Rectf(x1, y1, x2, y2);
-}
-
-static void save_Rectdv(const GLdouble *v1, const GLdouble *v2)
-{
-   save_Rectf(v1[0], v1[1], v2[0], v2[1]);
-}
-
-static void save_Rectfv( const GLfloat *v1, const GLfloat *v2 )
-{
-   save_Rectf(v1[0], v1[1], v2[0], v2[1]);
-}
-
-static void save_Recti(GLint x1, GLint y1, GLint x2, GLint y2)
-{
-   save_Rectf(x1, y1, x2, y2);
-}
-
-static void save_Rectiv(const GLint *v1, const GLint *v2)
-{
-   save_Rectf(v1[0], v1[1], v2[0], v2[1]);
-}
-
-static void save_Rects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
-{
-   save_Rectf(x1, y1, x2, y2);
-}
-
-static void save_Rectsv(const GLshort *v1, const GLshort *v2)
-{
-   save_Rectf(v1[0], v1[1], v2[0], v2[1]);
-}
-
-
 static void
 save_ResetHistogram(GLenum target)
 {
@@ -4481,10 +4423,6 @@
 	 case OPCODE_READ_BUFFER:
 	    (*ctx->Exec->ReadBuffer)( n[1].e );
 	    break;
-         case OPCODE_RECTF:
-            (*ctx->Exec->Rectf)( n[1].f, n[2].f, n[3].f, n[4].f );
-	    FLUSH_TNL( ctx, FLUSH_STORED_VERTICES );
-            break;
          case OPCODE_RESET_HISTOGRAM:
             (*ctx->Exec->ResetHistogram)( n[1].e );
             break;
@@ -4824,7 +4762,9 @@
 
 
 /*
- * End definition of current display list.
+ * End definition of current display list.  Is the current 
+ * ASSERT_OUTSIDE_BEGIN_END strong enough to really guarentee that
+ * we are outside begin/end calls?
  */
 void
 _mesa_EndList( void )
@@ -4952,16 +4892,21 @@
 /*
  * Assign all the pointers in <table> to point to Mesa's display list
  * building functions.
+ *
+ * This does not include any of the tnl functions - they are
+ * initialized from _mesa_init_api_defaults and from the active vtxfmt
+ * struct.
  */
 void
 _mesa_init_dlist_table( struct _glapi_table *table, GLuint tableSize )
 {
    _mesa_init_no_op_table(table, tableSize);
 
+   _mesa_loopback_init_api_table( table, GL_FALSE );
+
    /* GL 1.0 */
    table->Accum = save_Accum;
    table->AlphaFunc = save_AlphaFunc;
-   table->Begin = _mesa_Begin;
    table->Bitmap = save_Bitmap;
    table->BlendFunc = save_BlendFunc;
    table->CallList = save_CallList;
@@ -4973,38 +4918,6 @@
    table->ClearIndex = save_ClearIndex;
    table->ClearStencil = save_ClearStencil;
    table->ClipPlane = save_ClipPlane;
-   table->Color3b = _mesa_Color3b;
-   table->Color3bv = _mesa_Color3bv;
-   table->Color3d = _mesa_Color3d;
-   table->Color3dv = _mesa_Color3dv;
-   table->Color3f = _mesa_Color3f;
-   table->Color3fv = _mesa_Color3fv;
-   table->Color3i = _mesa_Color3i;
-   table->Color3iv = _mesa_Color3iv;
-   table->Color3s = _mesa_Color3s;
-   table->Color3sv = _mesa_Color3sv;
-   table->Color3ub = _mesa_Color3ub;
-   table->Color3ubv = _mesa_Color3ubv;
-   table->Color3ui = _mesa_Color3ui;
-   table->Color3uiv = _mesa_Color3uiv;
-   table->Color3us = _mesa_Color3us;
-   table->Color3usv = _mesa_Color3usv;
-   table->Color4b = _mesa_Color4b;
-   table->Color4bv = _mesa_Color4bv;
-   table->Color4d = _mesa_Color4d;
-   table->Color4dv = _mesa_Color4dv;
-   table->Color4f = _mesa_Color4f;
-   table->Color4fv = _mesa_Color4fv;
-   table->Color4i = _mesa_Color4i;
-   table->Color4iv = _mesa_Color4iv;
-   table->Color4s = _mesa_Color4s;
-   table->Color4sv = _mesa_Color4sv;
-   table->Color4ub = _mesa_Color4ub;
-   table->Color4ubv = _mesa_Color4ubv;
-   table->Color4ui = _mesa_Color4ui;
-   table->Color4uiv = _mesa_Color4uiv;
-   table->Color4us = _mesa_Color4us;
-   table->Color4usv = _mesa_Color4usv;
    table->ColorMask = save_ColorMask;
    table->ColorMaterial = save_ColorMaterial;
    table->CopyPixels = save_CopyPixels;
@@ -5016,30 +4929,12 @@
    table->Disable = save_Disable;
    table->DrawBuffer = save_DrawBuffer;
    table->DrawPixels = save_DrawPixels;
-   table->EdgeFlag = _mesa_EdgeFlag;
-   table->EdgeFlagv = _mesa_EdgeFlagv;
    table->Enable = save_Enable;
-   table->End = _mesa_End;
    table->EndList = _mesa_EndList;
-   table->EvalCoord1d = _mesa_EvalCoord1d;
-   table->EvalCoord1dv = _mesa_EvalCoord1dv;
-   table->EvalCoord1f = _mesa_EvalCoord1f;
-   table->EvalCoord1fv = _mesa_EvalCoord1fv;
-   table->EvalCoord2d = _mesa_EvalCoord2d;
-   table->EvalCoord2dv = _mesa_EvalCoord2dv;
-   table->EvalCoord2f = _mesa_EvalCoord2f;
-   table->EvalCoord2fv = _mesa_EvalCoord2fv;
    table->EvalMesh1 = save_EvalMesh1;
    table->EvalMesh2 = save_EvalMesh2;
-   table->EvalPoint1 = _mesa_EvalPoint1;
-   table->EvalPoint2 = _mesa_EvalPoint2;
-   table->FeedbackBuffer = _mesa_FeedbackBuffer;
    table->Finish = _mesa_Finish;
    table->Flush = _mesa_Flush;
-   table->FogCoordfEXT = _mesa_FogCoordfEXT;
-   table->FogCoordfvEXT = _mesa_FogCoordfvEXT;
-   table->FogCoorddEXT = _mesa_FogCoorddEXT;
-   table->FogCoorddvEXT = _mesa_FogCoorddvEXT;
    table->Fogf = save_Fogf;
    table->Fogfv = save_Fogfv;
    table->Fogi = save_Fogi;
@@ -5077,14 +4972,6 @@
    table->GetTexParameteriv = _mesa_GetTexParameteriv;
    table->Hint = save_Hint;
    table->IndexMask = save_IndexMask;
-   table->Indexd = _mesa_Indexd;
-   table->Indexdv = _mesa_Indexdv;
-   table->Indexf = _mesa_Indexf;
-   table->Indexfv = _mesa_Indexfv;
-   table->Indexi = _mesa_Indexi;
-   table->Indexiv = _mesa_Indexiv;
-   table->Indexs = _mesa_Indexs;
-   table->Indexsv = _mesa_Indexsv;
    table->InitNames = save_InitNames;
    table->IsEnabled = _mesa_IsEnabled;
    table->IsList = _mesa_IsList;
@@ -5112,24 +4999,10 @@
    table->MapGrid1f = save_MapGrid1f;
    table->MapGrid2d = save_MapGrid2d;
    table->MapGrid2f = save_MapGrid2f;
-   table->Materialf = _mesa_Materialf;
-   table->Materialfv = _mesa_Materialfv;
-   table->Materiali = _mesa_Materiali;
-   table->Materialiv = _mesa_Materialiv;
    table->MatrixMode = save_MatrixMode;
    table->MultMatrixd = save_MultMatrixd;
    table->MultMatrixf = save_MultMatrixf;
    table->NewList = save_NewList;
-   table->Normal3b = _mesa_Normal3b;
-   table->Normal3bv = _mesa_Normal3bv;
-   table->Normal3d = _mesa_Normal3d;
-   table->Normal3dv = _mesa_Normal3dv;
-   table->Normal3f = _mesa_Normal3f;
-   table->Normal3fv = _mesa_Normal3fv;
-   table->Normal3i = _mesa_Normal3i;
-   table->Normal3iv = _mesa_Normal3iv;
-   table->Normal3s = _mesa_Normal3s;
-   table->Normal3sv = _mesa_Normal3sv;
    table->Ortho = save_Ortho;
    table->PassThrough = save_PassThrough;
    table->PixelMapfv = save_PixelMapfv;
@@ -5176,74 +5049,18 @@
    table->RasterPos4sv = save_RasterPos4sv;
    table->ReadBuffer = save_ReadBuffer;
    table->ReadPixels = _mesa_ReadPixels;
-   table->Rectd = save_Rectd;
-   table->Rectdv = save_Rectdv;
-   table->Rectf = save_Rectf;
-   table->Rectfv = save_Rectfv;
-   table->Recti = save_Recti;
-   table->Rectiv = save_Rectiv;
-   table->Rects = save_Rects;
-   table->Rectsv = save_Rectsv;
    table->RenderMode = _mesa_RenderMode;
    table->Rotated = save_Rotated;
    table->Rotatef = save_Rotatef;
    table->Scaled = save_Scaled;
    table->Scalef = save_Scalef;
    table->Scissor = save_Scissor;
-   table->SecondaryColor3bEXT = _mesa_SecondaryColor3bEXT;
-   table->SecondaryColor3bvEXT = _mesa_SecondaryColor3bvEXT;
-   table->SecondaryColor3sEXT = _mesa_SecondaryColor3sEXT;
-   table->SecondaryColor3svEXT = _mesa_SecondaryColor3svEXT;
-   table->SecondaryColor3iEXT = _mesa_SecondaryColor3iEXT;
-   table->SecondaryColor3ivEXT = _mesa_SecondaryColor3ivEXT;
-   table->SecondaryColor3fEXT = _mesa_SecondaryColor3fEXT;
-   table->SecondaryColor3fvEXT = _mesa_SecondaryColor3fvEXT;
-   table->SecondaryColor3dEXT = _mesa_SecondaryColor3dEXT;
-   table->SecondaryColor3dvEXT = _mesa_SecondaryColor3dvEXT;
-   table->SecondaryColor3ubEXT = _mesa_SecondaryColor3ubEXT;
-   table->SecondaryColor3ubvEXT = _mesa_SecondaryColor3ubvEXT;
-   table->SecondaryColor3usEXT = _mesa_SecondaryColor3usEXT;
-   table->SecondaryColor3usvEXT = _mesa_SecondaryColor3usvEXT;
-   table->SecondaryColor3uiEXT = _mesa_SecondaryColor3uiEXT;
-   table->SecondaryColor3uivEXT = _mesa_SecondaryColor3uivEXT;
-   table->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT;
+   table->FeedbackBuffer = _mesa_FeedbackBuffer;
    table->SelectBuffer = _mesa_SelectBuffer;
    table->ShadeModel = save_ShadeModel;
    table->StencilFunc = save_StencilFunc;
    table->StencilMask = save_StencilMask;
    table->StencilOp = save_StencilOp;
-   table->TexCoord1d = _mesa_TexCoord1d;
-   table->TexCoord1dv = _mesa_TexCoord1dv;
-   table->TexCoord1f = _mesa_TexCoord1f;
-   table->TexCoord1fv = _mesa_TexCoord1fv;
-   table->TexCoord1i = _mesa_TexCoord1i;
-   table->TexCoord1iv = _mesa_TexCoord1iv;
-   table->TexCoord1s = _mesa_TexCoord1s;
-   table->TexCoord1sv = _mesa_TexCoord1sv;
-   table->TexCoord2d = _mesa_TexCoord2d;
-   table->TexCoord2dv = _mesa_TexCoord2dv;
-   table->TexCoord2f = _mesa_TexCoord2f;
-   table->TexCoord2fv = _mesa_TexCoord2fv;
-   table->TexCoord2i = _mesa_TexCoord2i;
-   table->TexCoord2iv = _mesa_TexCoord2iv;
-   table->TexCoord2s = _mesa_TexCoord2s;
-   table->TexCoord2sv = _mesa_TexCoord2sv;
-   table->TexCoord3d = _mesa_TexCoord3d;
-   table->TexCoord3dv = _mesa_TexCoord3dv;
-   table->TexCoord3f = _mesa_TexCoord3f;
-   table->TexCoord3fv = _mesa_TexCoord3fv;
-   table->TexCoord3i = _mesa_TexCoord3i;
-   table->TexCoord3iv = _mesa_TexCoord3iv;
-   table->TexCoord3s = _mesa_TexCoord3s;
-   table->TexCoord3sv = _mesa_TexCoord3sv;
-   table->TexCoord4d = _mesa_TexCoord4d;
-   table->TexCoord4dv = _mesa_TexCoord4dv;
-   table->TexCoord4f = _mesa_TexCoord4f;
-   table->TexCoord4fv = _mesa_TexCoord4fv;
-   table->TexCoord4i = _mesa_TexCoord4i;
-   table->TexCoord4iv = _mesa_TexCoord4iv;
-   table->TexCoord4s = _mesa_TexCoord4s;
-   table->TexCoord4sv = _mesa_TexCoord4sv;
    table->TexEnvf = save_TexEnvf;
    table->TexEnvfv = save_TexEnvfv;
    table->TexEnvi = save_TexEnvi;
@@ -5262,35 +5079,10 @@
    table->TexParameteriv = save_TexParameteriv;
    table->Translated = save_Translated;
    table->Translatef = save_Translatef;
-   table->Vertex2d = _mesa_Vertex2d;
-   table->Vertex2dv = _mesa_Vertex2dv;
-   table->Vertex2f = _mesa_Vertex2f;
-   table->Vertex2fv = _mesa_Vertex2fv;
-   table->Vertex2i = _mesa_Vertex2i;
-   table->Vertex2iv = _mesa_Vertex2iv;
-   table->Vertex2s = _mesa_Vertex2s;
-   table->Vertex2sv = _mesa_Vertex2sv;
-   table->Vertex3d = _mesa_Vertex3d;
-   table->Vertex3dv = _mesa_Vertex3dv;
-   table->Vertex3f = _mesa_Vertex3f;
-   table->Vertex3fv = _mesa_Vertex3fv;
-   table->Vertex3i = _mesa_Vertex3i;
-   table->Vertex3iv = _mesa_Vertex3iv;
-   table->Vertex3s = _mesa_Vertex3s;
-   table->Vertex3sv = _mesa_Vertex3sv;
-   table->Vertex4d = _mesa_Vertex4d;
-   table->Vertex4dv = _mesa_Vertex4dv;
-   table->Vertex4f = _mesa_Vertex4f;
-   table->Vertex4fv = _mesa_Vertex4fv;
-   table->Vertex4i = _mesa_Vertex4i;
-   table->Vertex4iv = _mesa_Vertex4iv;
-   table->Vertex4s = _mesa_Vertex4s;
-   table->Vertex4sv = _mesa_Vertex4sv;
    table->Viewport = save_Viewport;
 
    /* GL 1.1 */
    table->AreTexturesResident = _mesa_AreTexturesResident;
-   table->ArrayElement = _mesa_ArrayElement;
    table->BindTexture = save_BindTexture;
    table->ColorPointer = _mesa_ColorPointer;
    table->CopyTexImage1D = save_CopyTexImage1D;
@@ -5299,15 +5091,11 @@
    table->CopyTexSubImage2D = save_CopyTexSubImage2D;
    table->DeleteTextures = _mesa_DeleteTextures;
    table->DisableClientState = _mesa_DisableClientState;
-   table->DrawArrays = _mesa_DrawArrays;
-   table->DrawElements = _mesa_DrawElements;
    table->EdgeFlagPointer = _mesa_EdgeFlagPointer;
    table->EnableClientState = _mesa_EnableClientState;
    table->GenTextures = _mesa_GenTextures;
    table->GetPointerv = _mesa_GetPointerv;
    table->IndexPointer = _mesa_IndexPointer;
-   table->Indexub = _mesa_Indexub;
-   table->Indexubv = _mesa_Indexubv;
    table->InterleavedArrays = _mesa_InterleavedArrays;
    table->IsTexture = _mesa_IsTexture;
    table->NormalPointer = _mesa_NormalPointer;
@@ -5321,7 +5109,6 @@
 
    /* GL 1.2 */
    table->CopyTexSubImage3D = save_CopyTexSubImage3D;
-   table->DrawRangeElements = _mesa_DrawRangeElements;
    table->TexImage3D = save_TexImage3D;
    table->TexSubImage3D = save_TexSubImage3D;
 
@@ -5424,38 +5211,6 @@
    /* GL_ARB_multitexture */
    table->ActiveTextureARB = save_ActiveTextureARB;
    table->ClientActiveTextureARB = save_ClientActiveTextureARB;
-   table->MultiTexCoord1dARB = _mesa_MultiTexCoord1dARB;
-   table->MultiTexCoord1dvARB = _mesa_MultiTexCoord1dvARB;
-   table->MultiTexCoord1fARB = _mesa_MultiTexCoord1fARB;
-   table->MultiTexCoord1fvARB = _mesa_MultiTexCoord1fvARB;
-   table->MultiTexCoord1iARB = _mesa_MultiTexCoord1iARB;
-   table->MultiTexCoord1ivARB = _mesa_MultiTexCoord1ivARB;
-   table->MultiTexCoord1sARB = _mesa_MultiTexCoord1sARB;
-   table->MultiTexCoord1svARB = _mesa_MultiTexCoord1svARB;
-   table->MultiTexCoord2dARB = _mesa_MultiTexCoord2dARB;
-   table->MultiTexCoord2dvARB = _mesa_MultiTexCoord2dvARB;
-   table->MultiTexCoord2fARB = _mesa_MultiTexCoord2fARB;
-   table->MultiTexCoord2fvARB = _mesa_MultiTexCoord2fvARB;
-   table->MultiTexCoord2iARB = _mesa_MultiTexCoord2iARB;
-   table->MultiTexCoord2ivARB = _mesa_MultiTexCoord2ivARB;
-   table->MultiTexCoord2sARB = _mesa_MultiTexCoord2sARB;
-   table->MultiTexCoord2svARB = _mesa_MultiTexCoord2svARB;
-   table->MultiTexCoord3dARB = _mesa_MultiTexCoord3dARB;
-   table->MultiTexCoord3dvARB = _mesa_MultiTexCoord3dvARB;
-   table->MultiTexCoord3fARB = _mesa_MultiTexCoord3fARB;
-   table->MultiTexCoord3fvARB = _mesa_MultiTexCoord3fvARB;
-   table->MultiTexCoord3iARB = _mesa_MultiTexCoord3iARB;
-   table->MultiTexCoord3ivARB = _mesa_MultiTexCoord3ivARB;
-   table->MultiTexCoord3sARB = _mesa_MultiTexCoord3sARB;
-   table->MultiTexCoord3svARB = _mesa_MultiTexCoord3svARB;
-   table->MultiTexCoord4dARB = _mesa_MultiTexCoord4dARB;
-   table->MultiTexCoord4dvARB = _mesa_MultiTexCoord4dvARB;
-   table->MultiTexCoord4fARB = _mesa_MultiTexCoord4fARB;
-   table->MultiTexCoord4fvARB = _mesa_MultiTexCoord4fvARB;
-   table->MultiTexCoord4iARB = _mesa_MultiTexCoord4iARB;
-   table->MultiTexCoord4ivARB = _mesa_MultiTexCoord4ivARB;
-   table->MultiTexCoord4sARB = _mesa_MultiTexCoord4sARB;
-   table->MultiTexCoord4svARB = _mesa_MultiTexCoord4svARB;
 
    /* GL_EXT_blend_func_separate */
    table->BlendFuncSeparateEXT = save_BlendFuncSeparateEXT;
@@ -5503,6 +5258,12 @@
    table->CompressedTexSubImage2DARB = save_CompressedTexSubImage2DARB;
    table->CompressedTexSubImage1DARB = save_CompressedTexSubImage1DARB;
    table->GetCompressedTexImageARB = _mesa_GetCompressedTexImageARB;
+
+   /* GL_EXT_secondary_color */
+   table->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT;
+
+   /* GL_EXT_fog_coord */
+   table->FogCoordPointerEXT = _mesa_FogCoordPointerEXT;
 }
 
 
@@ -5623,9 +5384,6 @@
 	 case OPCODE_RASTER_POS:
             fprintf(f,"RasterPos %g %g %g %g\n", n[1].f, n[2].f,n[3].f,n[4].f);
 	    break;
-         case OPCODE_RECTF:
-            fprintf( f, "Rectf %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 );
             break;
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index 7ac2f79..d2ad97a 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -1,4 +1,4 @@
-/* $Id: enable.c,v 1.33 2000/11/22 07:32:16 joukj Exp $ */
+/* $Id: enable.c,v 1.34 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -100,7 +100,7 @@
 	       ctx->Transform._AnyClip++;
 	
 	       if (ctx->ProjectionMatrix.flags & MAT_DIRTY) {
- 		  _math_matrix_analyze( &ctx->ProjectionMatrix );
+ 		  _math_matrix_analyse( &ctx->ProjectionMatrix );
 	       }
 	
 	       /* This derived state also calculated in clip.c and
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index a1c58f8..af274ea 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -1,4 +1,4 @@
-/* $Id: light.c,v 1.27 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: light.c,v 1.28 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -122,7 +122,7 @@
       case GL_SPOT_DIRECTION:
 	 /* transform direction by inverse modelview */
 	 if (ctx->ModelView.flags & MAT_DIRTY_INVERSE) {
-	    _math_matrix_analyze( &ctx->ModelView );
+	    _math_matrix_analyse( &ctx->ModelView );
 	 }
 	 TRANSFORM_NORMAL( l->EyeDirection, params, ctx->ModelView.inv );
          break;
@@ -568,58 +568,48 @@
    if (bitmask & (FRONT_EMISSION_BIT | FRONT_AMBIENT_BIT)) {
       struct gl_material *mat = &ctx->Light.Material[0];
       COPY_3V( ctx->Light._BaseColor[0], mat->Emission );
-      ACC_SCALE_3V( ctx->Light._BaseColor[0], mat->Ambient, ctx->Light.Model.Ambient );
+      ACC_SCALE_3V( ctx->Light._BaseColor[0], mat->Ambient, 
+		    ctx->Light.Model.Ambient );
    }
    if (bitmask & (BACK_EMISSION_BIT | BACK_AMBIENT_BIT)) {
       struct gl_material *mat = &ctx->Light.Material[1];
       COPY_3V( ctx->Light._BaseColor[1], mat->Emission );
-      ACC_SCALE_3V( ctx->Light._BaseColor[1], mat->Ambient, ctx->Light.Model.Ambient );
+      ACC_SCALE_3V( ctx->Light._BaseColor[1], mat->Ambient, 
+		    ctx->Light.Model.Ambient );
    }
 
    /* update material diffuse values */
    if (bitmask & FRONT_DIFFUSE_BIT) {
       struct gl_material *mat = &ctx->Light.Material[0];
-      GLfloat tmp[4];
-      SUB_3V( tmp, src[0].Diffuse, mat->Diffuse );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatDiffuse[0], light->Diffuse, tmp );
-      }
       COPY_4FV( mat->Diffuse, src[0].Diffuse );
+      foreach (light, list) {
+	 SCALE_3V( light->_MatDiffuse[0], light->Diffuse, mat->Diffuse );
+      }
       FLOAT_COLOR_TO_CHAN(ctx->Light._BaseAlpha[0], mat->Diffuse[3]);
    }
    if (bitmask & BACK_DIFFUSE_BIT) {
       struct gl_material *mat = &ctx->Light.Material[1];
-      GLfloat tmp[4];
-      SUB_3V( tmp, src[1].Diffuse, mat->Diffuse );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatDiffuse[1], light->Diffuse, tmp );
-      }
       COPY_4FV( mat->Diffuse, src[1].Diffuse );
+      foreach (light, list) {
+	 SCALE_3V( light->_MatDiffuse[1], light->Diffuse, mat->Diffuse );
+      }
       FLOAT_COLOR_TO_CHAN(ctx->Light._BaseAlpha[1], mat->Diffuse[3]);
    }
 
    /* update material specular values */
    if (bitmask & FRONT_SPECULAR_BIT) {
       struct gl_material *mat = &ctx->Light.Material[0];
-      GLfloat tmp[4];
-      SUB_3V( tmp, src[0].Specular, mat->Specular );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatSpecular[0], light->Specular, tmp );
-	 light->_IsMatSpecular[0] =
-	    (LEN_SQUARED_3FV(light->_MatSpecular[0]) > 1e-16);
-      }
       COPY_4FV( mat->Specular, src[0].Specular );
+      foreach (light, list) {
+	 ACC_SCALE_3V( light->_MatSpecular[0], light->Specular, mat->Specular);
+      }
    }
    if (bitmask & BACK_SPECULAR_BIT) {
       struct gl_material *mat = &ctx->Light.Material[1];
-      GLfloat tmp[4];
-      SUB_3V( tmp, src[1].Specular, mat->Specular );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatSpecular[1], light->Specular, tmp );
-	 light->_IsMatSpecular[1] =
-	    (LEN_SQUARED_3FV(light->_MatSpecular[1]) > 1e-16);
-      }
       COPY_4FV( mat->Specular, src[1].Specular );
+      foreach (light, list) {
+	 ACC_SCALE_3V( light->_MatSpecular[1], light->Specular, mat->Specular);
+      }
    }
 
    if (bitmask & FRONT_SHININESS_BIT) {
@@ -733,49 +723,37 @@
    /* update light->_MatDiffuse = light's diffuse * material's diffuse */
    if (bitmask & FRONT_DIFFUSE_BIT) {
       struct gl_material *mat = &ctx->Light.Material[0];
-      GLfloat tmp[4];
-      SUB_3V( tmp, color, mat->Diffuse );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatDiffuse[0], light->Diffuse, tmp );
-      }
       COPY_4FV( mat->Diffuse, color );
+      foreach (light, list) {
+	 SCALE_3V( light->_MatDiffuse[0], light->Diffuse, mat->Diffuse );
+      }
       FLOAT_COLOR_TO_CHAN(ctx->Light._BaseAlpha[0], mat->Diffuse[3]);
    }
 
    if (bitmask & BACK_DIFFUSE_BIT) {
       struct gl_material *mat = &ctx->Light.Material[1];
-      GLfloat tmp[4];
-      SUB_3V( tmp, color, mat->Diffuse );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatDiffuse[1], light->Diffuse, tmp );
-      }
       COPY_4FV( mat->Diffuse, color );
+      foreach (light, list) {
+	 SCALE_3V( light->_MatDiffuse[1], light->Diffuse, mat->Diffuse );
+      }
       FLOAT_COLOR_TO_CHAN(ctx->Light._BaseAlpha[1], mat->Diffuse[3]);
    }
 
    /* update light->_MatSpecular = light's specular * material's specular */
    if (bitmask & FRONT_SPECULAR_BIT) {
       struct gl_material *mat = &ctx->Light.Material[0];
-      GLfloat tmp[4];
-      SUB_3V( tmp, color, mat->Specular );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatSpecular[0], light->Specular, tmp );
-	 light->_IsMatSpecular[0] =
-	    (LEN_SQUARED_3FV(light->_MatSpecular[0]) > 1e-16);
-      }
       COPY_4FV( mat->Specular, color );
+      foreach (light, list) {
+	 ACC_SCALE_3V( light->_MatSpecular[0], light->Specular, mat->Specular);
+      }
    }
 
    if (bitmask & BACK_SPECULAR_BIT) {
       struct gl_material *mat = &ctx->Light.Material[1];
-      GLfloat tmp[4];
-      SUB_3V( tmp, color, mat->Specular );
-      foreach (light, list) {
-	 ACC_SCALE_3V( light->_MatSpecular[1], light->Specular, tmp );
-	 light->_IsMatSpecular[1] =
-	    (LEN_SQUARED_3FV(light->_MatSpecular[1]) > 1e-16);
-      }
       COPY_4FV( mat->Specular, color );
+      foreach (light, list) {
+	 ACC_SCALE_3V( light->_MatSpecular[1], light->Specular, mat->Specular);
+      }
    }
 
    if (0)
@@ -839,51 +817,6 @@
 
 
 
-void
-_mesa_Materialf( GLenum face, GLenum pname, GLfloat param )
-{
-   _mesa_Materialfv( face, pname, &param );
-}
-
-
-
-void
-_mesa_Materiali(GLenum face, GLenum pname, GLint param )
-{
-   _mesa_Materialiv(face, pname, &param);
-}
-
-
-void
-_mesa_Materialiv(GLenum face, GLenum pname, const GLint *params )
-{
-   GLfloat fparam[4];
-   switch (pname) {
-      case GL_AMBIENT:
-      case GL_DIFFUSE:
-      case GL_SPECULAR:
-      case GL_EMISSION:
-      case GL_AMBIENT_AND_DIFFUSE:
-         fparam[0] = INT_TO_FLOAT( params[0] );
-         fparam[1] = INT_TO_FLOAT( params[1] );
-         fparam[2] = INT_TO_FLOAT( params[2] );
-         fparam[3] = INT_TO_FLOAT( params[3] );
-         break;
-      case GL_SHININESS:
-         fparam[0] = (GLfloat) params[0];
-         break;
-      case GL_COLOR_INDEXES:
-         fparam[0] = (GLfloat) params[0];
-         fparam[1] = (GLfloat) params[1];
-         fparam[2] = (GLfloat) params[2];
-         break;
-      default:
-         /* Error will be caught later in gl_Materialfv */
-         ;
-   }
-   _mesa_Materialfv(face, pname, fparam);
-}
-
 
 void
 _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
@@ -1190,8 +1123,6 @@
 	    SCALE_3V( light->_MatAmbient[side], light->Ambient, mat->Ambient );
 	    SCALE_3V( light->_MatSpecular[side], light->Specular,
 		      mat->Specular);
-	    light->_IsMatSpecular[side] =
-	       (LEN_SQUARED_3FV(light->_MatSpecular[side]) > 1e-16);
 	 }
       }
    }
diff --git a/src/mesa/main/light.h b/src/mesa/main/light.h
index 134e378..604e4d5 100644
--- a/src/mesa/main/light.h
+++ b/src/mesa/main/light.h
@@ -1,4 +1,4 @@
-/* $Id: light.h,v 1.6 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: light.h,v 1.7 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -63,18 +63,6 @@
 _mesa_LightModeliv( GLenum pname, const GLint *params );
 
 extern void
-_mesa_Materialf( GLenum face, GLenum pname, GLfloat param );
-
-extern void
-_mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params );
-
-extern void
-_mesa_Materiali( GLenum face, GLenum pname, GLint param );
-
-extern void
-_mesa_Materialiv( GLenum face, GLenum pname, const GLint *params );
-
-extern void
 _mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params );
 
 extern void
diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h
index d5d9e42..02121e3 100644
--- a/src/mesa/main/macros.h
+++ b/src/mesa/main/macros.h
@@ -1,4 +1,4 @@
-/* $Id: macros.h,v 1.14 2000/11/16 21:05:35 keithw Exp $ */
+/* $Id: macros.h,v 1.15 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -35,7 +35,7 @@
 
 
 #include "glheader.h"
-/* Do not reference types.h from this file.
+/* Do not reference mtypes.h from this file.
  */
 
 
diff --git a/src/mesa/main/matrix.c b/src/mesa/main/matrix.c
index 6573a46..6106a80 100644
--- a/src/mesa/main/matrix.c
+++ b/src/mesa/main/matrix.c
@@ -1,4 +1,4 @@
-/* $Id: matrix.c,v 1.27 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: matrix.c,v 1.28 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -57,10 +57,10 @@
 /**********************************************************************/
 
 
-#define GET_ACTIVE_MATRIX(ctx, mat, flags, where)			\
+#define GET_ACTIVE_MATRIX(ctx, mat, flags, where)		\
 do {									\
-   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, where);                      \
-   if (MESA_VERBOSE&VERBOSE_API) fprintf(stderr, "%s\n", where);        \
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, where);			\
+   if (MESA_VERBOSE&VERBOSE_API) fprintf(stderr, "%s\n", where);	\
    switch (ctx->Transform.MatrixMode) {					\
       case GL_MODELVIEW:						\
 	 mat = &ctx->ModelView;						\
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 03ac0c4..e18bdda 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1,4 +1,4 @@
-/* $Id: mtypes.h,v 1.1 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: mtypes.h,v 1.2 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -208,7 +208,6 @@
    GLfloat _MatSpecular[2][3];	/* material spec * light specular */
    GLfloat _dli;			/* CI diffuse light intensity */
    GLfloat _sli;			/* CI specular light intensity */
-   GLboolean _IsMatSpecular[2];
 };
 
 
@@ -502,7 +501,6 @@
 #define LIGHT_POSITIONAL   0x4
 #define LIGHT_SPOT         0x10
 #define LIGHT_LOCAL_VIEWER 0x20
-#define LIGHT_TWO_SIDE     0x40
 
 #define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER)
 
@@ -724,7 +722,6 @@
 #define ENABLE_LIGHT        0x1000000
 #define ENABLE_FOG          0x2000000
 #define ENABLE_USERCLIP     0x4000000
-#define ENABLE_VIEWCLIP     0x8000000
 #define ENABLE_NORMALIZE   0x10000000
 #define ENABLE_RESCALE     0x20000000
 #define ENABLE_POINT_ATTEN 0x40000000
@@ -976,23 +973,9 @@
 
    GLuint LockFirst;
    GLuint LockCount;
-	
 };
 
 
-/* These are used to make the ctx->Current values look like
- * arrays (with zero StrideB).
- */
-struct gl_fallback_arrays {
-   struct gl_client_array Normal;
-   struct gl_client_array Color;
-   struct gl_client_array SecondaryColor;
-   struct gl_client_array FogCoord;
-   struct gl_client_array Index;
-   struct gl_client_array TexCoord[MAX_TEXTURE_UNITS];
-   struct gl_client_array EdgeFlag;
-};
-
 
 
 struct gl_feedback {
@@ -1428,6 +1411,9 @@
    struct _glapi_table *Save;	/* Display list save funcs */
    struct _glapi_table *Exec;	/* Execute funcs */
    struct _glapi_table *CurrentDispatch;  /* == Save or Exec !! */
+  
+   GLboolean ExecPrefersFloat;	/* What preference for color conversion? */
+   GLboolean SavePrefersFloat;
 
    GLvisual Visual;
    GLframebuffer *DrawBuffer;	/* buffer for writing */
@@ -1529,8 +1515,6 @@
    struct gl_color_table PostColorMatrixColorTable;
    struct gl_color_table ProxyPostColorMatrixColorTable;
 
-   struct gl_fallback_arrays Fallback; 
-
    GLenum ErrorValue;        /* Last error code */
    GLenum RenderMode;        /* either GL_RENDER, GL_SELECT, GL_FEEDBACK */
    GLuint NewState;          /* bitwise-or of _NEW_* flags */
diff --git a/src/mesa/main/rastpos.c b/src/mesa/main/rastpos.c
index 63f4e5a..9f6a493 100644
--- a/src/mesa/main/rastpos.c
+++ b/src/mesa/main/rastpos.c
@@ -1,4 +1,4 @@
-/* $Id: rastpos.c,v 1.15 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: rastpos.c,v 1.16 2000/11/24 10:25:05 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -168,7 +168,7 @@
       ACC_SCALE_SCALAR_3V(contrib, n_dot_VP, light->_MatDiffuse[0]);
       diffuse += n_dot_VP * light->_dli * attenuation;
 
-      if (light->_IsMatSpecular[0]) {
+      {
 	 if (ctx->Light.Model.LocalViewer) {
 	    GLfloat v[3];
 	    COPY_3V(v, vertex);
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 8db7f01..c0c9e98 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -1,4 +1,4 @@
-/* $Id: state.c,v 1.47 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: state.c,v 1.48 2000/11/24 10:25:06 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -37,6 +37,7 @@
 #include "glheader.h"
 #include "accum.h"
 #include "alpha.h"
+#include "api_loopback.h"
 #include "attrib.h"
 #include "bitmap.h"
 #include "blend.h"
@@ -68,7 +69,6 @@
 #include "polygon.h"
 #include "rastpos.h"
 #include "readpix.h"
-#include "rect.h"
 #include "scissor.h"
 #include "state.h"
 #include "stencil.h"
@@ -83,10 +83,6 @@
 #include "swrast/swrast.h"
 #include "math/m_matrix.h"
 #include "math/m_xform.h"
-#include "tnl/t_eval.h"
-#include "tnl/t_vbfill.h"
-#include "tnl/t_varray.h"
-#include "tnl/t_rect.h"
 #endif
 
 
@@ -119,6 +115,9 @@
 /*
  * Initialize the given dispatch table with pointers to Mesa's
  * immediate-mode commands.
+ *
+ * Pointers to begin/end object commands and a few others
+ * are provided via the vtxfmt interface elsewhere.
  */
 void
 _mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize)
@@ -126,10 +125,11 @@
    /* first initialize all dispatch slots to no-op */
    _mesa_init_no_op_table(exec, tableSize);
 
+   _mesa_loopback_init_api_table( exec, GL_FALSE );
+
    /* load the dispatch slots we understand */
    exec->Accum = _mesa_Accum;
    exec->AlphaFunc = _mesa_AlphaFunc;
-   exec->Begin = _mesa_Begin;
    exec->Bitmap = _mesa_Bitmap;
    exec->BlendFunc = _mesa_BlendFunc;
    exec->CallList = _mesa_CallList;
@@ -141,38 +141,6 @@
    exec->ClearIndex = _mesa_ClearIndex;
    exec->ClearStencil = _mesa_ClearStencil;
    exec->ClipPlane = _mesa_ClipPlane;
-   exec->Color3b = _mesa_Color3b;
-   exec->Color3bv = _mesa_Color3bv;
-   exec->Color3d = _mesa_Color3d;
-   exec->Color3dv = _mesa_Color3dv;
-   exec->Color3f = _mesa_Color3f;
-   exec->Color3fv = _mesa_Color3fv;
-   exec->Color3i = _mesa_Color3i;
-   exec->Color3iv = _mesa_Color3iv;
-   exec->Color3s = _mesa_Color3s;
-   exec->Color3sv = _mesa_Color3sv;
-   exec->Color3ub = _mesa_Color3ub;
-   exec->Color3ubv = _mesa_Color3ubv;
-   exec->Color3ui = _mesa_Color3ui;
-   exec->Color3uiv = _mesa_Color3uiv;
-   exec->Color3us = _mesa_Color3us;
-   exec->Color3usv = _mesa_Color3usv;
-   exec->Color4b = _mesa_Color4b;
-   exec->Color4bv = _mesa_Color4bv;
-   exec->Color4d = _mesa_Color4d;
-   exec->Color4dv = _mesa_Color4dv;
-   exec->Color4f = _mesa_Color4f;
-   exec->Color4fv = _mesa_Color4fv;
-   exec->Color4i = _mesa_Color4i;
-   exec->Color4iv = _mesa_Color4iv;
-   exec->Color4s = _mesa_Color4s;
-   exec->Color4sv = _mesa_Color4sv;
-   exec->Color4ub = _mesa_Color4ub;
-   exec->Color4ubv = _mesa_Color4ubv;
-   exec->Color4ui = _mesa_Color4ui;
-   exec->Color4uiv = _mesa_Color4uiv;
-   exec->Color4us = _mesa_Color4us;
-   exec->Color4usv = _mesa_Color4usv;
    exec->ColorMask = _mesa_ColorMask;
    exec->ColorMaterial = _mesa_ColorMaterial;
    exec->CopyPixels = _mesa_CopyPixels;
@@ -184,33 +152,12 @@
    exec->Disable = _mesa_Disable;
    exec->DrawBuffer = _mesa_DrawBuffer;
    exec->DrawPixels = _mesa_DrawPixels;
-   exec->EdgeFlag = _mesa_EdgeFlag;
-   exec->EdgeFlagv = _mesa_EdgeFlagv;
    exec->Enable = _mesa_Enable;
-   exec->End = _mesa_End;
    exec->EndList = _mesa_EndList;
-   exec->EvalCoord1d = _mesa_EvalCoord1d;
-   exec->EvalCoord1dv = _mesa_EvalCoord1dv;
-   exec->EvalCoord1f = _mesa_EvalCoord1f;
-   exec->EvalCoord1fv = _mesa_EvalCoord1fv;
-   exec->EvalCoord2d = _mesa_EvalCoord2d;
-   exec->EvalCoord2dv = _mesa_EvalCoord2dv;
-   exec->EvalCoord2f = _mesa_EvalCoord2f;
-   exec->EvalCoord2fv = _mesa_EvalCoord2fv;
-   exec->EvalMesh1 = _mesa_EvalMesh1;
-   exec->EvalMesh2 = _mesa_EvalMesh2;
-   exec->EvalPoint1 = _mesa_EvalPoint1;
-   exec->EvalPoint2 = _mesa_EvalPoint2;
    exec->FeedbackBuffer = _mesa_FeedbackBuffer;
    exec->Finish = _mesa_Finish;
    exec->Flush = _mesa_Flush;
-
-   exec->FogCoordfEXT = _mesa_FogCoordfEXT;
-   exec->FogCoordfvEXT = _mesa_FogCoordfvEXT;
-   exec->FogCoorddEXT = _mesa_FogCoorddEXT;
-   exec->FogCoorddvEXT = _mesa_FogCoorddvEXT;
    exec->FogCoordPointerEXT = _mesa_FogCoordPointerEXT;
-
    exec->Fogf = _mesa_Fogf;
    exec->Fogfv = _mesa_Fogfv;
    exec->Fogi = _mesa_Fogi;
@@ -248,14 +195,6 @@
    exec->GetTexParameteriv = _mesa_GetTexParameteriv;
    exec->Hint = _mesa_Hint;
    exec->IndexMask = _mesa_IndexMask;
-   exec->Indexd = _mesa_Indexd;
-   exec->Indexdv = _mesa_Indexdv;
-   exec->Indexf = _mesa_Indexf;
-   exec->Indexfv = _mesa_Indexfv;
-   exec->Indexi = _mesa_Indexi;
-   exec->Indexiv = _mesa_Indexiv;
-   exec->Indexs = _mesa_Indexs;
-   exec->Indexsv = _mesa_Indexsv;
    exec->InitNames = _mesa_InitNames;
    exec->IsEnabled = _mesa_IsEnabled;
    exec->IsList = _mesa_IsList;
@@ -283,24 +222,10 @@
    exec->MapGrid1f = _mesa_MapGrid1f;
    exec->MapGrid2d = _mesa_MapGrid2d;
    exec->MapGrid2f = _mesa_MapGrid2f;
-   exec->Materialf = _mesa_Materialf;
-   exec->Materialfv = _mesa_Materialfv;
-   exec->Materiali = _mesa_Materiali;
-   exec->Materialiv = _mesa_Materialiv;
    exec->MatrixMode = _mesa_MatrixMode;
    exec->MultMatrixd = _mesa_MultMatrixd;
    exec->MultMatrixf = _mesa_MultMatrixf;
    exec->NewList = _mesa_NewList;
-   exec->Normal3b = _mesa_Normal3b;
-   exec->Normal3bv = _mesa_Normal3bv;
-   exec->Normal3d = _mesa_Normal3d;
-   exec->Normal3dv = _mesa_Normal3dv;
-   exec->Normal3f = _mesa_Normal3f;
-   exec->Normal3fv = _mesa_Normal3fv;
-   exec->Normal3i = _mesa_Normal3i;
-   exec->Normal3iv = _mesa_Normal3iv;
-   exec->Normal3s = _mesa_Normal3s;
-   exec->Normal3sv = _mesa_Normal3sv;
    exec->Ortho = _mesa_Ortho;
    exec->PassThrough = _mesa_PassThrough;
    exec->PixelMapfv = _mesa_PixelMapfv;
@@ -347,74 +272,18 @@
    exec->RasterPos4sv = _mesa_RasterPos4sv;
    exec->ReadBuffer = _mesa_ReadBuffer;
    exec->ReadPixels = _mesa_ReadPixels;
-   exec->Rectd = _mesa_Rectd;
-   exec->Rectdv = _mesa_Rectdv;
-   exec->Rectf = _mesa_Rectf;
-   exec->Rectfv = _mesa_Rectfv;
-   exec->Recti = _mesa_Recti;
-   exec->Rectiv = _mesa_Rectiv;
-   exec->Rects = _mesa_Rects;
-   exec->Rectsv = _mesa_Rectsv;
    exec->RenderMode = _mesa_RenderMode;
    exec->Rotated = _mesa_Rotated;
    exec->Rotatef = _mesa_Rotatef;
    exec->Scaled = _mesa_Scaled;
    exec->Scalef = _mesa_Scalef;
    exec->Scissor = _mesa_Scissor;
-   exec->SecondaryColor3bEXT = _mesa_SecondaryColor3bEXT;
-   exec->SecondaryColor3bvEXT = _mesa_SecondaryColor3bvEXT;
-   exec->SecondaryColor3sEXT = _mesa_SecondaryColor3sEXT;
-   exec->SecondaryColor3svEXT = _mesa_SecondaryColor3svEXT;
-   exec->SecondaryColor3iEXT = _mesa_SecondaryColor3iEXT;
-   exec->SecondaryColor3ivEXT = _mesa_SecondaryColor3ivEXT;
-   exec->SecondaryColor3fEXT = _mesa_SecondaryColor3fEXT;
-   exec->SecondaryColor3fvEXT = _mesa_SecondaryColor3fvEXT;
-   exec->SecondaryColor3dEXT = _mesa_SecondaryColor3dEXT;
-   exec->SecondaryColor3dvEXT = _mesa_SecondaryColor3dvEXT;
-   exec->SecondaryColor3ubEXT = _mesa_SecondaryColor3ubEXT;
-   exec->SecondaryColor3ubvEXT = _mesa_SecondaryColor3ubvEXT;
-   exec->SecondaryColor3usEXT = _mesa_SecondaryColor3usEXT;
-   exec->SecondaryColor3usvEXT = _mesa_SecondaryColor3usvEXT;
-   exec->SecondaryColor3uiEXT = _mesa_SecondaryColor3uiEXT;
-   exec->SecondaryColor3uivEXT = _mesa_SecondaryColor3uivEXT;
    exec->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT;
    exec->SelectBuffer = _mesa_SelectBuffer;
    exec->ShadeModel = _mesa_ShadeModel;
    exec->StencilFunc = _mesa_StencilFunc;
    exec->StencilMask = _mesa_StencilMask;
    exec->StencilOp = _mesa_StencilOp;
-   exec->TexCoord1d = _mesa_TexCoord1d;
-   exec->TexCoord1dv = _mesa_TexCoord1dv;
-   exec->TexCoord1f = _mesa_TexCoord1f;
-   exec->TexCoord1fv = _mesa_TexCoord1fv;
-   exec->TexCoord1i = _mesa_TexCoord1i;
-   exec->TexCoord1iv = _mesa_TexCoord1iv;
-   exec->TexCoord1s = _mesa_TexCoord1s;
-   exec->TexCoord1sv = _mesa_TexCoord1sv;
-   exec->TexCoord2d = _mesa_TexCoord2d;
-   exec->TexCoord2dv = _mesa_TexCoord2dv;
-   exec->TexCoord2f = _mesa_TexCoord2f;
-   exec->TexCoord2fv = _mesa_TexCoord2fv;
-   exec->TexCoord2i = _mesa_TexCoord2i;
-   exec->TexCoord2iv = _mesa_TexCoord2iv;
-   exec->TexCoord2s = _mesa_TexCoord2s;
-   exec->TexCoord2sv = _mesa_TexCoord2sv;
-   exec->TexCoord3d = _mesa_TexCoord3d;
-   exec->TexCoord3dv = _mesa_TexCoord3dv;
-   exec->TexCoord3f = _mesa_TexCoord3f;
-   exec->TexCoord3fv = _mesa_TexCoord3fv;
-   exec->TexCoord3i = _mesa_TexCoord3i;
-   exec->TexCoord3iv = _mesa_TexCoord3iv;
-   exec->TexCoord3s = _mesa_TexCoord3s;
-   exec->TexCoord3sv = _mesa_TexCoord3sv;
-   exec->TexCoord4d = _mesa_TexCoord4d;
-   exec->TexCoord4dv = _mesa_TexCoord4dv;
-   exec->TexCoord4f = _mesa_TexCoord4f;
-   exec->TexCoord4fv = _mesa_TexCoord4fv;
-   exec->TexCoord4i = _mesa_TexCoord4i;
-   exec->TexCoord4iv = _mesa_TexCoord4iv;
-   exec->TexCoord4s = _mesa_TexCoord4s;
-   exec->TexCoord4sv = _mesa_TexCoord4sv;
    exec->TexEnvf = _mesa_TexEnvf;
    exec->TexEnvfv = _mesa_TexEnvfv;
    exec->TexEnvi = _mesa_TexEnvi;
@@ -433,35 +302,10 @@
    exec->TexParameteriv = _mesa_TexParameteriv;
    exec->Translated = _mesa_Translated;
    exec->Translatef = _mesa_Translatef;
-   exec->Vertex2d = _mesa_Vertex2d;
-   exec->Vertex2dv = _mesa_Vertex2dv;
-   exec->Vertex2f = _mesa_Vertex2f;
-   exec->Vertex2fv = _mesa_Vertex2fv;
-   exec->Vertex2i = _mesa_Vertex2i;
-   exec->Vertex2iv = _mesa_Vertex2iv;
-   exec->Vertex2s = _mesa_Vertex2s;
-   exec->Vertex2sv = _mesa_Vertex2sv;
-   exec->Vertex3d = _mesa_Vertex3d;
-   exec->Vertex3dv = _mesa_Vertex3dv;
-   exec->Vertex3f = _mesa_Vertex3f;
-   exec->Vertex3fv = _mesa_Vertex3fv;
-   exec->Vertex3i = _mesa_Vertex3i;
-   exec->Vertex3iv = _mesa_Vertex3iv;
-   exec->Vertex3s = _mesa_Vertex3s;
-   exec->Vertex3sv = _mesa_Vertex3sv;
-   exec->Vertex4d = _mesa_Vertex4d;
-   exec->Vertex4dv = _mesa_Vertex4dv;
-   exec->Vertex4f = _mesa_Vertex4f;
-   exec->Vertex4fv = _mesa_Vertex4fv;
-   exec->Vertex4i = _mesa_Vertex4i;
-   exec->Vertex4iv = _mesa_Vertex4iv;
-   exec->Vertex4s = _mesa_Vertex4s;
-   exec->Vertex4sv = _mesa_Vertex4sv;
    exec->Viewport = _mesa_Viewport;
 
    /* 1.1 */
    exec->AreTexturesResident = _mesa_AreTexturesResident;
-   exec->ArrayElement = _mesa_ArrayElement;
    exec->BindTexture = _mesa_BindTexture;
    exec->ColorPointer = _mesa_ColorPointer;
    exec->CopyTexImage1D = _mesa_CopyTexImage1D;
@@ -470,15 +314,11 @@
    exec->CopyTexSubImage2D = _mesa_CopyTexSubImage2D;
    exec->DeleteTextures = _mesa_DeleteTextures;
    exec->DisableClientState = _mesa_DisableClientState;
-   exec->DrawArrays = _mesa_DrawArrays;
-   exec->DrawElements = _mesa_DrawElements;
    exec->EdgeFlagPointer = _mesa_EdgeFlagPointer;
    exec->EnableClientState = _mesa_EnableClientState;
    exec->GenTextures = _mesa_GenTextures;
    exec->GetPointerv = _mesa_GetPointerv;
    exec->IndexPointer = _mesa_IndexPointer;
-   exec->Indexub = _mesa_Indexub;
-   exec->Indexubv = _mesa_Indexubv;
    exec->InterleavedArrays = _mesa_InterleavedArrays;
    exec->IsTexture = _mesa_IsTexture;
    exec->NormalPointer = _mesa_NormalPointer;
@@ -492,7 +332,6 @@
 
    /* 1.2 */
    exec->CopyTexSubImage3D = _mesa_CopyTexSubImage3D;
-   exec->DrawRangeElements = _mesa_DrawRangeElements;
    exec->TexImage3D = _mesa_TexImage3D;
    exec->TexSubImage3D = _mesa_TexSubImage3D;
 
@@ -634,38 +473,6 @@
    /* ARB 1. GL_ARB_multitexture */
    exec->ActiveTextureARB = _mesa_ActiveTextureARB;
    exec->ClientActiveTextureARB = _mesa_ClientActiveTextureARB;
-   exec->MultiTexCoord1dARB = _mesa_MultiTexCoord1dARB;
-   exec->MultiTexCoord1dvARB = _mesa_MultiTexCoord1dvARB;
-   exec->MultiTexCoord1fARB = _mesa_MultiTexCoord1fARB;
-   exec->MultiTexCoord1fvARB = _mesa_MultiTexCoord1fvARB;
-   exec->MultiTexCoord1iARB = _mesa_MultiTexCoord1iARB;
-   exec->MultiTexCoord1ivARB = _mesa_MultiTexCoord1ivARB;
-   exec->MultiTexCoord1sARB = _mesa_MultiTexCoord1sARB;
-   exec->MultiTexCoord1svARB = _mesa_MultiTexCoord1svARB;
-   exec->MultiTexCoord2dARB = _mesa_MultiTexCoord2dARB;
-   exec->MultiTexCoord2dvARB = _mesa_MultiTexCoord2dvARB;
-   exec->MultiTexCoord2fARB = _mesa_MultiTexCoord2fARB;
-   exec->MultiTexCoord2fvARB = _mesa_MultiTexCoord2fvARB;
-   exec->MultiTexCoord2iARB = _mesa_MultiTexCoord2iARB;
-   exec->MultiTexCoord2ivARB = _mesa_MultiTexCoord2ivARB;
-   exec->MultiTexCoord2sARB = _mesa_MultiTexCoord2sARB;
-   exec->MultiTexCoord2svARB = _mesa_MultiTexCoord2svARB;
-   exec->MultiTexCoord3dARB = _mesa_MultiTexCoord3dARB;
-   exec->MultiTexCoord3dvARB = _mesa_MultiTexCoord3dvARB;
-   exec->MultiTexCoord3fARB = _mesa_MultiTexCoord3fARB;
-   exec->MultiTexCoord3fvARB = _mesa_MultiTexCoord3fvARB;
-   exec->MultiTexCoord3iARB = _mesa_MultiTexCoord3iARB;
-   exec->MultiTexCoord3ivARB = _mesa_MultiTexCoord3ivARB;
-   exec->MultiTexCoord3sARB = _mesa_MultiTexCoord3sARB;
-   exec->MultiTexCoord3svARB = _mesa_MultiTexCoord3svARB;
-   exec->MultiTexCoord4dARB = _mesa_MultiTexCoord4dARB;
-   exec->MultiTexCoord4dvARB = _mesa_MultiTexCoord4dvARB;
-   exec->MultiTexCoord4fARB = _mesa_MultiTexCoord4fARB;
-   exec->MultiTexCoord4fvARB = _mesa_MultiTexCoord4fvARB;
-   exec->MultiTexCoord4iARB = _mesa_MultiTexCoord4iARB;
-   exec->MultiTexCoord4ivARB = _mesa_MultiTexCoord4ivARB;
-   exec->MultiTexCoord4sARB = _mesa_MultiTexCoord4sARB;
-   exec->MultiTexCoord4svARB = _mesa_MultiTexCoord4svARB;
 
    /* ARB 3. GL_ARB_transpose_matrix */
    exec->LoadTransposeMatrixdARB = _mesa_LoadTransposeMatrixdARB;
@@ -733,7 +540,7 @@
 			       &ctx->ProjectionMatrix,
 			       &ctx->ModelView );
 
-      _math_matrix_analyze( &ctx->_ModelProjectMatrix );
+      _math_matrix_analyse( &ctx->_ModelProjectMatrix );
    }
 }
 
@@ -824,8 +631,8 @@
 static void
 update_projection( GLcontext *ctx )
 {
-   _math_matrix_analyze( &ctx->ProjectionMatrix );
-
+   _math_matrix_analyse( &ctx->ProjectionMatrix );
+      
    /* Recompute clip plane positions in clipspace.  This is also done
     * in _mesa_ClipPlane().
     */
@@ -921,7 +728,7 @@
       gl_print_state("", new_state);
 
    if (new_state & _NEW_MODELVIEW)
-      _math_matrix_analyze( &ctx->ModelView );
+      _math_matrix_analyse( &ctx->ModelView );
 
    if (new_state & _NEW_PROJECTION)
       update_projection( ctx );
@@ -930,7 +737,7 @@
       _mesa_update_texture_matrices( ctx );
 
    if (new_state & _NEW_COLOR_MATRIX)
-      _math_matrix_analyze( &ctx->ColorMatrix );
+      _math_matrix_analyse( &ctx->ColorMatrix );
 
    /* References ColorMatrix.type (derived above).
     */
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index e481bed..eee2a3a 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -1,4 +1,4 @@
-/* $Id: texstate.c,v 1.24 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: texstate.c,v 1.25 2000/11/24 10:25:06 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1116,7 +1116,7 @@
 	 else if (pname==GL_EYE_PLANE) {
             /* Transform plane equation by the inverse modelview matrix */
             if (ctx->ModelView.flags & MAT_DIRTY_INVERSE) {
-               _math_matrix_analyze( &ctx->ModelView );
+               _math_matrix_analyse( &ctx->ModelView );
             }
             gl_transform_vector( texUnit->EyePlaneS, params,
                                  ctx->ModelView.inv );
@@ -1164,7 +1164,7 @@
 	 else if (pname==GL_EYE_PLANE) {
             /* Transform plane equation by the inverse modelview matrix */
             if (ctx->ModelView.flags & MAT_DIRTY_INVERSE) {
-               _math_matrix_analyze( &ctx->ModelView );
+               _math_matrix_analyse( &ctx->ModelView );
             }
             gl_transform_vector( texUnit->EyePlaneT, params,
                                  ctx->ModelView.inv );
@@ -1208,7 +1208,7 @@
 	 else if (pname==GL_EYE_PLANE) {
             /* Transform plane equation by the inverse modelview matrix */
             if (ctx->ModelView.flags & MAT_DIRTY_INVERSE) {
-               _math_matrix_analyze( &ctx->ModelView );
+               _math_matrix_analyse( &ctx->ModelView );
             }
             gl_transform_vector( texUnit->EyePlaneR, params,
                                  ctx->ModelView.inv );
@@ -1244,7 +1244,7 @@
 	 else if (pname==GL_EYE_PLANE) {
             /* Transform plane equation by the inverse modelview matrix */
             if (ctx->ModelView.flags & MAT_DIRTY_INVERSE) {
-               _math_matrix_analyze( &ctx->ModelView );
+               _math_matrix_analyse( &ctx->ModelView );
             }
             gl_transform_vector( texUnit->EyePlaneQ, params,
                                  ctx->ModelView.inv );
@@ -1258,6 +1258,9 @@
          gl_error( ctx, GL_INVALID_ENUM, "glTexGenfv(coord)" );
 	 return;
    }
+   
+   if (ctx->Driver.TexGen)
+      ctx->Driver.TexGen( ctx, coord, pname, params );
 
    ctx->NewState |= _NEW_TEXTURE;
 }
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index d03f0b7..7b9b105 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -1,4 +1,4 @@
-/* $Id: varray.c,v 1.32 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: varray.c,v 1.33 2000/11/24 10:25:06 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -692,3 +692,48 @@
 
 
 
+/* Transform the array components now, upto the setup call.  When
+ * actual draw commands arrive, the data will be merged prior to
+ * calling render_vb.  
+ */
+void
+_mesa_LockArraysEXT(GLint first, GLsizei count)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "glLockArraysEXT" );
+
+   if (MESA_VERBOSE & VERBOSE_API)
+      fprintf(stderr, "glLockArrays %d %d\n", first, count);
+
+   if (first == 0 && count > 0 && count <= ctx->Const.MaxArrayLockSize) {
+      ctx->Array.LockFirst = first;
+      ctx->Array.LockCount = count;
+   } 
+   else {
+      ctx->Array.LockFirst = 0;
+      ctx->Array.LockCount = 0;
+   }
+
+   ctx->NewState |= _NEW_ARRAY;
+
+   if (ctx->Driver.LockArraysEXT)
+      ctx->Driver.LockArraysEXT( ctx, first, count );
+}
+
+
+void
+_mesa_UnlockArraysEXT( void )
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "glUnlockArraysEXT" );
+
+   if (MESA_VERBOSE & VERBOSE_API)
+      fprintf(stderr, "glUnlockArrays\n");
+
+   ctx->Array.LockFirst = 0;
+   ctx->Array.LockCount = 0;
+   ctx->NewState |= _NEW_ARRAY;
+
+   if (ctx->Driver.UnlockArraysEXT)
+      ctx->Driver.UnlockArraysEXT( ctx );
+}
diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
index 3e30cf5..c365d91 100644
--- a/src/mesa/main/varray.h
+++ b/src/mesa/main/varray.h
@@ -1,4 +1,4 @@
-/* $Id: varray.h,v 1.10 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: varray.h,v 1.11 2000/11/24 10:25:06 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -36,6 +36,12 @@
 _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride,
                     const GLvoid *ptr);
 
+extern void
+_mesa_UnlockArraysEXT( void );
+
+extern void
+_mesa_LockArraysEXT(GLint first, GLsizei count);
+
 
 extern void
 _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
diff --git a/src/mesa/math/m_matrix.c b/src/mesa/math/m_matrix.c
index 0a722fe..0e04e7c 100644
--- a/src/mesa/math/m_matrix.c
+++ b/src/mesa/math/m_matrix.c
@@ -1,4 +1,4 @@
-/* $Id: m_matrix.c,v 1.3 2000/11/20 15:16:33 brianp Exp $ */
+/* $Id: m_matrix.c,v 1.4 2000/11/24 10:25:11 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -739,7 +739,7 @@
 /* Determine type and flags from scratch.  This is expensive enough to
  * only want to do it once.
  */
-static void analyze_from_scratch( GLmatrix *mat )
+static void analyse_from_scratch( GLmatrix *mat )
 {
    const GLfloat *m = mat->m;
    GLuint mask = 0;
@@ -851,7 +851,7 @@
 /* Analyse a matrix given that its flags are accurate - this is the
  * more common operation, hopefully. 
  */
-static void analyze_from_flags( GLmatrix *mat )
+static void analyse_from_flags( GLmatrix *mat )
 {
    const GLfloat *m = mat->m;
 
@@ -891,13 +891,13 @@
 
 
 void 
-_math_matrix_analyze( GLmatrix *mat ) 
+_math_matrix_analyse( GLmatrix *mat ) 
 {
    if (mat->flags & MAT_DIRTY_TYPE) {
       if (mat->flags & MAT_DIRTY_FLAGS) 
-	 analyze_from_scratch( mat );
+	 analyse_from_scratch( mat );
       else
-	 analyze_from_flags( mat );
+	 analyse_from_flags( mat );
    }
 
    if (mat->inv && (mat->flags & MAT_DIRTY_INVERSE)) {
diff --git a/src/mesa/math/m_matrix.h b/src/mesa/math/m_matrix.h
index 8eedbdb..0d3c61d 100644
--- a/src/mesa/math/m_matrix.h
+++ b/src/mesa/math/m_matrix.h
@@ -1,4 +1,4 @@
-/* $Id: m_matrix.h,v 1.1 2000/11/16 21:05:41 keithw Exp $ */
+/* $Id: m_matrix.h,v 1.2 2000/11/24 10:25:11 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -151,7 +151,7 @@
 _math_matrix_copy( GLmatrix *to, const GLmatrix *from );
 
 extern void
-_math_matrix_analyze( GLmatrix *mat );
+_math_matrix_analyse( GLmatrix *mat );
 
 extern void
 _math_matrix_print( const GLmatrix *m );
diff --git a/src/mesa/math/m_xform.c b/src/mesa/math/m_xform.c
index 8257d80..a6e34e9 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.3 2000/11/18 08:10:24 jtaylor Exp $ */
+/* $Id: m_xform.c,v 1.4 2000/11/24 10:25:11 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -173,7 +173,7 @@
 
 
 /* Useful for one-off point transformations, as in clipping.
- * Note that because the matrix isn't analyzed we do too many
+ * Note that because the matrix isn't analysed we do too many
  * multiplies, and that the result is always 4-clean.
  */
 void gl_transform_point_sz( GLfloat Q[4], const GLfloat M[16],
diff --git a/src/mesa/swrast_setup/ss_vbtmp.h b/src/mesa/swrast_setup/ss_vbtmp.h
index 47b3005..1303883 100644
--- a/src/mesa/swrast_setup/ss_vbtmp.h
+++ b/src/mesa/swrast_setup/ss_vbtmp.h
@@ -55,7 +55,7 @@
 
    /* TODO:  Get import_client_data to pad vectors out to 4 cleanly.
     */
-   gl_import_client_data( VB, tnl->_RenderFlags,
+   _tnl_import_client_data( VB, tnl->_RenderFlags,
 			  (VB->ClipOrMask
 			   ? /*  VEC_CLEAN| */VEC_WRITABLE|VEC_GOOD_STRIDE
 			   : /*  VEC_CLEAN| */VEC_GOOD_STRIDE));
diff --git a/src/mesa/tnl/t_context.c b/src/mesa/tnl/t_context.c
index 7860845..457aa1c 100644
--- a/src/mesa/tnl/t_context.c
+++ b/src/mesa/tnl/t_context.c
@@ -1,5 +1,6 @@
 #include "mtypes.h"
 #include "mem.h"
+#include "vtxfmt.h"
 
 #include "t_context.h"
 #include "t_clip.h"
@@ -15,10 +16,11 @@
 #include "t_vb.h"
 #include "t_vbrender.h"
 #include "t_vbxform.h"
+#include "t_vtxfmt.h"
 #include "tnl.h"
 
 #if !defined(THREADS)
-struct immediate *_mesa_CurrentInput = NULL;
+struct immediate *_tnl_CurrentInput = NULL;
 #endif
 
 
@@ -31,9 +33,9 @@
    if ((IM->Flag[IM->Count] & (VERT_BEGIN|VERT_END)) != VERT_END ||
        (flush_flags & (FLUSH_STORED_VERTICES|FLUSH_UPDATE_CURRENT)))
    {
-      if (IM->Flag[IM->Start])
-	 _mesa_flush_vb( ctx );
-
+      if (IM->Flag[IM->Start]) 
+	 _tnl_maybe_transform_vb( IM );
+      
       /* Although this code updates the ctx->Current values, that bit
        * is left set as there is no easy mechanism to set it
        * elsewhere.  This means that each time core wants to examine
@@ -50,71 +52,30 @@
 }
 
 
-GLboolean
-_tnl_CreateContext( GLcontext *ctx )
+
+ void
+_tnl_MakeCurrent( GLcontext *ctx, 
+		  GLframebuffer *drawBuffer, 
+		  GLframebuffer *readBuffer )
 {
-   TNLcontext *tnl;
-   static int firsttime = 1;
-
-   /* Onetime initializations.  Doesn't really matter if this gets
-    * done twice: no need for mutexes.
-    */
-   if (firsttime) {
-      firsttime = 0;
-      _tnl_clip_init( );
-      _tnl_eval_init( );
-      _tnl_shade_init( );
-      _tnl_texture_init( );
-      _tnl_trans_elt_init( );
-      _tnl_vbrender_init( );
-      _tnl_stages_init( );
-   }
-
-   /* Create the TNLcontext structure
-    */
-   ctx->swtnl_context = tnl = CALLOC( sizeof(TNLcontext) );
-   if (!tnl) {
-      return GL_FALSE;
-   }
-
-   /* Create and hook in the data structures available from ctx.
-    */
-   ctx->swtnl_vb = (void *)gl_vb_create_for_immediate( ctx );
-   if (!ctx->swtnl_vb) {
-      FREE(tnl);
-      ctx->swtnl_context = 0;
-      return GL_FALSE;
-   }
-
-   ctx->swtnl_im = (void *)TNL_VB(ctx)->IM;
+#ifndef THREADS
+   SET_IMMEDIATE( ctx, TNL_VB(ctx)->IM );
+#endif
+}
 
 
-   /* Initialize tnl state.
-    */
-   _tnl_dlist_init( ctx );
-   _tnl_pipeline_init( ctx );
-
-   tnl->_CurrentFlag = (VERT_NORM |
-                        VERT_INDEX |
-                        VERT_RGBA |
-                        VERT_SPEC_RGB |
-                        VERT_FOG_COORD |
-                        VERT_EDGE |
-                        VERT_TEX0_12 |
-                        VERT_TEX1_12 |
-                        VERT_TEX2_12 |
-                        VERT_TEX3_12 |
-                        VERT_MATERIAL);
-
-   tnl->_CurrentPrimitive = GL_POLYGON+1;
-
-   gl_reset_vb( TNL_VB(ctx) );
-   gl_reset_input( ctx );
+/* Update all state that references _NeedEyeCoords 
+ */
+ void
+_tnl_LightingSpaceChange( GLcontext *ctx )
+{
+   _tnl_update_normal_transform( ctx ); 
+}
 
 
-   /* Set a few default values in the driver struct.  This is a
-    * temporary mechanism.
-    */
+static void
+install_driver_callbacks( GLcontext *ctx )
+{
    ctx->Driver.RenderVBCulledTab = _tnl_render_tab_cull;
    ctx->Driver.RenderVBClippedTab = _tnl_render_tab_clipped;
    ctx->Driver.RenderVBRawTab = _tnl_render_tab_raw;
@@ -132,6 +93,84 @@
    ctx->Driver.SecondaryColorPointer = _tnl_SecondaryColorPointer;
    ctx->Driver.TexCoordPointer = _tnl_TexCoordPointer;
    ctx->Driver.EdgeFlagPointer = _tnl_EdgeFlagPointer;
+   ctx->Driver.LockArraysEXT = _tnl_LockArraysEXT;
+   ctx->Driver.UnlockArraysEXT = _tnl_UnlockArraysEXT;
+}
+
+
+
+GLboolean
+_tnl_CreateContext( GLcontext *ctx )
+{
+   TNLcontext *tnl;
+   static int firsttime = 1;
+
+   /* Onetime initializations.  Doesn't really matter if this gets
+    * done twice: no need for mutexes.
+    */
+   if (firsttime) {
+      firsttime = 0;
+      _tnl_clip_init();
+      _tnl_eval_init();
+      _tnl_shade_init();
+      _tnl_texture_init();
+      _tnl_trans_elt_init();
+      _tnl_vbrender_init();
+      _tnl_stages_init();
+   }
+
+   /* Create the TNLcontext structure
+    */
+   ctx->swtnl_context = tnl = CALLOC( sizeof(TNLcontext) );
+   if (!tnl) {
+      return GL_FALSE;
+   }
+
+   /* Create and hook in the data structures available from ctx.
+    */
+   ctx->swtnl_vb = (void *)_tnl_vb_create_for_immediate( ctx );
+   if (!ctx->swtnl_vb) {
+      FREE(tnl);
+      ctx->swtnl_context = 0;
+      return GL_FALSE;
+   }
+
+   ctx->swtnl_im = (void *)TNL_VB(ctx)->IM;
+
+
+   /* Initialize tnl state.
+    */
+   _tnl_dlist_init( ctx );
+   _tnl_pipeline_init( ctx );
+   _tnl_vtxfmt_init( ctx );
+   _tnl_cva_init( ctx );
+
+   _tnl_reset_vb( TNL_VB(ctx) );
+   _tnl_reset_input( ctx, 0, 0 );	/* initially outside begin/end */
+
+
+   tnl->_CurrentFlag = (VERT_NORM |
+                        VERT_INDEX |
+                        VERT_RGBA |
+                        VERT_SPEC_RGB |
+                        VERT_FOG_COORD |
+                        VERT_EDGE |
+                        VERT_TEX0_12 |
+                        VERT_TEX1_12 |
+                        VERT_TEX2_12 |
+                        VERT_TEX3_12 |
+                        VERT_MATERIAL);
+
+   tnl->_CurrentPrimitive = GL_POLYGON+1;
+
+   /* Hook our functions into exec and compile dispatch tables.
+    */
+   _mesa_install_save_vtxfmt( ctx, &tnl->vtxfmt );
+   _mesa_install_exec_vtxfmt( ctx, &tnl->vtxfmt );
+
+   /* Set a few default values in the driver struct.
+    */
+   install_driver_callbacks(ctx);
 
    return GL_TRUE;
 }
@@ -143,9 +182,9 @@
    TNLcontext *tnl = TNL_CONTEXT(ctx);
 
    if (TNL_CURRENT_IM(ctx) != TNL_VB(ctx)->IM)
-      gl_immediate_free( TNL_CURRENT_IM(ctx) );
+      _tnl_immediate_free( TNL_CURRENT_IM(ctx) );
 
-   gl_vb_free( TNL_VB(ctx) );
+   _tnl_vb_free( TNL_VB(ctx) );
 
    /* Free cache of immediate buffers. */
    while (tnl->nr_im_queued-- > 0) {
@@ -156,23 +195,15 @@
 }
 
 
-/* Update all state that references _NeedEyeCoords
- */
-void
-_tnl_LightingSpaceChange( GLcontext *ctx )
-{
-   _tnl_update_normal_transform( ctx );
-}
-
 
 void
 _tnl_InvalidateState( GLcontext *ctx, GLuint new_state )
 {
    if (new_state & _NEW_LIGHT)
-      gl_update_lighting_function(ctx);
+      _tnl_update_lighting_function(ctx);
 
    if (new_state & _NEW_ARRAY)
-      gl_update_client_state( ctx );
+      _tnl_update_client_state( ctx );
 
    if (new_state & _NEW_TEXTURE)
       if (ctx->_Enabled & ENABLE_TEXGEN_ANY)
@@ -182,20 +213,54 @@
 		    _DD_NEW_TRI_LIGHT_TWOSIDE |
 		    _DD_NEW_SEPERATE_SPECULAR |
 		    _DD_NEW_TRI_UNFILLED ))
-      gl_update_clipmask(ctx);
+      _tnl_update_clipmask(ctx);
 
    if (new_state & _TNL_NEW_NORMAL_TRANSFORM)
       _tnl_update_normal_transform( ctx );
 
-   gl_update_pipelines(ctx);
+   _tnl_update_pipelines(ctx);
 }
 
 void
-_tnl_MakeCurrent( GLcontext *ctx,
-		  GLframebuffer *drawBuffer,
-		  GLframebuffer *readBuffer )
+_tnl_wakeup_exec( GLcontext *ctx )
 {
-#ifndef THREADS
-   SET_IMMEDIATE( ctx, TNL_VB(ctx)->IM );
-#endif
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   
+   fprintf(stderr, "%s\n", __FUNCTION__);
+
+   install_driver_callbacks(ctx);
+
+   /* Hook our functions into exec and compile dispatch tables.
+    */
+   _mesa_install_exec_vtxfmt( ctx, &tnl->vtxfmt );
+
+   /* Call all appropriate driver callbacks to revive state.
+    */
+   _tnl_MakeCurrent( ctx, ctx->DrawBuffer, ctx->ReadBuffer );
+   _tnl_UnlockArraysEXT( ctx );
+   _tnl_LockArraysEXT( ctx, ctx->Array.LockFirst, ctx->Array.LockCount );
+
+   /* Equivalent to calling all _tnl_*Pointer functions:
+    */
+   tnl->_ArrayNewState = ~0;	
+
+   /* Assume we haven't been getting state updates either:
+    */
+   _tnl_InvalidateState( ctx, ~0 );
+   
+   /* Special state not restored by other methods:
+    */
+   _tnl_recalc_current_flag( ctx );
 }
+
+void
+_tnl_wakeup_save_exec( GLcontext *ctx )
+{
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+
+   fprintf(stderr, "%s\n", __FUNCTION__);
+
+   _tnl_wakeup_exec( ctx );
+   _mesa_install_save_vtxfmt( ctx, &tnl->vtxfmt );
+}
+
diff --git a/src/mesa/tnl/t_context.h b/src/mesa/tnl/t_context.h
index 484b6b1..5f6de86 100644
--- a/src/mesa/tnl/t_context.h
+++ b/src/mesa/tnl/t_context.h
@@ -1,5 +1,5 @@
 
-/* $Id: t_context.h,v 1.3 2000/11/22 07:32:18 joukj Exp $ */
+/* $Id: t_context.h,v 1.4 2000/11/24 10:25:12 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -142,6 +142,9 @@
 #define VERT_TEX3_1234    (VERT_TEX3_4|VERT_TEX3_123)
 #define VERT_TEX3_ANY     VERT_TEX3_12
 
+#define VERT_TEX_ANY_ANY (VERT_TEX0_ANY|VERT_TEX1_ANY| \
+			  VERT_TEX2_ANY|VERT_TEX3_ANY)
+
 #define NR_TEXSIZE_BITS   3
 #define VERT_TEX_ANY(i)   (VERT_TEX0_ANY << ((i) * NR_TEXSIZE_BITS))
 
@@ -173,12 +176,6 @@
                             VERT_FOG_COORD)
 
 
-/* For beginstate
- */
-#define VERT_BEGIN_0    0x1	   /* glBegin (if initially inside beg/end) */
-#define VERT_BEGIN_1    0x2	   /* glBegin (if initially outside beg/end) */
-#define VERT_ERROR_0    0x4	   /* invalid_operation in initial state 0 */
-#define VERT_ERROR_1    0x8        /* invalid_operation in initial state 1 */
 
 
 struct gl_pipeline;
@@ -240,7 +237,6 @@
 #define VERT_ERROR_0    0x4	   /* invalid_operation in initial state 0 */
 #define VERT_ERROR_1    0x8        /* invalid_operation in initial state 1 */
 
-
 /* KW: Represents everything that can take place between a begin and
  * end, and can represent multiple begin/end pairs.  This plus *any*
  * state variable (GLcontext) should be all you need to replay the
@@ -259,7 +255,8 @@
     */
    GLuint Start, Count;
    GLuint LastData;		/* count or count+1 */
-   GLuint AndFlag, OrFlag, BeginState;
+   GLuint AndFlag, OrFlag;
+   GLuint BeginState, SavedBeginState;
    GLuint LastPrimitive;	
 
    GLuint ArrayAndFlags;	/* precalc'ed for glArrayElt */
@@ -437,7 +434,7 @@
 } TNLvertexbuffer;
 
 
-typedef void (*gl_shade_func)( struct vertex_buffer *VB );
+typedef void (*shade_func)( struct vertex_buffer *VB );
 
 typedef void (*clip_interp_func)( struct vertex_buffer *VB, GLuint dst,
                                   GLfloat t, GLuint in, GLuint out );
@@ -531,12 +528,26 @@
    GLuint orflag;
    GLuint merge;
 
+   GLuint locked;
    GLuint lock_changed;
    GLuint last_orflag;
    GLuint last_array_flags;
    GLuint last_array_new_state;
 };
 
+/* These are used to make the ctx->Current values look like
+ * arrays (with zero StrideB).
+ */
+struct gl_fallback_arrays {
+   struct gl_client_array Normal;
+   struct gl_client_array Color;
+   struct gl_client_array SecondaryColor;
+   struct gl_client_array FogCoord;
+   struct gl_client_array Index;
+   struct gl_client_array TexCoord[MAX_TEXTURE_UNITS];
+   struct gl_client_array EdgeFlag;
+};
+
 
 
 typedef void (*texgen_func)( struct vertex_buffer *VB,
@@ -577,18 +588,24 @@
    clip_poly_func *_poly_clip_tab;
    clip_line_func *_line_clip_tab;
    clip_interp_func _ClipInterpFunc; /* Clip interpolation function */
-   normal_func *_NormalTransform;
-   gl_shade_func *_shade_func_tab;   /* Current shading function table */
+   normal_func *_NormalTransform; 
+   shade_func *_shade_func_tab;   /* Current shading function table */
 
    GLenum _CurrentPrimitive;         /* Prim or GL_POLYGON+1 */
    GLuint _CurrentFlag;
 
+   GLboolean _ReplayHardBeginEnd; /* Display list execution of rect, etc */
+
    GLuint _RenderFlags;	      /* Active inputs to render stage */
 
    /* Cache of unused immediate structs */
    struct immediate *freed_im_queue;
    GLuint nr_im_queued;
 
+   struct gl_fallback_arrays Fallback; 
+
+   GLvertexformat vtxfmt;
+
 } TNLcontext;
 
 
@@ -597,7 +614,6 @@
 #define TNL_CURRENT_IM(ctx) ((struct immediate *)(ctx->swtnl_im))
 #define TNL_VB(ctx) ((struct vertex_buffer *)(ctx->swtnl_vb))
 
-extern void _tnl_reset_immediate( GLcontext *ctx );
 extern GLboolean _tnl_flush_vertices( GLcontext *ctx, GLuint flush_flags );
 
 
@@ -617,12 +633,12 @@
 #define GET_IMMEDIATE  struct immediate *IM = TNL_CURRENT_IM(((GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())))
 #define SET_IMMEDIATE(ctx, im)  ctx->swtnl_im = (void *)im
 #else
-extern struct immediate *_mesa_CurrentInput;
-#define GET_IMMEDIATE struct immediate *IM = _mesa_CurrentInput
+extern struct immediate *_tnl_CurrentInput;
+#define GET_IMMEDIATE struct immediate *IM = _tnl_CurrentInput
 #define SET_IMMEDIATE(ctx, im)			\
 do {						\
    ctx->swtnl_im = (void *)im;			\
-   _mesa_CurrentInput = im;			\
+   _tnl_CurrentInput = im;			\
 } while (0)
 #endif
 
diff --git a/src/mesa/tnl/t_pipeline.c b/src/mesa/tnl/t_pipeline.c
index d61f63f..42b9d05 100644
--- a/src/mesa/tnl/t_pipeline.c
+++ b/src/mesa/tnl/t_pipeline.c
@@ -1,4 +1,4 @@
-/* $Id: t_pipeline.c,v 1.3 2000/11/22 07:32:18 joukj Exp $ */
+/* $Id: t_pipeline.c,v 1.4 2000/11/24 10:25:12 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -41,6 +41,7 @@
 #include "t_bbox.h"
 #include "t_clip.h"
 #include "t_cva.h"
+#include "t_debug.h"
 #include "t_fog.h"
 #include "t_light.h"
 #include "t_pipeline.h"
@@ -55,7 +56,7 @@
 
 
 
-void gl_print_pipe_ops( const char *msg, GLuint flags )
+void _tnl_print_pipe_ops( const char *msg, GLuint flags )
 {
    fprintf(stderr,
 	   "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s\n",
@@ -80,13 +81,13 @@
 
 /* Have to reset only those parts of the vb which are being recalculated.
  */
-void gl_reset_cva_vb( struct vertex_buffer *VB, GLuint stages )
+void _tnl_reset_cva_vb( struct vertex_buffer *VB, GLuint stages )
 {
    GLcontext *ctx = VB->ctx;
    TNLcontext *tnl = TNL_CONTEXT(ctx);
 
    if (MESA_VERBOSE&VERBOSE_PIPELINE)
-      gl_print_pipe_ops( "reset cva vb", stages );
+      _tnl_print_pipe_ops( "reset cva vb", stages ); 
 
    if (stages & PIPE_OP_VERT_XFORM)
    {
@@ -142,8 +143,8 @@
    p->type = type;
    p->ops = 0;
 
-   for (i = 0 ; i < gl_default_nr_stages ; i++)
-      p->state_change |= gl_default_pipeline[i].state_change;
+   for (i = 0 ; i < _tnl_default_nr_stages ; i++) 
+      p->state_change |= _tnl_default_pipeline[i].state_change;
 }
 
 
@@ -151,12 +152,12 @@
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
 
-   MEMCPY( tnl->PipelineStage,
-	   gl_default_pipeline,
-	   sizeof(*gl_default_pipeline) * gl_default_nr_stages );
-
-   tnl->NrPipelineStages = gl_default_nr_stages;
-
+   MEMCPY( tnl->PipelineStage, 
+	   _tnl_default_pipeline, 
+	   sizeof(*_tnl_default_pipeline) * _tnl_default_nr_stages );
+   
+   tnl->NrPipelineStages = _tnl_default_nr_stages;
+      
    pipeline_ctr( &tnl->CVA.elt, ctx, PIPE_IMMEDIATE);
    pipeline_ctr( &tnl->CVA.pre, ctx, PIPE_PRECALC );
 }
@@ -224,7 +225,7 @@
 
    if (MESA_VERBOSE & VERBOSE_PIPELINE) {
       fprintf(stderr, ": Rebuild pipeline\n");
-      gl_print_vert_flags("orflag", cva->orflag);
+      _tnl_print_vert_flags("orflag", cva->orflag);
    }
 
 
@@ -290,7 +291,7 @@
    pre->changed_ops = changed_ops;
 }
 
-void gl_build_precalc_pipeline( GLcontext *ctx )
+void _tnl_build_precalc_pipeline( GLcontext *ctx )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    struct gl_pipeline *pre = &tnl->CVA.pre;
@@ -307,7 +308,7 @@
    tnl->CVA.orflag = 0;
 
    if (MESA_VERBOSE&VERBOSE_PIPELINE)
-      gl_print_pipeline( ctx, pre );
+      _tnl_print_pipeline( ctx, pre ); 
 }
 
 
@@ -378,7 +379,7 @@
 
 
 
-void gl_build_immediate_pipeline( GLcontext *ctx )
+void _tnl_build_immediate_pipeline( GLcontext *ctx )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    struct gl_pipeline *elt = &tnl->CVA.elt;
@@ -392,12 +393,12 @@
    tnl->CVA.orflag = 0;
 
    if (MESA_VERBOSE&VERBOSE_PIPELINE)
-      gl_print_pipeline( ctx, elt );
+      _tnl_print_pipeline( ctx, elt ); 
 }
 
 #define INTERESTED ~0
 
-void gl_update_pipelines( GLcontext *ctx )
+void _tnl_update_pipelines( GLcontext *ctx )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    GLuint newstate = ctx->NewState;
@@ -476,7 +477,7 @@
    cva->last_array_flags = tnl->_ArrayFlags;
 }
 
-void gl_run_pipeline( struct vertex_buffer *VB )
+void _tnl_run_pipeline( struct vertex_buffer *VB )
 {
    struct gl_pipeline *pipe = VB->pipeline;
    struct gl_pipeline_stage **stages = pipe->stages;
@@ -484,8 +485,8 @@
 
    pipe->data_valid = 1;	/* optimized stages might want to reset this. */
 
-   if (0) gl_print_pipeline( VB->ctx, pipe );
-
+   if (0) _tnl_print_pipeline( VB->ctx, pipe );
+   
    START_FAST_MATH(x);
 
    for ( VB->Culled = 0; *stages && !VB->Culled ; stages++ )
diff --git a/src/mesa/tnl/t_pipeline.h b/src/mesa/tnl/t_pipeline.h
index 5609b79..b9ae641 100644
--- a/src/mesa/tnl/t_pipeline.h
+++ b/src/mesa/tnl/t_pipeline.h
@@ -1,4 +1,4 @@
-/* $Id: t_pipeline.h,v 1.2 2000/11/22 07:32:18 joukj Exp $ */
+/* $Id: t_pipeline.h,v 1.3 2000/11/24 10:25:12 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -36,24 +36,25 @@
 #include "mtypes.h"
 #include "t_context.h"
 
-extern void gl_update_materials( struct vertex_buffer *VB);
-
 extern void _tnl_pipeline_init( GLcontext *ctx );
-extern void gl_update_pipelines( GLcontext *ctx );
 
-extern void gl_build_precalc_pipeline( GLcontext *ctx );
-extern void gl_build_immediate_pipeline( GLcontext *ctx );
+extern void _tnl_update_materials( struct vertex_buffer *VB);
 
-extern void gl_print_vert_flags( const char *name, GLuint flags );
-extern void gl_print_pipeline( GLcontext *ctx, struct gl_pipeline *p );
-extern void gl_print_active_pipeline( GLcontext *ctx, struct gl_pipeline *p );
+extern void _tnl_update_pipelines( GLcontext *ctx );
 
-extern void gl_run_pipeline( struct vertex_buffer *VB );
+extern void _tnl_build_precalc_pipeline( GLcontext *ctx );
+extern void _tnl_build_immediate_pipeline( GLcontext *ctx );
 
-extern void gl_clean_color( struct vertex_buffer *VB );
+extern void _tnl_print_vert_flags( const char *name, GLuint flags );
+extern void _tnl_print_pipeline( GLcontext *ctx, struct gl_pipeline *p );
+extern void _tnl_print_active_pipeline( GLcontext *ctx, struct gl_pipeline *p );
 
-extern void gl_reset_cva_vb( struct vertex_buffer *VB, GLuint stages );
+extern void _tnl_run_pipeline( struct vertex_buffer *VB );
 
-extern void gl_print_pipe_ops( const char *msg, GLuint flags );
+extern void _tnl_clean_color( struct vertex_buffer *VB );
+
+extern void _tnl_reset_cva_vb( struct vertex_buffer *VB, GLuint stages );
+
+extern void _tnl_print_pipe_ops( const char *msg, GLuint flags );
 
 #endif
diff --git a/src/mesa/tnl/tnl.h b/src/mesa/tnl/tnl.h
index c820776..c14ed29 100644
--- a/src/mesa/tnl/tnl.h
+++ b/src/mesa/tnl/tnl.h
@@ -44,5 +44,19 @@
 extern void
 _tnl_InvalidateState( GLcontext *ctx, GLuint new_state );
 
+/* Functions to revive the tnl module after being unhooked from
+ * dispatch and/or driver callbacks.
+ */
+
+/* Restore just the ctx->Exec table:
+ */
+extern void
+_tnl_wakeup_exec( GLcontext *ctx );
+
+/* Restore both ctx->Exec and ctx->Save:
+ */
+extern void
+_tnl_wakeup_save_exec( GLcontext *ctx );
+
 
 #endif
diff --git a/src/mesa/x86/common_x86_asm.h b/src/mesa/x86/common_x86_asm.h
index f52f56d..517e668 100644
--- a/src/mesa/x86/common_x86_asm.h
+++ b/src/mesa/x86/common_x86_asm.h
@@ -1,4 +1,4 @@
-/* $Id: common_x86_asm.h,v 1.3 2000/11/16 21:05:41 keithw Exp $ */
+/* $Id: common_x86_asm.h,v 1.4 2000/11/24 10:25:10 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -39,7 +39,7 @@
 #ifndef __COMMON_X86_ASM_H__
 #define __COMMON_X86_ASM_H__
 
-/* Do not reference types.h from this file.
+/* Do not reference mtypes.h from this file.
  */
 #include "common_x86_features.h"