New mechanism for thread-safe GL API dispatch. C-based dispatch is faster.
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 28 Mar 2001 17:19:58 +0000 (17:19 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 28 Mar 2001 17:19:58 +0000 (17:19 +0000)
Folded glapinoop.c code into glapi.c.
Added code to glapitemp.h to fill in dispatch tables.
Updated Makefiles.

src/mesa/Makefile.X11
src/mesa/glapi/glapi.c
src/mesa/glapi/glapi.h
src/mesa/glapi/glapitemp.h
src/mesa/main/Makefile.DJ
src/mesa/main/Makefile.X11
src/mesa/main/context.c
src/mesa/main/dispatch.c

index a2c0388..fe2e4ce 100644 (file)
@@ -1,8 +1,8 @@
-# $Id: Makefile.X11,v 1.47 2001/03/19 02:25:35 keithw Exp $
+# $Id: Makefile.X11,v 1.48 2001/03/28 17:19:58 brianp Exp $
 
 # Mesa 3-D graphics library
 # Version:  3.5
-# Copyright (C) 1995-2000  Brian Paul
+# Copyright (C) 1995-2001  Brian Paul
 
 # Makefile for core library
 
@@ -74,7 +74,6 @@ CORE_SOURCES = \
        fog.c \
        get.c \
        glapi.c \
-       glapinoop.c \
        glthread.c \
        hash.c \
        highpc.c \
index 64459e7..9e3117e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: glapi.c,v 1.51 2001/03/12 00:48:38 gareth Exp $ */
+/* $Id: glapi.c,v 1.52 2001/03/28 17:19:58 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
 
 #include "glheader.h"
 #include "glapi.h"
-#include "glapinoop.h"
 #include "glapioffsets.h"
 #include "glapitable.h"
 #include "glthread.h"
 
-/* This is used when thread safety is disabled */
-struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
-struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table;
 
-/* Used when thread safety disabled */
-void *_glapi_Context = NULL;
 
+/***** BEGIN NO-OP DISPATCH *****/
+
+static GLboolean WarnFlag = GL_FALSE;
+
+void
+_glapi_noop_enable_warnings(GLboolean enable)
+{
+   WarnFlag = enable;
+}
+
+static GLboolean
+warn(void)
+{
+   if (WarnFlag || getenv("MESA_DEBUG") || getenv("LIBGL_DEBUG"))
+      return GL_TRUE;
+   else
+      return GL_FALSE;
+}
+
+
+#define KEYWORD1 static
+#define KEYWORD2
+#define NAME(func)  NoOp##func
+
+#define F stderr
+
+#define DISPATCH(func, args, msg)                      \
+   if (warn()) {                                       \
+      fprintf(stderr, "GL User Error: calling ");      \
+      fprintf msg;                                     \
+      fprintf(stderr, " without a current context\n"); \
+   }
+
+#define RETURN_DISPATCH(func, args, msg)               \
+   if (warn()) {                                       \
+      fprintf(stderr, "GL User Error: calling ");      \
+      fprintf msg;                                     \
+      fprintf(stderr, " without a current context\n"); \
+   }                                                   \
+   return 0
+
+#define DISPATCH_TABLE_NAME __glapi_noop_table
+#define UNUSED_TABLE_NAME __usused_noop_functions
+
+#define TABLE_ENTRY(name) (void *) NoOp##name
+
+static int NoOpUnused(void)
+{
+   if (warn()) {
+      fprintf(stderr, "GL User Error: calling extension function without a current context\n");
+   }
+   return 0;
+}
+
+#include "glapitemp.h"
+
+/***** END NO-OP DISPATCH *****/
+
+
+
+/***** BEGIN THREAD-SAFE DISPATCH *****/
+/* if we support thread-safety, build a special dispatch table for use
+ * in thread-safety mode (ThreadSafe == GL_TRUE).  Each entry in the
+ * dispatch table will call _glthread_GetTSD() to get the actual dispatch
+ * table bound to the current thread, then jump through that table.
+ */
 
 #if defined(THREADS)
 
-/* Flag to indicate whether thread-safe dispatch is enabled */
-static GLboolean ThreadSafe = GL_FALSE;
+static GLboolean ThreadSafe = GL_FALSE;  /* In thread-safe mode? */
+static _glthread_TSD DispatchTSD;        /* Per-thread dispatch pointer */
+static _glthread_TSD RealDispatchTSD;    /* only when using override */
+static _glthread_TSD ContextTSD;         /* Per-thread context pointer */
+
 
-static _glthread_TSD DispatchTSD;
-static _glthread_TSD RealDispatchTSD; /* only when using override */
+#define KEYWORD1 static
+#define KEYWORD2 GLAPIENTRY
+#define NAME(func)  _ts_##func
 
-static _glthread_TSD ContextTSD;
+#define DISPATCH(FUNC, ARGS, MESSAGE)                                  \
+   struct _glapi_table *dispatch;                                      \
+   dispatch = (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);  \
+   if (!dispatch)                                                      \
+      dispatch = (struct _glapi_table *) __glapi_noop_table;           \
+   (dispatch->FUNC) ARGS
+
+#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)                           \
+   struct _glapi_table *dispatch;                                      \
+   dispatch = (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);  \
+   if (!dispatch)                                                      \
+      dispatch = (struct _glapi_table *) __glapi_noop_table;           \
+   return (dispatch->FUNC) ARGS
+
+#define DISPATCH_TABLE_NAME __glapi_threadsafe_table
+#define UNUSED_TABLE_NAME __usused_threadsafe_functions
+
+#define TABLE_ENTRY(name) (void *) _ts_##name
+
+static int _ts_Unused(void)
+{
+   return 0;
+}
+
+#include "glapitemp.h"
 
 #endif
 
+/***** END THREAD-SAFE DISPATCH *****/
+
+
+
+struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
+struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table;
+
+/* Used when thread safety disabled */
+void *_glapi_Context = NULL;
 
 
 static GLuint MaxDispatchOffset = sizeof(struct _glapi_table) / sizeof(void *) - 1;
@@ -81,10 +178,11 @@ static GLboolean GetSizeCalled = GL_FALSE;
 static GLboolean DispatchOverride = GL_FALSE;
 
 
-
-/* strdup is actually not a standard ANSI C or POSIX routine
-   Irix will not define it if ANSI mode is in effect. */
-static char *str_dup(const char *str)
+/* strdup() is actually not a standard ANSI C or POSIX routine.
+ * Irix will not define it if ANSI mode is in effect.
+ */
+static char *
+str_dup(const char *str)
 {
    char *copy;
    copy = (char*) malloc(strlen(str) + 1);
@@ -113,6 +211,7 @@ _glapi_check_multithread(void)
          firstCall = GL_FALSE;
       }
       else if (knownID != _glthread_GetID()) {
+         printf("Going thread-safe\n");
          ThreadSafe = GL_TRUE;
       }
    }
@@ -190,7 +289,7 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
    if (DispatchOverride) {
       _glthread_SetTSD(&RealDispatchTSD, (void *) dispatch);
       if (ThreadSafe)
-         _glapi_RealDispatch = NULL;
+         _glapi_RealDispatch = (struct _glapi_table*) __glapi_threadsafe_table;
       else
          _glapi_RealDispatch = dispatch;
    }
@@ -198,7 +297,7 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)
       /* normal operation */
       _glthread_SetTSD(&DispatchTSD, (void *) dispatch);
       if (ThreadSafe)
-         _glapi_Dispatch = NULL;
+         _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table;
       else
          _glapi_Dispatch = dispatch;
    }
@@ -280,7 +379,7 @@ _glapi_begin_dispatch_override(struct _glapi_table *override)
 #if defined(THREADS)
    _glthread_SetTSD(&DispatchTSD, (void *) override);
    if (ThreadSafe)
-      _glapi_Dispatch = NULL;
+      _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table;
    else
       _glapi_Dispatch = override;
 #else
index 7916292..3b022e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: glapi.h,v 1.18 2001/01/23 23:35:47 brianp Exp $ */
+/* $Id: glapi.h,v 1.19 2001/03/28 17:20:20 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -40,6 +40,10 @@ extern struct _glapi_table *_glapi_Dispatch;
 
 
 extern void
+_glapi_noop_enable_warnings(GLboolean enable);
+
+
+extern void
 _glapi_check_multithread(void);
 
 
index 8b26f04..737e306 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: glapitemp.h,v 1.27 2001/03/26 23:36:51 brianp Exp $ */
+/* $Id: glapitemp.h,v 1.28 2001/03/28 17:20:20 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -35,8 +35,6 @@
  *   DISPATCH(func, args, msg) - code to do dispatch of named function.
  *                               msg is a printf-style debug message.
  *   RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value
- *   DO_INIT     - if defined, emit an init function.
- *   INIT        - Macro invoked once per api function in the init function.
  *
  * Here's an example which generates the usual OpenGL functions:
  *   #define KEYWORD1
 #endif
 
 #ifndef NAME
-#define NAME(func)  gl##func
+#error NAME must be defined
 #endif
 
 #ifndef DISPATCH
-#define DISPATCH(func, args, msg)                                      \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
-   (dispatch->func) args
+#error DISPATCH must be defined
 #endif
 
 #ifndef RETURN_DISPATCH
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)                           \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
-   return (dispatch->func) args
+#error RETURN_DISPATCH must be defined
 #endif
 
 
@@ -95,7 +87,6 @@
 
 /* GL 1.0 */
 
-
 KEYWORD1 void KEYWORD2 NAME(Accum)(GLenum op, GLfloat value)
 {
    DISPATCH(Accum, (op, value), (F, "glAccum(0x%x, %g);", op, value));
@@ -1835,7 +1826,7 @@ KEYWORD1 void KEYWORD2 NAME(FlushRasterSGIX)(void)
 }
 
 /* 66. GL_HP_image_transform */
-#if 0
+#if 00
 KEYWORD1 void KEYWORD2 NAME(GetImageTransformParameterfvHP)(GLenum target, GLenum pname, GLfloat *param)
 {
    DISPATCH(GetImageTransformParameterfvHP, (target, pname, param), (F, ";"));
@@ -2124,7 +2115,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoordPointervINTEL)(GLint size, GLenum type, cons
 #endif
 
 /* 138. GL_EXT_pixel_transform */
-#if 0
+#if 00
 KEYWORD1 void KEYWORD2 NAME(PixelTransformParameteriEXT)(GLenum target, GLenum pname, const GLint param)
 {
    DISPATCH(PixelTransformParameteriEXT, (target, pname, param), (F, "glPixelTransformParameteriEXT(0x%x, 0x%x, %d);", target, pname, param));
@@ -3408,665 +3399,868 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4svARB)(GLenum target, const GLshort *v
 
 
 
-/**
- ** Optional initialization function, generated according to DO_INIT
- **/
-
-#ifdef DO_INIT
-
-static void NAME(InitDispatch)( void )
-{
-   INITARGS;
-   INIT(GetCompressedTexImageARB);
-   INIT(Accum);
-   INIT(AlphaFunc);
-   INIT(Bitmap);
-   INIT(BlendFunc);
-   INIT(Clear);
-   INIT(ClearAccum);
-   INIT(ClearColor);
-   INIT(ClearDepth);
-   INIT(ClearIndex);
-   INIT(ClearStencil);
-   INIT(ClipPlane);
-   INIT(ColorMask);
-   INIT(ColorMaterial);
-   INIT(CopyPixels);
-   INIT(CullFace);
-   INIT(DepthFunc);
-   INIT(DepthMask);
-   INIT(DepthRange);
-   INIT(DeleteLists);
-   INIT(Disable);
-   INIT(DrawBuffer);
-   INIT(DrawElements);
-   INIT(DrawPixels);
-   INIT(EndList);
-   INIT(Enable);
-   INIT(EvalMesh1);
-   INIT(EvalMesh2);
-   INIT(FeedbackBuffer);
-   INIT(Finish);
-   INIT(Flush);
-   INIT(Fogf);
-   INIT(Fogi);
-   INIT(Fogfv);
-   INIT(Fogiv);
-   INIT(FrontFace);
-   INIT(Frustum);
-   INIT(GenLists);
-   INIT(GetBooleanv);
-   INIT(GetClipPlane);
-   INIT(GetDoublev);
-   INIT(GetError);
-   INIT(GetFloatv);
-   INIT(GetIntegerv);
-   INIT(GetLightfv);
-   INIT(GetLightiv);
-   INIT(GetMapdv);
-   INIT(GetMapfv);
-   INIT(GetMapiv);
-   INIT(GetMaterialfv);
-   INIT(GetMaterialiv);
-   INIT(GetPixelMapfv);
-   INIT(GetPixelMapuiv);
-   INIT(GetPixelMapusv);
-   INIT(GetPolygonStipple);
-   INIT(GetString);
-   INIT(GetTexEnvfv);
-   INIT(GetTexEnviv);
-   INIT(GetTexGeniv);
-   INIT(GetTexGendv);
-   INIT(GetTexGenfv);
-   INIT(GetTexImage);
-   INIT(GetTexLevelParameterfv);
-   INIT(GetTexLevelParameteriv);
-   INIT(GetTexParameterfv);
-   INIT(GetTexParameteriv);
-   INIT(Hint);
-   INIT(IndexMask);
-   INIT(InitNames);
-   INIT(IsEnabled);
-   INIT(IsList);
-   INIT(Lightf);
-   INIT(Lighti);
-   INIT(Lightfv);
-   INIT(Lightiv);
-   INIT(LightModelf);
-   INIT(LightModeli);
-   INIT(LightModelfv);
-   INIT(LightModeliv);
-   INIT(LineWidth);
-   INIT(LineStipple);
-   INIT(ListBase);
-   INIT(LoadIdentity);
-   INIT(LoadMatrixd);
-   INIT(LoadMatrixf);
-   INIT(LoadName);
-   INIT(LogicOp);
-   INIT(Map1d);
-   INIT(Map1f);
-   INIT(Map2d);
-   INIT(Map2f);
-   INIT(MapGrid1d);
-   INIT(MapGrid1f);
-   INIT(MapGrid2d);
-   INIT(MapGrid2f);
-   INIT(MatrixMode);
-   INIT(MultMatrixd);
-   INIT(MultMatrixf);
-   INIT(NewList);
-   INIT(Ortho);
-   INIT(PassThrough);
-   INIT(PixelMapfv);
-   INIT(PixelMapuiv);
-   INIT(PixelMapusv);
-   INIT(PixelStoref);
-   INIT(PixelStorei);
-   INIT(PixelTransferf);
-   INIT(PixelTransferi);
-   INIT(PixelZoom);
-   INIT(PointSize);
-   INIT(PolygonMode);
-   INIT(PolygonStipple);
-   INIT(PopAttrib);
-   INIT(PopMatrix);
-   INIT(PopName);
-   INIT(PushAttrib);
-   INIT(PushMatrix);
-   INIT(PushName);
-   INIT(RasterPos2d);
-   INIT(RasterPos2f);
-   INIT(RasterPos2i);
-   INIT(RasterPos2s);
-   INIT(RasterPos3d);
-   INIT(RasterPos3f);
-   INIT(RasterPos3i);
-   INIT(RasterPos3s);
-   INIT(RasterPos4d);
-   INIT(RasterPos4f);
-   INIT(RasterPos4i);
-   INIT(RasterPos4s);
-   INIT(RasterPos2dv);
-   INIT(RasterPos2fv);
-   INIT(RasterPos2iv);
-   INIT(RasterPos2sv);
-   INIT(RasterPos3dv);
-   INIT(RasterPos3fv);
-   INIT(RasterPos3iv);
-   INIT(RasterPos3sv);
-   INIT(RasterPos4dv);
-   INIT(RasterPos4fv);
-   INIT(RasterPos4iv);
-   INIT(RasterPos4sv);
-   INIT(ReadBuffer);
-   INIT(ReadPixels);
-   INIT(Rectd);
-   INIT(Rectdv);
-   INIT(Rectf);
-   INIT(Rectfv);
-   INIT(Recti);
-   INIT(Rectiv);
-   INIT(Rects);
-   INIT(Rectsv);
-   INIT(RenderMode);
-   INIT(Rotated);
-   INIT(Rotatef);
-   INIT(SelectBuffer);
-   INIT(Scaled);
-   INIT(Scalef);
-   INIT(Scissor);
-   INIT(ShadeModel);
-   INIT(StencilFunc);
-   INIT(StencilMask);
-   INIT(StencilOp);
-   INIT(TexGend);
-   INIT(TexGendv);
-   INIT(TexGenf);
-   INIT(TexGenfv);
-   INIT(TexGeni);
-   INIT(TexGeniv);
-   INIT(TexEnvf);
-   INIT(TexEnvfv);
-   INIT(TexEnvi);
-   INIT(TexEnviv);
-   INIT(TexImage1D);
-   INIT(TexImage2D);
-   INIT(TexParameterf);
-   INIT(TexParameterfv);
-   INIT(TexParameteri);
-   INIT(TexParameteriv);
-   INIT(Translated);
-   INIT(Translatef);
-   INIT(Viewport);
-   INIT(AreTexturesResident);
-   INIT(BindTexture);
-   INIT(ColorPointer);
-   INIT(CopyTexImage1D);
-   INIT(CopyTexImage2D);
-   INIT(CopyTexSubImage1D);
-   INIT(CopyTexSubImage2D);
-   INIT(DeleteTextures);
-   INIT(DisableClientState);
-   INIT(DrawArrays);
-   INIT(EdgeFlagPointer);
-   INIT(EnableClientState);
-   INIT(GenTextures);
-   INIT(GetPointerv);
-   INIT(IndexPointer);
-   INIT(InterleavedArrays);
-   INIT(IsTexture);
-   INIT(NormalPointer);
-   INIT(PolygonOffset);
-   INIT(PopClientAttrib);
-   INIT(PrioritizeTextures);
-   INIT(PushClientAttrib);
-   INIT(TexCoordPointer);
-   INIT(TexSubImage1D);
-   INIT(TexSubImage2D);
-   INIT(VertexPointer);
-   INIT(CopyTexSubImage3D);
-   INIT(DrawRangeElements);
-   INIT(TexImage3D);
-   INIT(TexSubImage3D);
-   INIT(BlendColor);
-   INIT(BlendEquation);
-   INIT(ColorSubTable);
-   INIT(ColorTable);
-   INIT(ColorTableParameterfv);
-   INIT(ColorTableParameteriv);
-   INIT(ConvolutionFilter1D);
-   INIT(ConvolutionFilter2D);
-   INIT(ConvolutionParameterf);
-   INIT(ConvolutionParameterfv);
-   INIT(ConvolutionParameteri);
-   INIT(ConvolutionParameteriv);
-   INIT(CopyColorSubTable);
-   INIT(CopyColorTable);
-   INIT(CopyConvolutionFilter1D);
-   INIT(CopyConvolutionFilter2D);
-   INIT(GetColorTable);
-   INIT(GetColorTableParameterfv);
-   INIT(GetColorTableParameteriv);
-   INIT(GetConvolutionFilter);
-   INIT(GetConvolutionParameterfv);
-   INIT(GetConvolutionParameteriv);
-   INIT(GetHistogram);
-   INIT(GetHistogramParameterfv);
-   INIT(GetHistogramParameteriv);
-   INIT(GetMinmax);
-   INIT(GetMinmaxParameterfv);
-   INIT(GetMinmaxParameteriv);
-   INIT(GetSeparableFilter);
-   INIT(Histogram);
-   INIT(Minmax);
-   INIT(ResetMinmax);
-   INIT(ResetHistogram);
-   INIT(SeparableFilter2D);
-   INIT(BlendColorEXT);
-   INIT(PolygonOffsetEXT);
-   INIT(CopyTexSubImage3DEXT);
-   INIT(TexImage3DEXT);
-   INIT(TexSubImage3DEXT);
-   INIT(GetTexFilterFuncSGIS);
-   INIT(TexFilterFuncSGIS);
-   INIT(CopyTexSubImage1DEXT);
-   INIT(TexSubImage1DEXT);
-   INIT(TexSubImage2DEXT);
-   INIT(CopyTexImage1DEXT);
-   INIT(CopyTexImage2DEXT);
-   INIT(CopyTexSubImage2DEXT);
-   INIT(GetHistogramEXT);
-   INIT(GetHistogramParameterfvEXT);
-   INIT(GetHistogramParameterivEXT);
-   INIT(GetMinmaxEXT);
-   INIT(GetMinmaxParameterfvEXT);
-   INIT(GetMinmaxParameterivEXT);
-   INIT(HistogramEXT);
-   INIT(MinmaxEXT);
-   INIT(ResetHistogramEXT);
-   INIT(ResetMinmaxEXT);
-   INIT(ConvolutionFilter1DEXT);
-   INIT(ConvolutionFilter2DEXT);
-   INIT(ConvolutionParameterfEXT);
-   INIT(ConvolutionParameterfvEXT);
-   INIT(ConvolutionParameteriEXT);
-   INIT(ConvolutionParameterivEXT);
-   INIT(CopyConvolutionFilter1DEXT);
-   INIT(CopyConvolutionFilter2DEXT);
-   INIT(GetConvolutionFilterEXT);
-   INIT(GetConvolutionParameterfvEXT);
-   INIT(GetConvolutionParameterivEXT);
-   INIT(GetSeparableFilterEXT);
-   INIT(SeparableFilter2DEXT);
-   INIT(ColorTableParameterfvSGI);
-   INIT(ColorTableParameterivSGI);
-   INIT(ColorTableSGI);
-   INIT(CopyColorTableSGI);
-   INIT(GetColorTableSGI);
-   INIT(GetColorTableParameterfvSGI);
-   INIT(GetColorTableParameterivSGI);
-   INIT(PixelTexGenSGIX);
-   INIT(PixelTexGenParameterfSGIS);
-   INIT(PixelTexGenParameterfvSGIS);
-   INIT(PixelTexGenParameteriSGIS);
-   INIT(PixelTexGenParameterivSGIS);
-   INIT(GetPixelTexGenParameterfvSGIS);
-   INIT(GetPixelTexGenParameterivSGIS);
-   INIT(TexImage4DSGIS);
-   INIT(TexSubImage4DSGIS);
-   INIT(GenTexturesEXT);
-   INIT(DeleteTexturesEXT);
-   INIT(BindTextureEXT);
-   INIT(PrioritizeTexturesEXT);
-   INIT(AreTexturesResidentEXT);
-   INIT(IsTextureEXT);
-   INIT(DetailTexFuncSGIS);
-   INIT(GetDetailTexFuncSGIS);
-   INIT(GetSharpenTexFuncSGIS);
-   INIT(SharpenTexFuncSGIS);
-   INIT(SampleMaskSGIS);
-   INIT(SamplePatternSGIS);
-   INIT(VertexPointerEXT);
-   INIT(NormalPointerEXT);
-   INIT(ColorPointerEXT);
-   INIT(IndexPointerEXT);
-   INIT(TexCoordPointerEXT);
-   INIT(EdgeFlagPointerEXT);
-   INIT(GetPointervEXT);
-   INIT(DrawArraysEXT);
-   INIT(BlendEquationEXT);
-   INIT(SpriteParameterfSGIX);
-   INIT(SpriteParameterfvSGIX);
-   INIT(SpriteParameteriSGIX);
-   INIT(SpriteParameterivSGIX);
-   INIT(PointParameterfEXT);
-   INIT(PointParameterfvEXT);
-   INIT(PointParameterfSGIS);
-   INIT(PointParameterfvSGIS);
-   INIT(GetInstrumentsSGIX);
-   INIT(InstrumentsBufferSGIX);
-   INIT(PollInstrumentsSGIX);
-   INIT(ReadInstrumentsSGIX);
-   INIT(StartInstrumentsSGIX);
-   INIT(StopInstrumentsSGIX);
-   INIT(FrameZoomSGIX);
-   INIT(TagSampleBufferSGIX);
-   INIT(ReferencePlaneSGIX);
-   INIT(FlushRasterSGIX);
-   INIT(GetImageTransformParameterfvHP);
-   INIT(GetImageTransformParameterivHP);
-   INIT(ImageTransformParameterfHP);
-   INIT(ImageTransformParameterfvHP);
-   INIT(ImageTransformParameteriHP);
-   INIT(ImageTransformParameterivHP);
-   INIT(ColorSubTableEXT);
-   INIT(CopyColorSubTableEXT);
-   INIT(HintPGI);
-   INIT(ColorTableEXT);
-   INIT(GetColorTableEXT);
-   INIT(GetColorTableParameterfvEXT);
-   INIT(GetColorTableParameterivEXT);
-   INIT(GetListParameterfvSGIX);
-   INIT(GetListParameterivSGIX);
-   INIT(ListParameterfSGIX);
-   INIT(ListParameterfvSGIX);
-   INIT(ListParameteriSGIX);
-   INIT(ListParameterivSGIX);
-   INIT(IndexMaterialEXT);
-   INIT(IndexFuncEXT);
-   INIT(LockArraysEXT);
-   INIT(UnlockArraysEXT);
-   INIT(CullParameterfvEXT);
-   INIT(CullParameterdvEXT);
-   INIT(FragmentColorMaterialSGIX);
-   INIT(FragmentLightfSGIX);
-   INIT(FragmentLightfvSGIX);
-   INIT(FragmentLightiSGIX);
-   INIT(FragmentLightivSGIX);
-   INIT(FragmentLightModelfSGIX);
-   INIT(FragmentLightModelfvSGIX);
-   INIT(FragmentLightModeliSGIX);
-   INIT(FragmentLightModelivSGIX);
-   INIT(FragmentMaterialfSGIX);
-   INIT(FragmentMaterialfvSGIX);
-   INIT(FragmentMaterialiSGIX);
-   INIT(FragmentMaterialivSGIX);
-   INIT(GetFragmentLightfvSGIX);
-   INIT(GetFragmentLightivSGIX);
-   INIT(GetFragmentMaterialfvSGIX);
-   INIT(GetFragmentMaterialivSGIX);
-   INIT(LightEnviSGIX);
-   INIT(DrawRangeElementsEXT);
-   INIT(ApplyTextureEXT);
-   INIT(TextureLightEXT);
-   INIT(TextureMaterialEXT);
-   INIT(TexScissorINTEL);
-   INIT(TexScissorFuncINTEL);
-   INIT(VertexPointervINTEL);
-   INIT(NormalPointervINTEL);
-   INIT(ColorPointervINTEL);
-   INIT(TexCoordPointervINTEL);
-   INIT(PixelTransformParameteriEXT);
-   INIT(PixelTransformParameterfEXT);
-   INIT(PixelTransformParameterivEXT);
-   INIT(PixelTransformParameterfvEXT);
-   INIT(GetPixelTransformParameterivEXT);
-   INIT(GetPixelTransformParameterfvEXT);
-   INIT(SecondaryColorPointerEXT);
-   INIT(FogCoordPointerEXT);
-   INIT(BlendFuncSeparateEXT);
-   INIT(BlendFuncSeparateINGR);
-   INIT(FlushVertexArrayRangeNV);
-   INIT(VertexArrayRangeNV);
-   INIT(CombinerParameterfvNV);
-   INIT(CombinerParameterfNV);
-   INIT(CombinerParameterivNV);
-   INIT(CombinerParameteriNV);
-   INIT(CombinerInputNV);
-   INIT(CombinerOutputNV);
-   INIT(FinalCombinerInputNV);
-   INIT(GetCombinerInputParameterfvNV);
-   INIT(GetCombinerInputParameterivNV);
-   INIT(GetCombinerOutputParameterfvNV);
-   INIT(GetCombinerOutputParameterivNV);
-   INIT(GetFinalCombinerInputParameterfvNV);
-   INIT(GetFinalCombinerInputParameterivNV);
-   INIT(VertexWeightfEXT);
-   INIT(VertexWeightfvEXT);
-   INIT(VertexWeightPointerEXT);
-   INIT(ResizeBuffersMESA);
-   INIT(WindowPos2iMESA);
-   INIT(WindowPos2sMESA);
-   INIT(WindowPos2fMESA);
-   INIT(WindowPos2dMESA);
-   INIT(WindowPos2ivMESA);
-   INIT(WindowPos2svMESA);
-   INIT(WindowPos2fvMESA);
-   INIT(WindowPos2dvMESA);
-   INIT(WindowPos3iMESA);
-   INIT(WindowPos3sMESA);
-   INIT(WindowPos3fMESA);
-   INIT(WindowPos3dMESA);
-   INIT(WindowPos3ivMESA);
-   INIT(WindowPos3svMESA);
-   INIT(WindowPos3fvMESA);
-   INIT(WindowPos3dvMESA);
-   INIT(WindowPos4iMESA);
-   INIT(WindowPos4sMESA);
-   INIT(WindowPos4fMESA);
-   INIT(WindowPos4dMESA);
-   INIT(WindowPos4ivMESA);
-   INIT(WindowPos4svMESA);
-   INIT(WindowPos4fvMESA);
-   INIT(WindowPos4dvMESA);
-   INIT(TbufferMask3DFX);
-   INIT(SampleMaskEXT);
-   INIT(SamplePatternEXT);
-   INIT(ActiveTextureARB);
-   INIT(ClientActiveTextureARB);
-   INIT(LoadTransposeMatrixdARB);
-   INIT(LoadTransposeMatrixfARB);
-   INIT(MultTransposeMatrixdARB);
-   INIT(MultTransposeMatrixfARB);
-   INIT(SampleCoverageARB);
-   INIT(SamplePassARB);
-   INIT(CompressedTexImage3DARB);
-   INIT(CompressedTexImage2DARB);
-   INIT(CompressedTexImage1DARB);
-   INIT(CompressedTexSubImage3DARB);
-   INIT(CompressedTexSubImage2DARB);
-   INIT(CompressedTexSubImage1DARB);
-   INIT(GetCompressedTexImageARB);
-
-   INIT(Begin);
-   INIT(CallList);
-   INIT(CallLists);
-   INIT(Color3b);
-   INIT(Color3d);
-   INIT(Color3f);
-   INIT(Color3i);
-   INIT(Color3s);
-   INIT(Color3ub);
-   INIT(Color3ui);
-   INIT(Color3us);
-   INIT(Color4b);
-   INIT(Color4d);
-   INIT(Color4f);
-   INIT(Color4i);
-   INIT(Color4s);
-   INIT(Color4ub);
-   INIT(Color4ui);
-   INIT(Color4us);
-   INIT(Color3bv);
-   INIT(Color3dv);
-   INIT(Color3fv);
-   INIT(Color3iv);
-   INIT(Color3sv);
-   INIT(Color3ubv);
-   INIT(Color3uiv);
-   INIT(Color3usv);
-   INIT(Color4bv);
-   INIT(Color4dv);
-   INIT(Color4fv);
-   INIT(Color4iv);
-   INIT(Color4sv);
-   INIT(Color4ubv);
-   INIT(Color4uiv);
-   INIT(Color4usv);
-   INIT(End);
-   INIT(EdgeFlag);
-   INIT(EdgeFlagv);
-   INIT(EvalCoord1d);
-   INIT(EvalCoord1f);
-   INIT(EvalCoord1dv);
-   INIT(EvalCoord1fv);
-   INIT(EvalCoord2d);
-   INIT(EvalCoord2f);
-   INIT(EvalCoord2dv);
-   INIT(EvalCoord2fv);
-   INIT(EvalPoint1);
-   INIT(EvalPoint2);
-   INIT(Indexd);
-   INIT(Indexdv);
-   INIT(Indexf);
-   INIT(Indexfv);
-   INIT(Indexi);
-   INIT(Indexiv);
-   INIT(Indexs);
-   INIT(Indexsv);
-   INIT(Materialf);
-   INIT(Materiali);
-   INIT(Materialfv);
-   INIT(Materialiv);
-   INIT(Normal3b);
-   INIT(Normal3bv);
-   INIT(Normal3d);
-   INIT(Normal3dv);
-   INIT(Normal3f);
-   INIT(Normal3fv);
-   INIT(Normal3i);
-   INIT(Normal3iv);
-   INIT(Normal3s);
-   INIT(Normal3sv);
-   INIT(TexCoord1d);
-   INIT(TexCoord1f);
-   INIT(TexCoord1i);
-   INIT(TexCoord1s);
-   INIT(TexCoord2d);
-   INIT(TexCoord2f);
-   INIT(TexCoord2s);
-   INIT(TexCoord2i);
-   INIT(TexCoord3d);
-   INIT(TexCoord3f);
-   INIT(TexCoord3i);
-   INIT(TexCoord3s);
-   INIT(TexCoord4d);
-   INIT(TexCoord4f);
-   INIT(TexCoord4i);
-   INIT(TexCoord4s);
-   INIT(TexCoord1dv);
-   INIT(TexCoord1fv);
-   INIT(TexCoord1iv);
-   INIT(TexCoord1sv);
-   INIT(TexCoord2dv);
-   INIT(TexCoord2fv);
-   INIT(TexCoord2iv);
-   INIT(TexCoord2sv);
-   INIT(TexCoord3dv);
-   INIT(TexCoord3fv);
-   INIT(TexCoord3iv);
-   INIT(TexCoord3sv);
-   INIT(TexCoord4dv);
-   INIT(TexCoord4fv);
-   INIT(TexCoord4iv);
-   INIT(TexCoord4sv);
-   INIT(Vertex2d);
-   INIT(Vertex2dv);
-   INIT(Vertex2f);
-   INIT(Vertex2fv);
-   INIT(Vertex2i);
-   INIT(Vertex2iv);
-   INIT(Vertex2s);
-   INIT(Vertex2sv);
-   INIT(Vertex3d);
-   INIT(Vertex3dv);
-   INIT(Vertex3f);
-   INIT(Vertex3fv);
-   INIT(Vertex3i);
-   INIT(Vertex3iv);
-   INIT(Vertex3s);
-   INIT(Vertex3sv);
-   INIT(Vertex4d);
-   INIT(Vertex4dv);
-   INIT(Vertex4f);
-   INIT(Vertex4fv);
-   INIT(Vertex4i);
-   INIT(Vertex4iv);
-   INIT(Vertex4s);
-   INIT(Vertex4sv);
-   INIT(Indexub);
-   INIT(Indexubv);
-   INIT(ArrayElementEXT);
-   INIT(SecondaryColor3bEXT);
-   INIT(SecondaryColor3bvEXT);
-   INIT(SecondaryColor3dEXT);
-   INIT(SecondaryColor3dvEXT);
-   INIT(SecondaryColor3fEXT);
-   INIT(SecondaryColor3fvEXT);
-   INIT(SecondaryColor3iEXT);
-   INIT(SecondaryColor3ivEXT);
-   INIT(SecondaryColor3sEXT);
-   INIT(SecondaryColor3svEXT);
-   INIT(SecondaryColor3ubEXT);
-   INIT(SecondaryColor3ubvEXT);
-   INIT(SecondaryColor3uiEXT);
-   INIT(SecondaryColor3uivEXT);
-   INIT(SecondaryColor3usEXT);
-   INIT(SecondaryColor3usvEXT);
-   INIT(FogCoordfEXT);
-   INIT(FogCoordfvEXT);
-   INIT(FogCoorddEXT);
-   INIT(FogCoorddvEXT);
-   INIT(MultiTexCoord1dARB);
-   INIT(MultiTexCoord1dvARB);
-   INIT(MultiTexCoord1fARB);
-   INIT(MultiTexCoord1fvARB);
-   INIT(MultiTexCoord1iARB);
-   INIT(MultiTexCoord1ivARB);
-   INIT(MultiTexCoord1sARB);
-   INIT(MultiTexCoord1svARB);
-   INIT(MultiTexCoord2dARB);
-   INIT(MultiTexCoord2dvARB);
-   INIT(MultiTexCoord2fARB);
-   INIT(MultiTexCoord2fvARB);
-   INIT(MultiTexCoord2iARB);
-   INIT(MultiTexCoord2ivARB);
-   INIT(MultiTexCoord2sARB);
-   INIT(MultiTexCoord2svARB);
-   INIT(MultiTexCoord3dARB);
-   INIT(MultiTexCoord3dvARB);
-   INIT(MultiTexCoord3fARB);
-   INIT(MultiTexCoord3fvARB);
-   INIT(MultiTexCoord3iARB);
-   INIT(MultiTexCoord3ivARB);
-   INIT(MultiTexCoord3sARB);
-   INIT(MultiTexCoord3svARB);
-   INIT(MultiTexCoord4dARB);
-   INIT(MultiTexCoord4dvARB);
-   INIT(MultiTexCoord4fARB);
-   INIT(MultiTexCoord4fvARB);
-   INIT(MultiTexCoord4iARB);
-   INIT(MultiTexCoord4ivARB);
-   INIT(MultiTexCoord4sARB);
-   INIT(MultiTexCoord4svARB);
-   INIT(ArrayElement);
-}
+#ifdef DISPATCH_TABLE_NAME
 
+#ifndef TABLE_ENTRY
+#error TABLE_ENTRY must be defined
 #endif
 
+void *DISPATCH_TABLE_NAME[] = {
+   TABLE_ENTRY(NewList),
+   TABLE_ENTRY(EndList),
+   TABLE_ENTRY(CallList),
+   TABLE_ENTRY(CallLists),
+   TABLE_ENTRY(DeleteLists),
+   TABLE_ENTRY(GenLists),
+   TABLE_ENTRY(ListBase),
+   TABLE_ENTRY(Begin),
+   TABLE_ENTRY(Bitmap),
+   TABLE_ENTRY(Color3b),
+   TABLE_ENTRY(Color3bv),
+   TABLE_ENTRY(Color3d),
+   TABLE_ENTRY(Color3dv),
+   TABLE_ENTRY(Color3f),
+   TABLE_ENTRY(Color3fv),
+   TABLE_ENTRY(Color3i),
+   TABLE_ENTRY(Color3iv),
+   TABLE_ENTRY(Color3s),
+   TABLE_ENTRY(Color3sv),
+   TABLE_ENTRY(Color3ub),
+   TABLE_ENTRY(Color3ubv),
+   TABLE_ENTRY(Color3ui),
+   TABLE_ENTRY(Color3uiv),
+   TABLE_ENTRY(Color3us),
+   TABLE_ENTRY(Color3usv),
+   TABLE_ENTRY(Color4b),
+   TABLE_ENTRY(Color4bv),
+   TABLE_ENTRY(Color4d),
+   TABLE_ENTRY(Color4dv),
+   TABLE_ENTRY(Color4f),
+   TABLE_ENTRY(Color4fv),
+   TABLE_ENTRY(Color4i),
+   TABLE_ENTRY(Color4iv),
+   TABLE_ENTRY(Color4s),
+   TABLE_ENTRY(Color4sv),
+   TABLE_ENTRY(Color4ub),
+   TABLE_ENTRY(Color4ubv),
+   TABLE_ENTRY(Color4ui),
+   TABLE_ENTRY(Color4uiv),
+   TABLE_ENTRY(Color4us),
+   TABLE_ENTRY(Color4usv),
+   TABLE_ENTRY(EdgeFlag),
+   TABLE_ENTRY(EdgeFlagv),
+   TABLE_ENTRY(End),
+   TABLE_ENTRY(Indexd),
+   TABLE_ENTRY(Indexdv),
+   TABLE_ENTRY(Indexf),
+   TABLE_ENTRY(Indexfv),
+   TABLE_ENTRY(Indexi),
+   TABLE_ENTRY(Indexiv),
+   TABLE_ENTRY(Indexs),
+   TABLE_ENTRY(Indexsv),
+   TABLE_ENTRY(Normal3b),
+   TABLE_ENTRY(Normal3bv),
+   TABLE_ENTRY(Normal3d),
+   TABLE_ENTRY(Normal3dv),
+   TABLE_ENTRY(Normal3f),
+   TABLE_ENTRY(Normal3fv),
+   TABLE_ENTRY(Normal3i),
+   TABLE_ENTRY(Normal3iv),
+   TABLE_ENTRY(Normal3s),
+   TABLE_ENTRY(Normal3sv),
+   TABLE_ENTRY(RasterPos2d),
+   TABLE_ENTRY(RasterPos2dv),
+   TABLE_ENTRY(RasterPos2f),
+   TABLE_ENTRY(RasterPos2fv),
+   TABLE_ENTRY(RasterPos2i),
+   TABLE_ENTRY(RasterPos2iv),
+   TABLE_ENTRY(RasterPos2s),
+   TABLE_ENTRY(RasterPos2sv),
+   TABLE_ENTRY(RasterPos3d),
+   TABLE_ENTRY(RasterPos3dv),
+   TABLE_ENTRY(RasterPos3f),
+   TABLE_ENTRY(RasterPos3fv),
+   TABLE_ENTRY(RasterPos3i),
+   TABLE_ENTRY(RasterPos3iv),
+   TABLE_ENTRY(RasterPos3s),
+   TABLE_ENTRY(RasterPos3sv),
+   TABLE_ENTRY(RasterPos4d),
+   TABLE_ENTRY(RasterPos4dv),
+   TABLE_ENTRY(RasterPos4f),
+   TABLE_ENTRY(RasterPos4fv),
+   TABLE_ENTRY(RasterPos4i),
+   TABLE_ENTRY(RasterPos4iv),
+   TABLE_ENTRY(RasterPos4s),
+   TABLE_ENTRY(RasterPos4sv),
+   TABLE_ENTRY(Rectd),
+   TABLE_ENTRY(Rectdv),
+   TABLE_ENTRY(Rectf),
+   TABLE_ENTRY(Rectfv),
+   TABLE_ENTRY(Recti),
+   TABLE_ENTRY(Rectiv),
+   TABLE_ENTRY(Rects),
+   TABLE_ENTRY(Rectsv),
+   TABLE_ENTRY(TexCoord1d),
+   TABLE_ENTRY(TexCoord1dv),
+   TABLE_ENTRY(TexCoord1f),
+   TABLE_ENTRY(TexCoord1fv),
+   TABLE_ENTRY(TexCoord1i),
+   TABLE_ENTRY(TexCoord1iv),
+   TABLE_ENTRY(TexCoord1s),
+   TABLE_ENTRY(TexCoord1sv),
+   TABLE_ENTRY(TexCoord2d),
+   TABLE_ENTRY(TexCoord2dv),
+   TABLE_ENTRY(TexCoord2f),
+   TABLE_ENTRY(TexCoord2fv),
+   TABLE_ENTRY(TexCoord2i),
+   TABLE_ENTRY(TexCoord2iv),
+   TABLE_ENTRY(TexCoord2s),
+   TABLE_ENTRY(TexCoord2sv),
+   TABLE_ENTRY(TexCoord3d),
+   TABLE_ENTRY(TexCoord3dv),
+   TABLE_ENTRY(TexCoord3f),
+   TABLE_ENTRY(TexCoord3fv),
+   TABLE_ENTRY(TexCoord3i),
+   TABLE_ENTRY(TexCoord3iv),
+   TABLE_ENTRY(TexCoord3s),
+   TABLE_ENTRY(TexCoord3sv),
+   TABLE_ENTRY(TexCoord4d),
+   TABLE_ENTRY(TexCoord4dv),
+   TABLE_ENTRY(TexCoord4f),
+   TABLE_ENTRY(TexCoord4fv),
+   TABLE_ENTRY(TexCoord4i),
+   TABLE_ENTRY(TexCoord4iv),
+   TABLE_ENTRY(TexCoord4s),
+   TABLE_ENTRY(TexCoord4sv),
+   TABLE_ENTRY(Vertex2d),
+   TABLE_ENTRY(Vertex2dv),
+   TABLE_ENTRY(Vertex2f),
+   TABLE_ENTRY(Vertex2fv),
+   TABLE_ENTRY(Vertex2i),
+   TABLE_ENTRY(Vertex2iv),
+   TABLE_ENTRY(Vertex2s),
+   TABLE_ENTRY(Vertex2sv),
+   TABLE_ENTRY(Vertex3d),
+   TABLE_ENTRY(Vertex3dv),
+   TABLE_ENTRY(Vertex3f),
+   TABLE_ENTRY(Vertex3fv),
+   TABLE_ENTRY(Vertex3i),
+   TABLE_ENTRY(Vertex3iv),
+   TABLE_ENTRY(Vertex3s),
+   TABLE_ENTRY(Vertex3sv),
+   TABLE_ENTRY(Vertex4d),
+   TABLE_ENTRY(Vertex4dv),
+   TABLE_ENTRY(Vertex4f),
+   TABLE_ENTRY(Vertex4fv),
+   TABLE_ENTRY(Vertex4i),
+   TABLE_ENTRY(Vertex4iv),
+   TABLE_ENTRY(Vertex4s),
+   TABLE_ENTRY(Vertex4sv),
+   TABLE_ENTRY(ClipPlane),
+   TABLE_ENTRY(ColorMaterial),
+   TABLE_ENTRY(CullFace),
+   TABLE_ENTRY(Fogf),
+   TABLE_ENTRY(Fogfv),
+   TABLE_ENTRY(Fogi),
+   TABLE_ENTRY(Fogiv),
+   TABLE_ENTRY(FrontFace),
+   TABLE_ENTRY(Hint),
+   TABLE_ENTRY(Lightf),
+   TABLE_ENTRY(Lightfv),
+   TABLE_ENTRY(Lighti),
+   TABLE_ENTRY(Lightiv),
+   TABLE_ENTRY(LightModelf),
+   TABLE_ENTRY(LightModelfv),
+   TABLE_ENTRY(LightModeli),
+   TABLE_ENTRY(LightModeliv),
+   TABLE_ENTRY(LineStipple),
+   TABLE_ENTRY(LineWidth),
+   TABLE_ENTRY(Materialf),
+   TABLE_ENTRY(Materialfv),
+   TABLE_ENTRY(Materiali),
+   TABLE_ENTRY(Materialiv),
+   TABLE_ENTRY(PointSize),
+   TABLE_ENTRY(PolygonMode),
+   TABLE_ENTRY(PolygonStipple),
+   TABLE_ENTRY(Scissor),
+   TABLE_ENTRY(ShadeModel),
+   TABLE_ENTRY(TexParameterf),
+   TABLE_ENTRY(TexParameterfv),
+   TABLE_ENTRY(TexParameteri),
+   TABLE_ENTRY(TexParameteriv),
+   TABLE_ENTRY(TexImage1D),
+   TABLE_ENTRY(TexImage2D),
+   TABLE_ENTRY(TexEnvf),
+   TABLE_ENTRY(TexEnvfv),
+   TABLE_ENTRY(TexEnvi),
+   TABLE_ENTRY(TexEnviv),
+   TABLE_ENTRY(TexGend),
+   TABLE_ENTRY(TexGendv),
+   TABLE_ENTRY(TexGenf),
+   TABLE_ENTRY(TexGenfv),
+   TABLE_ENTRY(TexGeni),
+   TABLE_ENTRY(TexGeniv),
+   TABLE_ENTRY(FeedbackBuffer),
+   TABLE_ENTRY(SelectBuffer),
+   TABLE_ENTRY(RenderMode),
+   TABLE_ENTRY(InitNames),
+   TABLE_ENTRY(LoadName),
+   TABLE_ENTRY(PassThrough),
+   TABLE_ENTRY(PopName),
+   TABLE_ENTRY(PushName),
+   TABLE_ENTRY(DrawBuffer),
+   TABLE_ENTRY(Clear),
+   TABLE_ENTRY(ClearAccum),
+   TABLE_ENTRY(ClearIndex),
+   TABLE_ENTRY(ClearColor),
+   TABLE_ENTRY(ClearStencil),
+   TABLE_ENTRY(ClearDepth),
+   TABLE_ENTRY(StencilMask),
+   TABLE_ENTRY(ColorMask),
+   TABLE_ENTRY(DepthMask),
+   TABLE_ENTRY(IndexMask),
+   TABLE_ENTRY(Accum),
+   TABLE_ENTRY(Disable),
+   TABLE_ENTRY(Enable),
+   TABLE_ENTRY(Finish),
+   TABLE_ENTRY(Flush),
+   TABLE_ENTRY(PopAttrib),
+   TABLE_ENTRY(PushAttrib),
+   TABLE_ENTRY(Map1d),
+   TABLE_ENTRY(Map1f),
+   TABLE_ENTRY(Map2d),
+   TABLE_ENTRY(Map2f),
+   TABLE_ENTRY(MapGrid1d),
+   TABLE_ENTRY(MapGrid1f),
+   TABLE_ENTRY(MapGrid2d),
+   TABLE_ENTRY(MapGrid2f),
+   TABLE_ENTRY(EvalCoord1d),
+   TABLE_ENTRY(EvalCoord1dv),
+   TABLE_ENTRY(EvalCoord1f),
+   TABLE_ENTRY(EvalCoord1fv),
+   TABLE_ENTRY(EvalCoord2d),
+   TABLE_ENTRY(EvalCoord2dv),
+   TABLE_ENTRY(EvalCoord2f),
+   TABLE_ENTRY(EvalCoord2fv),
+   TABLE_ENTRY(EvalMesh1),
+   TABLE_ENTRY(EvalPoint1),
+   TABLE_ENTRY(EvalMesh2),
+   TABLE_ENTRY(EvalPoint2),
+   TABLE_ENTRY(AlphaFunc),
+   TABLE_ENTRY(BlendFunc),
+   TABLE_ENTRY(LogicOp),
+   TABLE_ENTRY(StencilFunc),
+   TABLE_ENTRY(StencilOp),
+   TABLE_ENTRY(DepthFunc),
+   TABLE_ENTRY(PixelZoom),
+   TABLE_ENTRY(PixelTransferf),
+   TABLE_ENTRY(PixelTransferi),
+   TABLE_ENTRY(PixelStoref),
+   TABLE_ENTRY(PixelStorei),
+   TABLE_ENTRY(PixelMapfv),
+   TABLE_ENTRY(PixelMapuiv),
+   TABLE_ENTRY(PixelMapusv),
+   TABLE_ENTRY(ReadBuffer),
+   TABLE_ENTRY(CopyPixels),
+   TABLE_ENTRY(ReadPixels),
+   TABLE_ENTRY(DrawPixels),
+   TABLE_ENTRY(GetBooleanv),
+   TABLE_ENTRY(GetClipPlane),
+   TABLE_ENTRY(GetDoublev),
+   TABLE_ENTRY(GetError),
+   TABLE_ENTRY(GetFloatv),
+   TABLE_ENTRY(GetIntegerv),
+   TABLE_ENTRY(GetLightfv),
+   TABLE_ENTRY(GetLightiv),
+   TABLE_ENTRY(GetMapdv),
+   TABLE_ENTRY(GetMapfv),
+   TABLE_ENTRY(GetMapiv),
+   TABLE_ENTRY(GetMaterialfv),
+   TABLE_ENTRY(GetMaterialiv),
+   TABLE_ENTRY(GetPixelMapfv),
+   TABLE_ENTRY(GetPixelMapuiv),
+   TABLE_ENTRY(GetPixelMapusv),
+   TABLE_ENTRY(GetPolygonStipple),
+   TABLE_ENTRY(GetString),
+   TABLE_ENTRY(GetTexEnvfv),
+   TABLE_ENTRY(GetTexEnviv),
+   TABLE_ENTRY(GetTexGendv),
+   TABLE_ENTRY(GetTexGenfv),
+   TABLE_ENTRY(GetTexGeniv),
+   TABLE_ENTRY(GetTexImage),
+   TABLE_ENTRY(GetTexParameterfv),
+   TABLE_ENTRY(GetTexParameteriv),
+   TABLE_ENTRY(GetTexLevelParameterfv),
+   TABLE_ENTRY(GetTexLevelParameteriv),
+   TABLE_ENTRY(IsEnabled),
+   TABLE_ENTRY(IsList),
+   TABLE_ENTRY(DepthRange),
+   TABLE_ENTRY(Frustum),
+   TABLE_ENTRY(LoadIdentity),
+   TABLE_ENTRY(LoadMatrixf),
+   TABLE_ENTRY(LoadMatrixd),
+   TABLE_ENTRY(MatrixMode),
+   TABLE_ENTRY(MultMatrixf),
+   TABLE_ENTRY(MultMatrixd),
+   TABLE_ENTRY(Ortho),
+   TABLE_ENTRY(PopMatrix),
+   TABLE_ENTRY(PushMatrix),
+   TABLE_ENTRY(Rotated),
+   TABLE_ENTRY(Rotatef),
+   TABLE_ENTRY(Scaled),
+   TABLE_ENTRY(Scalef),
+   TABLE_ENTRY(Translated),
+   TABLE_ENTRY(Translatef),
+   TABLE_ENTRY(Viewport),
+   /* 1.1 */
+   TABLE_ENTRY(ArrayElement),
+   TABLE_ENTRY(BindTexture),
+   TABLE_ENTRY(ColorPointer),
+   TABLE_ENTRY(DisableClientState),
+   TABLE_ENTRY(DrawArrays),
+   TABLE_ENTRY(DrawElements),
+   TABLE_ENTRY(EdgeFlagPointer),
+   TABLE_ENTRY(EnableClientState),
+   TABLE_ENTRY(IndexPointer),
+   TABLE_ENTRY(Indexub),
+   TABLE_ENTRY(Indexubv),
+   TABLE_ENTRY(InterleavedArrays),
+   TABLE_ENTRY(NormalPointer),
+   TABLE_ENTRY(PolygonOffset),
+   TABLE_ENTRY(TexCoordPointer),
+   TABLE_ENTRY(VertexPointer),
+   TABLE_ENTRY(AreTexturesResident),
+   TABLE_ENTRY(CopyTexImage1D),
+   TABLE_ENTRY(CopyTexImage2D),
+   TABLE_ENTRY(CopyTexSubImage1D),
+   TABLE_ENTRY(CopyTexSubImage2D),
+   TABLE_ENTRY(DeleteTextures),
+   TABLE_ENTRY(GenTextures),
+   TABLE_ENTRY(GetPointerv),
+   TABLE_ENTRY(IsTexture),
+   TABLE_ENTRY(PrioritizeTextures),
+   TABLE_ENTRY(TexSubImage1D),
+   TABLE_ENTRY(TexSubImage2D),
+   TABLE_ENTRY(PopClientAttrib),
+   TABLE_ENTRY(PushClientAttrib),
+   /* 1.2 */
+   TABLE_ENTRY(BlendColor),
+   TABLE_ENTRY(BlendEquation),
+   TABLE_ENTRY(DrawRangeElements),
+   TABLE_ENTRY(ColorTable),
+   TABLE_ENTRY(ColorTableParameterfv),
+   TABLE_ENTRY(ColorTableParameteriv),
+   TABLE_ENTRY(CopyColorTable),
+   TABLE_ENTRY(GetColorTable),
+   TABLE_ENTRY(GetColorTableParameterfv),
+   TABLE_ENTRY(GetColorTableParameteriv),
+   TABLE_ENTRY(ColorSubTable),
+   TABLE_ENTRY(CopyColorSubTable),
+   TABLE_ENTRY(ConvolutionFilter1D),
+   TABLE_ENTRY(ConvolutionFilter2D),
+   TABLE_ENTRY(ConvolutionParameterf),
+   TABLE_ENTRY(ConvolutionParameterfv),
+   TABLE_ENTRY(ConvolutionParameteri),
+   TABLE_ENTRY(ConvolutionParameteriv),
+   TABLE_ENTRY(CopyConvolutionFilter1D),
+   TABLE_ENTRY(CopyConvolutionFilter2D),
+   TABLE_ENTRY(GetConvolutionFilter),
+   TABLE_ENTRY(GetConvolutionParameterfv),
+   TABLE_ENTRY(GetConvolutionParameteriv),
+   TABLE_ENTRY(GetSeparableFilter),
+   TABLE_ENTRY(SeparableFilter2D),
+   TABLE_ENTRY(GetHistogram),
+   TABLE_ENTRY(GetHistogramParameterfv),
+   TABLE_ENTRY(GetHistogramParameteriv),
+   TABLE_ENTRY(GetMinmax),
+   TABLE_ENTRY(GetMinmaxParameterfv),
+   TABLE_ENTRY(GetMinmaxParameteriv),
+   TABLE_ENTRY(Histogram),
+   TABLE_ENTRY(Minmax),
+   TABLE_ENTRY(ResetHistogram),
+   TABLE_ENTRY(ResetMinmax),
+   TABLE_ENTRY(TexImage3D),
+   TABLE_ENTRY(TexSubImage3D),
+   TABLE_ENTRY(CopyTexSubImage3D),
+   /* GL_ARB_multitexture */
+   TABLE_ENTRY(ActiveTextureARB),
+   TABLE_ENTRY(ClientActiveTextureARB),
+   TABLE_ENTRY(MultiTexCoord1dARB),
+   TABLE_ENTRY(MultiTexCoord1dvARB),
+   TABLE_ENTRY(MultiTexCoord1fARB),
+   TABLE_ENTRY(MultiTexCoord1fvARB),
+   TABLE_ENTRY(MultiTexCoord1iARB),
+   TABLE_ENTRY(MultiTexCoord1ivARB),
+   TABLE_ENTRY(MultiTexCoord1sARB),
+   TABLE_ENTRY(MultiTexCoord1svARB),
+   TABLE_ENTRY(MultiTexCoord2dARB),
+   TABLE_ENTRY(MultiTexCoord2dvARB),
+   TABLE_ENTRY(MultiTexCoord2fARB),
+   TABLE_ENTRY(MultiTexCoord2fvARB),
+   TABLE_ENTRY(MultiTexCoord2iARB),
+   TABLE_ENTRY(MultiTexCoord2ivARB),
+   TABLE_ENTRY(MultiTexCoord2sARB),
+   TABLE_ENTRY(MultiTexCoord2svARB),
+   TABLE_ENTRY(MultiTexCoord3dARB),
+   TABLE_ENTRY(MultiTexCoord3dvARB),
+   TABLE_ENTRY(MultiTexCoord3fARB),
+   TABLE_ENTRY(MultiTexCoord3fvARB),
+   TABLE_ENTRY(MultiTexCoord3iARB),
+   TABLE_ENTRY(MultiTexCoord3ivARB),
+   TABLE_ENTRY(MultiTexCoord3sARB),
+   TABLE_ENTRY(MultiTexCoord3svARB),
+   TABLE_ENTRY(MultiTexCoord4dARB),
+   TABLE_ENTRY(MultiTexCoord4dvARB),
+   TABLE_ENTRY(MultiTexCoord4fARB),
+   TABLE_ENTRY(MultiTexCoord4fvARB),
+   TABLE_ENTRY(MultiTexCoord4iARB),
+   TABLE_ENTRY(MultiTexCoord4ivARB),
+   TABLE_ENTRY(MultiTexCoord4sARB),
+   TABLE_ENTRY(MultiTexCoord4svARB),
+   /* GL_ARB_transpose_matrix */
+   TABLE_ENTRY(LoadTransposeMatrixfARB),
+   TABLE_ENTRY(LoadTransposeMatrixdARB),
+   TABLE_ENTRY(MultTransposeMatrixfARB),
+   TABLE_ENTRY(MultTransposeMatrixdARB),
+   /* GL_ARB_multisample */
+   TABLE_ENTRY(SampleCoverageARB),
+   TABLE_ENTRY(SamplePassARB),
+   /* GL_EXT_blend_color */
+   /* GL_EXT_polygon_offset */
+   TABLE_ENTRY(PolygonOffsetEXT),
+   /* GL_EXT_texture3D */
+   /* GL_EXT_subtexture */
+   /* GL_SGIS_texture_filter4 */
+   TABLE_ENTRY(GetTexFilterFuncSGIS),
+   TABLE_ENTRY(TexFilterFuncSGIS),
+   /* GL_EXT_subtexture */
+   /* GL_EXT_copy_texture */
+   /* GL_EXT_histogram */
+   TABLE_ENTRY(GetHistogramEXT),
+   TABLE_ENTRY(GetHistogramParameterfvEXT),
+   TABLE_ENTRY(GetHistogramParameterivEXT),
+   TABLE_ENTRY(GetMinmaxEXT),
+   TABLE_ENTRY(GetMinmaxParameterfvEXT),
+   TABLE_ENTRY(GetMinmaxParameterivEXT),
+   /* GL_EXT_convolution */
+   TABLE_ENTRY(GetConvolutionFilterEXT),
+   TABLE_ENTRY(GetConvolutionParameterfvEXT),
+   TABLE_ENTRY(GetConvolutionParameterivEXT),
+   TABLE_ENTRY(GetSeparableFilterEXT),
+   /* GL_SGI_color_table */
+   TABLE_ENTRY(GetColorTableSGI),
+   TABLE_ENTRY(GetColorTableParameterfvSGI),
+   TABLE_ENTRY(GetColorTableParameterivSGI),
+   /* GL_SGIX_pixel_texture */
+   TABLE_ENTRY(PixelTexGenSGIX),
+   /* GL_SGIS_pixel_texture */
+   TABLE_ENTRY(PixelTexGenParameteriSGIS),
+   TABLE_ENTRY(PixelTexGenParameterivSGIS),
+   TABLE_ENTRY(PixelTexGenParameterfSGIS),
+   TABLE_ENTRY(PixelTexGenParameterfvSGIS),
+   TABLE_ENTRY(GetPixelTexGenParameterivSGIS),
+   TABLE_ENTRY(GetPixelTexGenParameterfvSGIS),
+   /* GL_SGIS_texture4D */
+   TABLE_ENTRY(TexImage4DSGIS),
+   TABLE_ENTRY(TexSubImage4DSGIS),
+   /* GL_EXT_texture_object */
+   TABLE_ENTRY(AreTexturesResidentEXT),
+   TABLE_ENTRY(GenTexturesEXT),
+   TABLE_ENTRY(IsTextureEXT),
+   /* GL_SGIS_detail_texture */
+   TABLE_ENTRY(DetailTexFuncSGIS),
+   TABLE_ENTRY(GetDetailTexFuncSGIS),
+   /* GL_SGIS_sharpen_texture */
+   TABLE_ENTRY(SharpenTexFuncSGIS),
+   TABLE_ENTRY(GetSharpenTexFuncSGIS),
+   /* GL_SGIS_multisample */
+   TABLE_ENTRY(SampleMaskSGIS),
+   TABLE_ENTRY(SamplePatternSGIS),
+   /* GL_EXT_vertex_array */
+   TABLE_ENTRY(ColorPointerEXT),
+   TABLE_ENTRY(EdgeFlagPointerEXT),
+   TABLE_ENTRY(IndexPointerEXT),
+   TABLE_ENTRY(NormalPointerEXT),
+   TABLE_ENTRY(TexCoordPointerEXT),
+   TABLE_ENTRY(VertexPointerEXT),
+   /* GL_EXT_blend_minmax */
+   /* GL_SGIX_sprite */
+   TABLE_ENTRY(SpriteParameterfSGIX),
+   TABLE_ENTRY(SpriteParameterfvSGIX),
+   TABLE_ENTRY(SpriteParameteriSGIX),
+   TABLE_ENTRY(SpriteParameterivSGIX),
+   /* GL_EXT_point_parameters */
+   TABLE_ENTRY(PointParameterfEXT),
+   TABLE_ENTRY(PointParameterfvEXT),
+   /* GL_SGIX_instruments */
+   TABLE_ENTRY(GetInstrumentsSGIX),
+   TABLE_ENTRY(InstrumentsBufferSGIX),
+   TABLE_ENTRY(PollInstrumentsSGIX),
+   TABLE_ENTRY(ReadInstrumentsSGIX),
+   TABLE_ENTRY(StartInstrumentsSGIX),
+   TABLE_ENTRY(StopInstrumentsSGIX),
+   /* GL_SGIX_framezoom */
+   TABLE_ENTRY(FrameZoomSGIX),
+   /* GL_SGIX_tag_sample_buffer */
+   TABLE_ENTRY(TagSampleBufferSGIX),
+   /* GL_SGIX_reference_plane */
+   TABLE_ENTRY(ReferencePlaneSGIX),
+   /* GL_SGIX_flush_raster */
+   TABLE_ENTRY(FlushRasterSGIX),
+   /* GL_SGIX_list_priority */
+   TABLE_ENTRY(GetListParameterfvSGIX),
+   TABLE_ENTRY(GetListParameterivSGIX),
+   TABLE_ENTRY(ListParameterfSGIX),
+   TABLE_ENTRY(ListParameterfvSGIX),
+   TABLE_ENTRY(ListParameteriSGIX),
+   TABLE_ENTRY(ListParameterivSGIX),
+   /* GL_SGIX_fragment_lighting */
+   TABLE_ENTRY(FragmentColorMaterialSGIX),
+   TABLE_ENTRY(FragmentLightfSGIX),
+   TABLE_ENTRY(FragmentLightfvSGIX),
+   TABLE_ENTRY(FragmentLightiSGIX),
+   TABLE_ENTRY(FragmentLightivSGIX),
+   TABLE_ENTRY(FragmentLightModelfSGIX),
+   TABLE_ENTRY(FragmentLightModelfvSGIX),
+   TABLE_ENTRY(FragmentLightModeliSGIX),
+   TABLE_ENTRY(FragmentLightModelivSGIX),
+   TABLE_ENTRY(FragmentMaterialfSGIX),
+   TABLE_ENTRY(FragmentMaterialfvSGIX),
+   TABLE_ENTRY(FragmentMaterialiSGIX),
+   TABLE_ENTRY(FragmentMaterialivSGIX),
+   TABLE_ENTRY(GetFragmentLightfvSGIX),
+   TABLE_ENTRY(GetFragmentLightivSGIX),
+   TABLE_ENTRY(GetFragmentMaterialfvSGIX),
+   TABLE_ENTRY(GetFragmentMaterialivSGIX),
+   TABLE_ENTRY(LightEnviSGIX),
+   /* GL_EXT_vertex_weighting */
+   TABLE_ENTRY(VertexWeightfEXT),
+   TABLE_ENTRY(VertexWeightfvEXT),
+   TABLE_ENTRY(VertexWeightPointerEXT),
+   /* GL_NV_vertex_array_range */
+   TABLE_ENTRY(FlushVertexArrayRangeNV),
+   TABLE_ENTRY(VertexArrayRangeNV),
+   /* GL_NV_register_combiners */
+   TABLE_ENTRY(CombinerParameterfvNV),
+   TABLE_ENTRY(CombinerParameterfNV),
+   TABLE_ENTRY(CombinerParameterivNV),
+   TABLE_ENTRY(CombinerParameteriNV),
+   TABLE_ENTRY(CombinerInputNV),
+   TABLE_ENTRY(CombinerOutputNV),
+   TABLE_ENTRY(FinalCombinerInputNV),
+   TABLE_ENTRY(GetCombinerInputParameterfvNV),
+   TABLE_ENTRY(GetCombinerInputParameterivNV),
+   TABLE_ENTRY(GetCombinerOutputParameterfvNV),
+   TABLE_ENTRY(GetCombinerOutputParameterivNV),
+   TABLE_ENTRY(GetFinalCombinerInputParameterfvNV),
+   TABLE_ENTRY(GetFinalCombinerInputParameterivNV),
+   /* GL_MESA_resize_buffers */
+   TABLE_ENTRY(ResizeBuffersMESA),
+   /* GL_MESA_window_pos */
+   TABLE_ENTRY(WindowPos2dMESA),
+   TABLE_ENTRY(WindowPos2dvMESA),
+   TABLE_ENTRY(WindowPos2fMESA),
+   TABLE_ENTRY(WindowPos2fvMESA),
+   TABLE_ENTRY(WindowPos2iMESA),
+   TABLE_ENTRY(WindowPos2ivMESA),
+   TABLE_ENTRY(WindowPos2sMESA),
+   TABLE_ENTRY(WindowPos2svMESA),
+   TABLE_ENTRY(WindowPos3dMESA),
+   TABLE_ENTRY(WindowPos3dvMESA),
+   TABLE_ENTRY(WindowPos3fMESA),
+   TABLE_ENTRY(WindowPos3fvMESA),
+   TABLE_ENTRY(WindowPos3iMESA),
+   TABLE_ENTRY(WindowPos3ivMESA),
+   TABLE_ENTRY(WindowPos3sMESA),
+   TABLE_ENTRY(WindowPos3svMESA),
+   TABLE_ENTRY(WindowPos4dMESA),
+   TABLE_ENTRY(WindowPos4dvMESA),
+   TABLE_ENTRY(WindowPos4fMESA),
+   TABLE_ENTRY(WindowPos4fvMESA),
+   TABLE_ENTRY(WindowPos4iMESA),
+   TABLE_ENTRY(WindowPos4ivMESA),
+   TABLE_ENTRY(WindowPos4sMESA),
+   TABLE_ENTRY(WindowPos4svMESA),
+   /* GL_EXT_draw_range_elements */
+   TABLE_ENTRY(BlendFuncSeparateEXT),
+   /* GL_EXT_index_material */
+   TABLE_ENTRY(IndexMaterialEXT),
+   /* GL_EXT_index_func */
+   TABLE_ENTRY(IndexFuncEXT),
+   /* GL_EXT_compiled_vertex_array */
+   TABLE_ENTRY(LockArraysEXT),
+   TABLE_ENTRY(UnlockArraysEXT),
+   /* GL_EXT_cull_vertex */
+   TABLE_ENTRY(CullParameterdvEXT),
+   TABLE_ENTRY(CullParameterfvEXT),
+   /* GL_PGI_misc_hints */
+   TABLE_ENTRY(HintPGI),
+   /* GL_EXT_fog_coord */
+   TABLE_ENTRY(FogCoordfEXT),
+   TABLE_ENTRY(FogCoordfvEXT),
+   TABLE_ENTRY(FogCoorddEXT),
+   TABLE_ENTRY(FogCoorddvEXT),
+   TABLE_ENTRY(FogCoordPointerEXT),
+   /* GL_EXT_color_table */
+   TABLE_ENTRY(GetColorTableEXT),
+   TABLE_ENTRY(GetColorTableParameterivEXT),
+   TABLE_ENTRY(GetColorTableParameterfvEXT),
+   /* GL_3DFX_tbuffer */
+   TABLE_ENTRY(TbufferMask3DFX),
+   /* GL_ARB_texture_compression */
+   TABLE_ENTRY(CompressedTexImage3DARB),
+   TABLE_ENTRY(CompressedTexImage2DARB),
+   TABLE_ENTRY(CompressedTexImage1DARB),
+   TABLE_ENTRY(CompressedTexSubImage3DARB),
+   TABLE_ENTRY(CompressedTexSubImage2DARB),
+   TABLE_ENTRY(CompressedTexSubImage1DARB),
+   TABLE_ENTRY(GetCompressedTexImageARB),
+   /* GL_EXT_secondary_color */
+   TABLE_ENTRY(SecondaryColor3bEXT),
+   TABLE_ENTRY(SecondaryColor3bvEXT),
+   TABLE_ENTRY(SecondaryColor3dEXT),
+   TABLE_ENTRY(SecondaryColor3dvEXT),
+   TABLE_ENTRY(SecondaryColor3fEXT),
+   TABLE_ENTRY(SecondaryColor3fvEXT),
+   TABLE_ENTRY(SecondaryColor3iEXT),
+   TABLE_ENTRY(SecondaryColor3ivEXT),
+   TABLE_ENTRY(SecondaryColor3sEXT),
+   TABLE_ENTRY(SecondaryColor3svEXT),
+   TABLE_ENTRY(SecondaryColor3ubEXT),
+   TABLE_ENTRY(SecondaryColor3ubvEXT),
+   TABLE_ENTRY(SecondaryColor3uiEXT),
+   TABLE_ENTRY(SecondaryColor3uivEXT),
+   TABLE_ENTRY(SecondaryColor3usEXT),
+   TABLE_ENTRY(SecondaryColor3usvEXT),
+   TABLE_ENTRY(SecondaryColorPointerEXT),
+   /* A whole bunch of no-op functions.  These might be called
+    * when someone tries to call a dynamically-registered extension
+    * function without a current rendering context.
+    */
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused),
+   TABLE_ENTRY(Unused)
+};
+#endif /* DISPATCH_TABLE_NAME */
+
+
+
+/*
+ * This is just used to silence compiler warnings.
+ * We list the functions which aren't otherwise used.
+ */
+#ifdef UNUSED_TABLE_NAME
+void *UNUSED_TABLE_NAME[] = {
+   TABLE_ENTRY(BlendColorEXT),
+   TABLE_ENTRY(CopyTexSubImage3DEXT),
+   TABLE_ENTRY(TexImage3DEXT),
+   TABLE_ENTRY(TexSubImage3DEXT),
+   TABLE_ENTRY(CopyTexSubImage1DEXT),
+   TABLE_ENTRY(TexSubImage1DEXT),
+   TABLE_ENTRY(TexSubImage2DEXT),
+   TABLE_ENTRY(CopyTexImage1DEXT),
+   TABLE_ENTRY(CopyTexImage2DEXT),
+   TABLE_ENTRY(CopyTexSubImage2DEXT),
+   TABLE_ENTRY(HistogramEXT),
+   TABLE_ENTRY(MinmaxEXT),
+   TABLE_ENTRY(ResetHistogramEXT),
+   TABLE_ENTRY(ResetMinmaxEXT),
+   TABLE_ENTRY(ConvolutionFilter1DEXT),
+   TABLE_ENTRY(ConvolutionFilter2DEXT),
+   TABLE_ENTRY(ConvolutionParameterfEXT),
+   TABLE_ENTRY(ConvolutionParameterfvEXT),
+   TABLE_ENTRY(ConvolutionParameteriEXT),
+   TABLE_ENTRY(ConvolutionParameterivEXT),
+   TABLE_ENTRY(CopyConvolutionFilter1DEXT),
+   TABLE_ENTRY(CopyConvolutionFilter2DEXT),
+   TABLE_ENTRY(SeparableFilter2DEXT),
+   TABLE_ENTRY(ColorTableParameterfvSGI),
+   TABLE_ENTRY(ColorTableParameterivSGI),
+   TABLE_ENTRY(ColorTableSGI),
+   TABLE_ENTRY(CopyColorTableSGI),
+   TABLE_ENTRY(DeleteTexturesEXT),
+   TABLE_ENTRY(BindTextureEXT),
+   TABLE_ENTRY(PrioritizeTexturesEXT),
+   TABLE_ENTRY(GetPointervEXT),
+   TABLE_ENTRY(ArrayElementEXT),
+   TABLE_ENTRY(DrawArraysEXT),
+   TABLE_ENTRY(BlendEquationEXT),
+   TABLE_ENTRY(PointParameterfSGIS),
+   TABLE_ENTRY(PointParameterfvSGIS),
+   TABLE_ENTRY(ColorSubTableEXT),
+   TABLE_ENTRY(CopyColorSubTableEXT),
+   TABLE_ENTRY(ColorTableEXT),
+   TABLE_ENTRY(DrawRangeElementsEXT),
+   TABLE_ENTRY(BlendFuncSeparateINGR),
+   TABLE_ENTRY(SampleMaskEXT),
+   TABLE_ENTRY(SamplePatternEXT)
+};
+#endif /*UNUSED_TABLE_NAME*/
+
+
 #undef KEYWORD1
 #undef KEYWORD2
 #undef NAME
 #undef DISPATCH
 #undef RETURN_DISPATCH
+#undef DISPATCH_TABLE_NAME
+#undef UNUSED_TABLE_NAME
+#undef TABLE_ENTRY
index 89cbd82..4eaafa6 100644 (file)
@@ -1,29 +1,12 @@
-# $Id: Makefile.DJ,v 1.9 2000/09/26 21:22:20 brianp Exp $
+# $Id: Makefile.DJ,v 1.10 2001/03/28 17:19:58 brianp Exp $
 
 # Mesa 3-D graphics library
 # Version:  3.5
-# Copyright (C) 1995-1998  Brian Paul
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the Free
-# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
+# Copyright (C) 1995-2001  Brian Paul
 
 # Makefile for core library for MS-DOS using djgpp
 
 
-
-
 ##### MACROS #####
 
 VPATH = RCS
@@ -67,7 +50,6 @@ CORE_SOURCES = \
        fog.c \
        get.c \
        glapi.c \
-       glapinoop.c \
        glthread.c \
        hash.c \
        hint.c \
index a2c0388..fe2e4ce 100644 (file)
@@ -1,8 +1,8 @@
-# $Id: Makefile.X11,v 1.47 2001/03/19 02:25:35 keithw Exp $
+# $Id: Makefile.X11,v 1.48 2001/03/28 17:19:58 brianp Exp $
 
 # Mesa 3-D graphics library
 # Version:  3.5
-# Copyright (C) 1995-2000  Brian Paul
+# Copyright (C) 1995-2001  Brian Paul
 
 # Makefile for core library
 
@@ -74,7 +74,6 @@ CORE_SOURCES = \
        fog.c \
        get.c \
        glapi.c \
-       glapinoop.c \
        glthread.c \
        hash.c \
        highpc.c \
index c9f180e..6a97bb8 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.130 2001/03/24 06:01:27 gareth Exp $ */
+/* $Id: context.c,v 1.131 2001/03/28 17:20:20 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -39,7 +39,6 @@
 #include "extensions.h"
 #include "fog.h"
 #include "get.h"
-#include "glapinoop.h"
 #include "glthread.h"
 #include "hash.h"
 #include "imports.h"
index 0b9b17e..cc14c4b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: dispatch.c,v 1.21 2001/03/26 23:36:51 brianp Exp $ */
+/* $Id: dispatch.c,v 1.22 2001/03/28 17:20:20 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -28,9 +28,7 @@
 /*
  * This file generates all the gl* function entyrpoints.
  * But if we're using X86-optimized dispatch (X86/glapi_x86.S) then
- * each of the entrypoints will be prefixed with _glapi_fallback_*
- * and will be called by the glapi_x86.S code when we're in thread-
- * safe mode.
+ * we don't use this file's code.
  *
  * Eventually this file may be replaced by automatically generated
  * code from an API spec file.
@@ -41,7 +39,6 @@
  */
 
 
-
 #ifdef PC_HEADER
 #include "all.h"
 #else
 #include "glthread.h"
 #endif
 
-
+#if !defined(USE_X86_ASM)
 
 #define KEYWORD1
 #define KEYWORD2 GLAPIENTRY
-#if defined(USE_X86_ASM) && !defined(__WIN32__) && !defined(XF86DRI)
-#define NAME(func) _glapi_fallback_##func
-#elif defined(USE_MGL_NAMESPACE)
+#if defined(USE_MGL_NAMESPACE)
 #define NAME(func)  mgl##func
 #else
 #define NAME(func)  gl##func
 #endif
 
-#ifdef DEBUG
-
-#if 0
-static int
-trace(void)
-{
-   static int trace = -1;
-   if (trace < 0)
-      trace = getenv("MESA_TRACE") ? 1 : 0;
-   return trace > 0;
-}
-#endif
-
-#define F stderr
-
-#define DISPATCH(FUNC, ARGS, MESSAGE)                                  \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
-   (dispatch->FUNC) ARGS
-
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)                           \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
-   return (dispatch->FUNC) ARGS
-
-#if 0
-   /* From both macros above... */
-   if (trace()) {                                                      \
-      fprintf MESSAGE;                                                 \
-      fprintf(F, "\n");                                                        \
-   }
-#endif
-
-#else
-
-#define DISPATCH(FUNC, ARGS, MESSAGE)                                  \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
-   (dispatch->FUNC) ARGS
+#define DISPATCH(FUNC, ARGS, MESSAGE)          \
+   (_glapi_Dispatch->FUNC) ARGS
 
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)                           \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
-   return (dispatch->FUNC) ARGS
-
-#endif
+#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
+   return (_glapi_Dispatch->FUNC) ARGS
 
 
 #ifndef GLAPIENTRY
@@ -116,3 +70,6 @@ trace(void)
 #endif
 
 #include "glapitemp.h"
+
+
+#endif /* USE_X86_ASM */