Wrap every place that accesses a dispatch table with a macro. A new script-
authorIan Romanick <idr@us.ibm.com>
Mon, 18 Jul 2005 12:31:24 +0000 (12:31 +0000)
committerIan Romanick <idr@us.ibm.com>
Mon, 18 Jul 2005 12:31:24 +0000 (12:31 +0000)
generated file, called src/mesa/glapi/dispatch.h, is added.  This file
contains three macros for each API function.  It contains a GET, a SET, and
a CALL.  Each of the macros take a pointer to the context and a pointer to
the dispatch table.

In several threads on mesa3d-dev we discussed replacing _glapi_add_entrypoint
with a new function called _glapi_add_dispatch.  For this discussion, the
important difference between the two is that the caller of _glapi_add_dispatch
does *not* know what the dispatch offset will be at compile time.  Because of
this callers need to track the dispatch offset returned by
_glapi_add_dispatch.

http://marc.theaimsgroup.com/?t=111947074700001&r=1&w=2

The downside is that driver code then has to access the dispatch table two
different ways.  It accesses it using structure tags (e.g., exec->Begin) for
functions with fixed offsets and via a remap table (e.g., exec[
remap->NewExtensionFunction ]) for functions without fixed offsets. Yuck!

Using the macros allows both types of functions to be accessed
identically.  If a driver needs to set a pointer for Begin, it does
'SET_Begin(ctx, exec, my_begin_function)'.  If it needs to set a pointer
for NewExtensionFunction, it does 'SET_NewExtensionFunction(ctx, exec,
my_NewExtensionFunction_function)'.  Furthermore, if at some point in
the future a static offset is assigned for NewExtensionFunction, only
the macros need to change (instead of every single place that accesses a
table for that function).

This code differs slightly from the originally posted patches in that the
CALL, GET, and SET marcos no longer take a context pointer as a parameter.
Brian Paul had suggested that the remap table could be stored as a global
since it would be set at CreateScreen time and would be constant for all
contexts.  This change reflects that feedback.

http://marc.theaimsgroup.com/?t=112087194700001&r=1&w=2

24 files changed:
src/mesa/drivers/dri/ffb/ffb_vtxfmt.c
src/mesa/drivers/dri/r200/r200_vtxfmt.c
src/mesa/drivers/dri/r200/r200_vtxfmt_c.c
src/mesa/drivers/dri/radeon/radeon_vtxfmt.c
src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c
src/mesa/glapi/Makefile
src/mesa/glapi/gl_table.py
src/mesa/glapi/glthread.h
src/mesa/main/api_arrayelt.c
src/mesa/main/api_loopback.c
src/mesa/main/api_noop.c
src/mesa/main/dispatch.c
src/mesa/main/dlist.c
src/mesa/main/state.c
src/mesa/main/varray.c
src/mesa/main/vtxfmt.c
src/mesa/main/vtxfmt_tmp.h
src/mesa/shader/arbprogparse.c
src/mesa/tnl/t_array_api.c
src/mesa/tnl/t_save_api.c
src/mesa/tnl/t_save_loopback.c
src/mesa/tnl/t_vtx_api.c
src/mesa/tnl/t_vtx_eval.c
src/mesa/tnl_dd/imm/t_dd_imm_capi.h

index 279cda7..d6a61d9 100644 (file)
@@ -146,28 +146,28 @@ static void choose_normals(void)
                }
 
                if (ctx->Light.EnabledList.next == ctx->Light.EnabledList.prev) {
-                       ctx->Exec->Normal3f  = norm_tab[index].normal3f_single;
-                       ctx->Exec->Normal3fv = norm_tab[index].normal3fv_single;
+                       SET_Normal3f(ctx->Exec, norm_tab[index].normal3f_single);
+                       SET_Normal3fv(ctx->Exec, norm_tab[index].normal3fv_single);
                } else {
-                       ctx->Exec->Normal3f  = norm_tab[index].normal3f_multi;
-                       ctx->Exec->Normal3fv = norm_tab[index].normal3fv_multi;
+                       SET_Normal3f(ctx->Exec, norm_tab[index].normal3f_multi);
+                       SET_Normal3fv(ctx->Exec, norm_tab[index].normal3fv_multi);
                }
        } else {
-               ctx->Exec->Normal3f = _mesa_noop_Normal3f;
-               ctx->Exec->Normal3fv = _mesa_noop_Normal3fv;
+               SET_Normal3f(ctx->Exec, _mesa_noop_Normal3f);
+               SET_Normal3fv(ctx->Exec, _mesa_noop_Normal3fv);
        }
 }
 
 static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z)
 {
        choose_normals();
-       GL_CALL(Normal3f)(x, y, z);
+       CALL_Normal3f(GET_DISPATCH(), (x, y, z));
 }
 
 static void ffb_choose_Normal3fv(const GLfloat *v)
 {
        choose_normals();
-       GL_CALL(Normal3fv)(v);
+       CALL_Normal3fv(GET_DISPATCH(), (v));
 }
 
 /* Vertex functions: */
@@ -267,13 +267,14 @@ static void ffb_do_fallback(GLcontext *ctx)
         * correctly:
         */
        if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END )
-               GL_CALL(Begin)(fmesa->imm.prim);
+               CALL_Begin(GET_DISPATCH(), (fmesa->imm.prim));
 
        if (ctx->Light.Enabled) {
-               GL_CALL(Color4fv)(ctx->Current.Color);  /* Catch ColorMaterial */
-               GL_CALL(Normal3fv)(current->normal);
+               /* Catch ColorMaterial */
+               CALL_Color4fv(GET_DISPATCH(), (ctx->Current.Color));
+               CALL_Normal3fv(GET_DISPATCH(), (current->normal));
        } else {
-               GL_CALL(Color4fv)(current->color);
+               CALL_Color4fv(GET_DISPATCH(), (current->color));
        }
 }
 
index 32d1ac5..c5d1f13 100644 (file)
@@ -58,6 +58,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "tnl/t_context.h"
 #include "tnl/t_array_api.h"
 
+#include "dispatch.h"
+
 static void r200VtxFmtFlushVertices( GLcontext *, GLuint );
 
 static void count_func( const char *name,  struct dynfn *l )
@@ -411,13 +413,13 @@ static void dispatch_multitexcoord( GLuint count, GLuint unit, GLfloat * f )
 {
    switch( count ) {
    case 3:
-      GL_CALL(MultiTexCoord3fvARB)( GL_TEXTURE0+unit, f );
+      CALL_MultiTexCoord3fvARB(GET_DISPATCH(), (GL_TEXTURE0+unit, f));
       break;
    case 2:
-      GL_CALL(MultiTexCoord2fvARB)( GL_TEXTURE0+unit, f );
+      CALL_MultiTexCoord2fvARB(GET_DISPATCH(), (GL_TEXTURE0+unit, f));
       break;
    case 1:
-      GL_CALL(MultiTexCoord1fvARB)( GL_TEXTURE0+unit, f );
+      CALL_MultiTexCoord1fvARB(GET_DISPATCH(), (GL_TEXTURE0+unit, f));
       break;
    default:
       assert( count == 0 );
@@ -465,7 +467,7 @@ void VFMT_FALLBACK( const char *caller )
    assert(rmesa->dma.flush == 0);
    rmesa->vb.fell_back = GL_TRUE;
    rmesa->vb.installed = GL_FALSE;
-   GL_CALL(Begin)( prim );
+   CALL_Begin(GET_DISPATCH(), (prim));
 
    if (rmesa->vb.installed_color_3f_sz == 4)
       alpha = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3];
@@ -476,30 +478,30 @@ void VFMT_FALLBACK( const char *caller )
       GLuint offset = 3;
 
       if (ind0 & R200_VTX_N0) {
-        GL_CALL(Normal3fv)( &tmp[i][offset] ); 
+        CALL_Normal3fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset += 3;
       }
 
       if (ind0 & R200_VTX_DISCRETE_FOG) {
-        GL_CALL(FogCoordfvEXT)( &tmp[i][offset] ); 
+        CALL_FogCoordfvEXT(GET_DISPATCH(), (&tmp[i][offset]));
         offset++;
       }
 
       if (VTX_COLOR(ind0, 0) == R200_VTX_PK_RGBA) {
-        GL_CALL(Color4ubv)( (GLubyte *)&tmp[i][offset] ); 
+        CALL_Color4ubv(GET_DISPATCH(), ((GLubyte *)&tmp[i][offset]));
         offset++;
       }
       else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGBA) {
-        GL_CALL(Color4fv)( &tmp[i][offset] ); 
+        CALL_Color4fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset+=4;
       } 
       else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGB) {
-        GL_CALL(Color3fv)( &tmp[i][offset] ); 
+        CALL_Color3fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset+=3;
       }
 
       if (VTX_COLOR(ind0, 1) == R200_VTX_PK_RGBA) {
-        GL_CALL(SecondaryColor3ubvEXT)( (GLubyte *)&tmp[i][offset] ); 
+        CALL_SecondaryColor3ubvEXT(GET_DISPATCH(), ((GLubyte *)&tmp[i][offset]));
         offset++;
       }
 
@@ -509,42 +511,42 @@ void VFMT_FALLBACK( const char *caller )
         offset += count;
       }
 
-      GL_CALL(Vertex3fv)( &tmp[i][0] );
+      CALL_Vertex3fv(GET_DISPATCH(), (&tmp[i][0]));
    }
 
    /* Replay current vertex
     */
    if (ind0 & R200_VTX_N0) 
-      GL_CALL(Normal3fv)( rmesa->vb.normalptr );
+      CALL_Normal3fv(GET_DISPATCH(), (rmesa->vb.normalptr));
    if (ind0 & R200_VTX_DISCRETE_FOG) {
-      GL_CALL(FogCoordfvEXT)( rmesa->vb.fogptr ); 
+      CALL_FogCoordfvEXT(GET_DISPATCH(), (rmesa->vb.fogptr));
    }
 
    if (VTX_COLOR(ind0, 0) == R200_VTX_PK_RGBA) {
-      GL_CALL(Color4ub)( rmesa->vb.colorptr->red,
-                        rmesa->vb.colorptr->green,
-                        rmesa->vb.colorptr->blue,
-                        rmesa->vb.colorptr->alpha );
+      CALL_Color4ub(GET_DISPATCH(), (rmesa->vb.colorptr->red,
+                                    rmesa->vb.colorptr->green,
+                                    rmesa->vb.colorptr->blue,
+                                    rmesa->vb.colorptr->alpha));
    }
    else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGBA) {
-      GL_CALL(Color4fv)( rmesa->vb.floatcolorptr );
+      CALL_Color4fv(GET_DISPATCH(), (rmesa->vb.floatcolorptr));
    }
    else if (VTX_COLOR(ind0, 0) == R200_VTX_FP_RGB) {
       if (rmesa->vb.installed_color_3f_sz == 4 && alpha != 1.0) {
-        GL_CALL(Color4f)( rmesa->vb.floatcolorptr[0],
-                          rmesa->vb.floatcolorptr[1],
-                          rmesa->vb.floatcolorptr[2],
-                          alpha );
+        CALL_Color4f(GET_DISPATCH(), (rmesa->vb.floatcolorptr[0],
+                                      rmesa->vb.floatcolorptr[1],
+                                      rmesa->vb.floatcolorptr[2],
+                                      alpha));
       }
       else {
-        GL_CALL(Color3fv)( rmesa->vb.floatcolorptr );
+        CALL_Color3fv(GET_DISPATCH(), (rmesa->vb.floatcolorptr));
       }
    }
 
    if (VTX_COLOR(ind0, 1) == R200_VTX_PK_RGBA) 
-       GL_CALL(SecondaryColor3ubEXT)( rmesa->vb.specptr->red, 
-                                     rmesa->vb.specptr->green,
-                                     rmesa->vb.specptr->blue ); 
+       CALL_SecondaryColor3ubEXT(GET_DISPATCH(), (rmesa->vb.specptr->red, 
+                                                 rmesa->vb.specptr->green,
+                                                 rmesa->vb.specptr->blue));
 
    for ( unit = 0 ; unit < ctx->Const.MaxTextureUnits ; unit++ ) {
       count = VTX_TEXn_COUNT( ind1, unit );
@@ -882,7 +884,7 @@ static void r200_Materialfv( GLenum face, GLenum pname,
 
    if (rmesa->vb.prim[0] != GL_POLYGON+1) {
       VFMT_FALLBACK( __FUNCTION__ );
-      GL_CALL(Materialfv)( face, pname, params );
+      CALL_Materialfv(GET_DISPATCH(), (face, pname, params));
       return;
    }
    _mesa_noop_Materialfv( face, pname, params );
@@ -921,7 +923,7 @@ static void r200_Begin( GLenum mode )
       r200VtxfmtValidate( ctx );
 
    if (!rmesa->vb.installed) {
-      GL_CALL(Begin)( mode );
+      CALL_Begin(GET_DISPATCH(), (mode));
       return;
    }
 
index 7a789b2..1db5950 100644 (file)
@@ -44,6 +44,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "r200_vtxfmt.h"
 #include "r200_tcl.h"
 
+#include "dispatch.h"
+
 /* Fallback versions of all the entrypoints for situations where
  * codegen isn't available.  This is still a lot faster than the
  * vb/pipeline implementation in Mesa.
@@ -578,7 +580,7 @@ static void r200_MultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t)
       break;
    default:
       VFMT_FALLBACK(__FUNCTION__);
-      GL_CALL(MultiTexCoord2fARB)(target, s, t);
+      CALL_MultiTexCoord2fARB(GET_DISPATCH(), (target, s, t));
       return;  
    }
 }
@@ -599,7 +601,7 @@ static void r200_MultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat
       break;
    default:
       VFMT_FALLBACK(__FUNCTION__);
-      GL_CALL(MultiTexCoord3fARB)(target, s, t, r);
+      CALL_MultiTexCoord3fARB(GET_DISPATCH(), (target, s, t, r));
       return;  
    }
 }
@@ -683,15 +685,15 @@ static void choose_##FN ARGS1                                             \
       fprintf(stderr, "%s -- cached codegen\n", __FUNCTION__ );                \
                                                                        \
    if (dfn)                                                            \
-      ctx->Exec->FN = (FNTYPE)(dfn->code);                             \
+      SET_ ## FN (ctx->Exec, (FNTYPE)(dfn->code));                     \
    else {                                                              \
       if (R200_DEBUG & DEBUG_CODEGEN)                                  \
         fprintf(stderr, "%s -- generic version\n", __FUNCTION__ );     \
-      ctx->Exec->FN = r200_##FN;                                       \
+      SET_ ## FN (ctx->Exec, r200_##FN);                               \
    }                                                                   \
                                                                        \
    ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;                      \
-   ctx->Exec->FN ARGS2;                                                        \
+   CALL_ ## FN (ctx->Exec, ARGS2);                                     \
 }
 
 
@@ -715,7 +717,7 @@ static void choose_##FN ARGS1                                               \
    key[1] = rmesa->vb.vtxfmt_1 & MASK1;                                        \
                                                                        \
    if (VTX_COLOR(rmesa->vb.vtxfmt_0,0) == R200_VTX_PK_RGBA) {          \
-      ctx->Exec->FN = r200_##FN##_ub;                                  \
+      SET_ ## FN (ctx->Exec, r200_##FN##_ub);                          \
    }                                                                   \
    else if (VTX_COLOR(rmesa->vb.vtxfmt_0,0) == R200_VTX_FP_RGB) {      \
                                                                        \
@@ -725,15 +727,15 @@ static void choose_##FN ARGS1                                             \
          if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) {           \
             r200_copy_to_current( ctx );                               \
             _mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt );       \
-            ctx->Exec->FN ARGS2;                                       \
+            CALL_ ## FN (ctx->Exec, ARGS2);                            \
             return;                                                    \
          }                                                             \
       }                                                                        \
                                                                        \
-      ctx->Exec->FN = r200_##FN##_3f;                                  \
+      SET_ ## FN (ctx->Exec, r200_##FN##_3f);                          \
    }                                                                   \
    else {                                                              \
-      ctx->Exec->FN = r200_##FN##_4f;                                  \
+      SET_ ## FN (ctx->Exec, r200_##FN##_4f);                          \
    }                                                                   \
                                                                        \
                                                                        \
@@ -743,13 +745,13 @@ static void choose_##FN ARGS1                                             \
    if (dfn) {                                                          \
       if (R200_DEBUG & DEBUG_CODEGEN)                                  \
          fprintf(stderr, "%s -- codegen version\n", __FUNCTION__ );    \
-      ctx->Exec->FN = (FNTYPE)dfn->code;                               \
+      SET_ ## FN (ctx->Exec, (FNTYPE)dfn->code);                       \
    }                                                                   \
    else if (R200_DEBUG & DEBUG_CODEGEN)                                        \
          fprintf(stderr, "%s -- 'c' version\n", __FUNCTION__ );                \
                                                                        \
    ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;                      \
-   ctx->Exec->FN ARGS2;                                                        \
+   CALL_ ## FN (ctx->Exec, ARGS2);                                     \
 }
 
 
@@ -778,16 +780,16 @@ static void choose_##FN ARGS1                                             \
       fprintf(stderr, "%s -- cached version\n", __FUNCTION__ );                \
                                                                        \
    if (dfn)                                                            \
-      ctx->Exec->FN = (FNTYPE)(dfn->code);                     \
+      SET_ ## FN (ctx->Exec, (FNTYPE)(dfn->code));                     \
    else {                                                              \
       if (R200_DEBUG & DEBUG_CODEGEN)                                  \
          fprintf(stderr, "%s -- generic version\n", __FUNCTION__ );    \
-      ctx->Exec->FN = (VTX_COLOR(rmesa->vb.vtxfmt_0,1) == R200_VTX_PK_RGBA) \
-         ? r200_##FN##_ub : r200_##FN##_3f                           \
+      SET_ ## FN (ctx->Exec, (VTX_COLOR(rmesa->vb.vtxfmt_0,1) == R200_VTX_PK_RGBA) \
+         ? r200_##FN##_ub : r200_##FN##_3f);                           \
    }                                                                   \
                                                                        \
    ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;              \
-   ctx->Exec->FN ARGS2;                                                \
+   CALL_ ## FN (ctx->Exec, ARGS2);                                     \
 }
 
 
index b82c158..c5ea51c 100644 (file)
@@ -57,6 +57,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "radeon_swtcl.h"
 #include "radeon_vtxfmt.h"
 
+#include "dispatch.h"
+
 static void radeonVtxfmtFlushVertices( GLcontext *, GLuint );
 
 static void count_func( const char *name,  struct dynfn *l )
@@ -387,7 +389,7 @@ static void VFMT_FALLBACK( const char *caller )
    assert(rmesa->dma.flush == 0);
    rmesa->vb.fell_back = GL_TRUE;
    rmesa->vb.installed = GL_FALSE;
-   GL_CALL(Begin)( prim );
+   CALL_Begin(GET_DISPATCH(), (prim));
    
    if (rmesa->vb.installed_color_3f_sz == 4)
       alpha = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3];
@@ -397,69 +399,69 @@ static void VFMT_FALLBACK( const char *caller )
    for (i = 0 ; i < nrverts; i++) {
       GLuint offset = 3;
       if (ind & RADEON_CP_VC_FRMT_N0) {
-        GL_CALL(Normal3fv)( &tmp[i][offset] ); 
+        CALL_Normal3fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset += 3;
       }
 
       if (ind & RADEON_CP_VC_FRMT_PKCOLOR) {
         radeon_color_t *col = (radeon_color_t *)&tmp[i][offset];
-        GL_CALL(Color4ub)( col->red, col->green, col->blue, col->alpha );
+        CALL_Color4ub(GET_DISPATCH(), (col->red, col->green, col->blue, col->alpha));
         offset++;
       }
       else if (ind & RADEON_CP_VC_FRMT_FPALPHA) {
-        GL_CALL(Color4fv)( &tmp[i][offset] ); 
+        CALL_Color4fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset+=4;
       } 
       else if (ind & RADEON_CP_VC_FRMT_FPCOLOR) {
-        GL_CALL(Color3fv)( &tmp[i][offset] ); 
+        CALL_Color3fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset+=3;
       }
 
       if (ind & RADEON_CP_VC_FRMT_PKSPEC) {
         radeon_color_t *spec = (radeon_color_t *)&tmp[i][offset];
-        GL_CALL(SecondaryColor3ubEXT)( spec->red, spec->green, spec->blue );
+        CALL_SecondaryColor3ubEXT(GET_DISPATCH(), (spec->red, spec->green, spec->blue));
         offset++;
       }
 
       if (ind & RADEON_CP_VC_FRMT_ST0) {
-        GL_CALL(TexCoord2fv)( &tmp[i][offset] ); 
+        CALL_TexCoord2fv(GET_DISPATCH(), (&tmp[i][offset]));
         offset += 2;
       }
 
       if (ind & RADEON_CP_VC_FRMT_ST1) {
-        GL_CALL(MultiTexCoord2fvARB)( GL_TEXTURE1_ARB, &tmp[i][offset] );
+        CALL_MultiTexCoord2fvARB(GET_DISPATCH(), (GL_TEXTURE1_ARB, &tmp[i][offset]));
         offset += 2;
       }
-      GL_CALL(Vertex3fv)( &tmp[i][0] );
+      CALL_Vertex3fv(GET_DISPATCH(), (&tmp[i][0]));
    }
 
    /* Replay current vertex
     */
    if (ind & RADEON_CP_VC_FRMT_N0) 
-      GL_CALL(Normal3fv)( rmesa->vb.normalptr );
+      CALL_Normal3fv(GET_DISPATCH(), (rmesa->vb.normalptr));
 
    if (ind & RADEON_CP_VC_FRMT_PKCOLOR)
-      GL_CALL(Color4ub)( rmesa->vb.colorptr->red, rmesa->vb.colorptr->green, rmesa->vb.colorptr->blue, rmesa->vb.colorptr->alpha );
+      CALL_Color4ub(GET_DISPATCH(), (rmesa->vb.colorptr->red, rmesa->vb.colorptr->green, rmesa->vb.colorptr->blue, rmesa->vb.colorptr->alpha));
    else if (ind & RADEON_CP_VC_FRMT_FPALPHA)
-      GL_CALL(Color4fv)( rmesa->vb.floatcolorptr );
+      CALL_Color4fv(GET_DISPATCH(), (rmesa->vb.floatcolorptr));
    else if (ind & RADEON_CP_VC_FRMT_FPCOLOR) {
       if (rmesa->vb.installed_color_3f_sz == 4 && alpha != 1.0)
-        GL_CALL(Color4f)( rmesa->vb.floatcolorptr[0],
-                          rmesa->vb.floatcolorptr[1],
-                          rmesa->vb.floatcolorptr[2],
-                          alpha );
+        CALL_Color4f(GET_DISPATCH(), (rmesa->vb.floatcolorptr[0],
+                                      rmesa->vb.floatcolorptr[1],
+                                      rmesa->vb.floatcolorptr[2],
+                                      alpha));
       else
-        GL_CALL(Color3fv)( rmesa->vb.floatcolorptr );
+        CALL_Color3fv(GET_DISPATCH(), (rmesa->vb.floatcolorptr));
    }
 
    if (ind & RADEON_CP_VC_FRMT_PKSPEC) 
-       GL_CALL(SecondaryColor3ubEXT)( rmesa->vb.specptr->red, rmesa->vb.specptr->green, rmesa->vb.specptr->blue ); 
+       CALL_SecondaryColor3ubEXT(GET_DISPATCH(), (rmesa->vb.specptr->red, rmesa->vb.specptr->green, rmesa->vb.specptr->blue));
 
    if (ind & RADEON_CP_VC_FRMT_ST0) 
-      GL_CALL(TexCoord2fv)( rmesa->vb.texcoordptr[0] );
+      CALL_TexCoord2fv(GET_DISPATCH(), (rmesa->vb.texcoordptr[0]));
 
    if (ind & RADEON_CP_VC_FRMT_ST1) 
-      GL_CALL(MultiTexCoord2fvARB)( GL_TEXTURE1_ARB, rmesa->vb.texcoordptr[1] );
+      CALL_MultiTexCoord2fvARB(GET_DISPATCH(), (GL_TEXTURE1_ARB, rmesa->vb.texcoordptr[1]));
 }
 
 
@@ -758,7 +760,7 @@ static void radeon_Materialfv( GLenum face, GLenum pname,
 
    if (rmesa->vb.prim[0] != GL_POLYGON+1) {
       VFMT_FALLBACK( __FUNCTION__ );
-      GL_CALL(Materialfv)( face, pname, params );
+      CALL_Materialfv(GET_DISPATCH(), (face, pname, params));
       return;
    }
    _mesa_noop_Materialfv( face, pname, params );
@@ -797,7 +799,7 @@ static void radeon_Begin( GLenum mode )
       radeonVtxfmtValidate( ctx );
 
    if (!rmesa->vb.installed) {
-      GL_CALL(Begin)( mode );
+      CALL_Begin(GET_DISPATCH(), (mode));
       return;
    }
 
index 3e8749a..342b0b3 100644 (file)
@@ -41,6 +41,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "radeon_vtxfmt.h"
 
+#include "dispatch.h"
+
 /* Fallback versions of all the entrypoints for situations where
  * codegen isn't available.  This is still a lot faster than the
  * vb/pipeline implementation in Mesa.
@@ -623,15 +625,15 @@ static void choose_##FN ARGS1                                             \
       fprintf(stderr, "%s -- cached codegen\n", __FUNCTION__ );                \
                                                                        \
    if (dfn)                                                            \
-      ctx->Exec->FN = (FNTYPE)(dfn->code);                             \
+      SET_ ## FN (ctx->Exec, (FNTYPE)(dfn->code));                     \
    else {                                                              \
       if (RADEON_DEBUG & DEBUG_CODEGEN)                                        \
         fprintf(stderr, "%s -- generic version\n", __FUNCTION__ );     \
-      ctx->Exec->FN = radeon_##FN;                                     \
+      SET_ ## FN (ctx->Exec, radeon_##FN);                             \
    }                                                                   \
                                                                        \
    ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;                      \
-   ctx->Exec->FN ARGS2;                                                        \
+   CALL_ ## FN (ctx->Exec, ARGS2);                                     \
 }
 
 
@@ -652,7 +654,7 @@ static void choose_##FN ARGS1                                               \
    struct dynfn *dfn;                                                  \
                                                                        \
    if (rmesa->vb.vertex_format & ACTIVE_PKCOLOR) {                     \
-      ctx->Exec->FN = radeon_##FN##_ub;                                        \
+      SET_ ## FN (ctx->Exec, radeon_##FN##_ub);                                \
    }                                                                   \
    else if ((rmesa->vb.vertex_format &                                 \
             (ACTIVE_FPCOLOR|ACTIVE_FPALPHA)) == ACTIVE_FPCOLOR) {      \
@@ -663,15 +665,15 @@ static void choose_##FN ARGS1                                             \
          if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) {           \
             radeon_copy_to_current( ctx );                             \
             _mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt );       \
-            ctx->Exec->FN ARGS2;                                       \
+            CALL_ ## FN (ctx->Exec, ARGS2);                            \
             return;                                                    \
          }                                                             \
       }                                                                        \
                                                                        \
-      ctx->Exec->FN = radeon_##FN##_3f;                                        \
+      SET_ ## FN (ctx->Exec, radeon_##FN##_3f);                                \
    }                                                                   \
    else {                                                              \
-      ctx->Exec->FN = radeon_##FN##_4f;                                        \
+      SET_ ## FN (ctx->Exec, radeon_##FN##_4f);                                \
    }                                                                   \
                                                                        \
                                                                        \
@@ -681,13 +683,13 @@ static void choose_##FN ARGS1                                             \
    if (dfn) {                                                          \
       if (RADEON_DEBUG & DEBUG_CODEGEN)                                        \
          fprintf(stderr, "%s -- codegen version\n", __FUNCTION__ );    \
-      ctx->Exec->FN = (FNTYPE)dfn->code;                               \
+      SET_ ## FN (ctx->Exec, (FNTYPE)dfn->code);                       \
    }                                                                   \
    else if (RADEON_DEBUG & DEBUG_CODEGEN)                              \
          fprintf(stderr, "%s -- 'c' version\n", __FUNCTION__ );                \
                                                                        \
    ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;                      \
-   ctx->Exec->FN ARGS2;                                                        \
+   CALL_ ## FN (ctx->Exec, ARGS2);                                     \
 }
 
 
@@ -712,16 +714,16 @@ static void choose_##FN ARGS1                                             \
       fprintf(stderr, "%s -- cached version\n", __FUNCTION__ );                \
                                                                        \
    if (dfn)                                                            \
-      ctx->Exec->FN = (FNTYPE)(dfn->code);                             \
+      SET_ ## FN (ctx->Exec, (FNTYPE)(dfn->code));                     \
    else {                                                              \
       if (RADEON_DEBUG & DEBUG_CODEGEN)                                        \
          fprintf(stderr, "%s -- generic version\n", __FUNCTION__ );    \
-      ctx->Exec->FN = ((rmesa->vb.vertex_format & ACTIVE_PKSPEC) != 0) \
-         ? radeon_##FN##_ub : radeon_##FN##_3f                       \
+      SET_ ## FN (ctx->Exec, ((rmesa->vb.vertex_format & ACTIVE_PKSPEC) != 0)  \
+         ? radeon_##FN##_ub : radeon_##FN##_3f);                       \
    }                                                                   \
                                                                        \
    ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;                      \
-   ctx->Exec->FN ARGS2;                                                        \
+   CALL_ ## FN (ctx->Exec, ARGS2);                                     \
 }
 
 
index db3d0ca..259f391 100644 (file)
@@ -7,7 +7,7 @@
 TOP = ../../..
 include $(TOP)/configs/current
 
-OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h \
+OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h dispatch.h \
        ../main/enums.c \
        ../x86/glapi_x86.S \
        ../drivers/dri/common/extension_helper.h \
@@ -34,6 +34,9 @@ glapioffsets.h: $(COMMON) gl_offsets.py
 glapitable.h: $(COMMON) gl_table.py
        $(PYTHON2) $(PYTHON_FLAGS) gl_table.py > glapitable.h
 
+dispatch.h: $(COMMON) gl_table.py
+       $(PYTHON2) $(PYTHON_FLAGS) gl_table.py -m remap_table > dispatch.h
+
 ../main/enums.c: $(COMMON) gl_enums.py
        $(PYTHON2) $(PYTHON_FLAGS) gl_enums.py > ../main/enums.c
 
index a3b4943..d585b43 100644 (file)
@@ -62,23 +62,110 @@ class PrintGlTable(gl_XML.gl_print_base):
                return
 
 
+class PrintRemapTable(gl_XML.gl_print_base):
+       def __init__(self):
+               gl_XML.gl_print_base.__init__(self)
+
+               self.header_tag = '_DISPATCH_H_'
+               self.name = "gl_table.py (from Mesa)"
+               self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
+               return
+
+
+       def printRealHeader(self):
+               print """/**
+ * \\file dispatch.h
+ * Macros for handling GL dispatch tables.
+ *
+ * For each known GL function, there are 3 macros in this file.  The first
+ * macro is named CALL_FuncName and is used to call that GL function using
+ * the specified dispatch table.  The other 2 macros, called GET_FuncName
+ * can SET_FuncName, are used to get and set the dispatch pointer for the
+ * named function in the specified dispatch table.
+ */
+"""
+               
+               return
+
+       def printBody(self, api):
+               print '#define CALL_by_offset(disp, cast, offset, parameters) \\'
+               print '    (*(cast (((_glapi_proc *)(disp))[offset]))) parameters'
+               print '#define GET_by_offset(disp, offset) \\'
+               print '    (((_glapi_proc *)(disp))[offset])'
+               print '#define SET_by_offset(disp, offset, fn) \\'
+               print '    ((((_glapi_proc *)(disp))[offset]) = fn)'
+               print ''
+
+               for f in api.functionIterateByOffset():
+                       print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
+                       print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
+                       print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
+               return
+
+               abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ]
+
+               functions = []
+               abi_functions = []
+               count = 0
+               for f in api.functionIterateByOffset():
+                       [category, num] = api.get_category_for_name( f.name )
+                       if category not in abi:
+                               functions.append( [f, count] )
+                               count += 1
+                       else:
+                               abi_functions.append( f )
+
+
+               print 'struct _mesa_dispatch_remap_table {'
+
+               for [f, index] in functions:
+                       print '   unsigned %s;' % (f.name)
+
+               print '};'
+               print ''
+               print '/* %u functions need remapping. */' % (count)
+               print ''
+
+               for f in abi_functions:
+                       print '#define CALL_%s(disp, parameters) (*disp->%s) parameters' % (f.name, f.name)
+
+
+               for [f, index] in functions:
+                       arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
+                       cast = '%s (GLAPIENTRYP)(%s)' % (f.return_type, arg_string)
+
+                       print '#define CALL_%s(disp, parameters) (* (%s) (((_glapi_proc *)disp)[dispatch_remap.%s])) parameters' % (f.name, cast, f.name)
+
+               return
+
+
 def show_usage():
-       print "Usage: %s [-f input_file_name]" % sys.argv[0]
+       print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0]
+       print "    -m mode   Mode can be 'table' or 'remap_table'."
        sys.exit(1)
 
 if __name__ == '__main__':
        file_name = "gl_API.xml"
     
        try:
-               (args, trail) = getopt.getopt(sys.argv[1:], "f:")
+               (args, trail) = getopt.getopt(sys.argv[1:], "f:m:")
        except Exception,e:
                show_usage()
 
+       mode = "table"
        for (arg,val) in args:
                if arg == "-f":
                        file_name = val
+               elif arg == "-m":
+                       mode = val
+
+       if mode == "table":
+               printer = PrintGlTable()
+       elif mode == "remap_table":
+               printer = PrintRemapTable()
+       else:
+               show_usage()
 
        api = gl_XML.parse_GL_API( file_name )
 
-       printer = PrintGlTable()
        printer.Print( api )
index 291485d..503bb44 100644 (file)
@@ -119,9 +119,9 @@ typedef pthread_mutex_t _glthread_Mutex;
 extern struct _glapi_table * _glapi_DispatchTSD;
 extern _glthread_TSD _gl_DispatchTSD;
 
-#define GL_CALL(name) \
-   (((__builtin_expect( _glapi_DispatchTSD != NULL, 1 )) \
-       ? _glapi_DispatchTSD : (struct _glapi_table *) pthread_getspecific(_gl_DispatchTSD.key))-> name)
+#define GET_DISPATCH() \
+   ((__builtin_expect( _glapi_DispatchTSD != NULL, 1 )) \
+       ? _glapi_DispatchTSD : (struct _glapi_table *) pthread_getspecific(_gl_DispatchTSD.key))
 #endif
 
 #endif /* PTHREADS */
@@ -312,16 +312,16 @@ _glthread_SetTSD(_glthread_TSD *, void *);
 extern __thread struct _glapi_table * _glapi_tls_Dispatch
     __attribute__((tls_model("initial-exec")));
 
-# define GL_CALL(name) (*(_glapi_tls_Dispatch-> name))
+#define GET_DISPATCH() _glapi_tls_Dispatch
 
 #elif !defined(GL_CALL)
 # if defined(THREADS)
 extern struct _glapi_table * _glapi_DispatchTSD;
-#  define GL_CALL(name) \
-   (((__builtin_expect( _glapi_DispatchTSD != NULL, 1 )) \
-       ? _glapi_DispatchTSD : _glapi_get_dispatch())-> name)
+#  define GET_DISPATCH() \
+   ((__builtin_expect( _glapi_DispatchTSD != NULL, 1 )) \
+       ? _glapi_DispatchTSD : _glapi_get_dispatch())
 # else
-#  define GL_CALL(name) (*(_glapi_Dispatch-> name))
+#  define GET_DISPATCH() _glapi_Dispatch
 # endif /* defined(THREADS) */
 #endif  /* ndef GL_CALL */
 
index 6a531aa..e4bb998 100644 (file)
 #include "imports.h"
 #include "macros.h"
 #include "mtypes.h"
+#include "glapioffsets.h"
+#include "dispatch.h"
 
 typedef void (GLAPIENTRY *array_func)( const void * );
 
 typedef struct {
    const struct gl_client_array *array;
-   array_func func;
+   int offset;
 } AEarray;
 
 typedef void (GLAPIENTRY *attrib_func)( GLuint indx, const void *data );
@@ -57,6 +59,7 @@ typedef struct {
 
 #define AE_CONTEXT(ctx) ((AEcontext *)(ctx)->aelt_context)
 
+
 /*
  * Convert GL_BYTE, GL_UNSIGNED_BYTE, .. GL_DOUBLE into an integer
  * in the range [0, 7].  Luckily these type tokens are sequentially
@@ -64,347 +67,104 @@ typedef struct {
  */
 #define TYPE_IDX(t) ( (t) == GL_DOUBLE ? 7 : (t) & 7 )
 
-static void GLAPIENTRY Color3bv(const GLbyte *v)
-{
-   GL_CALL(Color3bv)(v);
-}
-
-static void GLAPIENTRY Color3ubv(const GLubyte *v)
-{
-   GL_CALL(Color3ubv)(v);
-}
-
-static void GLAPIENTRY Color3sv(const GLshort *v)
-{
-   GL_CALL(Color3sv)(v);
-}
-
-static void GLAPIENTRY Color3usv(const GLushort *v)
-{
-   GL_CALL(Color3usv)(v);
-}
-
-static void GLAPIENTRY Color3iv(const GLint *v)
-{
-   GL_CALL(Color3iv)(v);
-}
-
-static void GLAPIENTRY Color3uiv(const GLuint *v)
-{
-   GL_CALL(Color3uiv)(v);
-}
-
-static void GLAPIENTRY Color3fv(const GLfloat *v)
-{
-   GL_CALL(Color3fv)(v);
-}
-
-static void GLAPIENTRY Color3dv(const GLdouble *v)
-{
-   GL_CALL(Color3dv)(v);
-}
-
-static void GLAPIENTRY Color4bv(const GLbyte *v)
-{
-   GL_CALL(Color4bv)(v);
-}
-
-static void GLAPIENTRY Color4ubv(const GLubyte *v)
-{
-   GL_CALL(Color4ubv)(v);
-}
-
-static void GLAPIENTRY Color4sv(const GLshort *v)
-{
-   GL_CALL(Color4sv)(v);
-}
-
-static void GLAPIENTRY Color4usv(const GLushort *v)
-{
-   GL_CALL(Color4usv)(v);
-}
-
-static void GLAPIENTRY Color4iv(const GLint *v)
-{
-   GL_CALL(Color4iv)(v);
-}
-
-static void GLAPIENTRY Color4uiv(const GLuint *v)
-{
-   GL_CALL(Color4uiv)(v);
-}
-
-static void GLAPIENTRY Color4fv(const GLfloat *v)
-{
-   GL_CALL(Color4fv)(v);
-}
-
-static void GLAPIENTRY Color4dv(const GLdouble *v)
-{
-   GL_CALL(Color4dv)(v);
-}
-
-static const array_func ColorFuncs[2][8] = {
+static const int ColorFuncs[2][8] = {
    {
-      (array_func) Color3bv,
-      (array_func) Color3ubv,
-      (array_func) Color3sv,
-      (array_func) Color3usv,
-      (array_func) Color3iv,
-      (array_func) Color3uiv,
-      (array_func) Color3fv,
-      (array_func) Color3dv,
+      _gloffset_Color3bv,
+      _gloffset_Color3ubv,
+      _gloffset_Color3sv,
+      _gloffset_Color3usv,
+      _gloffset_Color3iv,
+      _gloffset_Color3uiv,
+      _gloffset_Color3fv,
+      _gloffset_Color3dv,
    },
    {
-      (array_func) Color4bv,
-      (array_func) Color4ubv,
-      (array_func) Color4sv,
-      (array_func) Color4usv,
-      (array_func) Color4iv,
-      (array_func) Color4uiv,
-      (array_func) Color4fv,
-      (array_func) Color4dv,
+      _gloffset_Color4bv,
+      _gloffset_Color4ubv,
+      _gloffset_Color4sv,
+      _gloffset_Color4usv,
+      _gloffset_Color4iv,
+      _gloffset_Color4uiv,
+      _gloffset_Color4fv,
+      _gloffset_Color4dv,
    },
 };
 
-static void GLAPIENTRY Vertex2sv(const GLshort *v)
-{
-   GL_CALL(Vertex2sv)(v);
-}
-
-static void GLAPIENTRY Vertex2iv(const GLint *v)
-{
-   GL_CALL(Vertex2iv)(v);
-}
-
-static void GLAPIENTRY Vertex2fv(const GLfloat *v)
-{
-   GL_CALL(Vertex2fv)(v);
-}
-
-static void GLAPIENTRY Vertex2dv(const GLdouble *v)
-{
-   GL_CALL(Vertex2dv)(v);
-}
-
-static void GLAPIENTRY Vertex3sv(const GLshort *v)
-{
-   GL_CALL(Vertex3sv)(v);
-}
-
-static void GLAPIENTRY Vertex3iv(const GLint *v)
-{
-   GL_CALL(Vertex3iv)(v);
-}
-
-static void GLAPIENTRY Vertex3fv(const GLfloat *v)
-{
-   GL_CALL(Vertex3fv)(v);
-}
-
-static void GLAPIENTRY Vertex3dv(const GLdouble *v)
-{
-   GL_CALL(Vertex3dv)(v);
-}
-
-static void GLAPIENTRY Vertex4sv(const GLshort *v)
-{
-   GL_CALL(Vertex4sv)(v);
-}
-
-static void GLAPIENTRY Vertex4iv(const GLint *v)
-{
-   GL_CALL(Vertex4iv)(v);
-}
-
-static void GLAPIENTRY Vertex4fv(const GLfloat *v)
-{
-   GL_CALL(Vertex4fv)(v);
-}
-
-static void GLAPIENTRY Vertex4dv(const GLdouble *v)
-{
-   GL_CALL(Vertex4dv)(v);
-}
-
-static const array_func VertexFuncs[3][8] = {
+static const int VertexFuncs[3][8] = {
    {
-      NULL,
-      NULL,
-      (array_func) Vertex2sv,
-      NULL,
-      (array_func) Vertex2iv,
-      NULL,
-      (array_func) Vertex2fv,
-      (array_func) Vertex2dv,
+      -1,
+      -1,
+      _gloffset_Vertex2sv,
+      -1,
+      _gloffset_Vertex2iv,
+      -1,
+      _gloffset_Vertex2fv,
+      _gloffset_Vertex2dv,
    },
    {
-      NULL,
-      NULL,
-      (array_func) Vertex3sv,
-      NULL,
-      (array_func) Vertex3iv,
-      NULL,
-      (array_func) Vertex3fv,
-      (array_func) Vertex3dv,
+      -1,
+      -1,
+      _gloffset_Vertex3sv,
+      -1,
+      _gloffset_Vertex3iv,
+      -1,
+      _gloffset_Vertex3fv,
+      _gloffset_Vertex3dv,
    },
    {
-      NULL,
-      NULL,
-      (array_func) Vertex4sv,
-      NULL,
-      (array_func) Vertex4iv,
-      NULL,
-      (array_func) Vertex4fv,
-      (array_func) Vertex4dv,
+      -1,
+      -1,
+      _gloffset_Vertex4sv,
+      -1,
+      _gloffset_Vertex4iv,
+      -1,
+      _gloffset_Vertex4fv,
+      _gloffset_Vertex4dv,
    },
 };
 
-static void GLAPIENTRY Indexubv(const GLubyte *c)
-{
-   GL_CALL(Indexubv)(c);
-}
-
-static void GLAPIENTRY Indexsv(const GLshort *c)
-{
-   GL_CALL(Indexsv)(c);
-}
-
-static void GLAPIENTRY Indexiv(const GLint *c)
-{
-   GL_CALL(Indexiv)(c);
-}
-
-static void GLAPIENTRY Indexfv(const GLfloat *c)
-{
-   GL_CALL(Indexfv)(c);
-}
-
-static void GLAPIENTRY Indexdv(const GLdouble *c)
-{
-   GL_CALL(Indexdv)(c);
-}
-
-static const array_func IndexFuncs[8] = {
-   NULL,
-   (array_func) Indexubv,
-   (array_func) Indexsv,
-   NULL,
-   (array_func) Indexiv,
-   NULL,
-   (array_func) Indexfv,
-   (array_func) Indexdv,
+static const int IndexFuncs[8] = {
+   -1,
+   _gloffset_Indexubv,
+   _gloffset_Indexsv,
+   -1,
+   _gloffset_Indexiv,
+   -1,
+   _gloffset_Indexfv,
+   _gloffset_Indexdv,
 };
 
-static void GLAPIENTRY Normal3bv(const GLbyte *v)
-{
-   GL_CALL(Normal3bv)(v);
-}
-
-static void GLAPIENTRY Normal3sv(const GLshort *v)
-{
-   GL_CALL(Normal3sv)(v);
-}
-
-static void GLAPIENTRY Normal3iv(const GLint *v)
-{
-   GL_CALL(Normal3iv)(v);
-}
-
-static void GLAPIENTRY Normal3fv(const GLfloat *v)
-{
-   GL_CALL(Normal3fv)(v);
-}
-
-static void GLAPIENTRY Normal3dv(const GLdouble *v)
-{
-   GL_CALL(Normal3dv)(v);
-}
-
-static const array_func NormalFuncs[8] = {
-   (array_func) Normal3bv,
-   NULL,
-   (array_func) Normal3sv,
-   NULL,
-   (array_func) Normal3iv,
-   NULL,
-   (array_func) Normal3fv,
-   (array_func) Normal3dv,
+static const int NormalFuncs[8] = {
+   _gloffset_Normal3bv,
+   -1,
+   _gloffset_Normal3sv,
+   -1,
+   _gloffset_Normal3iv,
+   -1,
+   _gloffset_Normal3fv,
+   _gloffset_Normal3dv,
 };
 
-/* Wrapper functions in case glSecondaryColor*EXT doesn't exist */
-static void GLAPIENTRY SecondaryColor3bvEXT(const GLbyte *c)
-{
-   GL_CALL(SecondaryColor3bvEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3ubvEXT(const GLubyte *c)
-{
-   GL_CALL(SecondaryColor3ubvEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3svEXT(const GLshort *c)
-{
-   GL_CALL(SecondaryColor3svEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3usvEXT(const GLushort *c)
-{
-   GL_CALL(SecondaryColor3usvEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3ivEXT(const GLint *c)
-{
-   GL_CALL(SecondaryColor3ivEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3uivEXT(const GLuint *c)
-{
-   GL_CALL(SecondaryColor3uivEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3fvEXT(const GLfloat *c)
-{
-   GL_CALL(SecondaryColor3fvEXT)(c);
-}
-
-static void GLAPIENTRY SecondaryColor3dvEXT(const GLdouble *c)
-{
-   GL_CALL(SecondaryColor3dvEXT)(c);
-}
-
-static const array_func SecondaryColorFuncs[8] = {
-   (array_func) SecondaryColor3bvEXT,
-   (array_func) SecondaryColor3ubvEXT,
-   (array_func) SecondaryColor3svEXT,
-   (array_func) SecondaryColor3usvEXT,
-   (array_func) SecondaryColor3ivEXT,
-   (array_func) SecondaryColor3uivEXT,
-   (array_func) SecondaryColor3fvEXT,
-   (array_func) SecondaryColor3dvEXT,
+static const int SecondaryColorFuncs[8] = {
+   _gloffset_SecondaryColor3bvEXT,
+   _gloffset_SecondaryColor3ubvEXT,
+   _gloffset_SecondaryColor3svEXT,
+   _gloffset_SecondaryColor3usvEXT,
+   _gloffset_SecondaryColor3ivEXT,
+   _gloffset_SecondaryColor3uivEXT,
+   _gloffset_SecondaryColor3fvEXT,
+   _gloffset_SecondaryColor3dvEXT,
 };
 
-
-/* Again, wrapper functions in case glSecondaryColor*EXT doesn't exist */
-static void GLAPIENTRY FogCoordfvEXT(const GLfloat *f)
-{
-   GL_CALL(FogCoordfvEXT)(f);
-}
-
-static void GLAPIENTRY FogCoorddvEXT(const GLdouble *f)
-{
-   GL_CALL(FogCoorddvEXT)(f);
-}
-
-static const array_func FogCoordFuncs[8] = {
-   NULL,
-   NULL,
-   NULL,
-   NULL,
-   NULL,
-   NULL,
-   (array_func) FogCoordfvEXT,
-   (array_func) FogCoorddvEXT
+static const int FogCoordFuncs[8] = {
+   -1,
+   -1,
+   -1,
+   -1,
+   -1,
+   -1,
+   _gloffset_FogCoordfvEXT,
+   _gloffset_FogCoorddvEXT
 };
 
 /**********************************************************************/
@@ -413,330 +173,330 @@ static const array_func FogCoordFuncs[8] = {
 
 static void GLAPIENTRY VertexAttrib1NbvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, BYTE_TO_FLOAT(v[0]));
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0])));
 }
 
 static void GLAPIENTRY VertexAttrib1bvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, v[0]);
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0]));
 }
 
 static void GLAPIENTRY VertexAttrib2NbvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1])));
 }
 
 static void GLAPIENTRY VertexAttrib2bvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]);
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
 static void GLAPIENTRY VertexAttrib3NbvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, BYTE_TO_FLOAT(v[0]),
-                            BYTE_TO_FLOAT(v[1]),
-                            BYTE_TO_FLOAT(v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
+                                              BYTE_TO_FLOAT(v[1]),
+                                              BYTE_TO_FLOAT(v[2])));
 }
 
 static void GLAPIENTRY VertexAttrib3bvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]);
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
 static void GLAPIENTRY VertexAttrib4NbvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, BYTE_TO_FLOAT(v[0]),
-                            BYTE_TO_FLOAT(v[1]),
-                            BYTE_TO_FLOAT(v[2]),
-                            BYTE_TO_FLOAT(v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
+                                              BYTE_TO_FLOAT(v[1]),
+                                              BYTE_TO_FLOAT(v[2]),
+                                              BYTE_TO_FLOAT(v[3])));
 }
 
 static void GLAPIENTRY VertexAttrib4bvNV(GLuint index, const GLbyte *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]);
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3]));
 }
 
 /* GL_UNSIGNED_BYTE attributes */
 
 static void GLAPIENTRY VertexAttrib1NubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, UBYTE_TO_FLOAT(v[0]));
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0])));
 }
 
 static void GLAPIENTRY VertexAttrib1ubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, v[0]);
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0]));
 }
 
 static void GLAPIENTRY VertexAttrib2NubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, UBYTE_TO_FLOAT(v[0]),
-                            UBYTE_TO_FLOAT(v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
+                                              UBYTE_TO_FLOAT(v[1])));
 }
 
 static void GLAPIENTRY VertexAttrib2ubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]);
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
 static void GLAPIENTRY VertexAttrib3NubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, UBYTE_TO_FLOAT(v[0]),
-                            UBYTE_TO_FLOAT(v[1]),
-                            UBYTE_TO_FLOAT(v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
+                                              UBYTE_TO_FLOAT(v[1]),
+                                              UBYTE_TO_FLOAT(v[2])));
 }
 static void GLAPIENTRY VertexAttrib3ubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]);
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
 static void GLAPIENTRY VertexAttrib4NubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, UBYTE_TO_FLOAT(v[0]),
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
                                      UBYTE_TO_FLOAT(v[1]),
                                      UBYTE_TO_FLOAT(v[2]),
-                                     UBYTE_TO_FLOAT(v[3]));
+                                     UBYTE_TO_FLOAT(v[3])));
 }
 
 static void GLAPIENTRY VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]);
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3]));
 }
 
 /* GL_SHORT attributes */
 
 static void GLAPIENTRY VertexAttrib1NsvNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, SHORT_TO_FLOAT(v[0]));
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0])));
 }
 
 static void GLAPIENTRY VertexAttrib1svNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, v[0]);
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0]));
 }
 
 static void GLAPIENTRY VertexAttrib2NsvNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, SHORT_TO_FLOAT(v[0]),
-                            SHORT_TO_FLOAT(v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
+                                              SHORT_TO_FLOAT(v[1])));
 }
 
 static void GLAPIENTRY VertexAttrib2svNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]);
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
 static void GLAPIENTRY VertexAttrib3NsvNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, SHORT_TO_FLOAT(v[0]),
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
                             SHORT_TO_FLOAT(v[1]),
-                            SHORT_TO_FLOAT(v[2]));
+                            SHORT_TO_FLOAT(v[2])));
 }
 
 static void GLAPIENTRY VertexAttrib3svNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]);
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
 static void GLAPIENTRY VertexAttrib4NsvNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, SHORT_TO_FLOAT(v[0]),
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
                             SHORT_TO_FLOAT(v[1]),
                             SHORT_TO_FLOAT(v[2]),
-                            SHORT_TO_FLOAT(v[3]));
+                            SHORT_TO_FLOAT(v[3])));
 }
 
 static void GLAPIENTRY VertexAttrib4svNV(GLuint index, const GLshort *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]);
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3]));
 }
 
 /* GL_UNSIGNED_SHORT attributes */
 
 static void GLAPIENTRY VertexAttrib1NusvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, USHORT_TO_FLOAT(v[0]));
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0])));
 }
 
 static void GLAPIENTRY VertexAttrib1usvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, v[0]);
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0]));
 }
 
 static void GLAPIENTRY VertexAttrib2NusvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, USHORT_TO_FLOAT(v[0]),
-                            USHORT_TO_FLOAT(v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
+                            USHORT_TO_FLOAT(v[1])));
 }
 
 static void GLAPIENTRY VertexAttrib2usvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]);
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
 static void GLAPIENTRY VertexAttrib3NusvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, USHORT_TO_FLOAT(v[0]),
-                            USHORT_TO_FLOAT(v[1]),
-                            USHORT_TO_FLOAT(v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
+                                              USHORT_TO_FLOAT(v[1]),
+                                              USHORT_TO_FLOAT(v[2])));
 }
 
 static void GLAPIENTRY VertexAttrib3usvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]);
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
 static void GLAPIENTRY VertexAttrib4NusvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, USHORT_TO_FLOAT(v[0]),
-                            USHORT_TO_FLOAT(v[1]),
-                            USHORT_TO_FLOAT(v[2]),
-                            USHORT_TO_FLOAT(v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
+                                              USHORT_TO_FLOAT(v[1]),
+                                              USHORT_TO_FLOAT(v[2]),
+                                              USHORT_TO_FLOAT(v[3])));
 }
 
 static void GLAPIENTRY VertexAttrib4usvNV(GLuint index, const GLushort *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]);
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3]));
 }
 
 /* GL_INT attributes */
 
 static void GLAPIENTRY VertexAttrib1NivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, INT_TO_FLOAT(v[0]));
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0])));
 }
 
 static void GLAPIENTRY VertexAttrib1ivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, v[0]);
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0]));
 }
 
 static void GLAPIENTRY VertexAttrib2NivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, INT_TO_FLOAT(v[0]),
-                            INT_TO_FLOAT(v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
+                                              INT_TO_FLOAT(v[1])));
 }
 
 static void GLAPIENTRY VertexAttrib2ivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]);
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
 static void GLAPIENTRY VertexAttrib3NivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, INT_TO_FLOAT(v[0]),
-                            INT_TO_FLOAT(v[1]),
-                            INT_TO_FLOAT(v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
+                                              INT_TO_FLOAT(v[1]),
+                                              INT_TO_FLOAT(v[2])));
 }
 
 static void GLAPIENTRY VertexAttrib3ivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]);
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
 static void GLAPIENTRY VertexAttrib4NivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, INT_TO_FLOAT(v[0]),
-                            INT_TO_FLOAT(v[1]),
-                            INT_TO_FLOAT(v[2]),
-                            INT_TO_FLOAT(v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
+                                              INT_TO_FLOAT(v[1]),
+                                              INT_TO_FLOAT(v[2]),
+                                              INT_TO_FLOAT(v[3])));
 }
 
 static void GLAPIENTRY VertexAttrib4ivNV(GLuint index, const GLint *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]);
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3]));
 }
 
 /* GL_UNSIGNED_INT attributes */
 
 static void GLAPIENTRY VertexAttrib1NuivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, UINT_TO_FLOAT(v[0]));
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0])));
 }
 
 static void GLAPIENTRY VertexAttrib1uivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib1fNV)(index, v[0]);
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0]));
 }
 
 static void GLAPIENTRY VertexAttrib2NuivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, UINT_TO_FLOAT(v[0]),
-                            UINT_TO_FLOAT(v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
+                                              UINT_TO_FLOAT(v[1])));
 }
 
 static void GLAPIENTRY VertexAttrib2uivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]);
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
 static void GLAPIENTRY VertexAttrib3NuivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, UINT_TO_FLOAT(v[0]),
-                            UINT_TO_FLOAT(v[1]),
-                            UINT_TO_FLOAT(v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
+                                              UINT_TO_FLOAT(v[1]),
+                                              UINT_TO_FLOAT(v[2])));
 }
 
 static void GLAPIENTRY VertexAttrib3uivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]);
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
 static void GLAPIENTRY VertexAttrib4NuivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, UINT_TO_FLOAT(v[0]),
-                            UINT_TO_FLOAT(v[1]),
-                            UINT_TO_FLOAT(v[2]),
-                            UINT_TO_FLOAT(v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
+                                              UINT_TO_FLOAT(v[1]),
+                                              UINT_TO_FLOAT(v[2]),
+                                              UINT_TO_FLOAT(v[3])));
 }
 
 static void GLAPIENTRY VertexAttrib4uivNV(GLuint index, const GLuint *v)
 {
-   GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]);
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3]));
 }
 
 /* GL_FLOAT attributes */
 
 static void GLAPIENTRY VertexAttrib1fvNV(GLuint index, const GLfloat *v)
 {
-   GL_CALL(VertexAttrib1fvNV)(index, v);
+   CALL_VertexAttrib1fvNV(GET_DISPATCH(), (index, v));
 }
 
 static void GLAPIENTRY VertexAttrib2fvNV(GLuint index, const GLfloat *v)
 {
-   GL_CALL(VertexAttrib2fvNV)(index, v);
+   CALL_VertexAttrib2fvNV(GET_DISPATCH(), (index, v));
 }
 
 static void GLAPIENTRY VertexAttrib3fvNV(GLuint index, const GLfloat *v)
 {
-   GL_CALL(VertexAttrib3fvNV)(index, v);
+   CALL_VertexAttrib3fvNV(GET_DISPATCH(), (index, v));
 }
 
 static void GLAPIENTRY VertexAttrib4fvNV(GLuint index, const GLfloat *v)
 {
-   GL_CALL(VertexAttrib4fvNV)(index, v);
+   CALL_VertexAttrib4fvNV(GET_DISPATCH(), (index, v));
 }
 
 /* GL_DOUBLE attributes */
 
 static void GLAPIENTRY VertexAttrib1dvNV(GLuint index, const GLdouble *v)
 {
-   GL_CALL(VertexAttrib1dvNV)(index, v);
+   CALL_VertexAttrib1dvNV(GET_DISPATCH(), (index, v));
 }
 
 static void GLAPIENTRY VertexAttrib2dvNV(GLuint index, const GLdouble *v)
 {
-   GL_CALL(VertexAttrib2dvNV)(index, v);
+   CALL_VertexAttrib2dvNV(GET_DISPATCH(), (index, v));
 }
 
 static void GLAPIENTRY VertexAttrib3dvNV(GLuint index, const GLdouble *v)
 {
-   GL_CALL(VertexAttrib3dvNV)(index, v);
+   CALL_VertexAttrib3dvNV(GET_DISPATCH(), (index, v));
 }
 
 static void GLAPIENTRY VertexAttrib4dvNV(GLuint index, const GLdouble *v)
 {
-   GL_CALL(VertexAttrib4dvNV)(index, v);
+   CALL_VertexAttrib4dvNV(GET_DISPATCH(), (index, v));
 }
 
 
@@ -840,11 +600,6 @@ static attrib_func AttribFuncsNV[2][4][8] = {
    }
 };
 
-static void GLAPIENTRY EdgeFlagv(const GLboolean *flag)
-{
-   GL_CALL(EdgeFlagv)(flag);
-}
-
 /**********************************************************************/
 
 
@@ -887,32 +642,32 @@ static void _ae_update_state( GLcontext *ctx )
    /* conventional vertex arrays */
   if (ctx->Array.Index.Enabled) {
       aa->array = &ctx->Array.Index;
-      aa->func = IndexFuncs[TYPE_IDX(aa->array->Type)];
+      aa->offset = IndexFuncs[TYPE_IDX(aa->array->Type)];
       aa++;
    }
    if (ctx->Array.EdgeFlag.Enabled) {
       aa->array = &ctx->Array.EdgeFlag;
-      aa->func = (array_func) EdgeFlagv;
+      aa->offset = _gloffset_EdgeFlagv;
       aa++;
    }
    if (ctx->Array.Normal.Enabled) {
       aa->array = &ctx->Array.Normal;
-      aa->func = NormalFuncs[TYPE_IDX(aa->array->Type)];
+      aa->offset = NormalFuncs[TYPE_IDX(aa->array->Type)];
       aa++;
    }
    if (ctx->Array.Color.Enabled) {
       aa->array = &ctx->Array.Color;
-      aa->func = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)];
+      aa->offset = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)];
       aa++;
    }
    if (ctx->Array.SecondaryColor.Enabled) {
       aa->array = &ctx->Array.SecondaryColor;
-      aa->func = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)];
+      aa->offset = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)];
       aa++;
    }
    if (ctx->Array.FogCoord.Enabled) {
       aa->array = &ctx->Array.FogCoord;
-      aa->func = FogCoordFuncs[TYPE_IDX(aa->array->Type)];
+      aa->offset = FogCoordFuncs[TYPE_IDX(aa->array->Type)];
       aa++;
    }
    for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
@@ -952,19 +707,19 @@ static void _ae_update_state( GLcontext *ctx )
        */
       aa->array = &ctx->Array.VertexAttrib[0];
       assert(aa->array->Size >= 2); /* XXX fix someday? */
-      aa->func = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)];
+      aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)];
       aa++;
    }
    else if (ctx->Array.Vertex.Enabled) {
       aa->array = &ctx->Array.Vertex;
-      aa->func = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)];
+      aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)];
       aa++;
    }
 
    ASSERT(at - actx->attribs <= VERT_ATTRIB_MAX);
    ASSERT(aa - actx->arrays < 32);
    at->func = NULL;  /* terminate the list */
-   aa->func = NULL;  /* terminate the list */
+   aa->offset = -1;  /* terminate the list */
 
    actx->NewState = 0;
 }
@@ -982,6 +737,8 @@ void GLAPIENTRY _ae_loopback_array_elt( GLint elt )
    const AEcontext *actx = AE_CONTEXT(ctx);
    const AEarray *aa;
    const AEattrib *at;
+   const struct _glapi_table * const disp = GET_DISPATCH();
+
 
    if (actx->NewState)
       _ae_update_state( ctx );
@@ -995,11 +752,14 @@ void GLAPIENTRY _ae_loopback_array_elt( GLint elt )
    }
 
    /* conventional arrays */
-   for (aa = actx->arrays; aa->func ; aa++) {
+   for (aa = actx->arrays; aa->offset != -1 ; aa++) {
       const GLubyte *src = aa->array->BufferObj->Data
                          + (uintptr_t) aa->array->Ptr
                          + elt * aa->array->StrideB;
-      aa->func( src );
+      fprintf( stderr, "[%s,%u] aa->offset = %d\n", __func__, __LINE__,
+              aa->offset );
+      CALL_by_offset( disp, (array_func), aa->offset, 
+                     ((const void *) src) );
    }
 }
 
index 2921569..db30059 100644 (file)
@@ -36,6 +36,8 @@
 #include "colormac.h"
 #include "api_loopback.h"
 #include "glthread.h"
+#include "mtypes.h"
+#include "dispatch.h"
 
 /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
  * calls to a smaller set of driver-provided formats.  Currently just
  * listed in dd.h.  The easiest way for a driver to do this is to
  * install the supplied software t&l module.
  */
-#define COLORF(r,g,b,a)             GL_CALL(Color4f)(r,g,b,a)
-#define VERTEX2(x,y)               GL_CALL(Vertex2f)(x,y)
-#define VERTEX3(x,y,z)             GL_CALL(Vertex3f)(x,y,z)
-#define VERTEX4(x,y,z,w)            GL_CALL(Vertex4f)(x,y,z,w)
-#define NORMAL(x,y,z)               GL_CALL(Normal3f)(x,y,z)
-#define TEXCOORD1(s)                GL_CALL(TexCoord1f)(s)
-#define TEXCOORD2(s,t)              GL_CALL(TexCoord2f)(s,t)
-#define TEXCOORD3(s,t,u)            GL_CALL(TexCoord3f)(s,t,u)
-#define TEXCOORD4(s,t,u,v)          GL_CALL(TexCoord4f)(s,t,u,v)
-#define INDEX(c)                   GL_CALL(Indexf)(c)
-#define MULTI_TEXCOORD1(z,s)       GL_CALL(MultiTexCoord1fARB)(z,s)
-#define MULTI_TEXCOORD2(z,s,t)     GL_CALL(MultiTexCoord2fARB)(z,s,t)
-#define MULTI_TEXCOORD3(z,s,t,u)    GL_CALL(MultiTexCoord3fARB)(z,s,t,u)
-#define MULTI_TEXCOORD4(z,s,t,u,v)  GL_CALL(MultiTexCoord4fARB)(z,s,t,u,v)
-#define EVALCOORD1(x)               GL_CALL(EvalCoord1f)(x)
-#define EVALCOORD2(x,y)             GL_CALL(EvalCoord2f)(x,y)
-#define MATERIALFV(a,b,c)           GL_CALL(Materialfv)(a,b,c)
-#define RECTF(a,b,c,d)              GL_CALL(Rectf)(a,b,c,d)
-
-#define ATTRIB1NV(index,x)          GL_CALL(VertexAttrib1fNV)(index,x)
-#define ATTRIB2NV(index,x,y)        GL_CALL(VertexAttrib2fNV)(index,x,y)
-#define ATTRIB3NV(index,x,y,z)      GL_CALL(VertexAttrib3fNV)(index,x,y,z)
-#define ATTRIB4NV(index,x,y,z,w)    GL_CALL(VertexAttrib4fNV)(index,x,y,z,w)
-#define ATTRIB1ARB(index,x)         GL_CALL(VertexAttrib1fARB)(index,x)
-#define ATTRIB2ARB(index,x,y)       GL_CALL(VertexAttrib2fARB)(index,x,y)
-#define ATTRIB3ARB(index,x,y,z)     GL_CALL(VertexAttrib3fARB)(index,x,y,z)
-#define ATTRIB4ARB(index,x,y,z,w)   GL_CALL(VertexAttrib4fARB)(index,x,y,z,w)
-#define FOGCOORDF(x)                GL_CALL(FogCoordfEXT)(x)
-#define SECONDARYCOLORF(a,b,c)      GL_CALL(SecondaryColor3fEXT)(a,b,c)
+#define COLORF(r,g,b,a)             CALL_Color4f(GET_DISPATCH(), (r,g,b,a))
+#define VERTEX2(x,y)               CALL_Vertex2f(GET_DISPATCH(), (x,y))
+#define VERTEX3(x,y,z)             CALL_Vertex3f(GET_DISPATCH(), (x,y,z))
+#define VERTEX4(x,y,z,w)            CALL_Vertex4f(GET_DISPATCH(), (x,y,z,w))
+#define NORMAL(x,y,z)               CALL_Normal3f(GET_DISPATCH(), (x,y,z))
+#define TEXCOORD1(s)                CALL_TexCoord1f(GET_DISPATCH(), (s))
+#define TEXCOORD2(s,t)              CALL_TexCoord2f(GET_DISPATCH(), (s,t))
+#define TEXCOORD3(s,t,u)            CALL_TexCoord3f(GET_DISPATCH(), (s,t,u))
+#define TEXCOORD4(s,t,u,v)          CALL_TexCoord4f(GET_DISPATCH(), (s,t,u,v))
+#define INDEX(c)                   CALL_Indexf(GET_DISPATCH(), (c))
+#define MULTI_TEXCOORD1(z,s)       CALL_MultiTexCoord1fARB(GET_DISPATCH(), (z,s))
+#define MULTI_TEXCOORD2(z,s,t)     CALL_MultiTexCoord2fARB(GET_DISPATCH(), (z,s,t))
+#define MULTI_TEXCOORD3(z,s,t,u)    CALL_MultiTexCoord3fARB(GET_DISPATCH(), (z,s,t,u))
+#define MULTI_TEXCOORD4(z,s,t,u,v)  CALL_MultiTexCoord4fARB(GET_DISPATCH(), (z,s,t,u,v))
+#define EVALCOORD1(x)               CALL_EvalCoord1f(GET_DISPATCH(), (x))
+#define EVALCOORD2(x,y)             CALL_EvalCoord2f(GET_DISPATCH(), (x,y))
+#define MATERIALFV(a,b,c)           CALL_Materialfv(GET_DISPATCH(), (a,b,c))
+#define RECTF(a,b,c,d)              CALL_Rectf(GET_DISPATCH(), (a,b,c,d))
+
+#define ATTRIB1NV(index,x)          CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x))
+#define ATTRIB2NV(index,x,y)        CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y))
+#define ATTRIB3NV(index,x,y,z)      CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z))
+#define ATTRIB4NV(index,x,y,z,w)    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w))
+#define ATTRIB1ARB(index,x)         CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x))
+#define ATTRIB2ARB(index,x,y)       CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y))
+#define ATTRIB3ARB(index,x,y,z)     CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z))
+#define ATTRIB4ARB(index,x,y,z,w)   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w))
+#define FOGCOORDF(x)                CALL_FogCoordfEXT(GET_DISPATCH(), (x))
+#define SECONDARYCOLORF(a,b,c)      CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c))
 
 static void GLAPIENTRY
 loopback_Color3b_f( GLbyte red, GLbyte green, GLbyte blue )
@@ -1437,209 +1439,209 @@ loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v)
 void
 _mesa_loopback_init_api_table( struct _glapi_table *dest )
 {
-   dest->Color3b = loopback_Color3b_f;
-   dest->Color3d = loopback_Color3d_f;
-   dest->Color3i = loopback_Color3i_f;
-   dest->Color3s = loopback_Color3s_f;
-   dest->Color3ui = loopback_Color3ui_f;
-   dest->Color3us = loopback_Color3us_f;
-   dest->Color3ub = loopback_Color3ub_f;
-   dest->Color4b = loopback_Color4b_f;
-   dest->Color4d = loopback_Color4d_f;
-   dest->Color4i = loopback_Color4i_f;
-   dest->Color4s = loopback_Color4s_f;
-   dest->Color4ui = loopback_Color4ui_f;
-   dest->Color4us = loopback_Color4us_f;
-   dest->Color4ub = loopback_Color4ub_f;
-   dest->Color3bv = loopback_Color3bv_f;
-   dest->Color3dv = loopback_Color3dv_f;
-   dest->Color3iv = loopback_Color3iv_f;
-   dest->Color3sv = loopback_Color3sv_f;
-   dest->Color3uiv = loopback_Color3uiv_f;
-   dest->Color3usv = loopback_Color3usv_f;
-   dest->Color3ubv = loopback_Color3ubv_f;
-   dest->Color4bv = loopback_Color4bv_f;
-   dest->Color4dv = loopback_Color4dv_f;
-   dest->Color4iv = loopback_Color4iv_f;
-   dest->Color4sv = loopback_Color4sv_f;
-   dest->Color4uiv = loopback_Color4uiv_f;
-   dest->Color4usv = loopback_Color4usv_f;
-   dest->Color4ubv = loopback_Color4ubv_f;
-
-   dest->SecondaryColor3bEXT = loopback_SecondaryColor3bEXT_f;
-   dest->SecondaryColor3dEXT = loopback_SecondaryColor3dEXT_f;
-   dest->SecondaryColor3iEXT = loopback_SecondaryColor3iEXT_f;
-   dest->SecondaryColor3sEXT = loopback_SecondaryColor3sEXT_f;
-   dest->SecondaryColor3uiEXT = loopback_SecondaryColor3uiEXT_f;
-   dest->SecondaryColor3usEXT = loopback_SecondaryColor3usEXT_f;
-   dest->SecondaryColor3ubEXT = loopback_SecondaryColor3ubEXT_f;
-   dest->SecondaryColor3bvEXT = loopback_SecondaryColor3bvEXT_f;
-   dest->SecondaryColor3dvEXT = loopback_SecondaryColor3dvEXT_f;
-   dest->SecondaryColor3ivEXT = loopback_SecondaryColor3ivEXT_f;
-   dest->SecondaryColor3svEXT = loopback_SecondaryColor3svEXT_f;
-   dest->SecondaryColor3uivEXT = loopback_SecondaryColor3uivEXT_f;
-   dest->SecondaryColor3usvEXT = loopback_SecondaryColor3usvEXT_f;
-   dest->SecondaryColor3ubvEXT = loopback_SecondaryColor3ubvEXT_f;
+   SET_Color3b(dest, loopback_Color3b_f);
+   SET_Color3d(dest, loopback_Color3d_f);
+   SET_Color3i(dest, loopback_Color3i_f);
+   SET_Color3s(dest, loopback_Color3s_f);
+   SET_Color3ui(dest, loopback_Color3ui_f);
+   SET_Color3us(dest, loopback_Color3us_f);
+   SET_Color3ub(dest, loopback_Color3ub_f);
+   SET_Color4b(dest, loopback_Color4b_f);
+   SET_Color4d(dest, loopback_Color4d_f);
+   SET_Color4i(dest, loopback_Color4i_f);
+   SET_Color4s(dest, loopback_Color4s_f);
+   SET_Color4ui(dest, loopback_Color4ui_f);
+   SET_Color4us(dest, loopback_Color4us_f);
+   SET_Color4ub(dest, loopback_Color4ub_f);
+   SET_Color3bv(dest, loopback_Color3bv_f);
+   SET_Color3dv(dest, loopback_Color3dv_f);
+   SET_Color3iv(dest, loopback_Color3iv_f);
+   SET_Color3sv(dest, loopback_Color3sv_f);
+   SET_Color3uiv(dest, loopback_Color3uiv_f);
+   SET_Color3usv(dest, loopback_Color3usv_f);
+   SET_Color3ubv(dest, loopback_Color3ubv_f);
+   SET_Color4bv(dest, loopback_Color4bv_f);
+   SET_Color4dv(dest, loopback_Color4dv_f);
+   SET_Color4iv(dest, loopback_Color4iv_f);
+   SET_Color4sv(dest, loopback_Color4sv_f);
+   SET_Color4uiv(dest, loopback_Color4uiv_f);
+   SET_Color4usv(dest, loopback_Color4usv_f);
+   SET_Color4ubv(dest, loopback_Color4ubv_f);
+
+   SET_SecondaryColor3bEXT(dest, loopback_SecondaryColor3bEXT_f);
+   SET_SecondaryColor3dEXT(dest, loopback_SecondaryColor3dEXT_f);
+   SET_SecondaryColor3iEXT(dest, loopback_SecondaryColor3iEXT_f);
+   SET_SecondaryColor3sEXT(dest, loopback_SecondaryColor3sEXT_f);
+   SET_SecondaryColor3uiEXT(dest, loopback_SecondaryColor3uiEXT_f);
+   SET_SecondaryColor3usEXT(dest, loopback_SecondaryColor3usEXT_f);
+   SET_SecondaryColor3ubEXT(dest, loopback_SecondaryColor3ubEXT_f);
+   SET_SecondaryColor3bvEXT(dest, loopback_SecondaryColor3bvEXT_f);
+   SET_SecondaryColor3dvEXT(dest, loopback_SecondaryColor3dvEXT_f);
+   SET_SecondaryColor3ivEXT(dest, loopback_SecondaryColor3ivEXT_f);
+   SET_SecondaryColor3svEXT(dest, loopback_SecondaryColor3svEXT_f);
+   SET_SecondaryColor3uivEXT(dest, loopback_SecondaryColor3uivEXT_f);
+   SET_SecondaryColor3usvEXT(dest, loopback_SecondaryColor3usvEXT_f);
+   SET_SecondaryColor3ubvEXT(dest, loopback_SecondaryColor3ubvEXT_f);
       
-   dest->Indexd = loopback_Indexd;
-   dest->Indexi = loopback_Indexi;
-   dest->Indexs = loopback_Indexs;
-   dest->Indexub = loopback_Indexub;
-   dest->Indexdv = loopback_Indexdv;
-   dest->Indexiv = loopback_Indexiv;
-   dest->Indexsv = loopback_Indexsv;
-   dest->Indexubv = loopback_Indexubv;
-   dest->Normal3b = loopback_Normal3b;
-   dest->Normal3d = loopback_Normal3d;
-   dest->Normal3i = loopback_Normal3i;
-   dest->Normal3s = loopback_Normal3s;
-   dest->Normal3bv = loopback_Normal3bv;
-   dest->Normal3dv = loopback_Normal3dv;
-   dest->Normal3iv = loopback_Normal3iv;
-   dest->Normal3sv = loopback_Normal3sv;
-   dest->TexCoord1d = loopback_TexCoord1d;
-   dest->TexCoord1i = loopback_TexCoord1i;
-   dest->TexCoord1s = loopback_TexCoord1s;
-   dest->TexCoord2d = loopback_TexCoord2d;
-   dest->TexCoord2s = loopback_TexCoord2s;
-   dest->TexCoord2i = loopback_TexCoord2i;
-   dest->TexCoord3d = loopback_TexCoord3d;
-   dest->TexCoord3i = loopback_TexCoord3i;
-   dest->TexCoord3s = loopback_TexCoord3s;
-   dest->TexCoord4d = loopback_TexCoord4d;
-   dest->TexCoord4i = loopback_TexCoord4i;
-   dest->TexCoord4s = loopback_TexCoord4s;
-   dest->TexCoord1dv = loopback_TexCoord1dv;
-   dest->TexCoord1iv = loopback_TexCoord1iv;
-   dest->TexCoord1sv = loopback_TexCoord1sv;
-   dest->TexCoord2dv = loopback_TexCoord2dv;
-   dest->TexCoord2iv = loopback_TexCoord2iv;
-   dest->TexCoord2sv = loopback_TexCoord2sv;
-   dest->TexCoord3dv = loopback_TexCoord3dv;
-   dest->TexCoord3iv = loopback_TexCoord3iv;
-   dest->TexCoord3sv = loopback_TexCoord3sv;
-   dest->TexCoord4dv = loopback_TexCoord4dv;
-   dest->TexCoord4iv = loopback_TexCoord4iv;
-   dest->TexCoord4sv = loopback_TexCoord4sv;
-   dest->Vertex2d = loopback_Vertex2d;
-   dest->Vertex2i = loopback_Vertex2i;
-   dest->Vertex2s = loopback_Vertex2s;
-   dest->Vertex3d = loopback_Vertex3d;
-   dest->Vertex3i = loopback_Vertex3i;
-   dest->Vertex3s = loopback_Vertex3s;
-   dest->Vertex4d = loopback_Vertex4d;
-   dest->Vertex4i = loopback_Vertex4i;
-   dest->Vertex4s = loopback_Vertex4s;
-   dest->Vertex2dv = loopback_Vertex2dv;
-   dest->Vertex2iv = loopback_Vertex2iv;
-   dest->Vertex2sv = loopback_Vertex2sv;
-   dest->Vertex3dv = loopback_Vertex3dv;
-   dest->Vertex3iv = loopback_Vertex3iv;
-   dest->Vertex3sv = loopback_Vertex3sv;
-   dest->Vertex4dv = loopback_Vertex4dv;
-   dest->Vertex4iv = loopback_Vertex4iv;
-   dest->Vertex4sv = loopback_Vertex4sv;
-   dest->MultiTexCoord1dARB = loopback_MultiTexCoord1dARB;
-   dest->MultiTexCoord1dvARB = loopback_MultiTexCoord1dvARB;
-   dest->MultiTexCoord1iARB = loopback_MultiTexCoord1iARB;
-   dest->MultiTexCoord1ivARB = loopback_MultiTexCoord1ivARB;
-   dest->MultiTexCoord1sARB = loopback_MultiTexCoord1sARB;
-   dest->MultiTexCoord1svARB = loopback_MultiTexCoord1svARB;
-   dest->MultiTexCoord2dARB = loopback_MultiTexCoord2dARB;
-   dest->MultiTexCoord2dvARB = loopback_MultiTexCoord2dvARB;
-   dest->MultiTexCoord2iARB = loopback_MultiTexCoord2iARB;
-   dest->MultiTexCoord2ivARB = loopback_MultiTexCoord2ivARB;
-   dest->MultiTexCoord2sARB = loopback_MultiTexCoord2sARB;
-   dest->MultiTexCoord2svARB = loopback_MultiTexCoord2svARB;
-   dest->MultiTexCoord3dARB = loopback_MultiTexCoord3dARB;
-   dest->MultiTexCoord3dvARB = loopback_MultiTexCoord3dvARB;
-   dest->MultiTexCoord3iARB = loopback_MultiTexCoord3iARB;
-   dest->MultiTexCoord3ivARB = loopback_MultiTexCoord3ivARB;
-   dest->MultiTexCoord3sARB = loopback_MultiTexCoord3sARB;
-   dest->MultiTexCoord3svARB = loopback_MultiTexCoord3svARB;
-   dest->MultiTexCoord4dARB = loopback_MultiTexCoord4dARB;
-   dest->MultiTexCoord4dvARB = loopback_MultiTexCoord4dvARB;
-   dest->MultiTexCoord4iARB = loopback_MultiTexCoord4iARB;
-   dest->MultiTexCoord4ivARB = loopback_MultiTexCoord4ivARB;
-   dest->MultiTexCoord4sARB = loopback_MultiTexCoord4sARB;
-   dest->MultiTexCoord4svARB = loopback_MultiTexCoord4svARB;
-   dest->EvalCoord2dv = loopback_EvalCoord2dv;
-   dest->EvalCoord2fv = loopback_EvalCoord2fv;
-   dest->EvalCoord2d = loopback_EvalCoord2d;
-   dest->EvalCoord1dv = loopback_EvalCoord1dv;
-   dest->EvalCoord1fv = loopback_EvalCoord1fv;
-   dest->EvalCoord1d = loopback_EvalCoord1d;
-   dest->Materialf = loopback_Materialf;
-   dest->Materiali = loopback_Materiali;
-   dest->Materialiv = loopback_Materialiv;
-   dest->Rectd = loopback_Rectd;
-   dest->Rectdv = loopback_Rectdv;
-   dest->Rectfv = loopback_Rectfv;
-   dest->Recti = loopback_Recti;
-   dest->Rectiv = loopback_Rectiv;
-   dest->Rects = loopback_Rects;
-   dest->Rectsv = loopback_Rectsv;
-   dest->FogCoorddEXT = loopback_FogCoorddEXT;
-   dest->FogCoorddvEXT = loopback_FogCoorddvEXT;
-
-   dest->VertexAttrib1sNV = loopback_VertexAttrib1sNV;
-   dest->VertexAttrib1dNV = loopback_VertexAttrib1dNV;
-   dest->VertexAttrib2sNV = loopback_VertexAttrib2sNV;
-   dest->VertexAttrib2dNV = loopback_VertexAttrib2dNV;
-   dest->VertexAttrib3sNV = loopback_VertexAttrib3sNV;
-   dest->VertexAttrib3dNV = loopback_VertexAttrib3dNV;
-   dest->VertexAttrib4sNV = loopback_VertexAttrib4sNV;
-   dest->VertexAttrib4dNV = loopback_VertexAttrib4dNV;
-   dest->VertexAttrib4ubNV = loopback_VertexAttrib4ubNV;
-   dest->VertexAttrib1svNV = loopback_VertexAttrib1svNV;
-   dest->VertexAttrib1dvNV = loopback_VertexAttrib1dvNV;
-   dest->VertexAttrib2svNV = loopback_VertexAttrib2svNV;
-   dest->VertexAttrib2dvNV = loopback_VertexAttrib2dvNV;
-   dest->VertexAttrib3svNV = loopback_VertexAttrib3svNV;
-   dest->VertexAttrib3dvNV = loopback_VertexAttrib3dvNV;
-   dest->VertexAttrib4svNV = loopback_VertexAttrib4svNV;
-   dest->VertexAttrib4dvNV = loopback_VertexAttrib4dvNV;
-   dest->VertexAttrib4ubvNV = loopback_VertexAttrib4ubvNV;
-   dest->VertexAttribs1svNV = loopback_VertexAttribs1svNV;
-   dest->VertexAttribs1fvNV = loopback_VertexAttribs1fvNV;
-   dest->VertexAttribs1dvNV = loopback_VertexAttribs1dvNV;
-   dest->VertexAttribs2svNV = loopback_VertexAttribs2svNV;
-   dest->VertexAttribs2fvNV = loopback_VertexAttribs2fvNV;
-   dest->VertexAttribs2dvNV = loopback_VertexAttribs2dvNV;
-   dest->VertexAttribs3svNV = loopback_VertexAttribs3svNV;
-   dest->VertexAttribs3fvNV = loopback_VertexAttribs3fvNV;
-   dest->VertexAttribs3dvNV = loopback_VertexAttribs3dvNV;
-   dest->VertexAttribs4svNV = loopback_VertexAttribs4svNV;
-   dest->VertexAttribs4fvNV = loopback_VertexAttribs4fvNV;
-   dest->VertexAttribs4dvNV = loopback_VertexAttribs4dvNV;
-   dest->VertexAttribs4ubvNV = loopback_VertexAttribs4ubvNV;
-
-   dest->VertexAttrib1sARB = loopback_VertexAttrib1sARB;
-   dest->VertexAttrib1dARB = loopback_VertexAttrib1dARB;
-   dest->VertexAttrib2sARB = loopback_VertexAttrib2sARB;
-   dest->VertexAttrib2dARB = loopback_VertexAttrib2dARB;
-   dest->VertexAttrib3sARB = loopback_VertexAttrib3sARB;
-   dest->VertexAttrib3dARB = loopback_VertexAttrib3dARB;
-   dest->VertexAttrib4sARB = loopback_VertexAttrib4sARB;
-   dest->VertexAttrib4dARB = loopback_VertexAttrib4dARB;
-   dest->VertexAttrib1svARB = loopback_VertexAttrib1svARB;
-   dest->VertexAttrib1dvARB = loopback_VertexAttrib1dvARB;
-   dest->VertexAttrib2svARB = loopback_VertexAttrib2svARB;
-   dest->VertexAttrib2dvARB = loopback_VertexAttrib2dvARB;
-   dest->VertexAttrib3svARB = loopback_VertexAttrib3svARB;
-   dest->VertexAttrib3dvARB = loopback_VertexAttrib3dvARB;
-   dest->VertexAttrib4svARB = loopback_VertexAttrib4svARB;
-   dest->VertexAttrib4dvARB = loopback_VertexAttrib4dvARB;
-   dest->VertexAttrib4NubARB = loopback_VertexAttrib4NubARB;
-   dest->VertexAttrib4NubvARB = loopback_VertexAttrib4NubvARB;
-   dest->VertexAttrib4bvARB = loopback_VertexAttrib4bvARB;
-   dest->VertexAttrib4ivARB = loopback_VertexAttrib4ivARB;
-   dest->VertexAttrib4ubvARB = loopback_VertexAttrib4ubvARB;
-   dest->VertexAttrib4usvARB = loopback_VertexAttrib4usvARB;
-   dest->VertexAttrib4uivARB = loopback_VertexAttrib4uivARB;
-   dest->VertexAttrib4NbvARB = loopback_VertexAttrib4NbvARB;
-   dest->VertexAttrib4NsvARB = loopback_VertexAttrib4NsvARB;
-   dest->VertexAttrib4NivARB = loopback_VertexAttrib4NivARB;
-   dest->VertexAttrib4NusvARB = loopback_VertexAttrib4NusvARB;
-   dest->VertexAttrib4NuivARB = loopback_VertexAttrib4NuivARB;
+   SET_Indexd(dest, loopback_Indexd);
+   SET_Indexi(dest, loopback_Indexi);
+   SET_Indexs(dest, loopback_Indexs);
+   SET_Indexub(dest, loopback_Indexub);
+   SET_Indexdv(dest, loopback_Indexdv);
+   SET_Indexiv(dest, loopback_Indexiv);
+   SET_Indexsv(dest, loopback_Indexsv);
+   SET_Indexubv(dest, loopback_Indexubv);
+   SET_Normal3b(dest, loopback_Normal3b);
+   SET_Normal3d(dest, loopback_Normal3d);
+   SET_Normal3i(dest, loopback_Normal3i);
+   SET_Normal3s(dest, loopback_Normal3s);
+   SET_Normal3bv(dest, loopback_Normal3bv);
+   SET_Normal3dv(dest, loopback_Normal3dv);
+   SET_Normal3iv(dest, loopback_Normal3iv);
+   SET_Normal3sv(dest, loopback_Normal3sv);
+   SET_TexCoord1d(dest, loopback_TexCoord1d);
+   SET_TexCoord1i(dest, loopback_TexCoord1i);
+   SET_TexCoord1s(dest, loopback_TexCoord1s);
+   SET_TexCoord2d(dest, loopback_TexCoord2d);
+   SET_TexCoord2s(dest, loopback_TexCoord2s);
+   SET_TexCoord2i(dest, loopback_TexCoord2i);
+   SET_TexCoord3d(dest, loopback_TexCoord3d);
+   SET_TexCoord3i(dest, loopback_TexCoord3i);
+   SET_TexCoord3s(dest, loopback_TexCoord3s);
+   SET_TexCoord4d(dest, loopback_TexCoord4d);
+   SET_TexCoord4i(dest, loopback_TexCoord4i);
+   SET_TexCoord4s(dest, loopback_TexCoord4s);
+   SET_TexCoord1dv(dest, loopback_TexCoord1dv);
+   SET_TexCoord1iv(dest, loopback_TexCoord1iv);
+   SET_TexCoord1sv(dest, loopback_TexCoord1sv);
+   SET_TexCoord2dv(dest, loopback_TexCoord2dv);
+   SET_TexCoord2iv(dest, loopback_TexCoord2iv);
+   SET_TexCoord2sv(dest, loopback_TexCoord2sv);
+   SET_TexCoord3dv(dest, loopback_TexCoord3dv);
+   SET_TexCoord3iv(dest, loopback_TexCoord3iv);
+   SET_TexCoord3sv(dest, loopback_TexCoord3sv);
+   SET_TexCoord4dv(dest, loopback_TexCoord4dv);
+   SET_TexCoord4iv(dest, loopback_TexCoord4iv);
+   SET_TexCoord4sv(dest, loopback_TexCoord4sv);
+   SET_Vertex2d(dest, loopback_Vertex2d);
+   SET_Vertex2i(dest, loopback_Vertex2i);
+   SET_Vertex2s(dest, loopback_Vertex2s);
+   SET_Vertex3d(dest, loopback_Vertex3d);
+   SET_Vertex3i(dest, loopback_Vertex3i);
+   SET_Vertex3s(dest, loopback_Vertex3s);
+   SET_Vertex4d(dest, loopback_Vertex4d);
+   SET_Vertex4i(dest, loopback_Vertex4i);
+   SET_Vertex4s(dest, loopback_Vertex4s);
+   SET_Vertex2dv(dest, loopback_Vertex2dv);
+   SET_Vertex2iv(dest, loopback_Vertex2iv);
+   SET_Vertex2sv(dest, loopback_Vertex2sv);
+   SET_Vertex3dv(dest, loopback_Vertex3dv);
+   SET_Vertex3iv(dest, loopback_Vertex3iv);
+   SET_Vertex3sv(dest, loopback_Vertex3sv);
+   SET_Vertex4dv(dest, loopback_Vertex4dv);
+   SET_Vertex4iv(dest, loopback_Vertex4iv);
+   SET_Vertex4sv(dest, loopback_Vertex4sv);
+   SET_MultiTexCoord1dARB(dest, loopback_MultiTexCoord1dARB);
+   SET_MultiTexCoord1dvARB(dest, loopback_MultiTexCoord1dvARB);
+   SET_MultiTexCoord1iARB(dest, loopback_MultiTexCoord1iARB);
+   SET_MultiTexCoord1ivARB(dest, loopback_MultiTexCoord1ivARB);
+   SET_MultiTexCoord1sARB(dest, loopback_MultiTexCoord1sARB);
+   SET_MultiTexCoord1svARB(dest, loopback_MultiTexCoord1svARB);
+   SET_MultiTexCoord2dARB(dest, loopback_MultiTexCoord2dARB);
+   SET_MultiTexCoord2dvARB(dest, loopback_MultiTexCoord2dvARB);
+   SET_MultiTexCoord2iARB(dest, loopback_MultiTexCoord2iARB);
+   SET_MultiTexCoord2ivARB(dest, loopback_MultiTexCoord2ivARB);
+   SET_MultiTexCoord2sARB(dest, loopback_MultiTexCoord2sARB);
+   SET_MultiTexCoord2svARB(dest, loopback_MultiTexCoord2svARB);
+   SET_MultiTexCoord3dARB(dest, loopback_MultiTexCoord3dARB);
+   SET_MultiTexCoord3dvARB(dest, loopback_MultiTexCoord3dvARB);
+   SET_MultiTexCoord3iARB(dest, loopback_MultiTexCoord3iARB);
+   SET_MultiTexCoord3ivARB(dest, loopback_MultiTexCoord3ivARB);
+   SET_MultiTexCoord3sARB(dest, loopback_MultiTexCoord3sARB);
+   SET_MultiTexCoord3svARB(dest, loopback_MultiTexCoord3svARB);
+   SET_MultiTexCoord4dARB(dest, loopback_MultiTexCoord4dARB);
+   SET_MultiTexCoord4dvARB(dest, loopback_MultiTexCoord4dvARB);
+   SET_MultiTexCoord4iARB(dest, loopback_MultiTexCoord4iARB);
+   SET_MultiTexCoord4ivARB(dest, loopback_MultiTexCoord4ivARB);
+   SET_MultiTexCoord4sARB(dest, loopback_MultiTexCoord4sARB);
+   SET_MultiTexCoord4svARB(dest, loopback_MultiTexCoord4svARB);
+   SET_EvalCoord2dv(dest, loopback_EvalCoord2dv);
+   SET_EvalCoord2fv(dest, loopback_EvalCoord2fv);
+   SET_EvalCoord2d(dest, loopback_EvalCoord2d);
+   SET_EvalCoord1dv(dest, loopback_EvalCoord1dv);
+   SET_EvalCoord1fv(dest, loopback_EvalCoord1fv);
+   SET_EvalCoord1d(dest, loopback_EvalCoord1d);
+   SET_Materialf(dest, loopback_Materialf);
+   SET_Materiali(dest, loopback_Materiali);
+   SET_Materialiv(dest, loopback_Materialiv);
+   SET_Rectd(dest, loopback_Rectd);
+   SET_Rectdv(dest, loopback_Rectdv);
+   SET_Rectfv(dest, loopback_Rectfv);
+   SET_Recti(dest, loopback_Recti);
+   SET_Rectiv(dest, loopback_Rectiv);
+   SET_Rects(dest, loopback_Rects);
+   SET_Rectsv(dest, loopback_Rectsv);
+   SET_FogCoorddEXT(dest, loopback_FogCoorddEXT);
+   SET_FogCoorddvEXT(dest, loopback_FogCoorddvEXT);
+
+   SET_VertexAttrib1sNV(dest, loopback_VertexAttrib1sNV);
+   SET_VertexAttrib1dNV(dest, loopback_VertexAttrib1dNV);
+   SET_VertexAttrib2sNV(dest, loopback_VertexAttrib2sNV);
+   SET_VertexAttrib2dNV(dest, loopback_VertexAttrib2dNV);
+   SET_VertexAttrib3sNV(dest, loopback_VertexAttrib3sNV);
+   SET_VertexAttrib3dNV(dest, loopback_VertexAttrib3dNV);
+   SET_VertexAttrib4sNV(dest, loopback_VertexAttrib4sNV);
+   SET_VertexAttrib4dNV(dest, loopback_VertexAttrib4dNV);
+   SET_VertexAttrib4ubNV(dest, loopback_VertexAttrib4ubNV);
+   SET_VertexAttrib1svNV(dest, loopback_VertexAttrib1svNV);
+   SET_VertexAttrib1dvNV(dest, loopback_VertexAttrib1dvNV);
+   SET_VertexAttrib2svNV(dest, loopback_VertexAttrib2svNV);
+   SET_VertexAttrib2dvNV(dest, loopback_VertexAttrib2dvNV);
+   SET_VertexAttrib3svNV(dest, loopback_VertexAttrib3svNV);
+   SET_VertexAttrib3dvNV(dest, loopback_VertexAttrib3dvNV);
+   SET_VertexAttrib4svNV(dest, loopback_VertexAttrib4svNV);
+   SET_VertexAttrib4dvNV(dest, loopback_VertexAttrib4dvNV);
+   SET_VertexAttrib4ubvNV(dest, loopback_VertexAttrib4ubvNV);
+   SET_VertexAttribs1svNV(dest, loopback_VertexAttribs1svNV);
+   SET_VertexAttribs1fvNV(dest, loopback_VertexAttribs1fvNV);
+   SET_VertexAttribs1dvNV(dest, loopback_VertexAttribs1dvNV);
+   SET_VertexAttribs2svNV(dest, loopback_VertexAttribs2svNV);
+   SET_VertexAttribs2fvNV(dest, loopback_VertexAttribs2fvNV);
+   SET_VertexAttribs2dvNV(dest, loopback_VertexAttribs2dvNV);
+   SET_VertexAttribs3svNV(dest, loopback_VertexAttribs3svNV);
+   SET_VertexAttribs3fvNV(dest, loopback_VertexAttribs3fvNV);
+   SET_VertexAttribs3dvNV(dest, loopback_VertexAttribs3dvNV);
+   SET_VertexAttribs4svNV(dest, loopback_VertexAttribs4svNV);
+   SET_VertexAttribs4fvNV(dest, loopback_VertexAttribs4fvNV);
+   SET_VertexAttribs4dvNV(dest, loopback_VertexAttribs4dvNV);
+   SET_VertexAttribs4ubvNV(dest, loopback_VertexAttribs4ubvNV);
+
+   SET_VertexAttrib1sARB(dest, loopback_VertexAttrib1sARB);
+   SET_VertexAttrib1dARB(dest, loopback_VertexAttrib1dARB);
+   SET_VertexAttrib2sARB(dest, loopback_VertexAttrib2sARB);
+   SET_VertexAttrib2dARB(dest, loopback_VertexAttrib2dARB);
+   SET_VertexAttrib3sARB(dest, loopback_VertexAttrib3sARB);
+   SET_VertexAttrib3dARB(dest, loopback_VertexAttrib3dARB);
+   SET_VertexAttrib4sARB(dest, loopback_VertexAttrib4sARB);
+   SET_VertexAttrib4dARB(dest, loopback_VertexAttrib4dARB);
+   SET_VertexAttrib1svARB(dest, loopback_VertexAttrib1svARB);
+   SET_VertexAttrib1dvARB(dest, loopback_VertexAttrib1dvARB);
+   SET_VertexAttrib2svARB(dest, loopback_VertexAttrib2svARB);
+   SET_VertexAttrib2dvARB(dest, loopback_VertexAttrib2dvARB);
+   SET_VertexAttrib3svARB(dest, loopback_VertexAttrib3svARB);
+   SET_VertexAttrib3dvARB(dest, loopback_VertexAttrib3dvARB);
+   SET_VertexAttrib4svARB(dest, loopback_VertexAttrib4svARB);
+   SET_VertexAttrib4dvARB(dest, loopback_VertexAttrib4dvARB);
+   SET_VertexAttrib4NubARB(dest, loopback_VertexAttrib4NubARB);
+   SET_VertexAttrib4NubvARB(dest, loopback_VertexAttrib4NubvARB);
+   SET_VertexAttrib4bvARB(dest, loopback_VertexAttrib4bvARB);
+   SET_VertexAttrib4ivARB(dest, loopback_VertexAttrib4ivARB);
+   SET_VertexAttrib4ubvARB(dest, loopback_VertexAttrib4ubvARB);
+   SET_VertexAttrib4usvARB(dest, loopback_VertexAttrib4usvARB);
+   SET_VertexAttrib4uivARB(dest, loopback_VertexAttrib4uivARB);
+   SET_VertexAttrib4NbvARB(dest, loopback_VertexAttrib4NbvARB);
+   SET_VertexAttrib4NsvARB(dest, loopback_VertexAttrib4NsvARB);
+   SET_VertexAttrib4NivARB(dest, loopback_VertexAttrib4NivARB);
+   SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB);
+   SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB);
 }
index d3496ff..f42f166 100644 (file)
@@ -33,6 +33,7 @@
 #include "macros.h"
 #include "mtypes.h"
 #include "dlist.h"
+#include "dispatch.h"
 
 
 /* In states where certain vertex components are required for t&l or
@@ -685,12 +686,12 @@ void GLAPIENTRY _mesa_noop_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2
       ASSERT_OUTSIDE_BEGIN_END(ctx);
    }
 
-   GL_CALL(Begin)( GL_QUADS );
-   GL_CALL(Vertex2f)( x1, y1 );
-   GL_CALL(Vertex2f)( x2, y1 );
-   GL_CALL(Vertex2f)( x2, y2 );
-   GL_CALL(Vertex2f)( x1, y2 );
-   GL_CALL(End)();
+   CALL_Begin(GET_DISPATCH(), (GL_QUADS));
+   CALL_Vertex2f(GET_DISPATCH(), (x1, y1));
+   CALL_Vertex2f(GET_DISPATCH(), (x2, y1));
+   CALL_Vertex2f(GET_DISPATCH(), (x2, y2));
+   CALL_Vertex2f(GET_DISPATCH(), (x1, y2));
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
@@ -706,10 +707,10 @@ void GLAPIENTRY _mesa_noop_DrawArrays(GLenum mode, GLint start, GLsizei count)
    if (!_mesa_validate_DrawArrays( ctx, mode, start, count ))
       return;
 
-   GL_CALL(Begin)(mode);
+   CALL_Begin(GET_DISPATCH(), (mode));
    for (i = 0; i < count; i++)
-       GL_CALL(ArrayElement)(start + i);
-   GL_CALL(End)();
+       CALL_ArrayElement(GET_DISPATCH(), (start + i));
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
@@ -722,27 +723,27 @@ void GLAPIENTRY _mesa_noop_DrawElements(GLenum mode, GLsizei count, GLenum type,
    if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices ))
       return;
 
-   GL_CALL(Begin)(mode);
+   CALL_Begin(GET_DISPATCH(), (mode));
 
    switch (type) {
    case GL_UNSIGNED_BYTE:
       for (i = 0 ; i < count ; i++)
-         GL_CALL(ArrayElement)( ((GLubyte *)indices)[i] );
+         CALL_ArrayElement(GET_DISPATCH(), ( ((GLubyte *)indices)[i] ));
       break;
    case GL_UNSIGNED_SHORT:
       for (i = 0 ; i < count ; i++)
-         GL_CALL(ArrayElement)( ((GLushort *)indices)[i] );
+         CALL_ArrayElement(GET_DISPATCH(), ( ((GLushort *)indices)[i] ));
       break;
    case GL_UNSIGNED_INT:
       for (i = 0 ; i < count ; i++)
-         GL_CALL(ArrayElement)( ((GLuint *)indices)[i] );
+         CALL_ArrayElement(GET_DISPATCH(), ( ((GLuint *)indices)[i] ));
       break;
    default:
       _mesa_error( ctx, GL_INVALID_ENUM, "glDrawElements(type)" );
       break;
    }
 
-   GL_CALL(End)();
+   CALL_End(GET_DISPATCH(), ());
 }
 
 void GLAPIENTRY _mesa_noop_DrawRangeElements(GLenum mode,
@@ -755,7 +756,7 @@ void GLAPIENTRY _mesa_noop_DrawRangeElements(GLenum mode,
    if (_mesa_validate_DrawRangeElements( ctx, mode,
                                         start, end,
                                         count, type, indices ))
-       GL_CALL(DrawElements)( mode, count, type, indices );
+       CALL_DrawElements(GET_DISPATCH(), (mode, count, type, indices));
 }
 
 /*
@@ -800,11 +801,11 @@ void GLAPIENTRY _mesa_noop_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
    du = ctx->Eval.MapGrid1du;
    u = ctx->Eval.MapGrid1u1 + i1 * du;
 
-   GL_CALL(Begin)( prim );
+   CALL_Begin(GET_DISPATCH(), (prim));
    for (i=i1;i<=i2;i++,u+=du) {
-      GL_CALL(EvalCoord1f)( u );
+      CALL_EvalCoord1f(GET_DISPATCH(), (u));
    }
-   GL_CALL(End)();
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
@@ -839,38 +840,38 @@ void GLAPIENTRY _mesa_noop_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1,
 
    switch (mode) {
    case GL_POINT:
-      GL_CALL(Begin)( GL_POINTS );
+      CALL_Begin(GET_DISPATCH(), (GL_POINTS));
       for (v=v1,j=j1;j<=j2;j++,v+=dv) {
         for (u=u1,i=i1;i<=i2;i++,u+=du) {
-           GL_CALL(EvalCoord2f)(u, v );
+           CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
         }
       }
-      GL_CALL(End)();
+      CALL_End(GET_DISPATCH(), ());
       break;
    case GL_LINE:
       for (v=v1,j=j1;j<=j2;j++,v+=dv) {
-        GL_CALL(Begin)( GL_LINE_STRIP );
+        CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP));
         for (u=u1,i=i1;i<=i2;i++,u+=du) {
-           GL_CALL(EvalCoord2f)(u, v );
+           CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
         }
-        GL_CALL(End)();
+        CALL_End(GET_DISPATCH(), ());
       }
       for (u=u1,i=i1;i<=i2;i++,u+=du) {
-        GL_CALL(Begin)( GL_LINE_STRIP );
+        CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP));
         for (v=v1,j=j1;j<=j2;j++,v+=dv) {
-           GL_CALL(EvalCoord2f)(u, v );
+           CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
         }
-        GL_CALL(End)();
+        CALL_End(GET_DISPATCH(), ());
       }
       break;
    case GL_FILL:
       for (v=v1,j=j1;j<j2;j++,v+=dv) {
-        GL_CALL(Begin)( GL_TRIANGLE_STRIP );
+        CALL_Begin(GET_DISPATCH(), (GL_TRIANGLE_STRIP));
         for (u=u1,i=i1;i<=i2;i++,u+=du) {
-           GL_CALL(EvalCoord2f)(u, v );
-           GL_CALL(EvalCoord2f)(u, v+dv );
+           CALL_EvalCoord2f(GET_DISPATCH(), (u, v));
+           CALL_EvalCoord2f(GET_DISPATCH(), (u, v+dv));
         }
-        GL_CALL(End)();
+        CALL_End(GET_DISPATCH(), ());
       }
       break;
    default:
index 275f257..05c1c36 100644 (file)
 #define F stdout
 #define DISPATCH(FUNC, ARGS, MESSAGE)          \
    fprintf MESSAGE;                            \
-   GL_CALL(FUNC) ARGS;
+   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
 
 #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
    fprintf MESSAGE;                            \
-   return GL_CALL(FUNC) ARGS;
+   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
 
 #else
 
 #define DISPATCH(FUNC, ARGS, MESSAGE)          \
-   GL_CALL(FUNC) ARGS;
+   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
 
 #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
-   return GL_CALL(FUNC) ARGS;
+   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
 
 #endif /* logging */
 
@@ -87,6 +87,7 @@
 #define GLAPIENTRY
 #endif
 
+#include "dispatch.h"
 #include "glapitemp.h"
 
 #endif /* USE_X86_ASM */
index 2541d5c..7bd11c3 100644 (file)
@@ -86,6 +86,8 @@
 #include "math/m_matrix.h"
 #include "math/m_xform.h"
 
+#include "dispatch.h"
+
 
 /**
  * Flush vertices.
@@ -960,7 +962,7 @@ static void GLAPIENTRY save_Accum( GLenum op, GLfloat value )
       n[2].f = value;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Accum)( op, value );
+      CALL_Accum(ctx->Exec, ( op, value ));
    }
 }
 
@@ -976,7 +978,7 @@ static void GLAPIENTRY save_AlphaFunc( GLenum func, GLclampf ref )
       n[2].f = (GLfloat) ref;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->AlphaFunc)( func, ref );
+      CALL_AlphaFunc(ctx->Exec, ( func, ref ));
    }
 }
 
@@ -992,7 +994,7 @@ static void GLAPIENTRY save_BindTexture( GLenum target, GLuint texture )
       n[2].ui = texture;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BindTexture)( target, texture );
+      CALL_BindTexture(ctx->Exec, ( target, texture ));
    }
 }
 
@@ -1020,8 +1022,8 @@ static void GLAPIENTRY save_Bitmap( GLsizei width, GLsizei height,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Bitmap)( width, height,
-                           xorig, yorig, xmove, ymove, pixels );
+      CALL_Bitmap(ctx->Exec, ( width, height,
+                           xorig, yorig, xmove, ymove, pixels ));
    }
 }
 
@@ -1036,7 +1038,7 @@ static void GLAPIENTRY save_BlendEquation( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BlendEquation)( mode );
+      CALL_BlendEquation(ctx->Exec, ( mode ));
    }
 }
 
@@ -1053,7 +1055,7 @@ static void GLAPIENTRY save_BlendEquationSeparateEXT( GLenum modeRGB,
       n[2].e = modeA;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BlendEquationSeparateEXT)( modeRGB, modeA );
+      CALL_BlendEquationSeparateEXT(ctx->Exec, ( modeRGB, modeA ));
    }
 }
 
@@ -1072,8 +1074,8 @@ static void GLAPIENTRY save_BlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfact
       n[4].e = dfactorA;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BlendFuncSeparateEXT)( sfactorRGB, dfactorRGB,
-                                          sfactorA, dfactorA);
+      CALL_BlendFuncSeparateEXT(ctx->Exec, 
+                               (sfactorRGB, dfactorRGB, sfactorA, dfactorA));
    }
 }
 
@@ -1092,7 +1094,7 @@ static void GLAPIENTRY save_BlendColor( GLfloat red, GLfloat green,
       n[4].f = alpha;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BlendColor)( red, green, blue, alpha );
+      CALL_BlendColor(ctx->Exec, ( red, green, blue, alpha ));
    }
 }
 
@@ -1113,7 +1115,7 @@ void GLAPIENTRY _mesa_save_CallList( GLuint list )
    ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CallList)( list );
+      CALL_CallList(ctx->Exec, ( list ));
    }
 }
 
@@ -1157,7 +1159,7 @@ void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *list
    ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CallLists)( n, type, lists );
+      CALL_CallLists(ctx->Exec, ( n, type, lists ));
    }
 }
 
@@ -1172,7 +1174,7 @@ static void GLAPIENTRY save_Clear( GLbitfield mask )
       n[1].bf = mask;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Clear)( mask );
+      CALL_Clear(ctx->Exec, ( mask ));
    }
 }
 
@@ -1191,7 +1193,7 @@ static void GLAPIENTRY save_ClearAccum( GLfloat red, GLfloat green,
       n[4].f = alpha;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ClearAccum)( red, green, blue, alpha );
+      CALL_ClearAccum(ctx->Exec, ( red, green, blue, alpha ));
    }
 }
 
@@ -1210,7 +1212,7 @@ static void GLAPIENTRY save_ClearColor( GLclampf red, GLclampf green,
       n[4].f = alpha;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ClearColor)( red, green, blue, alpha );
+      CALL_ClearColor(ctx->Exec, ( red, green, blue, alpha ));
    }
 }
 
@@ -1225,7 +1227,7 @@ static void GLAPIENTRY save_ClearDepth( GLclampd depth )
       n[1].f = (GLfloat) depth;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ClearDepth)( depth );
+      CALL_ClearDepth(ctx->Exec, ( depth ));
    }
 }
 
@@ -1240,7 +1242,7 @@ static void GLAPIENTRY save_ClearIndex( GLfloat c )
       n[1].f = c;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ClearIndex)( c );
+      CALL_ClearIndex(ctx->Exec, ( c ));
    }
 }
 
@@ -1255,7 +1257,7 @@ static void GLAPIENTRY save_ClearStencil( GLint s )
       n[1].i = s;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ClearStencil)( s );
+      CALL_ClearStencil(ctx->Exec, ( s ));
    }
 }
 
@@ -1274,7 +1276,7 @@ static void GLAPIENTRY save_ClipPlane( GLenum plane, const GLdouble *equ )
       n[5].f = (GLfloat) equ[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ClipPlane)( plane, equ );
+      CALL_ClipPlane(ctx->Exec, ( plane, equ ));
    }
 }
 
@@ -1294,7 +1296,7 @@ static void GLAPIENTRY save_ColorMask( GLboolean red, GLboolean green,
       n[4].b = alpha;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ColorMask)( red, green, blue, alpha );
+      CALL_ColorMask(ctx->Exec, ( red, green, blue, alpha ));
    }
 }
 
@@ -1311,7 +1313,7 @@ static void GLAPIENTRY save_ColorMaterial( GLenum face, GLenum mode )
       n[2].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ColorMaterial)( face, mode );
+      CALL_ColorMaterial(ctx->Exec, ( face, mode ));
    }
 }
 
@@ -1326,8 +1328,8 @@ static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat,
        target == GL_PROXY_TEXTURE_3D ||
        target == GL_PROXY_TEXTURE_CUBE_MAP_ARB) {
       /* execute immediately */
-      (*ctx->Exec->ColorTable)( target, internalFormat, width,
-                                format, type, table );
+      CALL_ColorTable(ctx->Exec, ( target, internalFormat, width,
+                                format, type, table ));
    }
    else {
       GLvoid *image = unpack_image(1, width, 1, 1, format, type, table,
@@ -1347,8 +1349,8 @@ static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->ColorTable)( target, internalFormat, width,
-                                   format, type, table );
+         CALL_ColorTable(ctx->Exec, ( target, internalFormat, width,
+                                   format, type, table ));
       }
    }
 }
@@ -1379,7 +1381,7 @@ save_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params)
    }
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ColorTableParameterfv)( target, pname, params );
+      CALL_ColorTableParameterfv(ctx->Exec, ( target, pname, params ));
    }
 }
 
@@ -1408,7 +1410,7 @@ save_ColorTableParameteriv(GLenum target, GLenum pname, const GLint *params)
    }
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ColorTableParameteriv)( target, pname, params );
+      CALL_ColorTableParameteriv(ctx->Exec, ( target, pname, params ));
    }
 }
 
@@ -1436,7 +1438,7 @@ static void GLAPIENTRY save_ColorSubTable( GLenum target, GLsizei start, GLsizei
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ColorSubTable)(target, start, count, format, type, table);
+      CALL_ColorSubTable(ctx->Exec, (target, start, count, format, type, table));
    }
 }
 
@@ -1458,7 +1460,7 @@ save_CopyColorSubTable(GLenum target, GLsizei start,
       n[5].i = width;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyColorSubTable)(target, start, x, y, width);
+      CALL_CopyColorSubTable(ctx->Exec, (target, start, x, y, width));
    }
 }
 
@@ -1480,7 +1482,7 @@ save_CopyColorTable(GLenum target, GLenum internalformat,
       n[5].i = width;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyColorTable)(target, internalformat, x, y, width);
+      CALL_CopyColorTable(ctx->Exec, (target, internalformat, x, y, width));
    }
 }
 
@@ -1507,8 +1509,8 @@ save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ConvolutionFilter1D)( target, internalFormat, width,
-                                         format, type, filter );
+      CALL_ConvolutionFilter1D(ctx->Exec, ( target, internalFormat, width,
+                                         format, type, filter ));
    }
 }
 
@@ -1537,8 +1539,8 @@ save_ConvolutionFilter2D(GLenum target, GLenum internalFormat,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ConvolutionFilter2D)( target, internalFormat, width, height,
-                                         format, type, filter );
+      CALL_ConvolutionFilter2D(ctx->Exec, ( target, internalFormat, width, height,
+                                         format, type, filter ));
    }
 }
 
@@ -1556,7 +1558,7 @@ save_ConvolutionParameteri(GLenum target, GLenum pname, GLint param)
       n[3].i = param;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ConvolutionParameteri)( target, pname, param );
+      CALL_ConvolutionParameteri(ctx->Exec, ( target, pname, param ));
    }
 }
 
@@ -1584,7 +1586,7 @@ save_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params)
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ConvolutionParameteriv)( target, pname, params );
+      CALL_ConvolutionParameteriv(ctx->Exec, ( target, pname, params ));
    }
 }
 
@@ -1602,7 +1604,7 @@ save_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param)
       n[3].f = param;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ConvolutionParameterf)( target, pname, param );
+      CALL_ConvolutionParameterf(ctx->Exec, ( target, pname, param ));
    }
 }
 
@@ -1630,7 +1632,7 @@ save_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params)
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ConvolutionParameterfv)( target, pname, params );
+      CALL_ConvolutionParameterfv(ctx->Exec, ( target, pname, params ));
    }
 }
 
@@ -1651,7 +1653,7 @@ save_CopyPixels( GLint x, GLint y,
       n[5].e = type;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyPixels)( x, y, width, height, type );
+      CALL_CopyPixels(ctx->Exec, ( x, y, width, height, type ));
    }
 }
 
@@ -1675,8 +1677,8 @@ save_CopyTexImage1D( GLenum target, GLint level, GLenum internalformat,
       n[7].i = border;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyTexImage1D)( target, level, internalformat,
-                                   x, y, width, border );
+      CALL_CopyTexImage1D(ctx->Exec, ( target, level, internalformat,
+                                   x, y, width, border ));
    }
 }
 
@@ -1702,8 +1704,8 @@ save_CopyTexImage2D( GLenum target, GLint level,
       n[8].i = border;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyTexImage2D)( target, level, internalformat,
-                                   x, y, width, height, border );
+      CALL_CopyTexImage2D(ctx->Exec, ( target, level, internalformat,
+                                   x, y, width, height, border ));
    }
 }
 
@@ -1727,7 +1729,7 @@ save_CopyTexSubImage1D( GLenum target, GLint level,
       n[6].i = width;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyTexSubImage1D)( target, level, xoffset, x, y, width );
+      CALL_CopyTexSubImage1D(ctx->Exec, ( target, level, xoffset, x, y, width ));
    }
 }
 
@@ -1753,8 +1755,8 @@ save_CopyTexSubImage2D( GLenum target, GLint level,
       n[8].i = height;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyTexSubImage2D)( target, level, xoffset, yoffset,
-                               x, y, width, height );
+      CALL_CopyTexSubImage2D(ctx->Exec, ( target, level, xoffset, yoffset,
+                               x, y, width, height ));
    }
 }
 
@@ -1781,9 +1783,9 @@ save_CopyTexSubImage3D( GLenum target, GLint level,
       n[9].i = height;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CopyTexSubImage3D)( target, level,
+      CALL_CopyTexSubImage3D(ctx->Exec, ( target, level,
                                       xoffset, yoffset, zoffset,
-                                      x, y, width, height );
+                                      x, y, width, height ));
    }
 }
 
@@ -1798,7 +1800,7 @@ static void GLAPIENTRY save_CullFace( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CullFace)( mode );
+      CALL_CullFace(ctx->Exec, ( mode ));
    }
 }
 
@@ -1813,7 +1815,7 @@ static void GLAPIENTRY save_DepthFunc( GLenum func )
       n[1].e = func;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DepthFunc)( func );
+      CALL_DepthFunc(ctx->Exec, ( func ));
    }
 }
 
@@ -1828,7 +1830,7 @@ static void GLAPIENTRY save_DepthMask( GLboolean mask )
       n[1].b = mask;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DepthMask)( mask );
+      CALL_DepthMask(ctx->Exec, ( mask ));
    }
 }
 
@@ -1844,7 +1846,7 @@ static void GLAPIENTRY save_DepthRange( GLclampd nearval, GLclampd farval )
       n[2].f = (GLfloat) farval;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DepthRange)( nearval, farval );
+      CALL_DepthRange(ctx->Exec, ( nearval, farval ));
    }
 }
 
@@ -1859,7 +1861,7 @@ static void GLAPIENTRY save_Disable( GLenum cap )
       n[1].e = cap;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Disable)( cap );
+      CALL_Disable(ctx->Exec, ( cap ));
    }
 }
 
@@ -1874,7 +1876,7 @@ static void GLAPIENTRY save_DrawBuffer( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DrawBuffer)( mode );
+      CALL_DrawBuffer(ctx->Exec, ( mode ));
    }
 }
 
@@ -1900,7 +1902,7 @@ static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DrawPixels)( width, height, format, type, pixels );
+      CALL_DrawPixels(ctx->Exec, ( width, height, format, type, pixels ));
    }
 }
 
@@ -1916,7 +1918,7 @@ static void GLAPIENTRY save_Enable( GLenum cap )
       n[1].e = cap;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Enable)( cap );
+      CALL_Enable(ctx->Exec, ( cap ));
    }
 }
 
@@ -1934,7 +1936,7 @@ void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
       n[3].i = i2;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EvalMesh1)( mode, i1, i2 );
+      CALL_EvalMesh1(ctx->Exec, ( mode, i1, i2 ));
    }
 }
 
@@ -1953,7 +1955,7 @@ void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1,
       n[5].i = j2;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EvalMesh2)( mode, i1, i2, j1, j2 );
+      CALL_EvalMesh2(ctx->Exec, ( mode, i1, i2, j1, j2 ));
    }
 }
 
@@ -1974,7 +1976,7 @@ static void GLAPIENTRY save_Fogfv( GLenum pname, const GLfloat *params )
       n[5].f = params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Fogfv)( pname, params );
+      CALL_Fogfv(ctx->Exec, ( pname, params ));
    }
 }
 
@@ -2026,7 +2028,7 @@ static void GLAPIENTRY save_FrontFace( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->FrontFace)( mode );
+      CALL_FrontFace(ctx->Exec, ( mode ));
    }
 }
 
@@ -2048,7 +2050,7 @@ static void GLAPIENTRY save_Frustum( GLdouble left, GLdouble right,
       n[6].f = (GLfloat) farval;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Frustum)( left, right, bottom, top, nearval, farval );
+      CALL_Frustum(ctx->Exec, ( left, right, bottom, top, nearval, farval ));
    }
 }
 
@@ -2064,7 +2066,7 @@ static void GLAPIENTRY save_Hint( GLenum target, GLenum mode )
       n[2].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Hint)( target, mode );
+      CALL_Hint(ctx->Exec, ( target, mode ));
    }
 }
 
@@ -2084,7 +2086,7 @@ save_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean si
       n[4].b = sink;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Histogram)( target, width, internalFormat, sink );
+      CALL_Histogram(ctx->Exec, ( target, width, internalFormat, sink ));
    }
 }
 
@@ -2099,7 +2101,7 @@ static void GLAPIENTRY save_IndexMask( GLuint mask )
       n[1].ui = mask;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->IndexMask)( mask );
+      CALL_IndexMask(ctx->Exec, ( mask ));
    }
 }
 
@@ -2110,7 +2112,7 @@ static void GLAPIENTRY save_InitNames( void )
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_INIT_NAMES, 0 );
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->InitNames)();
+      CALL_InitNames(ctx->Exec, ());
    }
 }
 
@@ -2164,7 +2166,7 @@ static void GLAPIENTRY save_Lightfv( GLenum light, GLenum pname, const GLfloat *
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Lightfv)( light, pname, params );
+      CALL_Lightfv(ctx->Exec, ( light, pname, params ));
    }
 }
 
@@ -2233,7 +2235,7 @@ static void GLAPIENTRY save_LightModelfv( GLenum pname, const GLfloat *params )
       n[5].f = params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LightModelfv)( pname, params );
+      CALL_LightModelfv(ctx->Exec, ( pname, params ));
    }
 }
 
@@ -2284,7 +2286,7 @@ static void GLAPIENTRY save_LineStipple( GLint factor, GLushort pattern )
       n[2].us = pattern;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LineStipple)( factor, pattern );
+      CALL_LineStipple(ctx->Exec, ( factor, pattern ));
    }
 }
 
@@ -2299,7 +2301,7 @@ static void GLAPIENTRY save_LineWidth( GLfloat width )
       n[1].f = width;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LineWidth)( width );
+      CALL_LineWidth(ctx->Exec, ( width ));
    }
 }
 
@@ -2314,7 +2316,7 @@ static void GLAPIENTRY save_ListBase( GLuint base )
       n[1].ui = base;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ListBase)( base );
+      CALL_ListBase(ctx->Exec, ( base ));
    }
 }
 
@@ -2325,7 +2327,7 @@ static void GLAPIENTRY save_LoadIdentity( void )
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_IDENTITY, 0 );
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LoadIdentity)();
+      CALL_LoadIdentity(ctx->Exec, ());
    }
 }
 
@@ -2343,7 +2345,7 @@ static void GLAPIENTRY save_LoadMatrixf( const GLfloat *m )
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LoadMatrixf)( m );
+      CALL_LoadMatrixf(ctx->Exec, ( m ));
    }
 }
 
@@ -2369,7 +2371,7 @@ static void GLAPIENTRY save_LoadName( GLuint name )
       n[1].ui = name;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LoadName)( name );
+      CALL_LoadName(ctx->Exec, ( name ));
    }
 }
 
@@ -2384,7 +2386,7 @@ static void GLAPIENTRY save_LogicOp( GLenum opcode )
       n[1].e = opcode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LogicOp)( opcode );
+      CALL_LogicOp(ctx->Exec, ( opcode ));
    }
 }
 
@@ -2406,7 +2408,7 @@ static void GLAPIENTRY save_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLin
       n[6].data = (void *) pnts;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Map1d)( target, u1, u2, stride, order, points );
+      CALL_Map1d(ctx->Exec, ( target, u1, u2, stride, order, points ));
    }
 }
 
@@ -2427,7 +2429,7 @@ static void GLAPIENTRY save_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint
       n[6].data = (void *) pnts;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Map1f)( target, u1, u2, stride, order, points );
+      CALL_Map1f(ctx->Exec, ( target, u1, u2, stride, order, points ));
    }
 }
 
@@ -2457,9 +2459,9 @@ static void GLAPIENTRY save_Map2d( GLenum target,
       n[10].data = (void *) pnts;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Map2d)( target,
+      CALL_Map2d(ctx->Exec, ( target,
                           u1, u2, ustride, uorder,
-                          v1, v2, vstride, vorder, points );
+                          v1, v2, vstride, vorder, points ));
    }
 }
 
@@ -2489,8 +2491,8 @@ static void GLAPIENTRY save_Map2f( GLenum target,
       n[10].data = (void *) pnts;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Map2f)( target, u1, u2, ustride, uorder,
-                          v1, v2, vstride, vorder, points );
+      CALL_Map2f(ctx->Exec, ( target, u1, u2, ustride, uorder,
+                          v1, v2, vstride, vorder, points ));
    }
 }
 
@@ -2507,7 +2509,7 @@ static void GLAPIENTRY save_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
       n[3].f = u2;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->MapGrid1f)( un, u1, u2 );
+      CALL_MapGrid1f(ctx->Exec, ( un, u1, u2 ));
    }
 }
 
@@ -2534,7 +2536,7 @@ static void GLAPIENTRY save_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
       n[6].f = v2;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->MapGrid2f)( un, u1, u2, vn, v1, v2 );
+      CALL_MapGrid2f(ctx->Exec, ( un, u1, u2, vn, v1, v2 ));
    }
 }
 
@@ -2558,7 +2560,7 @@ static void GLAPIENTRY save_MatrixMode( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->MatrixMode)( mode );
+      CALL_MatrixMode(ctx->Exec, ( mode ));
    }
 }
 
@@ -2577,7 +2579,7 @@ save_Minmax(GLenum target, GLenum internalFormat, GLboolean sink)
       n[3].b = sink;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Minmax)( target, internalFormat, sink );
+      CALL_Minmax(ctx->Exec, ( target, internalFormat, sink ));
    }
 }
 
@@ -2595,7 +2597,7 @@ static void GLAPIENTRY save_MultMatrixf( const GLfloat *m )
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->MultMatrixf)( m );
+      CALL_MultMatrixf(ctx->Exec, ( m ));
    }
 }
 
@@ -2639,7 +2641,7 @@ static void GLAPIENTRY save_Ortho( GLdouble left, GLdouble right,
       n[6].f = (GLfloat) farval;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Ortho)( left, right, bottom, top, nearval, farval );
+      CALL_Ortho(ctx->Exec, ( left, right, bottom, top, nearval, farval ));
    }
 }
 
@@ -2658,7 +2660,7 @@ save_PixelMapfv( GLenum map, GLint mapsize, const GLfloat *values )
       MEMCPY( n[3].data, (void *) values, mapsize * sizeof(GLfloat) );
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PixelMapfv)( map, mapsize, values );
+      CALL_PixelMapfv(ctx->Exec, ( map, mapsize, values ));
    }
 }
 
@@ -2713,7 +2715,7 @@ save_PixelTransferf( GLenum pname, GLfloat param )
       n[2].f = param;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PixelTransferf)( pname, param );
+      CALL_PixelTransferf(ctx->Exec, ( pname, param ));
    }
 }
 
@@ -2737,7 +2739,7 @@ save_PixelZoom( GLfloat xfactor, GLfloat yfactor )
       n[2].f = yfactor;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PixelZoom)( xfactor, yfactor );
+      CALL_PixelZoom(ctx->Exec, ( xfactor, yfactor ));
    }
 }
 
@@ -2756,7 +2758,7 @@ save_PointParameterfvEXT( GLenum pname, const GLfloat *params )
       n[4].f = params[2];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PointParameterfvEXT)( pname, params );
+      CALL_PointParameterfvEXT(ctx->Exec, ( pname, params ));
    }
 }
 
@@ -2789,7 +2791,7 @@ static void GLAPIENTRY save_PointSize( GLfloat size )
       n[1].f = size;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PointSize)( size );
+      CALL_PointSize(ctx->Exec, ( size ));
    }
 }
 
@@ -2805,7 +2807,7 @@ static void GLAPIENTRY save_PolygonMode( GLenum face, GLenum mode )
       n[2].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PolygonMode)( face, mode );
+      CALL_PolygonMode(ctx->Exec, ( face, mode ));
    }
 }
 
@@ -2826,7 +2828,7 @@ static void GLAPIENTRY save_PolygonStipple( const GLubyte *pattern )
       MEMCPY( data, pattern, 32 * 4 );
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PolygonStipple)( (GLubyte*) pattern );
+      CALL_PolygonStipple(ctx->Exec, ( (GLubyte*) pattern ));
    }
 }
 
@@ -2842,7 +2844,7 @@ static void GLAPIENTRY save_PolygonOffset( GLfloat factor, GLfloat units )
       n[2].f = units;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PolygonOffset)( factor, units );
+      CALL_PolygonOffset(ctx->Exec, ( factor, units ));
    }
 }
 
@@ -2861,7 +2863,7 @@ static void GLAPIENTRY save_PopAttrib( void )
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_POP_ATTRIB, 0 );
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PopAttrib)();
+      CALL_PopAttrib(ctx->Exec, ());
    }
 }
 
@@ -2872,7 +2874,7 @@ static void GLAPIENTRY save_PopMatrix( void )
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_POP_MATRIX, 0 );
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PopMatrix)();
+      CALL_PopMatrix(ctx->Exec, ());
    }
 }
 
@@ -2883,7 +2885,7 @@ static void GLAPIENTRY save_PopName( void )
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_POP_NAME, 0 );
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PopName)();
+      CALL_PopName(ctx->Exec, ());
    }
 }
 
@@ -2904,7 +2906,7 @@ static void GLAPIENTRY save_PrioritizeTextures( GLsizei num, const GLuint *textu
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PrioritizeTextures)( num, textures, priorities );
+      CALL_PrioritizeTextures(ctx->Exec, ( num, textures, priorities ));
    }
 }
 
@@ -2919,7 +2921,7 @@ static void GLAPIENTRY save_PushAttrib( GLbitfield mask )
       n[1].bf = mask;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PushAttrib)( mask );
+      CALL_PushAttrib(ctx->Exec, ( mask ));
    }
 }
 
@@ -2930,7 +2932,7 @@ static void GLAPIENTRY save_PushMatrix( void )
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_PUSH_MATRIX, 0 );
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PushMatrix)();
+      CALL_PushMatrix(ctx->Exec, ());
    }
 }
 
@@ -2945,7 +2947,7 @@ static void GLAPIENTRY save_PushName( GLuint name )
       n[1].ui = name;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PushName)( name );
+      CALL_PushName(ctx->Exec, ( name ));
    }
 }
 
@@ -2963,7 +2965,7 @@ static void GLAPIENTRY save_RasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloa
       n[4].f = w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->RasterPos4f)( x, y, z, w );
+      CALL_RasterPos4f(ctx->Exec, ( x, y, z, w ));
    }
 }
 
@@ -3095,7 +3097,7 @@ static void GLAPIENTRY save_PassThrough( GLfloat token )
       n[1].f = token;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PassThrough)( token );
+      CALL_PassThrough(ctx->Exec, ( token ));
    }
 }
 
@@ -3110,7 +3112,7 @@ static void GLAPIENTRY save_ReadBuffer( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ReadBuffer)( mode );
+      CALL_ReadBuffer(ctx->Exec, ( mode ));
    }
 }
 
@@ -3126,7 +3128,7 @@ save_ResetHistogram(GLenum target)
       n[1].e = target;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ResetHistogram)( target );
+      CALL_ResetHistogram(ctx->Exec, ( target ));
    }
 }
 
@@ -3142,7 +3144,7 @@ save_ResetMinmax(GLenum target)
       n[1].e = target;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ResetMinmax)( target );
+      CALL_ResetMinmax(ctx->Exec, ( target ));
    }
 }
 
@@ -3160,7 +3162,7 @@ static void GLAPIENTRY save_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloa
       n[4].f = z;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Rotatef)( angle, x, y, z );
+      CALL_Rotatef(ctx->Exec, ( angle, x, y, z ));
    }
 }
 
@@ -3183,7 +3185,7 @@ static void GLAPIENTRY save_Scalef( GLfloat x, GLfloat y, GLfloat z )
       n[3].f = z;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Scalef)( x, y, z );
+      CALL_Scalef(ctx->Exec, ( x, y, z ));
    }
 }
 
@@ -3207,7 +3209,7 @@ static void GLAPIENTRY save_Scissor( GLint x, GLint y, GLsizei width, GLsizei he
       n[4].i = height;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Scissor)( x, y, width, height );
+      CALL_Scissor(ctx->Exec, ( x, y, width, height ));
    }
 }
 
@@ -3222,7 +3224,7 @@ static void GLAPIENTRY save_ShadeModel( GLenum mode )
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ShadeModel)( mode );
+      CALL_ShadeModel(ctx->Exec, ( mode ));
    }
 }
 
@@ -3239,7 +3241,7 @@ static void GLAPIENTRY save_StencilFunc( GLenum func, GLint ref, GLuint mask )
       n[3].ui = mask;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->StencilFunc)( func, ref, mask );
+      CALL_StencilFunc(ctx->Exec, ( func, ref, mask ));
    }
 }
 
@@ -3254,7 +3256,7 @@ static void GLAPIENTRY save_StencilMask( GLuint mask )
       n[1].ui = mask;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->StencilMask)( mask );
+      CALL_StencilMask(ctx->Exec, ( mask ));
    }
 }
 
@@ -3271,7 +3273,7 @@ static void GLAPIENTRY save_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
       n[3].e = zpass;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->StencilOp)( fail, zfail, zpass );
+      CALL_StencilOp(ctx->Exec, ( fail, zfail, zpass ));
    }
 }
 
@@ -3290,7 +3292,7 @@ save_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
       n[4].ui = mask;
    }
    if (ctx->ExecuteFlag) {
-      ctx->Exec->StencilFuncSeparate(face, func, ref, mask);
+      CALL_StencilFuncSeparate(ctx->Exec, (face, func, ref, mask));
    }
 }
 
@@ -3307,7 +3309,7 @@ save_StencilMaskSeparate(GLenum face, GLuint mask)
       n[2].ui = mask;
    }
    if (ctx->ExecuteFlag) {
-      ctx->Exec->StencilMaskSeparate(face, mask);
+      CALL_StencilMaskSeparate(ctx->Exec, (face, mask));
    }
 }
 
@@ -3326,7 +3328,7 @@ save_StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
       n[4].e = zpass;
    }
    if (ctx->ExecuteFlag) {
-      ctx->Exec->StencilOpSeparate(face, fail, zfail, zpass);
+      CALL_StencilOpSeparate(ctx->Exec, (face, fail, zfail, zpass));
    }
 }
 
@@ -3352,7 +3354,7 @@ static void GLAPIENTRY save_TexEnvfv( GLenum target, GLenum pname, const GLfloat
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TexEnvfv)( target, pname, params );
+      CALL_TexEnvfv(ctx->Exec, ( target, pname, params ));
    }
 }
 
@@ -3404,7 +3406,7 @@ static void GLAPIENTRY save_TexGenfv( GLenum coord, GLenum pname, const GLfloat
       n[6].f = params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TexGenfv)( coord, pname, params );
+      CALL_TexGenfv(ctx->Exec, ( coord, pname, params ));
    }
 }
 
@@ -3466,7 +3468,7 @@ static void GLAPIENTRY save_TexParameterfv( GLenum target,
       n[6].f = params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TexParameterfv)( target, pname, params );
+      CALL_TexParameterfv(ctx->Exec, ( target, pname, params ));
    }
 }
 
@@ -3504,8 +3506,8 @@ static void GLAPIENTRY save_TexImage1D( GLenum target,
    GET_CURRENT_CONTEXT(ctx);
    if (target == GL_PROXY_TEXTURE_1D) {
       /* don't compile, execute immediately */
-      (*ctx->Exec->TexImage1D)( target, level, components, width,
-                               border, format, type, pixels );
+      CALL_TexImage1D(ctx->Exec, ( target, level, components, width,
+                               border, format, type, pixels ));
    }
    else {
       GLvoid *image = unpack_image(1, width, 1, 1, format, type,
@@ -3527,8 +3529,8 @@ static void GLAPIENTRY save_TexImage1D( GLenum target,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->TexImage1D)( target, level, components, width,
-                                  border, format, type, pixels );
+         CALL_TexImage1D(ctx->Exec, ( target, level, components, width,
+                                  border, format, type, pixels ));
       }
    }
 }
@@ -3543,8 +3545,8 @@ static void GLAPIENTRY save_TexImage2D( GLenum target,
    GET_CURRENT_CONTEXT(ctx);
    if (target == GL_PROXY_TEXTURE_2D) {
       /* don't compile, execute immediately */
-      (*ctx->Exec->TexImage2D)( target, level, components, width,
-                               height, border, format, type, pixels );
+      CALL_TexImage2D(ctx->Exec, ( target, level, components, width,
+                               height, border, format, type, pixels ));
    }
    else {
       GLvoid *image = unpack_image(2, width, height, 1, format, type,
@@ -3567,8 +3569,8 @@ static void GLAPIENTRY save_TexImage2D( GLenum target,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->TexImage2D)( target, level, components, width,
-                                  height, border, format, type, pixels );
+         CALL_TexImage2D(ctx->Exec, ( target, level, components, width,
+                                  height, border, format, type, pixels ));
       }
    }
 }
@@ -3584,8 +3586,8 @@ static void GLAPIENTRY save_TexImage3D( GLenum target,
    GET_CURRENT_CONTEXT(ctx);
    if (target == GL_PROXY_TEXTURE_3D) {
       /* don't compile, execute immediately */
-      (*ctx->Exec->TexImage3D)( target, level, internalFormat, width,
-                               height, depth, border, format, type, pixels );
+      CALL_TexImage3D(ctx->Exec, ( target, level, internalFormat, width,
+                               height, depth, border, format, type, pixels ));
    }
    else {
       Node *n;
@@ -3609,8 +3611,8 @@ static void GLAPIENTRY save_TexImage3D( GLenum target,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->TexImage3D)( target, level, internalFormat, width,
-                                height, depth, border, format, type, pixels );
+         CALL_TexImage3D(ctx->Exec, ( target, level, internalFormat, width,
+                                height, depth, border, format, type, pixels ));
       }
    }
 }
@@ -3639,8 +3641,8 @@ static void GLAPIENTRY save_TexSubImage1D( GLenum target, GLint level, GLint xof
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TexSubImage1D)( target, level, xoffset, width,
-                                  format, type, pixels );
+      CALL_TexSubImage1D(ctx->Exec, ( target, level, xoffset, width,
+                                  format, type, pixels ));
    }
 }
 
@@ -3672,8 +3674,8 @@ static void GLAPIENTRY save_TexSubImage2D( GLenum target, GLint level,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TexSubImage2D)( target, level, xoffset, yoffset,
-                           width, height, format, type, pixels );
+      CALL_TexSubImage2D(ctx->Exec, ( target, level, xoffset, yoffset,
+                           width, height, format, type, pixels ));
    }
 }
 
@@ -3707,9 +3709,9 @@ static void GLAPIENTRY save_TexSubImage3D( GLenum target, GLint level,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TexSubImage3D)( target, level,
+      CALL_TexSubImage3D(ctx->Exec, ( target, level,
                                   xoffset, yoffset, zoffset,
-                                  width, height, depth, format, type, pixels );
+                                  width, height, depth, format, type, pixels ));
    }
 }
 
@@ -3726,7 +3728,7 @@ static void GLAPIENTRY save_Translatef( GLfloat x, GLfloat y, GLfloat z )
       n[3].f = z;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Translatef)( x, y, z );
+      CALL_Translatef(ctx->Exec, ( x, y, z ));
    }
 }
 
@@ -3751,7 +3753,7 @@ static void GLAPIENTRY save_Viewport( GLint x, GLint y, GLsizei width, GLsizei h
       n[4].i = (GLint) height;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Viewport)( x, y, width, height );
+      CALL_Viewport(ctx->Exec, ( x, y, width, height ));
    }
 }
 
@@ -3769,7 +3771,7 @@ static void GLAPIENTRY save_WindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GL
       n[4].f = w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->WindowPos4fMESA)( x, y, z, w );
+      CALL_WindowPos4fMESA(ctx->Exec, ( x, y, z, w ));
    }
 }
 
@@ -3903,7 +3905,7 @@ static void GLAPIENTRY save_ActiveTextureARB( GLenum target )
       n[1].e = target;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ActiveTextureARB)( target );
+      CALL_ActiveTextureARB(ctx->Exec, ( target ));
    }
 }
 
@@ -3955,7 +3957,7 @@ save_PixelTexGenSGIX(GLenum mode)
       n[1].e = mode;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PixelTexGenSGIX)( mode );
+      CALL_PixelTexGenSGIX(ctx->Exec, ( mode ));
    }
 }
 
@@ -3970,8 +3972,8 @@ save_CompressedTexImage1DARB(GLenum target, GLint level,
    GET_CURRENT_CONTEXT(ctx);
    if (target == GL_PROXY_TEXTURE_1D) {
       /* don't compile, execute immediately */
-      (*ctx->Exec->CompressedTexImage1DARB)(target, level, internalFormat,
-                                            width, border, imageSize, data);
+      CALL_CompressedTexImage1DARB(ctx->Exec, (target, level, internalFormat,
+                                            width, border, imageSize, data));
    }
    else {
       Node *n;
@@ -3998,8 +4000,8 @@ save_CompressedTexImage1DARB(GLenum target, GLint level,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->CompressedTexImage1DARB)(target, level, internalFormat,
-                                               width, border, imageSize, data);
+         CALL_CompressedTexImage1DARB(ctx->Exec, (target, level, internalFormat,
+                                               width, border, imageSize, data));
       }
    }
 }
@@ -4014,8 +4016,8 @@ save_CompressedTexImage2DARB(GLenum target, GLint level,
    GET_CURRENT_CONTEXT(ctx);
    if (target == GL_PROXY_TEXTURE_2D) {
       /* don't compile, execute immediately */
-      (*ctx->Exec->CompressedTexImage2DARB)(target, level, internalFormat,
-                                       width, height, border, imageSize, data);
+      CALL_CompressedTexImage2DARB(ctx->Exec, (target, level, internalFormat,
+                                       width, height, border, imageSize, data));
    }
    else {
       Node *n;
@@ -4043,8 +4045,8 @@ save_CompressedTexImage2DARB(GLenum target, GLint level,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->CompressedTexImage2DARB)(target, level, internalFormat,
-                                      width, height, border, imageSize, data);
+         CALL_CompressedTexImage2DARB(ctx->Exec, (target, level, internalFormat,
+                                      width, height, border, imageSize, data));
       }
    }
 }
@@ -4059,8 +4061,8 @@ save_CompressedTexImage3DARB(GLenum target, GLint level,
    GET_CURRENT_CONTEXT(ctx);
    if (target == GL_PROXY_TEXTURE_3D) {
       /* don't compile, execute immediately */
-      (*ctx->Exec->CompressedTexImage3DARB)(target, level, internalFormat,
-                                width, height, depth, border, imageSize, data);
+      CALL_CompressedTexImage3DARB(ctx->Exec, (target, level, internalFormat,
+                                width, height, depth, border, imageSize, data));
    }
    else {
       Node *n;
@@ -4089,8 +4091,8 @@ save_CompressedTexImage3DARB(GLenum target, GLint level,
          FREE(image);
       }
       if (ctx->ExecuteFlag) {
-         (*ctx->Exec->CompressedTexImage3DARB)(target, level, internalFormat,
-                                width, height, depth, border, imageSize, data);
+         CALL_CompressedTexImage3DARB(ctx->Exec, (target, level, internalFormat,
+                                width, height, depth, border, imageSize, data));
       }
    }
 }
@@ -4128,8 +4130,8 @@ save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CompressedTexSubImage1DARB)(target, level, xoffset,
-                                            width, format, imageSize, data);
+      CALL_CompressedTexSubImage1DARB(ctx->Exec, (target, level, xoffset,
+                                            width, format, imageSize, data));
    }
 }
 
@@ -4169,8 +4171,8 @@ save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CompressedTexSubImage2DARB)(target, level, xoffset, yoffset,
-                                       width, height, format, imageSize, data);
+      CALL_CompressedTexSubImage2DARB(ctx->Exec, (target, level, xoffset, yoffset,
+                                       width, height, format, imageSize, data));
    }
 }
 
@@ -4212,8 +4214,8 @@ save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
       FREE(image);
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->CompressedTexSubImage3DARB)(target, level, xoffset, yoffset,
-                       zoffset, width, height, depth, format, imageSize, data);
+      CALL_CompressedTexSubImage3DARB(ctx->Exec, (target, level, xoffset, yoffset,
+                       zoffset, width, height, depth, format, imageSize, data));
    }
 }
 
@@ -4231,7 +4233,7 @@ save_SampleCoverageARB(GLclampf value, GLboolean invert)
       n[2].b = invert;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->SampleCoverageARB)( value, invert );
+      CALL_SampleCoverageARB(ctx->Exec, ( value, invert ));
    }
 }
 
@@ -4250,7 +4252,7 @@ save_PixelTexGenParameteriSGIS(GLenum target, GLint value)
       n[2].i = value;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->PixelTexGenParameteriSGIS)( target, value );
+      CALL_PixelTexGenParameteriSGIS(ctx->Exec, ( target, value ));
    }
 }
 
@@ -4292,7 +4294,7 @@ save_BindProgramNV(GLenum target, GLuint id)
       n[2].ui = id;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BindProgramNV)( target, id );
+      CALL_BindProgramNV(ctx->Exec, ( target, id ));
    }
 }
 #endif /* FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program */
@@ -4314,7 +4316,7 @@ save_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
       n[6].f = params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ExecuteProgramNV)(target, id, params);
+      CALL_ExecuteProgramNV(ctx->Exec, (target, id, params));
    }
 }
 
@@ -4337,7 +4339,7 @@ save_ProgramParameter4fNV(GLenum target, GLuint index,
       n[6].f = w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramParameter4fNV)(target, index, x, y, z, w);
+      CALL_ProgramParameter4fNV(ctx->Exec, (target, index, x, y, z, w));
    }
 }
 
@@ -4416,7 +4418,7 @@ save_LoadProgramNV(GLenum target, GLuint id, GLsizei len,
       n[4].data = programCopy;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->LoadProgramNV)(target, id, len, program);
+      CALL_LoadProgramNV(ctx->Exec, (target, id, len, program));
    }
 }
 
@@ -4439,7 +4441,7 @@ save_RequestResidentProgramsNV(GLsizei num, const GLuint *ids)
       n[2].data = idCopy;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->RequestResidentProgramsNV)(num, ids);
+      CALL_RequestResidentProgramsNV(ctx->Exec, (num, ids));
    }
 }
 
@@ -4459,7 +4461,7 @@ save_TrackMatrixNV(GLenum target, GLuint address,
       n[4].e = transform;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->TrackMatrixNV)(target, address, matrix, transform);
+      CALL_TrackMatrixNV(ctx->Exec, (target, address, matrix, transform));
    }
 }
 #endif /* FEATURE_NV_vertex_program */
@@ -4486,7 +4488,7 @@ save_ProgramLocalParameter4fARB(GLenum target, GLuint index,
       n[6].f = w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramLocalParameter4fARB)(target, index, x, y, z, w);
+      CALL_ProgramLocalParameter4fARB(ctx->Exec, (target, index, x, y, z, w));
    }
 }
 
@@ -4508,7 +4510,7 @@ save_ProgramLocalParameter4fvARB(GLenum target, GLuint index,
       n[6].f = params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramLocalParameter4fvARB)(target, index, params);
+      CALL_ProgramLocalParameter4fvARB(ctx->Exec, (target, index, params));
    }
 }
 
@@ -4531,7 +4533,7 @@ save_ProgramLocalParameter4dARB(GLenum target, GLuint index,
       n[6].f = (GLfloat) w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramLocalParameter4dARB)(target, index, x, y, z, w);
+      CALL_ProgramLocalParameter4dARB(ctx->Exec, (target, index, x, y, z, w));
    }
 }
 
@@ -4553,7 +4555,7 @@ save_ProgramLocalParameter4dvARB(GLenum target, GLuint index,
       n[6].f = (GLfloat) params[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramLocalParameter4dvARB)(target, index, params);
+      CALL_ProgramLocalParameter4dvARB(ctx->Exec, (target, index, params));
    }
 }
 
@@ -4582,7 +4584,7 @@ save_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name,
       n[7].f = w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramNamedParameter4fNV)(id, len, name, x, y, z, w);
+      CALL_ProgramNamedParameter4fNV(ctx->Exec, (id, len, name, x, y, z, w));
    }
 }
 
@@ -4628,7 +4630,7 @@ static void GLAPIENTRY save_ActiveStencilFaceEXT( GLenum face )
       n[1].e = face;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ActiveStencilFaceEXT)( face );
+      CALL_ActiveStencilFaceEXT(ctx->Exec, ( face ));
    }
 }
 
@@ -4645,7 +4647,7 @@ static void GLAPIENTRY save_DepthBoundsEXT( GLclampd zmin, GLclampd zmax )
       n[2].f = (GLfloat) zmax;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DepthBoundsEXT)( zmin, zmax );
+      CALL_DepthBoundsEXT(ctx->Exec, ( zmin, zmax ));
    }
 }
 
@@ -4677,7 +4679,7 @@ save_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
       n[4].data = programCopy;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramStringARB)(target, format, len, string);
+      CALL_ProgramStringARB(ctx->Exec, (target, format, len, string));
    }
 }
 
@@ -4699,7 +4701,7 @@ save_ProgramEnvParameter4fARB(GLenum target, GLuint index,
       n[6].f = w;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->ProgramEnvParameter4fARB)( target, index, x, y, z, w);
+      CALL_ProgramEnvParameter4fARB(ctx->Exec, ( target, index, x, y, z, w));
    }
 }
 
@@ -4753,7 +4755,7 @@ save_BeginQueryARB(GLenum target, GLuint id)
       n[2].ui = id;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BeginQueryARB)( target, id );
+      CALL_BeginQueryARB(ctx->Exec, ( target, id ));
    }
 }
 
@@ -4769,7 +4771,7 @@ save_EndQueryARB(GLenum target)
       n[1].e = target;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EndQueryARB)( target );
+      CALL_EndQueryARB(ctx->Exec, ( target ));
    }
 }
 
@@ -4793,7 +4795,7 @@ save_DrawBuffersARB(GLsizei count, const GLenum *buffers)
       }
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->DrawBuffersARB)(count, buffers);
+      CALL_DrawBuffersARB(ctx->Exec, (count, buffers));
    }
 }
 
@@ -4809,7 +4811,7 @@ save_BindFragmentShaderATI(GLuint id)
      n[1].ui = id;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->BindFragmentShaderATI)(id);
+      CALL_BindFragmentShaderATI(ctx->Exec, (id));
    }
 }
 
@@ -4828,7 +4830,7 @@ save_SetFragmentShaderConstantATI(GLuint dst, const GLfloat *value)
      n[5].f = value[3];
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->SetFragmentShaderConstantATI)(dst, value);
+      CALL_SetFragmentShaderConstantATI(ctx->Exec, (dst, value));
    }
 }
 #endif
@@ -4849,7 +4851,7 @@ static void save_Attr1fNV( GLenum attr, GLfloat x )
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, 0, 0, 1);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib1fNV)( attr, x );
+      CALL_VertexAttrib1fNV(ctx->Exec, ( attr, x ));
    }
 }
 
@@ -4870,7 +4872,7 @@ static void save_Attr2fNV( GLenum attr, GLfloat x, GLfloat y )
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, 0, 1);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib2fNV)( attr, x, y );
+      CALL_VertexAttrib2fNV(ctx->Exec, ( attr, x, y ));
    }
 }
 
@@ -4892,7 +4894,7 @@ static void save_Attr3fNV( GLenum attr, GLfloat x, GLfloat y, GLfloat z )
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, 1);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib3fNV)( attr, x, y, z );
+      CALL_VertexAttrib3fNV(ctx->Exec, ( attr, x, y, z ));
    }
 }
 
@@ -4916,7 +4918,7 @@ static void save_Attr4fNV( GLenum attr, GLfloat x, GLfloat y, GLfloat z,
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, w);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib4fNV)( attr, x, y, z, w );
+      CALL_VertexAttrib4fNV(ctx->Exec, ( attr, x, y, z, w ));
    }
 }
 
@@ -4937,7 +4939,7 @@ static void save_Attr1fARB( GLenum attr, GLfloat x )
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, 0, 0, 1);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib1fARB)( attr, x );
+      CALL_VertexAttrib1fARB(ctx->Exec, ( attr, x ));
    }
 }
 
@@ -4958,7 +4960,7 @@ static void save_Attr2fARB( GLenum attr, GLfloat x, GLfloat y )
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, 0, 1);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib2fARB)( attr, x, y );
+      CALL_VertexAttrib2fARB(ctx->Exec, ( attr, x, y ));
    }
 }
 
@@ -4980,7 +4982,7 @@ static void save_Attr3fARB( GLenum attr, GLfloat x, GLfloat y, GLfloat z )
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, 1);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib3fARB)( attr, x, y, z );
+      CALL_VertexAttrib3fARB(ctx->Exec, ( attr, x, y, z ));
    }
 }
 
@@ -5004,7 +5006,7 @@ static void save_Attr4fARB( GLenum attr, GLfloat x, GLfloat y, GLfloat z,
    ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, w);
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->VertexAttrib4fARB)( attr, x, y, z, w );
+      CALL_VertexAttrib4fARB(ctx->Exec, ( attr, x, y, z, w ));
    }
 }
 
@@ -5019,7 +5021,7 @@ static void GLAPIENTRY save_EvalCoord1f( GLfloat x )
       n[1].f = x;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EvalCoord1f)( x );
+      CALL_EvalCoord1f(ctx->Exec, ( x ));
    }
 }
 
@@ -5039,7 +5041,7 @@ static void GLAPIENTRY save_EvalCoord2f( GLfloat x, GLfloat y )
       n[2].f = y;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EvalCoord2f)( x, y );
+      CALL_EvalCoord2f(ctx->Exec, ( x, y ));
    }
 }
 
@@ -5059,7 +5061,7 @@ static void GLAPIENTRY save_EvalPoint1( GLint x )
       n[1].i = x;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EvalPoint1)( x );
+      CALL_EvalPoint1(ctx->Exec, ( x ));
    }
 }
 
@@ -5074,7 +5076,7 @@ static void GLAPIENTRY save_EvalPoint2( GLint x, GLint y )
       n[2].i = y;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EvalPoint2)( x, y );
+      CALL_EvalPoint2(ctx->Exec, ( x, y ));
    }
 }
 
@@ -5092,7 +5094,7 @@ static void GLAPIENTRY save_Indexf( GLfloat x )
    ctx->ListState.CurrentIndex = x;
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Indexi)( (GLint) x );
+      CALL_Indexi(ctx->Exec, ( (GLint) x ));
    }
 }
 
@@ -5115,7 +5117,7 @@ static void GLAPIENTRY save_EdgeFlag( GLboolean x )
    ctx->ListState.CurrentEdgeFlag = x;
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->EdgeFlag)( x );
+      CALL_EdgeFlag(ctx->Exec, ( x ));
    }
 }
 
@@ -5179,7 +5181,7 @@ static void GLAPIENTRY save_Materialfv( GLenum face, GLenum pname, const GLfloat
    }
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Materialfv)( face, pname, param );
+      CALL_Materialfv(ctx->Exec, ( face, pname, param ));
    }
 }
 
@@ -5223,7 +5225,7 @@ static void GLAPIENTRY save_Begin( GLenum mode )
    }
 
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Begin)( mode );
+      CALL_Begin(ctx->Exec, ( mode ));
    }
 }
 
@@ -5234,7 +5236,7 @@ static void GLAPIENTRY save_End( void )
    (void) ALLOC_INSTRUCTION( ctx, OPCODE_END, 0 );
    ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END;
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->End)( );
+      CALL_End(ctx->Exec, ( ));
    }
 }
 
@@ -5251,7 +5253,7 @@ static void GLAPIENTRY save_Rectf( GLfloat a, GLfloat b, GLfloat c, GLfloat d )
       n[4].f = d;
    }
    if (ctx->ExecuteFlag) {
-      (*ctx->Exec->Rectf)( a, b, c, d );
+      CALL_Rectf(ctx->Exec, ( a, b, c, d ));
    }
 }
 
@@ -5685,34 +5687,34 @@ execute_list( GLcontext *ctx, GLuint list )
            _mesa_error( ctx, n[1].e, (const char *) n[2].data );
            break;
          case OPCODE_ACCUM:
-           (*ctx->Exec->Accum)( n[1].e, n[2].f );
+           CALL_Accum(ctx->Exec, ( n[1].e, n[2].f ));
            break;
          case OPCODE_ALPHA_FUNC:
-           (*ctx->Exec->AlphaFunc)( n[1].e, n[2].f );
+           CALL_AlphaFunc(ctx->Exec, ( n[1].e, n[2].f ));
            break;
          case OPCODE_BIND_TEXTURE:
-            (*ctx->Exec->BindTexture)( n[1].e, n[2].ui );
+            CALL_BindTexture(ctx->Exec, ( n[1].e, n[2].ui ));
             break;
         case OPCODE_BITMAP:
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->Bitmap)( (GLsizei) n[1].i, (GLsizei) n[2].i,
-                 n[3].f, n[4].f, n[5].f, n[6].f, (const GLubyte *) n[7].data );
+               CALL_Bitmap(ctx->Exec, ( (GLsizei) n[1].i, (GLsizei) n[2].i,
+                 n[3].f, n[4].f, n[5].f, n[6].f, (const GLubyte *) n[7].data ));
                ctx->Unpack = save;  /* restore */
             }
            break;
         case OPCODE_BLEND_COLOR:
-           (*ctx->Exec->BlendColor)( n[1].f, n[2].f, n[3].f, n[4].f );
+           CALL_BlendColor(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f ));
            break;
         case OPCODE_BLEND_EQUATION:
-           (*ctx->Exec->BlendEquation)( n[1].e );
+           CALL_BlendEquation(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_BLEND_EQUATION_SEPARATE:
-           (*ctx->Exec->BlendEquationSeparateEXT)( n[1].e, n[2].e );
+           CALL_BlendEquationSeparateEXT(ctx->Exec, ( n[1].e, n[2].e ));
            break;
         case OPCODE_BLEND_FUNC_SEPARATE:
-           (*ctx->Exec->BlendFuncSeparateEXT)(n[1].e, n[2].e, n[3].e, n[4].e);
+           CALL_BlendFuncSeparateEXT(ctx->Exec, (n[1].e, n[2].e, n[3].e, n[4].e));
            break;
          case OPCODE_CALL_LIST:
            /* Generated by glCallList(), don't add ListBase */
@@ -5731,22 +5733,22 @@ execute_list( GLcontext *ctx, GLuint list )
             }
             break;
         case OPCODE_CLEAR:
-           (*ctx->Exec->Clear)( n[1].bf );
+           CALL_Clear(ctx->Exec, ( n[1].bf ));
            break;
         case OPCODE_CLEAR_COLOR:
-           (*ctx->Exec->ClearColor)( n[1].f, n[2].f, n[3].f, n[4].f );
+           CALL_ClearColor(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f ));
            break;
         case OPCODE_CLEAR_ACCUM:
-           (*ctx->Exec->ClearAccum)( n[1].f, n[2].f, n[3].f, n[4].f );
+           CALL_ClearAccum(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f ));
            break;
         case OPCODE_CLEAR_DEPTH:
-           (*ctx->Exec->ClearDepth)( (GLclampd) n[1].f );
+           CALL_ClearDepth(ctx->Exec, ( (GLclampd) n[1].f ));
            break;
         case OPCODE_CLEAR_INDEX:
-           (*ctx->Exec->ClearIndex)( (GLfloat) n[1].ui );
+           CALL_ClearIndex(ctx->Exec, ( (GLfloat) n[1].ui ));
            break;
         case OPCODE_CLEAR_STENCIL:
-           (*ctx->Exec->ClearStencil)( n[1].i );
+           CALL_ClearStencil(ctx->Exec, ( n[1].i ));
            break;
          case OPCODE_CLIP_PLANE:
             {
@@ -5755,21 +5757,21 @@ execute_list( GLcontext *ctx, GLuint list )
                eq[1] = n[3].f;
                eq[2] = n[4].f;
                eq[3] = n[5].f;
-               (*ctx->Exec->ClipPlane)( n[1].e, eq );
+               CALL_ClipPlane(ctx->Exec, ( n[1].e, eq ));
             }
             break;
         case OPCODE_COLOR_MASK:
-           (*ctx->Exec->ColorMask)( n[1].b, n[2].b, n[3].b, n[4].b );
+           CALL_ColorMask(ctx->Exec, ( n[1].b, n[2].b, n[3].b, n[4].b ));
            break;
         case OPCODE_COLOR_MATERIAL:
-           (*ctx->Exec->ColorMaterial)( n[1].e, n[2].e );
+           CALL_ColorMaterial(ctx->Exec, ( n[1].e, n[2].e ));
            break;
          case OPCODE_COLOR_TABLE:
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->ColorTable)( n[1].e, n[2].e, n[3].i, n[4].e,
-                                         n[5].e, n[6].data );
+               CALL_ColorTable(ctx->Exec, ( n[1].e, n[2].e, n[3].i, n[4].e,
+                                         n[5].e, n[6].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
@@ -5780,7 +5782,7 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].f;
                params[2] = n[5].f;
                params[3] = n[6].f;
-               (*ctx->Exec->ColorTableParameterfv)( n[1].e, n[2].e, params );
+               CALL_ColorTableParameterfv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
          case OPCODE_COLOR_TABLE_PARAMETER_IV:
@@ -5790,15 +5792,15 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].i;
                params[2] = n[5].i;
                params[3] = n[6].i;
-               (*ctx->Exec->ColorTableParameteriv)( n[1].e, n[2].e, params );
+               CALL_ColorTableParameteriv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
          case OPCODE_COLOR_SUB_TABLE:
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->ColorSubTable)( n[1].e, n[2].i, n[3].i,
-                                            n[4].e, n[5].e, n[6].data );
+               CALL_ColorSubTable(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
+                                            n[4].e, n[5].e, n[6].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
@@ -5806,8 +5808,8 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->ConvolutionFilter1D)( n[1].e, n[2].i, n[3].i,
-                                                  n[4].e, n[5].e, n[6].data );
+               CALL_ConvolutionFilter1D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
+                                                  n[4].e, n[5].e, n[6].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
@@ -5815,13 +5817,13 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->ConvolutionFilter2D)( n[1].e, n[2].i, n[3].i,
-                                       n[4].i, n[5].e, n[6].e, n[7].data );
+               CALL_ConvolutionFilter2D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
+                                       n[4].i, n[5].e, n[6].e, n[7].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
          case OPCODE_CONVOLUTION_PARAMETER_I:
-            (*ctx->Exec->ConvolutionParameteri)( n[1].e, n[2].e, n[3].i );
+            CALL_ConvolutionParameteri(ctx->Exec, ( n[1].e, n[2].e, n[3].i ));
             break;
          case OPCODE_CONVOLUTION_PARAMETER_IV:
             {
@@ -5830,11 +5832,11 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].i;
                params[2] = n[5].i;
                params[3] = n[6].i;
-               (*ctx->Exec->ConvolutionParameteriv)( n[1].e, n[2].e, params );
+               CALL_ConvolutionParameteriv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
          case OPCODE_CONVOLUTION_PARAMETER_F:
-            (*ctx->Exec->ConvolutionParameterf)( n[1].e, n[2].e, n[3].f );
+            CALL_ConvolutionParameterf(ctx->Exec, ( n[1].e, n[2].e, n[3].f ));
             break;
          case OPCODE_CONVOLUTION_PARAMETER_FV:
             {
@@ -5843,76 +5845,76 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].f;
                params[2] = n[5].f;
                params[3] = n[6].f;
-               (*ctx->Exec->ConvolutionParameterfv)( n[1].e, n[2].e, params );
+               CALL_ConvolutionParameterfv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
          case OPCODE_COPY_COLOR_SUB_TABLE:
-            (*ctx->Exec->CopyColorSubTable)( n[1].e, n[2].i,
-                                             n[3].i, n[4].i, n[5].i );
+            CALL_CopyColorSubTable(ctx->Exec, ( n[1].e, n[2].i,
+                                             n[3].i, n[4].i, n[5].i ));
             break;
          case OPCODE_COPY_COLOR_TABLE:
-            (*ctx->Exec->CopyColorSubTable)( n[1].e, n[2].i,
-                                             n[3].i, n[4].i, n[5].i );
+            CALL_CopyColorSubTable(ctx->Exec, ( n[1].e, n[2].i,
+                                             n[3].i, n[4].i, n[5].i ));
             break;
         case OPCODE_COPY_PIXELS:
-           (*ctx->Exec->CopyPixels)( n[1].i, n[2].i,
-                          (GLsizei) n[3].i, (GLsizei) n[4].i, n[5].e );
+           CALL_CopyPixels(ctx->Exec, ( n[1].i, n[2].i,
+                          (GLsizei) n[3].i, (GLsizei) n[4].i, n[5].e ));
            break;
          case OPCODE_COPY_TEX_IMAGE1D:
-           (*ctx->Exec->CopyTexImage1D)( n[1].e, n[2].i, n[3].e, n[4].i,
-                                         n[5].i, n[6].i, n[7].i );
+           CALL_CopyTexImage1D(ctx->Exec, ( n[1].e, n[2].i, n[3].e, n[4].i,
+                                         n[5].i, n[6].i, n[7].i ));
             break;
          case OPCODE_COPY_TEX_IMAGE2D:
-           (*ctx->Exec->CopyTexImage2D)( n[1].e, n[2].i, n[3].e, n[4].i,
-                                         n[5].i, n[6].i, n[7].i, n[8].i );
+           CALL_CopyTexImage2D(ctx->Exec, ( n[1].e, n[2].i, n[3].e, n[4].i,
+                                         n[5].i, n[6].i, n[7].i, n[8].i ));
             break;
          case OPCODE_COPY_TEX_SUB_IMAGE1D:
-           (*ctx->Exec->CopyTexSubImage1D)( n[1].e, n[2].i, n[3].i,
-                                            n[4].i, n[5].i, n[6].i );
+           CALL_CopyTexSubImage1D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
+                                            n[4].i, n[5].i, n[6].i ));
             break;
          case OPCODE_COPY_TEX_SUB_IMAGE2D:
-           (*ctx->Exec->CopyTexSubImage2D)( n[1].e, n[2].i, n[3].i,
-                                     n[4].i, n[5].i, n[6].i, n[7].i, n[8].i );
+           CALL_CopyTexSubImage2D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
+                                     n[4].i, n[5].i, n[6].i, n[7].i, n[8].i ));
             break;
          case OPCODE_COPY_TEX_SUB_IMAGE3D:
-            (*ctx->Exec->CopyTexSubImage3D)( n[1].e, n[2].i, n[3].i,
-                            n[4].i, n[5].i, n[6].i, n[7].i, n[8].i , n[9].i);
+            CALL_CopyTexSubImage3D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
+                            n[4].i, n[5].i, n[6].i, n[7].i, n[8].i , n[9].i));
             break;
         case OPCODE_CULL_FACE:
-           (*ctx->Exec->CullFace)( n[1].e );
+           CALL_CullFace(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_DEPTH_FUNC:
-           (*ctx->Exec->DepthFunc)( n[1].e );
+           CALL_DepthFunc(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_DEPTH_MASK:
-           (*ctx->Exec->DepthMask)( n[1].b );
+           CALL_DepthMask(ctx->Exec, ( n[1].b ));
            break;
         case OPCODE_DEPTH_RANGE:
-           (*ctx->Exec->DepthRange)( (GLclampd) n[1].f, (GLclampd) n[2].f );
+           CALL_DepthRange(ctx->Exec, ( (GLclampd) n[1].f, (GLclampd) n[2].f ));
            break;
         case OPCODE_DISABLE:
-           (*ctx->Exec->Disable)( n[1].e );
+           CALL_Disable(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_DRAW_BUFFER:
-           (*ctx->Exec->DrawBuffer)( n[1].e );
+           CALL_DrawBuffer(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_DRAW_PIXELS:
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->DrawPixels)( n[1].i, n[2].i, n[3].e, n[4].e,
-                                        n[5].data );
+               CALL_DrawPixels(ctx->Exec, ( n[1].i, n[2].i, n[3].e, n[4].e,
+                                        n[5].data ));
                ctx->Unpack = save;  /* restore */
             }
            break;
         case OPCODE_ENABLE:
-           (*ctx->Exec->Enable)( n[1].e );
+           CALL_Enable(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_EVALMESH1:
-           (*ctx->Exec->EvalMesh1)( n[1].e, n[2].i, n[3].i );
+           CALL_EvalMesh1(ctx->Exec, ( n[1].e, n[2].i, n[3].i ));
            break;
         case OPCODE_EVALMESH2:
-           (*ctx->Exec->EvalMesh2)( n[1].e, n[2].i, n[3].i, n[4].i, n[5].i );
+           CALL_EvalMesh2(ctx->Exec, ( n[1].e, n[2].i, n[3].i, n[4].i, n[5].i ));
            break;
         case OPCODE_FOG:
            {
@@ -5921,26 +5923,26 @@ execute_list( GLcontext *ctx, GLuint list )
               p[1] = n[3].f;
               p[2] = n[4].f;
               p[3] = n[5].f;
-              (*ctx->Exec->Fogfv)( n[1].e, p );
+              CALL_Fogfv(ctx->Exec, ( n[1].e, p ));
            }
            break;
         case OPCODE_FRONT_FACE:
-           (*ctx->Exec->FrontFace)( n[1].e );
+           CALL_FrontFace(ctx->Exec, ( n[1].e ));
            break;
          case OPCODE_FRUSTUM:
-            (*ctx->Exec->Frustum)( n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f );
+            CALL_Frustum(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f ));
             break;
         case OPCODE_HINT:
-           (*ctx->Exec->Hint)( n[1].e, n[2].e );
+           CALL_Hint(ctx->Exec, ( n[1].e, n[2].e ));
            break;
         case OPCODE_HISTOGRAM:
-           (*ctx->Exec->Histogram)( n[1].e, n[2].i, n[3].e, n[4].b );
+           CALL_Histogram(ctx->Exec, ( n[1].e, n[2].i, n[3].e, n[4].b ));
            break;
         case OPCODE_INDEX_MASK:
-           (*ctx->Exec->IndexMask)( n[1].ui );
+           CALL_IndexMask(ctx->Exec, ( n[1].ui ));
            break;
         case OPCODE_INIT_NAMES:
-           (*ctx->Exec->InitNames)();
+           CALL_InitNames(ctx->Exec, ());
            break;
          case OPCODE_LIGHT:
            {
@@ -5949,7 +5951,7 @@ execute_list( GLcontext *ctx, GLuint list )
               p[1] = n[4].f;
               p[2] = n[5].f;
               p[3] = n[6].f;
-              (*ctx->Exec->Lightfv)( n[1].e, n[2].e, p );
+              CALL_Lightfv(ctx->Exec, ( n[1].e, n[2].e, p ));
            }
            break;
          case OPCODE_LIGHT_MODEL:
@@ -5959,24 +5961,24 @@ execute_list( GLcontext *ctx, GLuint list )
               p[1] = n[3].f;
               p[2] = n[4].f;
               p[3] = n[5].f;
-              (*ctx->Exec->LightModelfv)( n[1].e, p );
+              CALL_LightModelfv(ctx->Exec, ( n[1].e, p ));
            }
            break;
         case OPCODE_LINE_STIPPLE:
-           (*ctx->Exec->LineStipple)( n[1].i, n[2].us );
+           CALL_LineStipple(ctx->Exec, ( n[1].i, n[2].us ));
            break;
         case OPCODE_LINE_WIDTH:
-           (*ctx->Exec->LineWidth)( n[1].f );
+           CALL_LineWidth(ctx->Exec, ( n[1].f ));
            break;
         case OPCODE_LIST_BASE:
-           (*ctx->Exec->ListBase)( n[1].ui );
+           CALL_ListBase(ctx->Exec, ( n[1].ui ));
            break;
         case OPCODE_LOAD_IDENTITY:
-            (*ctx->Exec->LoadIdentity)();
+            CALL_LoadIdentity(ctx->Exec, ());
             break;
         case OPCODE_LOAD_MATRIX:
            if (sizeof(Node)==sizeof(GLfloat)) {
-              (*ctx->Exec->LoadMatrixf)( &n[1].f );
+              CALL_LoadMatrixf(ctx->Exec, ( &n[1].f ));
            }
            else {
               GLfloat m[16];
@@ -5984,14 +5986,14 @@ execute_list( GLcontext *ctx, GLuint list )
               for (i=0;i<16;i++) {
                  m[i] = n[1+i].f;
               }
-              (*ctx->Exec->LoadMatrixf)( m );
+              CALL_LoadMatrixf(ctx->Exec, ( m ));
            }
            break;
         case OPCODE_LOAD_NAME:
-           (*ctx->Exec->LoadName)( n[1].ui );
+           CALL_LoadName(ctx->Exec, ( n[1].ui ));
            break;
         case OPCODE_LOGIC_OP:
-           (*ctx->Exec->LogicOp)( n[1].e );
+           CALL_LogicOp(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_MAP1:
             {
@@ -6000,8 +6002,8 @@ execute_list( GLcontext *ctx, GLuint list )
                GLint uorder = n[5].i;
                GLfloat u1 = n[2].f;
                GLfloat u2 = n[3].f;
-               (*ctx->Exec->Map1f)( target, u1, u2, ustride, uorder,
-                                   (GLfloat *) n[6].data );
+               CALL_Map1f(ctx->Exec, ( target, u1, u2, ustride, uorder,
+                                   (GLfloat *) n[6].data ));
             }
            break;
         case OPCODE_MAP2:
@@ -6015,26 +6017,26 @@ execute_list( GLcontext *ctx, GLuint list )
                GLint vstride = n[7].i;
                GLint uorder = n[8].i;
                GLint vorder = n[9].i;
-               (*ctx->Exec->Map2f)( target, u1, u2, ustride, uorder,
+               CALL_Map2f(ctx->Exec, ( target, u1, u2, ustride, uorder,
                                    v1, v2, vstride, vorder,
-                                   (GLfloat *) n[10].data );
+                                   (GLfloat *) n[10].data ));
             }
            break;
         case OPCODE_MAPGRID1:
-           (*ctx->Exec->MapGrid1f)( n[1].i, n[2].f, n[3].f );
+           CALL_MapGrid1f(ctx->Exec, ( n[1].i, n[2].f, n[3].f ));
            break;
         case OPCODE_MAPGRID2:
-           (*ctx->Exec->MapGrid2f)( n[1].i, n[2].f, n[3].f, n[4].i, n[5].f, n[6].f);
+           CALL_MapGrid2f(ctx->Exec, ( n[1].i, n[2].f, n[3].f, n[4].i, n[5].f, n[6].f));
            break;
          case OPCODE_MATRIX_MODE:
-            (*ctx->Exec->MatrixMode)( n[1].e );
+            CALL_MatrixMode(ctx->Exec, ( n[1].e ));
             break;
          case OPCODE_MIN_MAX:
-            (*ctx->Exec->Minmax)(n[1].e, n[2].e, n[3].b);
+            CALL_Minmax(ctx->Exec, (n[1].e, n[2].e, n[3].b));
             break;
         case OPCODE_MULT_MATRIX:
            if (sizeof(Node)==sizeof(GLfloat)) {
-              (*ctx->Exec->MultMatrixf)( &n[1].f );
+              CALL_MultMatrixf(ctx->Exec, ( &n[1].f ));
            }
            else {
               GLfloat m[16];
@@ -6042,26 +6044,26 @@ execute_list( GLcontext *ctx, GLuint list )
               for (i=0;i<16;i++) {
                  m[i] = n[1+i].f;
               }
-              (*ctx->Exec->MultMatrixf)( m );
+              CALL_MultMatrixf(ctx->Exec, ( m ));
            }
            break;
          case OPCODE_ORTHO:
-            (*ctx->Exec->Ortho)( n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f );
+            CALL_Ortho(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f ));
             break;
         case OPCODE_PASSTHROUGH:
-           (*ctx->Exec->PassThrough)( n[1].f );
+           CALL_PassThrough(ctx->Exec, ( n[1].f ));
            break;
         case OPCODE_PIXEL_MAP:
-           (*ctx->Exec->PixelMapfv)( n[1].e, n[2].i, (GLfloat *) n[3].data );
+           CALL_PixelMapfv(ctx->Exec, ( n[1].e, n[2].i, (GLfloat *) n[3].data ));
            break;
         case OPCODE_PIXEL_TRANSFER:
-           (*ctx->Exec->PixelTransferf)( n[1].e, n[2].f );
+           CALL_PixelTransferf(ctx->Exec, ( n[1].e, n[2].f ));
            break;
         case OPCODE_PIXEL_ZOOM:
-           (*ctx->Exec->PixelZoom)( n[1].f, n[2].f );
+           CALL_PixelZoom(ctx->Exec, ( n[1].f, n[2].f ));
            break;
         case OPCODE_POINT_SIZE:
-           (*ctx->Exec->PointSize)( n[1].f );
+           CALL_PointSize(ctx->Exec, ( n[1].f ));
            break;
         case OPCODE_POINT_PARAMETERS:
            {
@@ -6069,80 +6071,80 @@ execute_list( GLcontext *ctx, GLuint list )
                params[0] = n[2].f;
                params[1] = n[3].f;
                params[2] = n[4].f;
-               (*ctx->Exec->PointParameterfvEXT)( n[1].e, params );
+               CALL_PointParameterfvEXT(ctx->Exec, ( n[1].e, params ));
            }
            break;
         case OPCODE_POLYGON_MODE:
-           (*ctx->Exec->PolygonMode)( n[1].e, n[2].e );
+           CALL_PolygonMode(ctx->Exec, ( n[1].e, n[2].e ));
            break;
         case OPCODE_POLYGON_STIPPLE:
-           (*ctx->Exec->PolygonStipple)( (GLubyte *) n[1].data );
+           CALL_PolygonStipple(ctx->Exec, ( (GLubyte *) n[1].data ));
            break;
         case OPCODE_POLYGON_OFFSET:
-           (*ctx->Exec->PolygonOffset)( n[1].f, n[2].f );
+           CALL_PolygonOffset(ctx->Exec, ( n[1].f, n[2].f ));
            break;
         case OPCODE_POP_ATTRIB:
-           (*ctx->Exec->PopAttrib)();
+           CALL_PopAttrib(ctx->Exec, ());
            break;
         case OPCODE_POP_MATRIX:
-           (*ctx->Exec->PopMatrix)();
+           CALL_PopMatrix(ctx->Exec, ());
            break;
         case OPCODE_POP_NAME:
-           (*ctx->Exec->PopName)();
+           CALL_PopName(ctx->Exec, ());
            break;
         case OPCODE_PRIORITIZE_TEXTURE:
-            (*ctx->Exec->PrioritizeTextures)( 1, &n[1].ui, &n[2].f );
+            CALL_PrioritizeTextures(ctx->Exec, ( 1, &n[1].ui, &n[2].f ));
            break;
         case OPCODE_PUSH_ATTRIB:
-           (*ctx->Exec->PushAttrib)( n[1].bf );
+           CALL_PushAttrib(ctx->Exec, ( n[1].bf ));
            break;
         case OPCODE_PUSH_MATRIX:
-           (*ctx->Exec->PushMatrix)();
+           CALL_PushMatrix(ctx->Exec, ());
            break;
         case OPCODE_PUSH_NAME:
-           (*ctx->Exec->PushName)( n[1].ui );
+           CALL_PushName(ctx->Exec, ( n[1].ui ));
            break;
         case OPCODE_RASTER_POS:
-            (*ctx->Exec->RasterPos4f)( n[1].f, n[2].f, n[3].f, n[4].f );
+            CALL_RasterPos4f(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f ));
            break;
         case OPCODE_READ_BUFFER:
-           (*ctx->Exec->ReadBuffer)( n[1].e );
+           CALL_ReadBuffer(ctx->Exec, ( n[1].e ));
            break;
          case OPCODE_RESET_HISTOGRAM:
-            (*ctx->Exec->ResetHistogram)( n[1].e );
+            CALL_ResetHistogram(ctx->Exec, ( n[1].e ));
             break;
          case OPCODE_RESET_MIN_MAX:
-            (*ctx->Exec->ResetMinmax)( n[1].e );
+            CALL_ResetMinmax(ctx->Exec, ( n[1].e ));
             break;
          case OPCODE_ROTATE:
-            (*ctx->Exec->Rotatef)( n[1].f, n[2].f, n[3].f, n[4].f );
+            CALL_Rotatef(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f ));
             break;
          case OPCODE_SCALE:
-            (*ctx->Exec->Scalef)( n[1].f, n[2].f, n[3].f );
+            CALL_Scalef(ctx->Exec, ( n[1].f, n[2].f, n[3].f ));
             break;
         case OPCODE_SCISSOR:
-           (*ctx->Exec->Scissor)( n[1].i, n[2].i, n[3].i, n[4].i );
+           CALL_Scissor(ctx->Exec, ( n[1].i, n[2].i, n[3].i, n[4].i ));
            break;
         case OPCODE_SHADE_MODEL:
-           (*ctx->Exec->ShadeModel)( n[1].e );
+           CALL_ShadeModel(ctx->Exec, ( n[1].e ));
            break;
         case OPCODE_STENCIL_FUNC:
-           (*ctx->Exec->StencilFunc)( n[1].e, n[2].i, n[3].ui );
+           CALL_StencilFunc(ctx->Exec, ( n[1].e, n[2].i, n[3].ui ));
            break;
         case OPCODE_STENCIL_MASK:
-           (*ctx->Exec->StencilMask)( n[1].ui );
+           CALL_StencilMask(ctx->Exec, ( n[1].ui ));
            break;
         case OPCODE_STENCIL_OP:
-           (*ctx->Exec->StencilOp)( n[1].e, n[2].e, n[3].e );
+           CALL_StencilOp(ctx->Exec, ( n[1].e, n[2].e, n[3].e ));
            break;
         case OPCODE_STENCIL_FUNC_SEPARATE:
-           ctx->Exec->StencilFuncSeparate( n[1].e, n[2].e, n[3].i, n[4].ui );
+           CALL_StencilFuncSeparate(ctx->Exec, ( n[1].e, n[2].e, n[3].i, n[4].ui ));
            break;
         case OPCODE_STENCIL_MASK_SEPARATE:
-           ctx->Exec->StencilMaskSeparate( n[1].e, n[2].ui );
+           CALL_StencilMaskSeparate(ctx->Exec, ( n[1].e, n[2].ui ));
            break;
         case OPCODE_STENCIL_OP_SEPARATE:
-           ctx->Exec->StencilOpSeparate( n[1].e, n[2].e, n[3].e, n[4].e );
+           CALL_StencilOpSeparate(ctx->Exec, ( n[1].e, n[2].e, n[3].e, n[4].e ));
            break;
          case OPCODE_TEXENV:
             {
@@ -6151,7 +6153,7 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].f;
                params[2] = n[5].f;
                params[3] = n[6].f;
-               (*ctx->Exec->TexEnvfv)( n[1].e, n[2].e, params );
+               CALL_TexEnvfv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
          case OPCODE_TEXGEN:
@@ -6161,7 +6163,7 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].f;
                params[2] = n[5].f;
                params[3] = n[6].f;
-               (*ctx->Exec->TexGenfv)( n[1].e, n[2].e, params );
+               CALL_TexGenfv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
          case OPCODE_TEXPARAMETER:
@@ -6171,14 +6173,14 @@ execute_list( GLcontext *ctx, GLuint list )
                params[1] = n[4].f;
                params[2] = n[5].f;
                params[3] = n[6].f;
-               (*ctx->Exec->TexParameterfv)( n[1].e, n[2].e, params );
+               CALL_TexParameterfv(ctx->Exec, ( n[1].e, n[2].e, params ));
             }
             break;
         case OPCODE_TEX_IMAGE1D:
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->TexImage1D)(
+               CALL_TexImage1D(ctx->Exec, (
                                         n[1].e, /* target */
                                         n[2].i, /* level */
                                         n[3].i, /* components */
@@ -6186,7 +6188,7 @@ execute_list( GLcontext *ctx, GLuint list )
                                         n[5].e, /* border */
                                         n[6].e, /* format */
                                         n[7].e, /* type */
-                                        n[8].data );
+                                        n[8].data ));
                ctx->Unpack = save;  /* restore */
             }
            break;
@@ -6194,7 +6196,7 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->TexImage2D)(
+               CALL_TexImage2D(ctx->Exec, (
                                         n[1].e, /* target */
                                         n[2].i, /* level */
                                         n[3].i, /* components */
@@ -6203,7 +6205,7 @@ execute_list( GLcontext *ctx, GLuint list )
                                         n[6].e, /* border */
                                         n[7].e, /* format */
                                         n[8].e, /* type */
-                                        n[9].data );
+                                        n[9].data ));
                ctx->Unpack = save;  /* restore */
             }
            break;
@@ -6211,7 +6213,7 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->TexImage3D)(
+               CALL_TexImage3D(ctx->Exec, (
                                         n[1].e, /* target */
                                         n[2].i, /* level */
                                         n[3].i, /* components */
@@ -6221,7 +6223,7 @@ execute_list( GLcontext *ctx, GLuint list )
                                         n[7].e, /* border */
                                         n[8].e, /* format */
                                         n[9].e, /* type */
-                                        n[10].data );
+                                        n[10].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
@@ -6229,9 +6231,9 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->TexSubImage1D)( n[1].e, n[2].i, n[3].i,
+               CALL_TexSubImage1D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
                                            n[4].i, n[5].e,
-                                           n[6].e, n[7].data );
+                                           n[6].e, n[7].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
@@ -6239,9 +6241,9 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->TexSubImage2D)( n[1].e, n[2].i, n[3].i,
+               CALL_TexSubImage2D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
                                            n[4].i, n[5].e,
-                                           n[6].i, n[7].e, n[8].e, n[9].data );
+                                           n[6].i, n[7].e, n[8].e, n[9].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
@@ -6249,66 +6251,66 @@ execute_list( GLcontext *ctx, GLuint list )
             {
                const struct gl_pixelstore_attrib save = ctx->Unpack;
                ctx->Unpack = ctx->DefaultPacking;
-               (*ctx->Exec->TexSubImage3D)( n[1].e, n[2].i, n[3].i,
+               CALL_TexSubImage3D(ctx->Exec, ( n[1].e, n[2].i, n[3].i,
                                            n[4].i, n[5].i, n[6].i, n[7].i,
                                            n[8].i, n[9].e, n[10].e,
-                                           n[11].data );
+                                           n[11].data ));
                ctx->Unpack = save;  /* restore */
             }
             break;
          case OPCODE_TRANSLATE:
-            (*ctx->Exec->Translatef)( n[1].f, n[2].f, n[3].f );
+            CALL_Translatef(ctx->Exec, ( n[1].f, n[2].f, n[3].f ));
             break;
         case OPCODE_VIEWPORT:
-           (*ctx->Exec->Viewport)(n[1].i, n[2].i,
-                                  (GLsizei) n[3].i, (GLsizei) n[4].i);
+           CALL_Viewport(ctx->Exec, (n[1].i, n[2].i,
+                                  (GLsizei) n[3].i, (GLsizei) n[4].i));
            break;
         case OPCODE_WINDOW_POS:
-            (*ctx->Exec->WindowPos4fMESA)( n[1].f, n[2].f, n[3].f, n[4].f );
+            CALL_WindowPos4fMESA(ctx->Exec, ( n[1].f, n[2].f, n[3].f, n[4].f ));
            break;
          case OPCODE_ACTIVE_TEXTURE:  /* GL_ARB_multitexture */
-            (*ctx->Exec->ActiveTextureARB)( n[1].e );
+            CALL_ActiveTextureARB(ctx->Exec, ( n[1].e ));
             break;
          case OPCODE_PIXEL_TEXGEN_SGIX:  /* GL_SGIX_pixel_texture */
-            (*ctx->Exec->PixelTexGenSGIX)( n[1].e );
+            CALL_PixelTexGenSGIX(ctx->Exec, ( n[1].e ));
             break;
          case OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS:  /* GL_SGIS_pixel_texture */
-            (*ctx->Exec->PixelTexGenParameteriSGIS)( n[1].e, n[2].i );
+            CALL_PixelTexGenParameteriSGIS(ctx->Exec, ( n[1].e, n[2].i ));
             break;
          case OPCODE_COMPRESSED_TEX_IMAGE_1D: /* GL_ARB_texture_compression */
-            (*ctx->Exec->CompressedTexImage1DARB)(n[1].e, n[2].i, n[3].e,
-                                            n[4].i, n[5].i, n[6].i, n[7].data);
+            CALL_CompressedTexImage1DARB(ctx->Exec, (n[1].e, n[2].i, n[3].e,
+                                            n[4].i, n[5].i, n[6].i, n[7].data));
             break;
          case OPCODE_COMPRESSED_TEX_IMAGE_2D: /* GL_ARB_texture_compression */
-            (*ctx->Exec->CompressedTexImage2DARB)(n[1].e, n[2].i, n[3].e,
-                                    n[4].i, n[5].i, n[6].i, n[7].i, n[8].data);
+            CALL_CompressedTexImage2DARB(ctx->Exec, (n[1].e, n[2].i, n[3].e,
+                                    n[4].i, n[5].i, n[6].i, n[7].i, n[8].data));
             break;
          case OPCODE_COMPRESSED_TEX_IMAGE_3D: /* GL_ARB_texture_compression */
-            (*ctx->Exec->CompressedTexImage3DARB)(n[1].e, n[2].i, n[3].e,
-                            n[4].i, n[5].i, n[6].i, n[7].i, n[8].i, n[9].data);
+            CALL_CompressedTexImage3DARB(ctx->Exec, (n[1].e, n[2].i, n[3].e,
+                            n[4].i, n[5].i, n[6].i, n[7].i, n[8].i, n[9].data));
             break;
          case OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D: /* GL_ARB_texture_compress */
-            (*ctx->Exec->CompressedTexSubImage1DARB)(n[1].e, n[2].i, n[3].i,
-                                            n[4].i, n[5].e, n[6].i, n[7].data);
+            CALL_CompressedTexSubImage1DARB(ctx->Exec, (n[1].e, n[2].i, n[3].i,
+                                            n[4].i, n[5].e, n[6].i, n[7].data));
             break;
          case OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D: /* GL_ARB_texture_compress */
-            (*ctx->Exec->CompressedTexSubImage2DARB)(n[1].e, n[2].i, n[3].i,
-                            n[4].i, n[5].i, n[6].i, n[7].e, n[8].i, n[9].data);
+            CALL_CompressedTexSubImage2DARB(ctx->Exec, (n[1].e, n[2].i, n[3].i,
+                            n[4].i, n[5].i, n[6].i, n[7].e, n[8].i, n[9].data));
             break;
          case OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D: /* GL_ARB_texture_compress */
-            (*ctx->Exec->CompressedTexSubImage3DARB)(n[1].e, n[2].i, n[3].i,
+            CALL_CompressedTexSubImage3DARB(ctx->Exec, (n[1].e, n[2].i, n[3].i,
                                         n[4].i, n[5].i, n[6].i, n[7].i, n[8].i,
-                                        n[9].e, n[10].i, n[11].data);
+                                        n[9].e, n[10].i, n[11].data));
             break;
          case OPCODE_SAMPLE_COVERAGE: /* GL_ARB_multisample */
-            (*ctx->Exec->SampleCoverageARB)(n[1].f, n[2].b);
+            CALL_SampleCoverageARB(ctx->Exec, (n[1].f, n[2].b));
             break;
         case OPCODE_WINDOW_POS_ARB: /* GL_ARB_window_pos */
-            (*ctx->Exec->WindowPos3fMESA)( n[1].f, n[2].f, n[3].f );
+            CALL_WindowPos3fMESA(ctx->Exec, ( n[1].f, n[2].f, n[3].f ));
            break;
 #if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
          case OPCODE_BIND_PROGRAM_NV: /* GL_NV_vertex_program */
-            (*ctx->Exec->BindProgramNV)( n[1].e, n[2].ui );
+            CALL_BindProgramNV(ctx->Exec, ( n[1].e, n[2].ui ));
             break;
 #endif
 #if FEATURE_NV_vertex_program
@@ -6319,59 +6321,59 @@ execute_list( GLcontext *ctx, GLuint list )
                v[1] = n[4].f;
                v[2] = n[5].f;
                v[3] = n[6].f;
-               (*ctx->Exec->ExecuteProgramNV)(n[1].e, n[2].ui, v);
+               CALL_ExecuteProgramNV(ctx->Exec, (n[1].e, n[2].ui, v));
             }
             break;
          case OPCODE_REQUEST_RESIDENT_PROGRAMS_NV:
-            (*ctx->Exec->RequestResidentProgramsNV)(n[1].ui,
-                                                    (GLuint *) n[2].data);
+            CALL_RequestResidentProgramsNV(ctx->Exec, (n[1].ui,
+                                                    (GLuint *) n[2].data));
             break;
          case OPCODE_LOAD_PROGRAM_NV:
-            (*ctx->Exec->LoadProgramNV)(n[1].e, n[2].ui, n[3].i,
-                                        (const GLubyte *) n[4].data);
+            CALL_LoadProgramNV(ctx->Exec, (n[1].e, n[2].ui, n[3].i,
+                                        (const GLubyte *) n[4].data));
             break;
          case OPCODE_PROGRAM_PARAMETER4F_NV:
-            (*ctx->Exec->ProgramParameter4fNV)(n[1].e, n[2].ui, n[3].f,
-                                               n[4].f, n[5].f, n[6].f);
+            CALL_ProgramParameter4fNV(ctx->Exec, (n[1].e, n[2].ui, n[3].f,
+                                               n[4].f, n[5].f, n[6].f));
             break;
          case OPCODE_TRACK_MATRIX_NV:
-            (*ctx->Exec->TrackMatrixNV)(n[1].e, n[2].ui, n[3].e, n[4].e);
+            CALL_TrackMatrixNV(ctx->Exec, (n[1].e, n[2].ui, n[3].e, n[4].e));
             break;
 #endif
 
 #if FEATURE_NV_fragment_program
          case OPCODE_PROGRAM_LOCAL_PARAMETER_ARB:
-            (*ctx->Exec->ProgramLocalParameter4fARB)(n[1].e, n[2].ui, n[3].f,
-                                                     n[4].f, n[5].f, n[6].f);
+            CALL_ProgramLocalParameter4fARB(ctx->Exec, (n[1].e, n[2].ui, n[3].f,
+                                                     n[4].f, n[5].f, n[6].f));
             break;
          case OPCODE_PROGRAM_NAMED_PARAMETER_NV:
-            (*ctx->Exec->ProgramNamedParameter4fNV)(n[1].ui, n[2].i,
+            CALL_ProgramNamedParameter4fNV(ctx->Exec, (n[1].ui, n[2].i,
                                                (const GLubyte *) n[3].data,
-                                               n[4].f, n[5].f, n[6].f, n[7].f);
+                                               n[4].f, n[5].f, n[6].f, n[7].f));
             break;
 #endif
 
          case OPCODE_ACTIVE_STENCIL_FACE_EXT:
-            (*ctx->Exec->ActiveStencilFaceEXT)(n[1].e);
+            CALL_ActiveStencilFaceEXT(ctx->Exec, (n[1].e));
             break;
          case OPCODE_DEPTH_BOUNDS_EXT:
-            (*ctx->Exec->DepthBoundsEXT)(n[1].f, n[2].f);
+            CALL_DepthBoundsEXT(ctx->Exec, (n[1].f, n[2].f));
             break;
 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
          case OPCODE_PROGRAM_STRING_ARB:
-            (*ctx->Exec->ProgramStringARB)(n[1].e, n[2].e, n[3].i, n[4].data);
+            CALL_ProgramStringARB(ctx->Exec, (n[1].e, n[2].e, n[3].i, n[4].data));
             break;
          case OPCODE_PROGRAM_ENV_PARAMETER_ARB:
-            (*ctx->Exec->ProgramEnvParameter4fARB)(n[1].e, n[2].ui, n[3].f,
-                                                   n[4].f, n[5].f, n[6].f);
+            CALL_ProgramEnvParameter4fARB(ctx->Exec, (n[1].e, n[2].ui, n[3].f,
+                                                   n[4].f, n[5].f, n[6].f));
             break;
 #endif
 #if FEATURE_ARB_occlusion_query
          case OPCODE_BEGIN_QUERY_ARB:
-            ctx->Exec->BeginQueryARB(n[1].e, n[2].ui);
+            CALL_BeginQueryARB(ctx->Exec, (n[1].e, n[2].ui));
             break;
          case OPCODE_END_QUERY_ARB:
-            ctx->Exec->EndQueryARB(n[1].e);
+            CALL_EndQueryARB(ctx->Exec, (n[1].e));
             break;
 #endif
          case OPCODE_DRAW_BUFFERS_ARB:
@@ -6380,12 +6382,12 @@ execute_list( GLcontext *ctx, GLuint list )
               GLint i, count = MIN2(n[1].i, MAX_DRAW_BUFFERS);
               for (i = 0; i < count; i++)
                  buffers[i] = n[2 + i].e;
-              ctx->Exec->DrawBuffersARB(n[1].i, buffers);
+              CALL_DrawBuffersARB(ctx->Exec, (n[1].i, buffers));
            }
             break;
 #if FEATURE_ATI_fragment_shader
         case OPCODE_BIND_FRAGMENT_SHADER_ATI:
-           ctx->Exec->BindFragmentShaderATI(n[1].i);
+           CALL_BindFragmentShaderATI(ctx->Exec, (n[1].i));
            break;
         case OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI: 
            {
@@ -6394,12 +6396,12 @@ execute_list( GLcontext *ctx, GLuint list )
               
               for (i = 0; i < 4; i++)
                  values[i] = n[1+i].f;
-              ctx->Exec->SetFragmentShaderConstantATI(dst, values);
+              CALL_SetFragmentShaderConstantATI(ctx->Exec, (dst, values));
            }
            break;
 #endif
         case OPCODE_ATTR_1F_NV:
-           (*ctx->Exec->VertexAttrib1fNV)(n[1].e, n[2].f);
+           CALL_VertexAttrib1fNV(ctx->Exec, (n[1].e, n[2].f));
            break;
         case OPCODE_ATTR_2F_NV:
            /* Really shouldn't have to do this - the Node structure
@@ -6409,26 +6411,26 @@ execute_list( GLcontext *ctx, GLuint list )
             * matter more.
             */
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->VertexAttrib2fvNV)(n[1].e, &n[2].f);
+              CALL_VertexAttrib2fvNV(ctx->Exec, (n[1].e, &n[2].f));
            else
-              (*ctx->Exec->VertexAttrib2fNV)(n[1].e, n[2].f, n[3].f);
+              CALL_VertexAttrib2fNV(ctx->Exec, (n[1].e, n[2].f, n[3].f));
            break;
         case OPCODE_ATTR_3F_NV:
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->VertexAttrib3fvNV)(n[1].e, &n[2].f);
+              CALL_VertexAttrib3fvNV(ctx->Exec, (n[1].e, &n[2].f));
            else
-              (*ctx->Exec->VertexAttrib3fNV)(n[1].e, n[2].f, n[3].f,
-                                             n[4].f);
+              CALL_VertexAttrib3fNV(ctx->Exec, (n[1].e, n[2].f, n[3].f,
+                                             n[4].f));
            break;
         case OPCODE_ATTR_4F_NV:
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->VertexAttrib4fvNV)(n[1].e, &n[2].f);
+              CALL_VertexAttrib4fvNV(ctx->Exec, (n[1].e, &n[2].f));
            else
-              (*ctx->Exec->VertexAttrib4fNV)(n[1].e, n[2].f, n[3].f,
-                                             n[4].f, n[5].f);
+              CALL_VertexAttrib4fNV(ctx->Exec, (n[1].e, n[2].f, n[3].f,
+                                             n[4].f, n[5].f));
            break;
         case OPCODE_ATTR_1F_ARB:
-           (*ctx->Exec->VertexAttrib1fARB)(n[1].e, n[2].f);
+           CALL_VertexAttrib1fARB(ctx->Exec, (n[1].e, n[2].f));
            break;
         case OPCODE_ATTR_2F_ARB:
            /* Really shouldn't have to do this - the Node structure
@@ -6438,62 +6440,62 @@ execute_list( GLcontext *ctx, GLuint list )
             * matter more.
             */
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->VertexAttrib2fvARB)(n[1].e, &n[2].f);
+              CALL_VertexAttrib2fvARB(ctx->Exec, (n[1].e, &n[2].f));
            else
-              (*ctx->Exec->VertexAttrib2fARB)(n[1].e, n[2].f, n[3].f);
+              CALL_VertexAttrib2fARB(ctx->Exec, (n[1].e, n[2].f, n[3].f));
            break;
         case OPCODE_ATTR_3F_ARB:
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->VertexAttrib3fvARB)(n[1].e, &n[2].f);
+              CALL_VertexAttrib3fvARB(ctx->Exec, (n[1].e, &n[2].f));
            else
-              (*ctx->Exec->VertexAttrib3fARB)(n[1].e, n[2].f, n[3].f,
-                                             n[4].f);
+              CALL_VertexAttrib3fARB(ctx->Exec, (n[1].e, n[2].f, n[3].f,
+                                             n[4].f));
            break;
         case OPCODE_ATTR_4F_ARB:
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->VertexAttrib4fvARB)(n[1].e, &n[2].f);
+              CALL_VertexAttrib4fvARB(ctx->Exec, (n[1].e, &n[2].f));
            else
-              (*ctx->Exec->VertexAttrib4fARB)(n[1].e, n[2].f, n[3].f,
-                                             n[4].f, n[5].f);
+              CALL_VertexAttrib4fARB(ctx->Exec, (n[1].e, n[2].f, n[3].f,
+                                             n[4].f, n[5].f));
            break;
         case OPCODE_MATERIAL:
            if (sizeof(Node)==sizeof(GLfloat)) 
-              (*ctx->Exec->Materialfv)(n[1].e, n[2].e, &n[3].f);
+              CALL_Materialfv(ctx->Exec, (n[1].e, n[2].e, &n[3].f));
            else {
               GLfloat f[4];
               f[0] = n[3].f;
               f[1] = n[4].f;
               f[2] = n[5].f;
               f[3] = n[6].f;
-              (*ctx->Exec->Materialfv)(n[1].e, n[2].e, f);
+              CALL_Materialfv(ctx->Exec, (n[1].e, n[2].e, f));
            }
            break;
         case OPCODE_INDEX:
-           (*ctx->Exec->Indexi)(n[1].i);
+           CALL_Indexi(ctx->Exec, (n[1].i));
            break;
         case OPCODE_EDGEFLAG:
-           (*ctx->Exec->EdgeFlag)(n[1].b);
+           CALL_EdgeFlag(ctx->Exec, (n[1].b));
            break;
         case OPCODE_BEGIN:
-           (*ctx->Exec->Begin)(n[1].e);
+           CALL_Begin(ctx->Exec, (n[1].e));
            break;
         case OPCODE_END:
-           (*ctx->Exec->End)();
+           CALL_End(ctx->Exec, ());
            break;
         case OPCODE_RECTF:
-           (*ctx->Exec->Rectf)(n[1].f, n[2].f, n[3].f, n[4].f);
+           CALL_Rectf(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f));
            break;
         case OPCODE_EVAL_C1:
-           (*ctx->Exec->EvalCoord1f)(n[1].f);
+           CALL_EvalCoord1f(ctx->Exec, (n[1].f));
            break;
         case OPCODE_EVAL_C2:
-           (*ctx->Exec->EvalCoord2f)(n[1].f, n[2].f);
+           CALL_EvalCoord2f(ctx->Exec, (n[1].f, n[2].f));
            break;
         case OPCODE_EVAL_P1:
-           (*ctx->Exec->EvalPoint1)(n[1].i);
+           CALL_EvalPoint1(ctx->Exec, (n[1].i));
            break;
         case OPCODE_EVAL_P2:
-           (*ctx->Exec->EvalPoint2)(n[1].i, n[2].i);
+           CALL_EvalPoint2(ctx->Exec, (n[1].i, n[2].i));
            break;
 
 
@@ -6829,175 +6831,175 @@ static void GLAPIENTRY exec_Finish( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->Finish();
+   CALL_Finish(ctx->Exec, ());
 }
 
 static void GLAPIENTRY exec_Flush( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->Flush( );
+   CALL_Flush(ctx->Exec, ( ));
 }
 
 static void GLAPIENTRY exec_GetBooleanv( GLenum pname, GLboolean *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetBooleanv( pname, params );
+   CALL_GetBooleanv(ctx->Exec, ( pname, params ));
 }
 
 static void GLAPIENTRY exec_GetClipPlane( GLenum plane, GLdouble *equation )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetClipPlane( plane, equation );
+   CALL_GetClipPlane(ctx->Exec, ( plane, equation ));
 }
 
 static void GLAPIENTRY exec_GetDoublev( GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetDoublev(  pname, params );
+   CALL_GetDoublev(ctx->Exec, (  pname, params ));
 }
 
 static GLenum GLAPIENTRY exec_GetError( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   return ctx->Exec->GetError( );
+   return CALL_GetError(ctx->Exec, ( ));
 }
 
 static void GLAPIENTRY exec_GetFloatv( GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetFloatv( pname, params );
+   CALL_GetFloatv(ctx->Exec, ( pname, params ));
 }
 
 static void GLAPIENTRY exec_GetIntegerv( GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetIntegerv( pname, params );
+   CALL_GetIntegerv(ctx->Exec, ( pname, params ));
 }
 
 static void GLAPIENTRY exec_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetLightfv( light, pname, params );
+   CALL_GetLightfv(ctx->Exec, ( light, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetLightiv( GLenum light, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetLightiv( light, pname, params );
+   CALL_GetLightiv(ctx->Exec, ( light, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetMapdv( GLenum target, GLenum query, GLdouble *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMapdv( target, query, v );
+   CALL_GetMapdv(ctx->Exec, ( target, query, v ));
 }
 
 static void GLAPIENTRY exec_GetMapfv( GLenum target, GLenum query, GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMapfv( target, query, v );
+   CALL_GetMapfv(ctx->Exec, ( target, query, v ));
 }
 
 static void GLAPIENTRY exec_GetMapiv( GLenum target, GLenum query, GLint *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMapiv( target, query, v );
+   CALL_GetMapiv(ctx->Exec, ( target, query, v ));
 }
 
 static void GLAPIENTRY exec_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMaterialfv( face, pname, params );
+   CALL_GetMaterialfv(ctx->Exec, ( face, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMaterialiv( face, pname, params );
+   CALL_GetMaterialiv(ctx->Exec, ( face, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetPixelMapfv( GLenum map, GLfloat *values )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPixelMapfv( map,  values );
+   CALL_GetPixelMapfv(ctx->Exec, ( map,  values ));
 }
 
 static void GLAPIENTRY exec_GetPixelMapuiv( GLenum map, GLuint *values )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPixelMapuiv( map, values );
+   CALL_GetPixelMapuiv(ctx->Exec, ( map, values ));
 }
 
 static void GLAPIENTRY exec_GetPixelMapusv( GLenum map, GLushort *values )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPixelMapusv( map, values );
+   CALL_GetPixelMapusv(ctx->Exec, ( map, values ));
 }
 
 static void GLAPIENTRY exec_GetPolygonStipple( GLubyte *dest )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPolygonStipple( dest );
+   CALL_GetPolygonStipple(ctx->Exec, ( dest ));
 }
 
 static const GLubyte * GLAPIENTRY exec_GetString( GLenum name )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   return ctx->Exec->GetString( name );
+   return CALL_GetString(ctx->Exec, ( name ));
 }
 
 static void GLAPIENTRY exec_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexEnvfv( target, pname, params );
+   CALL_GetTexEnvfv(ctx->Exec, ( target, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexEnviv( target, pname, params );
+   CALL_GetTexEnviv(ctx->Exec, ( target, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexGendv( coord, pname, params );
+   CALL_GetTexGendv(ctx->Exec, ( coord, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexGenfv( coord, pname, params );
+   CALL_GetTexGenfv(ctx->Exec, ( coord, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexGeniv( coord, pname, params );
+   CALL_GetTexGeniv(ctx->Exec, ( coord, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexImage( GLenum target, GLint level, GLenum format,
@@ -7005,7 +7007,7 @@ static void GLAPIENTRY exec_GetTexImage( GLenum target, GLint level, GLenum form
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexImage( target, level, format, type, pixels );
+   CALL_GetTexImage(ctx->Exec, ( target, level, format, type, pixels ));
 }
 
 static void GLAPIENTRY exec_GetTexLevelParameterfv( GLenum target, GLint level,
@@ -7013,7 +7015,7 @@ static void GLAPIENTRY exec_GetTexLevelParameterfv( GLenum target, GLint level,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexLevelParameterfv( target, level, pname, params );
+   CALL_GetTexLevelParameterfv(ctx->Exec, ( target, level, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexLevelParameteriv( GLenum target, GLint level,
@@ -7021,7 +7023,7 @@ static void GLAPIENTRY exec_GetTexLevelParameteriv( GLenum target, GLint level,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexLevelParameteriv( target, level, pname, params );
+   CALL_GetTexLevelParameteriv(ctx->Exec, ( target, level, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexParameterfv( GLenum target, GLenum pname,
@@ -7029,35 +7031,35 @@ static void GLAPIENTRY exec_GetTexParameterfv( GLenum target, GLenum pname,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexParameterfv( target, pname, params );
+   CALL_GetTexParameterfv(ctx->Exec, ( target, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetTexParameteriv( target, pname, params );
+   CALL_GetTexParameteriv(ctx->Exec, ( target, pname, params ));
 }
 
 static GLboolean GLAPIENTRY exec_IsEnabled( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   return ctx->Exec->IsEnabled( cap );
+   return CALL_IsEnabled(ctx->Exec, ( cap ));
 }
 
 static void GLAPIENTRY exec_PixelStoref( GLenum pname, GLfloat param )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->PixelStoref( pname, param );
+   CALL_PixelStoref(ctx->Exec, ( pname, param ));
 }
 
 static void GLAPIENTRY exec_PixelStorei( GLenum pname, GLint param )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->PixelStorei( pname, param );
+   CALL_PixelStorei(ctx->Exec, ( pname, param ));
 }
 
 static void GLAPIENTRY exec_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
@@ -7065,28 +7067,28 @@ static void GLAPIENTRY exec_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->ReadPixels( x, y, width, height, format, type, pixels );
+   CALL_ReadPixels(ctx->Exec, ( x, y, width, height, format, type, pixels ));
 }
 
 static GLint GLAPIENTRY exec_RenderMode( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   return ctx->Exec->RenderMode( mode );
+   return CALL_RenderMode(ctx->Exec, ( mode ));
 }
 
 static void GLAPIENTRY exec_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->FeedbackBuffer( size, type, buffer );
+   CALL_FeedbackBuffer(ctx->Exec, ( size, type, buffer ));
 }
 
 static void GLAPIENTRY exec_SelectBuffer( GLsizei size, GLuint *buffer )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->SelectBuffer( size, buffer );
+   CALL_SelectBuffer(ctx->Exec, ( size, buffer ));
 }
 
 static GLboolean GLAPIENTRY exec_AreTexturesResident(GLsizei n, const GLuint *texName,
@@ -7094,7 +7096,7 @@ static GLboolean GLAPIENTRY exec_AreTexturesResident(GLsizei n, const GLuint *te
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   return ctx->Exec->AreTexturesResident( n, texName, residences);
+   return CALL_AreTexturesResident(ctx->Exec, ( n, texName, residences));
 }
 
 static void GLAPIENTRY exec_ColorPointer(GLint size, GLenum type, GLsizei stride,
@@ -7102,56 +7104,56 @@ static void GLAPIENTRY exec_ColorPointer(GLint size, GLenum type, GLsizei stride
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->ColorPointer( size, type, stride, ptr);
+   CALL_ColorPointer(ctx->Exec, ( size, type, stride, ptr));
 }
 
 static void GLAPIENTRY exec_DeleteTextures( GLsizei n, const GLuint *texName)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->DeleteTextures( n, texName);
+   CALL_DeleteTextures(ctx->Exec, ( n, texName));
 }
 
 static void GLAPIENTRY exec_DisableClientState( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->DisableClientState( cap );
+   CALL_DisableClientState(ctx->Exec, ( cap ));
 }
 
 static void GLAPIENTRY exec_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->EdgeFlagPointer( stride, vptr);
+   CALL_EdgeFlagPointer(ctx->Exec, ( stride, vptr));
 }
 
 static void GLAPIENTRY exec_EnableClientState( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->EnableClientState( cap );
+   CALL_EnableClientState(ctx->Exec, ( cap ));
 }
 
 static void GLAPIENTRY exec_GenTextures( GLsizei n, GLuint *texName )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GenTextures( n, texName );
+   CALL_GenTextures(ctx->Exec, ( n, texName ));
 }
 
 static void GLAPIENTRY exec_GetPointerv( GLenum pname, GLvoid **params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPointerv( pname, params );
+   CALL_GetPointerv(ctx->Exec, ( pname, params ));
 }
 
 static void GLAPIENTRY exec_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->IndexPointer( type, stride, ptr);
+   CALL_IndexPointer(ctx->Exec, ( type, stride, ptr));
 }
 
 static void GLAPIENTRY exec_InterleavedArrays(GLenum format, GLsizei stride,
@@ -7159,35 +7161,35 @@ static void GLAPIENTRY exec_InterleavedArrays(GLenum format, GLsizei stride,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->InterleavedArrays( format, stride, pointer);
+   CALL_InterleavedArrays(ctx->Exec, ( format, stride, pointer));
 }
 
 static GLboolean GLAPIENTRY exec_IsTexture( GLuint texture )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   return ctx->Exec->IsTexture( texture );
+   return CALL_IsTexture(ctx->Exec, ( texture ));
 }
 
 static void GLAPIENTRY exec_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->NormalPointer( type, stride, ptr );
+   CALL_NormalPointer(ctx->Exec, ( type, stride, ptr ));
 }
 
 static void GLAPIENTRY exec_PopClientAttrib(void)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->PopClientAttrib();
+   CALL_PopClientAttrib(ctx->Exec, ());
 }
 
 static void GLAPIENTRY exec_PushClientAttrib(GLbitfield mask)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->PushClientAttrib( mask);
+   CALL_PushClientAttrib(ctx->Exec, ( mask));
 }
 
 static void GLAPIENTRY exec_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
@@ -7195,7 +7197,7 @@ static void GLAPIENTRY exec_TexCoordPointer(GLint size, GLenum type, GLsizei str
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->TexCoordPointer( size,  type,  stride, ptr);
+   CALL_TexCoordPointer(ctx->Exec, ( size,  type,  stride, ptr));
 }
 
 static void GLAPIENTRY exec_GetCompressedTexImageARB(GLenum target, GLint level,
@@ -7203,7 +7205,7 @@ static void GLAPIENTRY exec_GetCompressedTexImageARB(GLenum target, GLint level,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetCompressedTexImageARB( target, level, img);
+   CALL_GetCompressedTexImageARB(ctx->Exec, ( target, level, img));
 }
 
 static void GLAPIENTRY exec_VertexPointer(GLint size, GLenum type, GLsizei stride,
@@ -7211,7 +7213,7 @@ static void GLAPIENTRY exec_VertexPointer(GLint size, GLenum type, GLsizei strid
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->VertexPointer( size, type, stride, ptr);
+   CALL_VertexPointer(ctx->Exec, ( size, type, stride, ptr));
 }
 
 static void GLAPIENTRY exec_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat,
@@ -7219,7 +7221,7 @@ static void GLAPIENTRY exec_CopyConvolutionFilter1D(GLenum target, GLenum intern
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->CopyConvolutionFilter1D( target, internalFormat, x, y, width);
+   CALL_CopyConvolutionFilter1D(ctx->Exec, ( target, internalFormat, x, y, width));
 }
 
 static void GLAPIENTRY exec_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat,
@@ -7228,8 +7230,8 @@ static void GLAPIENTRY exec_CopyConvolutionFilter2D(GLenum target, GLenum intern
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->CopyConvolutionFilter2D( target, internalFormat, x, y, width,
-                                      height);
+   CALL_CopyConvolutionFilter2D(ctx->Exec, ( target, internalFormat, x, y, width,
+                                      height));
 }
 
 static void GLAPIENTRY exec_GetColorTable( GLenum target, GLenum format,
@@ -7237,7 +7239,7 @@ static void GLAPIENTRY exec_GetColorTable( GLenum target, GLenum format,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetColorTable( target, format, type, data );
+   CALL_GetColorTable(ctx->Exec, ( target, format, type, data ));
 }
 
 static void GLAPIENTRY exec_GetColorTableParameterfv( GLenum target, GLenum pname,
@@ -7245,7 +7247,7 @@ static void GLAPIENTRY exec_GetColorTableParameterfv( GLenum target, GLenum pnam
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetColorTableParameterfv( target, pname, params );
+   CALL_GetColorTableParameterfv(ctx->Exec, ( target, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetColorTableParameteriv( GLenum target, GLenum pname,
@@ -7253,7 +7255,7 @@ static void GLAPIENTRY exec_GetColorTableParameteriv( GLenum target, GLenum pnam
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetColorTableParameteriv( target, pname, params );
+   CALL_GetColorTableParameteriv(ctx->Exec, ( target, pname, params ));
 }
 
 static void GLAPIENTRY exec_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
@@ -7261,7 +7263,7 @@ static void GLAPIENTRY exec_GetConvolutionFilter(GLenum target, GLenum format, G
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetConvolutionFilter( target, format, type, image);
+   CALL_GetConvolutionFilter(ctx->Exec, ( target, format, type, image));
 }
 
 static void GLAPIENTRY exec_GetConvolutionParameterfv(GLenum target, GLenum pname,
@@ -7269,7 +7271,7 @@ static void GLAPIENTRY exec_GetConvolutionParameterfv(GLenum target, GLenum pnam
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetConvolutionParameterfv( target, pname, params);
+   CALL_GetConvolutionParameterfv(ctx->Exec, ( target, pname, params));
 }
 
 static void GLAPIENTRY exec_GetConvolutionParameteriv(GLenum target, GLenum pname,
@@ -7277,7 +7279,7 @@ static void GLAPIENTRY exec_GetConvolutionParameteriv(GLenum target, GLenum pnam
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetConvolutionParameteriv( target, pname, params);
+   CALL_GetConvolutionParameteriv(ctx->Exec, ( target, pname, params));
 }
 
 static void GLAPIENTRY exec_GetHistogram(GLenum target, GLboolean reset, GLenum format,
@@ -7285,7 +7287,7 @@ static void GLAPIENTRY exec_GetHistogram(GLenum target, GLboolean reset, GLenum
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetHistogram( target, reset, format, type, values);
+   CALL_GetHistogram(ctx->Exec, ( target, reset, format, type, values));
 }
 
 static void GLAPIENTRY exec_GetHistogramParameterfv(GLenum target, GLenum pname,
@@ -7293,7 +7295,7 @@ static void GLAPIENTRY exec_GetHistogramParameterfv(GLenum target, GLenum pname,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetHistogramParameterfv( target, pname, params);
+   CALL_GetHistogramParameterfv(ctx->Exec, ( target, pname, params));
 }
 
 static void GLAPIENTRY exec_GetHistogramParameteriv(GLenum target, GLenum pname,
@@ -7301,7 +7303,7 @@ static void GLAPIENTRY exec_GetHistogramParameteriv(GLenum target, GLenum pname,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetHistogramParameteriv( target, pname, params);
+   CALL_GetHistogramParameteriv(ctx->Exec, ( target, pname, params));
 }
 
 static void GLAPIENTRY exec_GetMinmax(GLenum target, GLboolean reset, GLenum format,
@@ -7309,7 +7311,7 @@ static void GLAPIENTRY exec_GetMinmax(GLenum target, GLboolean reset, GLenum for
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMinmax( target, reset, format, type, values);
+   CALL_GetMinmax(ctx->Exec, ( target, reset, format, type, values));
 }
 
 static void GLAPIENTRY exec_GetMinmaxParameterfv(GLenum target, GLenum pname,
@@ -7317,7 +7319,7 @@ static void GLAPIENTRY exec_GetMinmaxParameterfv(GLenum target, GLenum pname,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMinmaxParameterfv( target, pname, params);
+   CALL_GetMinmaxParameterfv(ctx->Exec, ( target, pname, params));
 }
 
 static void GLAPIENTRY exec_GetMinmaxParameteriv(GLenum target, GLenum pname,
@@ -7325,7 +7327,7 @@ static void GLAPIENTRY exec_GetMinmaxParameteriv(GLenum target, GLenum pname,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetMinmaxParameteriv( target, pname, params);
+   CALL_GetMinmaxParameteriv(ctx->Exec, ( target, pname, params));
 }
 
 static void GLAPIENTRY exec_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
@@ -7333,7 +7335,7 @@ static void GLAPIENTRY exec_GetSeparableFilter(GLenum target, GLenum format, GLe
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetSeparableFilter( target, format, type, row, column, span);
+   CALL_GetSeparableFilter(ctx->Exec, ( target, format, type, row, column, span));
 }
 
 static void GLAPIENTRY exec_SeparableFilter2D(GLenum target, GLenum internalFormat,
@@ -7343,22 +7345,22 @@ static void GLAPIENTRY exec_SeparableFilter2D(GLenum target, GLenum internalForm
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->SeparableFilter2D( target, internalFormat, width, height, format,
-                                type, row, column);
+   CALL_SeparableFilter2D(ctx->Exec, ( target, internalFormat, width, height, format,
+                                type, row, column));
 }
 
 static void GLAPIENTRY exec_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPixelTexGenParameterivSGIS( target, value);
+   CALL_GetPixelTexGenParameterivSGIS(ctx->Exec, ( target, value));
 }
 
 static void GLAPIENTRY exec_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->GetPixelTexGenParameterfvSGIS( target, value);
+   CALL_GetPixelTexGenParameterfvSGIS(ctx->Exec, ( target, value));
 }
 
 static void GLAPIENTRY exec_ColorPointerEXT(GLint size, GLenum type, GLsizei stride,
@@ -7366,7 +7368,7 @@ static void GLAPIENTRY exec_ColorPointerEXT(GLint size, GLenum type, GLsizei str
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->ColorPointerEXT( size, type, stride, count, ptr);
+   CALL_ColorPointerEXT(ctx->Exec, ( size, type, stride, count, ptr));
 }
 
 static void GLAPIENTRY exec_EdgeFlagPointerEXT(GLsizei stride, GLsizei count,
@@ -7374,7 +7376,7 @@ static void GLAPIENTRY exec_EdgeFlagPointerEXT(GLsizei stride, GLsizei count,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->EdgeFlagPointerEXT( stride, count, ptr);
+   CALL_EdgeFlagPointerEXT(ctx->Exec, ( stride, count, ptr));
 }
 
 static void GLAPIENTRY exec_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
@@ -7382,7 +7384,7 @@ static void GLAPIENTRY exec_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->IndexPointerEXT( type, stride, count, ptr);
+   CALL_IndexPointerEXT(ctx->Exec, ( type, stride, count, ptr));
 }
 
 static void GLAPIENTRY exec_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
@@ -7390,7 +7392,7 @@ static void GLAPIENTRY exec_NormalPointerEXT(GLenum type, GLsizei stride, GLsize
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->NormalPointerEXT( type, stride, count, ptr);
+   CALL_NormalPointerEXT(ctx->Exec, ( type, stride, count, ptr));
 }
 
 static void GLAPIENTRY exec_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
@@ -7398,7 +7400,7 @@ static void GLAPIENTRY exec_TexCoordPointerEXT(GLint size, GLenum type, GLsizei
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->TexCoordPointerEXT( size, type, stride, count, ptr);
+   CALL_TexCoordPointerEXT(ctx->Exec, ( size, type, stride, count, ptr));
 }
 
 static void GLAPIENTRY exec_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
@@ -7406,28 +7408,28 @@ static void GLAPIENTRY exec_VertexPointerEXT(GLint size, GLenum type, GLsizei st
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->VertexPointerEXT( size, type, stride, count, ptr);
+   CALL_VertexPointerEXT(ctx->Exec, ( size, type, stride, count, ptr));
 }
 
 static void GLAPIENTRY exec_LockArraysEXT(GLint first, GLsizei count)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->LockArraysEXT( first, count);
+   CALL_LockArraysEXT(ctx->Exec, ( first, count));
 }
 
 static void GLAPIENTRY exec_UnlockArraysEXT( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->UnlockArraysEXT( );
+   CALL_UnlockArraysEXT(ctx->Exec, ( ));
 }
 
 static void GLAPIENTRY exec_ClientActiveTextureARB( GLenum target )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->ClientActiveTextureARB(target);
+   CALL_ClientActiveTextureARB(ctx->Exec, (target));
 }
 
 static void GLAPIENTRY exec_SecondaryColorPointerEXT(GLint size, GLenum type,
@@ -7435,7 +7437,7 @@ static void GLAPIENTRY exec_SecondaryColorPointerEXT(GLint size, GLenum type,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->SecondaryColorPointerEXT( size, type, stride, ptr);
+   CALL_SecondaryColorPointerEXT(ctx->Exec, ( size, type, stride, ptr));
 }
 
 static void GLAPIENTRY exec_FogCoordPointerEXT(GLenum type, GLsizei stride,
@@ -7443,7 +7445,7 @@ static void GLAPIENTRY exec_FogCoordPointerEXT(GLenum type, GLsizei stride,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->FogCoordPointerEXT( type, stride, ptr);
+   CALL_FogCoordPointerEXT(ctx->Exec, ( type, stride, ptr));
 }
 
 /* GL_EXT_multi_draw_arrays */
@@ -7452,7 +7454,7 @@ static void GLAPIENTRY exec_MultiDrawArraysEXT(GLenum mode, GLint *first,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->MultiDrawArraysEXT( mode, first, count, primcount );
+   CALL_MultiDrawArraysEXT(ctx->Exec, ( mode, first, count, primcount ));
 }
 
 /* GL_EXT_multi_draw_arrays */
@@ -7462,7 +7464,7 @@ static void GLAPIENTRY exec_MultiDrawElementsEXT(GLenum mode, const GLsizei *cou
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->MultiDrawElementsEXT(mode, count, type, indices, primcount);
+   CALL_MultiDrawElementsEXT(ctx->Exec, (mode, count, type, indices, primcount));
 }
 
 /* GL_IBM_multimode_draw_arrays */
@@ -7472,7 +7474,7 @@ static void GLAPIENTRY exec_MultiModeDrawArraysIBM(const GLenum *mode, const GLi
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->MultiModeDrawArraysIBM(mode, first, count, primcount, modestride);
+   CALL_MultiModeDrawArraysIBM(ctx->Exec, (mode, first, count, primcount, modestride));
 }
 
 /* GL_IBM_multimode_draw_arrays */
@@ -7484,8 +7486,8 @@ static void GLAPIENTRY exec_MultiModeDrawElementsIBM(const GLenum *mode,
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-   ctx->Exec->MultiModeDrawElementsIBM(mode, count, type, indices, primcount,
-                                      modestride);
+   CALL_MultiModeDrawElementsIBM(ctx->Exec, (mode, count, type, indices, primcount,
+                                      modestride));
 }
 
 
@@ -7505,372 +7507,372 @@ _mesa_init_dlist_table( struct _glapi_table *table )
    _mesa_loopback_init_api_table( table );
 
    /* GL 1.0 */
-   table->Accum = save_Accum;
-   table->AlphaFunc = save_AlphaFunc;
-   table->Bitmap = save_Bitmap;
-   table->BlendFunc = _mesa_BlendFunc; /* loops-back to BlendFuncSeparate */
-   table->CallList = _mesa_save_CallList;
-   table->CallLists = _mesa_save_CallLists;
-   table->Clear = save_Clear;
-   table->ClearAccum = save_ClearAccum;
-   table->ClearColor = save_ClearColor;
-   table->ClearDepth = save_ClearDepth;
-   table->ClearIndex = save_ClearIndex;
-   table->ClearStencil = save_ClearStencil;
-   table->ClipPlane = save_ClipPlane;
-   table->ColorMask = save_ColorMask;
-   table->ColorMaterial = save_ColorMaterial;
-   table->CopyPixels = save_CopyPixels;
-   table->CullFace = save_CullFace;
-   table->DeleteLists = _mesa_DeleteLists;
-   table->DepthFunc = save_DepthFunc;
-   table->DepthMask = save_DepthMask;
-   table->DepthRange = save_DepthRange;
-   table->Disable = save_Disable;
-   table->DrawBuffer = save_DrawBuffer;
-   table->DrawPixels = save_DrawPixels;
-   table->Enable = save_Enable;
-   table->EndList = _mesa_EndList;
-   table->EvalMesh1 = _mesa_save_EvalMesh1;
-   table->EvalMesh2 = _mesa_save_EvalMesh2;
-   table->Finish = exec_Finish;
-   table->Flush = exec_Flush;
-   table->Fogf = save_Fogf;
-   table->Fogfv = save_Fogfv;
-   table->Fogi = save_Fogi;
-   table->Fogiv = save_Fogiv;
-   table->FrontFace = save_FrontFace;
-   table->Frustum = save_Frustum;
-   table->GenLists = _mesa_GenLists;
-   table->GetBooleanv = exec_GetBooleanv;
-   table->GetClipPlane = exec_GetClipPlane;
-   table->GetDoublev = exec_GetDoublev;
-   table->GetError = exec_GetError;
-   table->GetFloatv = exec_GetFloatv;
-   table->GetIntegerv = exec_GetIntegerv;
-   table->GetLightfv = exec_GetLightfv;
-   table->GetLightiv = exec_GetLightiv;
-   table->GetMapdv = exec_GetMapdv;
-   table->GetMapfv = exec_GetMapfv;
-   table->GetMapiv = exec_GetMapiv;
-   table->GetMaterialfv = exec_GetMaterialfv;
-   table->GetMaterialiv = exec_GetMaterialiv;
-   table->GetPixelMapfv = exec_GetPixelMapfv;
-   table->GetPixelMapuiv = exec_GetPixelMapuiv;
-   table->GetPixelMapusv = exec_GetPixelMapusv;
-   table->GetPolygonStipple = exec_GetPolygonStipple;
-   table->GetString = exec_GetString;
-   table->GetTexEnvfv = exec_GetTexEnvfv;
-   table->GetTexEnviv = exec_GetTexEnviv;
-   table->GetTexGendv = exec_GetTexGendv;
-   table->GetTexGenfv = exec_GetTexGenfv;
-   table->GetTexGeniv = exec_GetTexGeniv;
-   table->GetTexImage = exec_GetTexImage;
-   table->GetTexLevelParameterfv = exec_GetTexLevelParameterfv;
-   table->GetTexLevelParameteriv = exec_GetTexLevelParameteriv;
-   table->GetTexParameterfv = exec_GetTexParameterfv;
-   table->GetTexParameteriv = exec_GetTexParameteriv;
-   table->Hint = save_Hint;
-   table->IndexMask = save_IndexMask;
-   table->InitNames = save_InitNames;
-   table->IsEnabled = exec_IsEnabled;
-   table->IsList = _mesa_IsList;
-   table->LightModelf = save_LightModelf;
-   table->LightModelfv = save_LightModelfv;
-   table->LightModeli = save_LightModeli;
-   table->LightModeliv = save_LightModeliv;
-   table->Lightf = save_Lightf;
-   table->Lightfv = save_Lightfv;
-   table->Lighti = save_Lighti;
-   table->Lightiv = save_Lightiv;
-   table->LineStipple = save_LineStipple;
-   table->LineWidth = save_LineWidth;
-   table->ListBase = save_ListBase;
-   table->LoadIdentity = save_LoadIdentity;
-   table->LoadMatrixd = save_LoadMatrixd;
-   table->LoadMatrixf = save_LoadMatrixf;
-   table->LoadName = save_LoadName;
-   table->LogicOp = save_LogicOp;
-   table->Map1d = save_Map1d;
-   table->Map1f = save_Map1f;
-   table->Map2d = save_Map2d;
-   table->Map2f = save_Map2f;
-   table->MapGrid1d = save_MapGrid1d;
-   table->MapGrid1f = save_MapGrid1f;
-   table->MapGrid2d = save_MapGrid2d;
-   table->MapGrid2f = save_MapGrid2f;
-   table->MatrixMode = save_MatrixMode;
-   table->MultMatrixd = save_MultMatrixd;
-   table->MultMatrixf = save_MultMatrixf;
-   table->NewList = save_NewList;
-   table->Ortho = save_Ortho;
-   table->PassThrough = save_PassThrough;
-   table->PixelMapfv = save_PixelMapfv;
-   table->PixelMapuiv = save_PixelMapuiv;
-   table->PixelMapusv = save_PixelMapusv;
-   table->PixelStoref = exec_PixelStoref;
-   table->PixelStorei = exec_PixelStorei;
-   table->PixelTransferf = save_PixelTransferf;
-   table->PixelTransferi = save_PixelTransferi;
-   table->PixelZoom = save_PixelZoom;
-   table->PointSize = save_PointSize;
-   table->PolygonMode = save_PolygonMode;
-   table->PolygonOffset = save_PolygonOffset;
-   table->PolygonStipple = save_PolygonStipple;
-   table->PopAttrib = save_PopAttrib;
-   table->PopMatrix = save_PopMatrix;
-   table->PopName = save_PopName;
-   table->PushAttrib = save_PushAttrib;
-   table->PushMatrix = save_PushMatrix;
-   table->PushName = save_PushName;
-   table->RasterPos2d = save_RasterPos2d;
-   table->RasterPos2dv = save_RasterPos2dv;
-   table->RasterPos2f = save_RasterPos2f;
-   table->RasterPos2fv = save_RasterPos2fv;
-   table->RasterPos2i = save_RasterPos2i;
-   table->RasterPos2iv = save_RasterPos2iv;
-   table->RasterPos2s = save_RasterPos2s;
-   table->RasterPos2sv = save_RasterPos2sv;
-   table->RasterPos3d = save_RasterPos3d;
-   table->RasterPos3dv = save_RasterPos3dv;
-   table->RasterPos3f = save_RasterPos3f;
-   table->RasterPos3fv = save_RasterPos3fv;
-   table->RasterPos3i = save_RasterPos3i;
-   table->RasterPos3iv = save_RasterPos3iv;
-   table->RasterPos3s = save_RasterPos3s;
-   table->RasterPos3sv = save_RasterPos3sv;
-   table->RasterPos4d = save_RasterPos4d;
-   table->RasterPos4dv = save_RasterPos4dv;
-   table->RasterPos4f = save_RasterPos4f;
-   table->RasterPos4fv = save_RasterPos4fv;
-   table->RasterPos4i = save_RasterPos4i;
-   table->RasterPos4iv = save_RasterPos4iv;
-   table->RasterPos4s = save_RasterPos4s;
-   table->RasterPos4sv = save_RasterPos4sv;
-   table->ReadBuffer = save_ReadBuffer;
-   table->ReadPixels = exec_ReadPixels;
-   table->RenderMode = exec_RenderMode;
-   table->Rotated = save_Rotated;
-   table->Rotatef = save_Rotatef;
-   table->Scaled = save_Scaled;
-   table->Scalef = save_Scalef;
-   table->Scissor = save_Scissor;
-   table->FeedbackBuffer = exec_FeedbackBuffer;
-   table->SelectBuffer = exec_SelectBuffer;
-   table->ShadeModel = save_ShadeModel;
-   table->StencilFunc = save_StencilFunc;
-   table->StencilMask = save_StencilMask;
-   table->StencilOp = save_StencilOp;
-   table->TexEnvf = save_TexEnvf;
-   table->TexEnvfv = save_TexEnvfv;
-   table->TexEnvi = save_TexEnvi;
-   table->TexEnviv = save_TexEnviv;
-   table->TexGend = save_TexGend;
-   table->TexGendv = save_TexGendv;
-   table->TexGenf = save_TexGenf;
-   table->TexGenfv = save_TexGenfv;
-   table->TexGeni = save_TexGeni;
-   table->TexGeniv = save_TexGeniv;
-   table->TexImage1D = save_TexImage1D;
-   table->TexImage2D = save_TexImage2D;
-   table->TexParameterf = save_TexParameterf;
-   table->TexParameterfv = save_TexParameterfv;
-   table->TexParameteri = save_TexParameteri;
-   table->TexParameteriv = save_TexParameteriv;
-   table->Translated = save_Translated;
-   table->Translatef = save_Translatef;
-   table->Viewport = save_Viewport;
+   SET_Accum(table, save_Accum);
+   SET_AlphaFunc(table, save_AlphaFunc);
+   SET_Bitmap(table, save_Bitmap);
+   SET_BlendFunc(table, _mesa_BlendFunc); /* loops-back to BlendFuncSeparate */
+   SET_CallList(table, _mesa_save_CallList);
+   SET_CallLists(table, _mesa_save_CallLists);
+   SET_Clear(table, save_Clear);
+   SET_ClearAccum(table, save_ClearAccum);
+   SET_ClearColor(table, save_ClearColor);
+   SET_ClearDepth(table, save_ClearDepth);
+   SET_ClearIndex(table, save_ClearIndex);
+   SET_ClearStencil(table, save_ClearStencil);
+   SET_ClipPlane(table, save_ClipPlane);
+   SET_ColorMask(table, save_ColorMask);
+   SET_ColorMaterial(table, save_ColorMaterial);
+   SET_CopyPixels(table, save_CopyPixels);
+   SET_CullFace(table, save_CullFace);
+   SET_DeleteLists(table, _mesa_DeleteLists);
+   SET_DepthFunc(table, save_DepthFunc);
+   SET_DepthMask(table, save_DepthMask);
+   SET_DepthRange(table, save_DepthRange);
+   SET_Disable(table, save_Disable);
+   SET_DrawBuffer(table, save_DrawBuffer);
+   SET_DrawPixels(table, save_DrawPixels);
+   SET_Enable(table, save_Enable);
+   SET_EndList(table, _mesa_EndList);
+   SET_EvalMesh1(table, _mesa_save_EvalMesh1);
+   SET_EvalMesh2(table, _mesa_save_EvalMesh2);
+   SET_Finish(table, exec_Finish);
+   SET_Flush(table, exec_Flush);
+   SET_Fogf(table, save_Fogf);
+   SET_Fogfv(table, save_Fogfv);
+   SET_Fogi(table, save_Fogi);
+   SET_Fogiv(table, save_Fogiv);
+   SET_FrontFace(table, save_FrontFace);
+   SET_Frustum(table, save_Frustum);
+   SET_GenLists(table, _mesa_GenLists);
+   SET_GetBooleanv(table, exec_GetBooleanv);
+   SET_GetClipPlane(table, exec_GetClipPlane);
+   SET_GetDoublev(table, exec_GetDoublev);
+   SET_GetError(table, exec_GetError);
+   SET_GetFloatv(table, exec_GetFloatv);
+   SET_GetIntegerv(table, exec_GetIntegerv);
+   SET_GetLightfv(table, exec_GetLightfv);
+   SET_GetLightiv(table, exec_GetLightiv);
+   SET_GetMapdv(table, exec_GetMapdv);
+   SET_GetMapfv(table, exec_GetMapfv);
+   SET_GetMapiv(table, exec_GetMapiv);
+   SET_GetMaterialfv(table, exec_GetMaterialfv);
+   SET_GetMaterialiv(table, exec_GetMaterialiv);
+   SET_GetPixelMapfv(table, exec_GetPixelMapfv);
+   SET_GetPixelMapuiv(table, exec_GetPixelMapuiv);
+   SET_GetPixelMapusv(table, exec_GetPixelMapusv);
+   SET_GetPolygonStipple(table, exec_GetPolygonStipple);
+   SET_GetString(table, exec_GetString);
+   SET_GetTexEnvfv(table, exec_GetTexEnvfv);
+   SET_GetTexEnviv(table, exec_GetTexEnviv);
+   SET_GetTexGendv(table, exec_GetTexGendv);
+   SET_GetTexGenfv(table, exec_GetTexGenfv);
+   SET_GetTexGeniv(table, exec_GetTexGeniv);
+   SET_GetTexImage(table, exec_GetTexImage);
+   SET_GetTexLevelParameterfv(table, exec_GetTexLevelParameterfv);
+   SET_GetTexLevelParameteriv(table, exec_GetTexLevelParameteriv);
+   SET_GetTexParameterfv(table, exec_GetTexParameterfv);
+   SET_GetTexParameteriv(table, exec_GetTexParameteriv);
+   SET_Hint(table, save_Hint);
+   SET_IndexMask(table, save_IndexMask);
+   SET_InitNames(table, save_InitNames);
+   SET_IsEnabled(table, exec_IsEnabled);
+   SET_IsList(table, _mesa_IsList);
+   SET_LightModelf(table, save_LightModelf);
+   SET_LightModelfv(table, save_LightModelfv);
+   SET_LightModeli(table, save_LightModeli);
+   SET_LightModeliv(table, save_LightModeliv);
+   SET_Lightf(table, save_Lightf);
+   SET_Lightfv(table, save_Lightfv);
+   SET_Lighti(table, save_Lighti);
+   SET_Lightiv(table, save_Lightiv);
+   SET_LineStipple(table, save_LineStipple);
+   SET_LineWidth(table, save_LineWidth);
+   SET_ListBase(table, save_ListBase);
+   SET_LoadIdentity(table, save_LoadIdentity);
+   SET_LoadMatrixd(table, save_LoadMatrixd);
+   SET_LoadMatrixf(table, save_LoadMatrixf);
+   SET_LoadName(table, save_LoadName);
+   SET_LogicOp(table, save_LogicOp);
+   SET_Map1d(table, save_Map1d);
+   SET_Map1f(table, save_Map1f);
+   SET_Map2d(table, save_Map2d);
+   SET_Map2f(table, save_Map2f);
+   SET_MapGrid1d(table, save_MapGrid1d);
+   SET_MapGrid1f(table, save_MapGrid1f);
+   SET_MapGrid2d(table, save_MapGrid2d);
+   SET_MapGrid2f(table, save_MapGrid2f);
+   SET_MatrixMode(table, save_MatrixMode);
+   SET_MultMatrixd(table, save_MultMatrixd);
+   SET_MultMatrixf(table, save_MultMatrixf);
+   SET_NewList(table, save_NewList);
+   SET_Ortho(table, save_Ortho);
+   SET_PassThrough(table, save_PassThrough);
+   SET_PixelMapfv(table, save_PixelMapfv);
+   SET_PixelMapuiv(table, save_PixelMapuiv);
+   SET_PixelMapusv(table, save_PixelMapusv);
+   SET_PixelStoref(table, exec_PixelStoref);
+   SET_PixelStorei(table, exec_PixelStorei);
+   SET_PixelTransferf(table, save_PixelTransferf);
+   SET_PixelTransferi(table, save_PixelTransferi);
+   SET_PixelZoom(table, save_PixelZoom);
+   SET_PointSize(table, save_PointSize);
+   SET_PolygonMode(table, save_PolygonMode);
+   SET_PolygonOffset(table, save_PolygonOffset);
+   SET_PolygonStipple(table, save_PolygonStipple);
+   SET_PopAttrib(table, save_PopAttrib);
+   SET_PopMatrix(table, save_PopMatrix);
+   SET_PopName(table, save_PopName);
+   SET_PushAttrib(table, save_PushAttrib);
+   SET_PushMatrix(table, save_PushMatrix);
+   SET_PushName(table, save_PushName);
+   SET_RasterPos2d(table, save_RasterPos2d);
+   SET_RasterPos2dv(table, save_RasterPos2dv);
+   SET_RasterPos2f(table, save_RasterPos2f);
+   SET_RasterPos2fv(table, save_RasterPos2fv);
+   SET_RasterPos2i(table, save_RasterPos2i);
+   SET_RasterPos2iv(table, save_RasterPos2iv);
+   SET_RasterPos2s(table, save_RasterPos2s);
+   SET_RasterPos2sv(table, save_RasterPos2sv);
+   SET_RasterPos3d(table, save_RasterPos3d);
+   SET_RasterPos3dv(table, save_RasterPos3dv);
+   SET_RasterPos3f(table, save_RasterPos3f);
+   SET_RasterPos3fv(table, save_RasterPos3fv);
+   SET_RasterPos3i(table, save_RasterPos3i);
+   SET_RasterPos3iv(table, save_RasterPos3iv);
+   SET_RasterPos3s(table, save_RasterPos3s);
+   SET_RasterPos3sv(table, save_RasterPos3sv);
+   SET_RasterPos4d(table, save_RasterPos4d);
+   SET_RasterPos4dv(table, save_RasterPos4dv);
+   SET_RasterPos4f(table, save_RasterPos4f);
+   SET_RasterPos4fv(table, save_RasterPos4fv);
+   SET_RasterPos4i(table, save_RasterPos4i);
+   SET_RasterPos4iv(table, save_RasterPos4iv);
+   SET_RasterPos4s(table, save_RasterPos4s);
+   SET_RasterPos4sv(table, save_RasterPos4sv);
+   SET_ReadBuffer(table, save_ReadBuffer);
+   SET_ReadPixels(table, exec_ReadPixels);
+   SET_RenderMode(table, exec_RenderMode);
+   SET_Rotated(table, save_Rotated);
+   SET_Rotatef(table, save_Rotatef);
+   SET_Scaled(table, save_Scaled);
+   SET_Scalef(table, save_Scalef);
+   SET_Scissor(table, save_Scissor);
+   SET_FeedbackBuffer(table, exec_FeedbackBuffer);
+   SET_SelectBuffer(table, exec_SelectBuffer);
+   SET_ShadeModel(table, save_ShadeModel);
+   SET_StencilFunc(table, save_StencilFunc);
+   SET_StencilMask(table, save_StencilMask);
+   SET_StencilOp(table, save_StencilOp);
+   SET_TexEnvf(table, save_TexEnvf);
+   SET_TexEnvfv(table, save_TexEnvfv);
+   SET_TexEnvi(table, save_TexEnvi);
+   SET_TexEnviv(table, save_TexEnviv);
+   SET_TexGend(table, save_TexGend);
+   SET_TexGendv(table, save_TexGendv);
+   SET_TexGenf(table, save_TexGenf);
+   SET_TexGenfv(table, save_TexGenfv);
+   SET_TexGeni(table, save_TexGeni);
+   SET_TexGeniv(table, save_TexGeniv);
+   SET_TexImage1D(table, save_TexImage1D);
+   SET_TexImage2D(table, save_TexImage2D);
+   SET_TexParameterf(table, save_TexParameterf);
+   SET_TexParameterfv(table, save_TexParameterfv);
+   SET_TexParameteri(table, save_TexParameteri);
+   SET_TexParameteriv(table, save_TexParameteriv);
+   SET_Translated(table, save_Translated);
+   SET_Translatef(table, save_Translatef);
+   SET_Viewport(table, save_Viewport);
 
    /* GL 1.1 */
-   table->AreTexturesResident = exec_AreTexturesResident;
-   table->AreTexturesResidentEXT = exec_AreTexturesResident;
-   table->BindTexture = save_BindTexture;
-   table->ColorPointer = exec_ColorPointer;
-   table->CopyTexImage1D = save_CopyTexImage1D;
-   table->CopyTexImage2D = save_CopyTexImage2D;
-   table->CopyTexSubImage1D = save_CopyTexSubImage1D;
-   table->CopyTexSubImage2D = save_CopyTexSubImage2D;
-   table->DeleteTextures = exec_DeleteTextures;
-   table->DisableClientState = exec_DisableClientState;
-   table->EdgeFlagPointer = exec_EdgeFlagPointer;
-   table->EnableClientState = exec_EnableClientState;
-   table->GenTextures = exec_GenTextures;
-   table->GenTexturesEXT = exec_GenTextures;
-   table->GetPointerv = exec_GetPointerv;
-   table->IndexPointer = exec_IndexPointer;
-   table->InterleavedArrays = exec_InterleavedArrays;
-   table->IsTexture = exec_IsTexture;
-   table->IsTextureEXT = exec_IsTexture;
-   table->NormalPointer = exec_NormalPointer;
-   table->PopClientAttrib = exec_PopClientAttrib;
-   table->PrioritizeTextures = save_PrioritizeTextures;
-   table->PushClientAttrib = exec_PushClientAttrib;
-   table->TexCoordPointer = exec_TexCoordPointer;
-   table->TexSubImage1D = save_TexSubImage1D;
-   table->TexSubImage2D = save_TexSubImage2D;
-   table->VertexPointer = exec_VertexPointer;
+   SET_AreTexturesResident(table, exec_AreTexturesResident);
+   SET_AreTexturesResidentEXT(table, exec_AreTexturesResident);
+   SET_BindTexture(table, save_BindTexture);
+   SET_ColorPointer(table, exec_ColorPointer);
+   SET_CopyTexImage1D(table, save_CopyTexImage1D);
+   SET_CopyTexImage2D(table, save_CopyTexImage2D);
+   SET_CopyTexSubImage1D(table, save_CopyTexSubImage1D);
+   SET_CopyTexSubImage2D(table, save_CopyTexSubImage2D);
+   SET_DeleteTextures(table, exec_DeleteTextures);
+   SET_DisableClientState(table, exec_DisableClientState);
+   SET_EdgeFlagPointer(table, exec_EdgeFlagPointer);
+   SET_EnableClientState(table, exec_EnableClientState);
+   SET_GenTextures(table, exec_GenTextures);
+   SET_GenTexturesEXT(table, exec_GenTextures);
+   SET_GetPointerv(table, exec_GetPointerv);
+   SET_IndexPointer(table, exec_IndexPointer);
+   SET_InterleavedArrays(table, exec_InterleavedArrays);
+   SET_IsTexture(table, exec_IsTexture);
+   SET_IsTextureEXT(table, exec_IsTexture);
+   SET_NormalPointer(table, exec_NormalPointer);
+   SET_PopClientAttrib(table, exec_PopClientAttrib);
+   SET_PrioritizeTextures(table, save_PrioritizeTextures);
+   SET_PushClientAttrib(table, exec_PushClientAttrib);
+   SET_TexCoordPointer(table, exec_TexCoordPointer);
+   SET_TexSubImage1D(table, save_TexSubImage1D);
+   SET_TexSubImage2D(table, save_TexSubImage2D);
+   SET_VertexPointer(table, exec_VertexPointer);
 
    /* GL 1.2 */
-   table->CopyTexSubImage3D = save_CopyTexSubImage3D;
-   table->TexImage3D = save_TexImage3D;
-   table->TexSubImage3D = save_TexSubImage3D;
+   SET_CopyTexSubImage3D(table, save_CopyTexSubImage3D);
+   SET_TexImage3D(table, save_TexImage3D);
+   SET_TexSubImage3D(table, save_TexSubImage3D);
 
    /* GL 2.0 */
-   table->StencilFuncSeparate = save_StencilFuncSeparate;
-   table->StencilMaskSeparate = save_StencilMaskSeparate;
-   table->StencilOpSeparate = save_StencilOpSeparate;
+   SET_StencilFuncSeparate(table, save_StencilFuncSeparate);
+   SET_StencilMaskSeparate(table, save_StencilMaskSeparate);
+   SET_StencilOpSeparate(table, save_StencilOpSeparate);
 
    /* GL_ARB_imaging */
    /* Not all are supported */
-   table->BlendColor = save_BlendColor;
-   table->BlendEquation = save_BlendEquation;
-   table->ColorSubTable = save_ColorSubTable;
-   table->ColorTable = save_ColorTable;
-   table->ColorTableParameterfv = save_ColorTableParameterfv;
-   table->ColorTableParameteriv = save_ColorTableParameteriv;
-   table->ConvolutionFilter1D = save_ConvolutionFilter1D;
-   table->ConvolutionFilter2D = save_ConvolutionFilter2D;
-   table->ConvolutionParameterf = save_ConvolutionParameterf;
-   table->ConvolutionParameterfv = save_ConvolutionParameterfv;
-   table->ConvolutionParameteri = save_ConvolutionParameteri;
-   table->ConvolutionParameteriv = save_ConvolutionParameteriv;
-   table->CopyColorSubTable = save_CopyColorSubTable;
-   table->CopyColorTable = save_CopyColorTable;
-   table->CopyConvolutionFilter1D = exec_CopyConvolutionFilter1D;
-   table->CopyConvolutionFilter2D = exec_CopyConvolutionFilter2D;
-   table->GetColorTable = exec_GetColorTable;
-   table->GetColorTableEXT = exec_GetColorTable;
-   table->GetColorTableParameterfv = exec_GetColorTableParameterfv;
-   table->GetColorTableParameterfvEXT = exec_GetColorTableParameterfv;
-   table->GetColorTableParameteriv = exec_GetColorTableParameteriv;
-   table->GetColorTableParameterivEXT = exec_GetColorTableParameteriv;
-   table->GetConvolutionFilter = exec_GetConvolutionFilter;
-   table->GetConvolutionFilterEXT = exec_GetConvolutionFilter;
-   table->GetConvolutionParameterfv = exec_GetConvolutionParameterfv;
-   table->GetConvolutionParameterfvEXT = exec_GetConvolutionParameterfv;
-   table->GetConvolutionParameteriv = exec_GetConvolutionParameteriv;
-   table->GetConvolutionParameterivEXT = exec_GetConvolutionParameteriv;
-   table->GetHistogram = exec_GetHistogram;
-   table->GetHistogramEXT = exec_GetHistogram;
-   table->GetHistogramParameterfv = exec_GetHistogramParameterfv;
-   table->GetHistogramParameterfvEXT = exec_GetHistogramParameterfv;
-   table->GetHistogramParameteriv = exec_GetHistogramParameteriv;
-   table->GetHistogramParameterivEXT = exec_GetHistogramParameteriv;
-   table->GetMinmax = exec_GetMinmax;
-   table->GetMinmaxEXT = exec_GetMinmax;
-   table->GetMinmaxParameterfv = exec_GetMinmaxParameterfv;
-   table->GetMinmaxParameterfvEXT = exec_GetMinmaxParameterfv;
-   table->GetMinmaxParameteriv = exec_GetMinmaxParameteriv;
-   table->GetMinmaxParameterivEXT = exec_GetMinmaxParameteriv;
-   table->GetSeparableFilter = exec_GetSeparableFilter;
-   table->GetSeparableFilterEXT = exec_GetSeparableFilter;
-   table->Histogram = save_Histogram;
-   table->Minmax = save_Minmax;
-   table->ResetHistogram = save_ResetHistogram;
-   table->ResetMinmax = save_ResetMinmax;
-   table->SeparableFilter2D = exec_SeparableFilter2D;
+   SET_BlendColor(table, save_BlendColor);
+   SET_BlendEquation(table, save_BlendEquation);
+   SET_ColorSubTable(table, save_ColorSubTable);
+   SET_ColorTable(table, save_ColorTable);
+   SET_ColorTableParameterfv(table, save_ColorTableParameterfv);
+   SET_ColorTableParameteriv(table, save_ColorTableParameteriv);
+   SET_ConvolutionFilter1D(table, save_ConvolutionFilter1D);
+   SET_ConvolutionFilter2D(table, save_ConvolutionFilter2D);
+   SET_ConvolutionParameterf(table, save_ConvolutionParameterf);
+   SET_ConvolutionParameterfv(table, save_ConvolutionParameterfv);
+   SET_ConvolutionParameteri(table, save_ConvolutionParameteri);
+   SET_ConvolutionParameteriv(table, save_ConvolutionParameteriv);
+   SET_CopyColorSubTable(table, save_CopyColorSubTable);
+   SET_CopyColorTable(table, save_CopyColorTable);
+   SET_CopyConvolutionFilter1D(table, exec_CopyConvolutionFilter1D);
+   SET_CopyConvolutionFilter2D(table, exec_CopyConvolutionFilter2D);
+   SET_GetColorTable(table, exec_GetColorTable);
+   SET_GetColorTableEXT(table, exec_GetColorTable);
+   SET_GetColorTableParameterfv(table, exec_GetColorTableParameterfv);
+   SET_GetColorTableParameterfvEXT(table, exec_GetColorTableParameterfv);
+   SET_GetColorTableParameteriv(table, exec_GetColorTableParameteriv);
+   SET_GetColorTableParameterivEXT(table, exec_GetColorTableParameteriv);
+   SET_GetConvolutionFilter(table, exec_GetConvolutionFilter);
+   SET_GetConvolutionFilterEXT(table, exec_GetConvolutionFilter);
+   SET_GetConvolutionParameterfv(table, exec_GetConvolutionParameterfv);
+   SET_GetConvolutionParameterfvEXT(table, exec_GetConvolutionParameterfv);
+   SET_GetConvolutionParameteriv(table, exec_GetConvolutionParameteriv);
+   SET_GetConvolutionParameterivEXT(table, exec_GetConvolutionParameteriv);
+   SET_GetHistogram(table, exec_GetHistogram);
+   SET_GetHistogramEXT(table, exec_GetHistogram);
+   SET_GetHistogramParameterfv(table, exec_GetHistogramParameterfv);
+   SET_GetHistogramParameterfvEXT(table, exec_GetHistogramParameterfv);
+   SET_GetHistogramParameteriv(table, exec_GetHistogramParameteriv);
+   SET_GetHistogramParameterivEXT(table, exec_GetHistogramParameteriv);
+   SET_GetMinmax(table, exec_GetMinmax);
+   SET_GetMinmaxEXT(table, exec_GetMinmax);
+   SET_GetMinmaxParameterfv(table, exec_GetMinmaxParameterfv);
+   SET_GetMinmaxParameterfvEXT(table, exec_GetMinmaxParameterfv);
+   SET_GetMinmaxParameteriv(table, exec_GetMinmaxParameteriv);
+   SET_GetMinmaxParameterivEXT(table, exec_GetMinmaxParameteriv);
+   SET_GetSeparableFilter(table, exec_GetSeparableFilter);
+   SET_GetSeparableFilterEXT(table, exec_GetSeparableFilter);
+   SET_Histogram(table, save_Histogram);
+   SET_Minmax(table, save_Minmax);
+   SET_ResetHistogram(table, save_ResetHistogram);
+   SET_ResetMinmax(table, save_ResetMinmax);
+   SET_SeparableFilter2D(table, exec_SeparableFilter2D);
 
    /* 2. GL_EXT_blend_color */
 #if 0
-   table->BlendColorEXT = save_BlendColorEXT;
+   SET_BlendColorEXT(table, save_BlendColorEXT);
 #endif
 
    /* 3. GL_EXT_polygon_offset */
-   table->PolygonOffsetEXT = save_PolygonOffsetEXT;
+   SET_PolygonOffsetEXT(table, save_PolygonOffsetEXT);
 
    /* 6. GL_EXT_texture3d */
 #if 0
-   table->CopyTexSubImage3DEXT = save_CopyTexSubImage3D;
-   table->TexImage3DEXT = save_TexImage3DEXT;
-   table->TexSubImage3DEXT = save_TexSubImage3D;
+   SET_CopyTexSubImage3DEXT(table, save_CopyTexSubImage3D);
+   SET_TexImage3DEXT(table, save_TexImage3DEXT);
+   SET_TexSubImage3DEXT(table, save_TexSubImage3D);
 #endif
 
    /* 15. GL_SGIX_pixel_texture */
-   table->PixelTexGenSGIX = save_PixelTexGenSGIX;
+   SET_PixelTexGenSGIX(table, save_PixelTexGenSGIX);
 
    /* 15. GL_SGIS_pixel_texture */
-   table->PixelTexGenParameteriSGIS = save_PixelTexGenParameteriSGIS;
-   table->PixelTexGenParameterfSGIS = save_PixelTexGenParameterfSGIS;
-   table->PixelTexGenParameterivSGIS = save_PixelTexGenParameterivSGIS;
-   table->PixelTexGenParameterfvSGIS = save_PixelTexGenParameterfvSGIS;
-   table->GetPixelTexGenParameterivSGIS = exec_GetPixelTexGenParameterivSGIS;
-   table->GetPixelTexGenParameterfvSGIS = exec_GetPixelTexGenParameterfvSGIS;
+   SET_PixelTexGenParameteriSGIS(table, save_PixelTexGenParameteriSGIS);
+   SET_PixelTexGenParameterfSGIS(table, save_PixelTexGenParameterfSGIS);
+   SET_PixelTexGenParameterivSGIS(table, save_PixelTexGenParameterivSGIS);
+   SET_PixelTexGenParameterfvSGIS(table, save_PixelTexGenParameterfvSGIS);
+   SET_GetPixelTexGenParameterivSGIS(table, exec_GetPixelTexGenParameterivSGIS);
+   SET_GetPixelTexGenParameterfvSGIS(table, exec_GetPixelTexGenParameterfvSGIS);
 
    /* 30. GL_EXT_vertex_array */
-   table->ColorPointerEXT = exec_ColorPointerEXT;
-   table->EdgeFlagPointerEXT = exec_EdgeFlagPointerEXT;
-   table->IndexPointerEXT = exec_IndexPointerEXT;
-   table->NormalPointerEXT = exec_NormalPointerEXT;
-   table->TexCoordPointerEXT = exec_TexCoordPointerEXT;
-   table->VertexPointerEXT = exec_VertexPointerEXT;
+   SET_ColorPointerEXT(table, exec_ColorPointerEXT);
+   SET_EdgeFlagPointerEXT(table, exec_EdgeFlagPointerEXT);
+   SET_IndexPointerEXT(table, exec_IndexPointerEXT);
+   SET_NormalPointerEXT(table, exec_NormalPointerEXT);
+   SET_TexCoordPointerEXT(table, exec_TexCoordPointerEXT);
+   SET_VertexPointerEXT(table, exec_VertexPointerEXT);
 
    /* 37. GL_EXT_blend_minmax */
 #if 0
-   table->BlendEquationEXT = save_BlendEquationEXT;
+   SET_BlendEquationEXT(table, save_BlendEquationEXT);
 #endif
 
    /* 54. GL_EXT_point_parameters */
-   table->PointParameterfEXT = save_PointParameterfEXT;
-   table->PointParameterfvEXT = save_PointParameterfvEXT;
+   SET_PointParameterfEXT(table, save_PointParameterfEXT);
+   SET_PointParameterfvEXT(table, save_PointParameterfvEXT);
 
    /* 78. GL_EXT_paletted_texture */
 #if 0
-   table->ColorTableEXT = save_ColorTable;
-   table->ColorSubTableEXT = save_ColorSubTable;
+   SET_ColorTableEXT(table, save_ColorTable);
+   SET_ColorSubTableEXT(table, save_ColorSubTable);
 #endif
-   table->GetColorTableEXT = exec_GetColorTable;
-   table->GetColorTableParameterfvEXT = exec_GetColorTableParameterfv;
-   table->GetColorTableParameterivEXT = exec_GetColorTableParameteriv;
+   SET_GetColorTableEXT(table, exec_GetColorTable);
+   SET_GetColorTableParameterfvEXT(table, exec_GetColorTableParameterfv);
+   SET_GetColorTableParameterivEXT(table, exec_GetColorTableParameteriv);
 
    /* 97. GL_EXT_compiled_vertex_array */
-   table->LockArraysEXT = exec_LockArraysEXT;
-   table->UnlockArraysEXT = exec_UnlockArraysEXT;
+   SET_LockArraysEXT(table, exec_LockArraysEXT);
+   SET_UnlockArraysEXT(table, exec_UnlockArraysEXT);
 
    /* 145. GL_EXT_secondary_color */
-   table->SecondaryColorPointerEXT = exec_SecondaryColorPointerEXT;
+   SET_SecondaryColorPointerEXT(table, exec_SecondaryColorPointerEXT);
 
    /* 148. GL_EXT_multi_draw_arrays */
-   table->MultiDrawArraysEXT = exec_MultiDrawArraysEXT;
-   table->MultiDrawElementsEXT = exec_MultiDrawElementsEXT;
+   SET_MultiDrawArraysEXT(table, exec_MultiDrawArraysEXT);
+   SET_MultiDrawElementsEXT(table, exec_MultiDrawElementsEXT);
 
    /* 149. GL_EXT_fog_coord */
-   table->FogCoordPointerEXT = exec_FogCoordPointerEXT;
+   SET_FogCoordPointerEXT(table, exec_FogCoordPointerEXT);
 
    /* 173. GL_EXT_blend_func_separate */
-   table->BlendFuncSeparateEXT = save_BlendFuncSeparateEXT;
+   SET_BlendFuncSeparateEXT(table, save_BlendFuncSeparateEXT);
 
    /* 196. GL_MESA_resize_buffers */
-   table->ResizeBuffersMESA = _mesa_ResizeBuffersMESA;
+   SET_ResizeBuffersMESA(table, _mesa_ResizeBuffersMESA);
 
    /* 197. GL_MESA_window_pos */
-   table->WindowPos2dMESA = save_WindowPos2dMESA;
-   table->WindowPos2dvMESA = save_WindowPos2dvMESA;
-   table->WindowPos2fMESA = save_WindowPos2fMESA;
-   table->WindowPos2fvMESA = save_WindowPos2fvMESA;
-   table->WindowPos2iMESA = save_WindowPos2iMESA;
-   table->WindowPos2ivMESA = save_WindowPos2ivMESA;
-   table->WindowPos2sMESA = save_WindowPos2sMESA;
-   table->WindowPos2svMESA = save_WindowPos2svMESA;
-   table->WindowPos3dMESA = save_WindowPos3dMESA;
-   table->WindowPos3dvMESA = save_WindowPos3dvMESA;
-   table->WindowPos3fMESA = save_WindowPos3fMESA;
-   table->WindowPos3fvMESA = save_WindowPos3fvMESA;
-   table->WindowPos3iMESA = save_WindowPos3iMESA;
-   table->WindowPos3ivMESA = save_WindowPos3ivMESA;
-   table->WindowPos3sMESA = save_WindowPos3sMESA;
-   table->WindowPos3svMESA = save_WindowPos3svMESA;
-   table->WindowPos4dMESA = save_WindowPos4dMESA;
-   table->WindowPos4dvMESA = save_WindowPos4dvMESA;
-   table->WindowPos4fMESA = save_WindowPos4fMESA;
-   table->WindowPos4fvMESA = save_WindowPos4fvMESA;
-   table->WindowPos4iMESA = save_WindowPos4iMESA;
-   table->WindowPos4ivMESA = save_WindowPos4ivMESA;
-   table->WindowPos4sMESA = save_WindowPos4sMESA;
-   table->WindowPos4svMESA = save_WindowPos4svMESA;
+   SET_WindowPos2dMESA(table, save_WindowPos2dMESA);
+   SET_WindowPos2dvMESA(table, save_WindowPos2dvMESA);
+   SET_WindowPos2fMESA(table, save_WindowPos2fMESA);
+   SET_WindowPos2fvMESA(table, save_WindowPos2fvMESA);
+   SET_WindowPos2iMESA(table, save_WindowPos2iMESA);
+   SET_WindowPos2ivMESA(table, save_WindowPos2ivMESA);
+   SET_WindowPos2sMESA(table, save_WindowPos2sMESA);
+   SET_WindowPos2svMESA(table, save_WindowPos2svMESA);
+   SET_WindowPos3dMESA(table, save_WindowPos3dMESA);
+   SET_WindowPos3dvMESA(table, save_WindowPos3dvMESA);
+   SET_WindowPos3fMESA(table, save_WindowPos3fMESA);
+   SET_WindowPos3fvMESA(table, save_WindowPos3fvMESA);
+   SET_WindowPos3iMESA(table, save_WindowPos3iMESA);
+   SET_WindowPos3ivMESA(table, save_WindowPos3ivMESA);
+   SET_WindowPos3sMESA(table, save_WindowPos3sMESA);
+   SET_WindowPos3svMESA(table, save_WindowPos3svMESA);
+   SET_WindowPos4dMESA(table, save_WindowPos4dMESA);
+   SET_WindowPos4dvMESA(table, save_WindowPos4dvMESA);
+   SET_WindowPos4fMESA(table, save_WindowPos4fMESA);
+   SET_WindowPos4fvMESA(table, save_WindowPos4fvMESA);
+   SET_WindowPos4iMESA(table, save_WindowPos4iMESA);
+   SET_WindowPos4ivMESA(table, save_WindowPos4ivMESA);
+   SET_WindowPos4sMESA(table, save_WindowPos4sMESA);
+   SET_WindowPos4svMESA(table, save_WindowPos4svMESA);
 
    /* 200. GL_IBM_multimode_draw_arrays */
-   table->MultiModeDrawArraysIBM = exec_MultiModeDrawArraysIBM;
-   table->MultiModeDrawElementsIBM = exec_MultiModeDrawElementsIBM;
+   SET_MultiModeDrawArraysIBM(table, exec_MultiModeDrawArraysIBM);
+   SET_MultiModeDrawElementsIBM(table, exec_MultiModeDrawElementsIBM);
 
 #if FEATURE_NV_vertex_program
    /* 233. GL_NV_vertex_program */
@@ -7878,86 +7880,86 @@ _mesa_init_dlist_table( struct _glapi_table *table )
     * AreProgramsResidentNV, IsProgramNV, GenProgramsNV, DeleteProgramsNV,
     * VertexAttribPointerNV, GetProgram*, GetVertexAttrib*
     */
-   table->BindProgramNV = save_BindProgramNV;
-   table->DeleteProgramsNV = _mesa_DeletePrograms;
-   table->ExecuteProgramNV = save_ExecuteProgramNV;
-   table->GenProgramsNV = _mesa_GenPrograms;
-   table->AreProgramsResidentNV = _mesa_AreProgramsResidentNV;
-   table->RequestResidentProgramsNV = save_RequestResidentProgramsNV;
-   table->GetProgramParameterfvNV = _mesa_GetProgramParameterfvNV;
-   table->GetProgramParameterdvNV = _mesa_GetProgramParameterdvNV;
-   table->GetProgramivNV = _mesa_GetProgramivNV;
-   table->GetProgramStringNV = _mesa_GetProgramStringNV;
-   table->GetTrackMatrixivNV = _mesa_GetTrackMatrixivNV;
-   table->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV;
-   table->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV;
-   table->GetVertexAttribivNV = _mesa_GetVertexAttribivNV;
-   table->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV;
-   table->IsProgramNV = _mesa_IsProgram;
-   table->LoadProgramNV = save_LoadProgramNV;
-   table->ProgramParameter4dNV = save_ProgramParameter4dNV;
-   table->ProgramParameter4dvNV = save_ProgramParameter4dvNV;
-   table->ProgramParameter4fNV = save_ProgramParameter4fNV;
-   table->ProgramParameter4fvNV = save_ProgramParameter4fvNV;
-   table->ProgramParameters4dvNV = save_ProgramParameters4dvNV;
-   table->ProgramParameters4fvNV = save_ProgramParameters4fvNV;
-   table->TrackMatrixNV = save_TrackMatrixNV;
-   table->VertexAttribPointerNV = _mesa_VertexAttribPointerNV;
+   SET_BindProgramNV(table, save_BindProgramNV);
+   SET_DeleteProgramsNV(table, _mesa_DeletePrograms);
+   SET_ExecuteProgramNV(table, save_ExecuteProgramNV);
+   SET_GenProgramsNV(table, _mesa_GenPrograms);
+   SET_AreProgramsResidentNV(table, _mesa_AreProgramsResidentNV);
+   SET_RequestResidentProgramsNV(table, save_RequestResidentProgramsNV);
+   SET_GetProgramParameterfvNV(table, _mesa_GetProgramParameterfvNV);
+   SET_GetProgramParameterdvNV(table, _mesa_GetProgramParameterdvNV);
+   SET_GetProgramivNV(table, _mesa_GetProgramivNV);
+   SET_GetProgramStringNV(table, _mesa_GetProgramStringNV);
+   SET_GetTrackMatrixivNV(table, _mesa_GetTrackMatrixivNV);
+   SET_GetVertexAttribdvNV(table, _mesa_GetVertexAttribdvNV);
+   SET_GetVertexAttribfvNV(table, _mesa_GetVertexAttribfvNV);
+   SET_GetVertexAttribivNV(table, _mesa_GetVertexAttribivNV);
+   SET_GetVertexAttribPointervNV(table, _mesa_GetVertexAttribPointervNV);
+   SET_IsProgramNV(table, _mesa_IsProgram);
+   SET_LoadProgramNV(table, save_LoadProgramNV);
+   SET_ProgramParameter4dNV(table, save_ProgramParameter4dNV);
+   SET_ProgramParameter4dvNV(table, save_ProgramParameter4dvNV);
+   SET_ProgramParameter4fNV(table, save_ProgramParameter4fNV);
+   SET_ProgramParameter4fvNV(table, save_ProgramParameter4fvNV);
+   SET_ProgramParameters4dvNV(table, save_ProgramParameters4dvNV);
+   SET_ProgramParameters4fvNV(table, save_ProgramParameters4fvNV);
+   SET_TrackMatrixNV(table, save_TrackMatrixNV);
+   SET_VertexAttribPointerNV(table, _mesa_VertexAttribPointerNV);
 #endif
 
    /* 245. GL_ATI_fragment_shader */
 #if FEATURE_ATI_fragment_shader
-   table->BindFragmentShaderATI = save_BindFragmentShaderATI;
-   table->SetFragmentShaderConstantATI = save_SetFragmentShaderConstantATI;
+   SET_BindFragmentShaderATI(table, save_BindFragmentShaderATI);
+   SET_SetFragmentShaderConstantATI(table, save_SetFragmentShaderConstantATI);
 #endif
 
    /* 282. GL_NV_fragment_program */
 #if FEATURE_NV_fragment_program
-   table->ProgramNamedParameter4fNV = save_ProgramNamedParameter4fNV;
-   table->ProgramNamedParameter4dNV = save_ProgramNamedParameter4dNV;
-   table->ProgramNamedParameter4fvNV = save_ProgramNamedParameter4fvNV;
-   table->ProgramNamedParameter4dvNV = save_ProgramNamedParameter4dvNV;
-   table->GetProgramNamedParameterfvNV = _mesa_GetProgramNamedParameterfvNV;
-   table->GetProgramNamedParameterdvNV = _mesa_GetProgramNamedParameterdvNV;
-   table->ProgramLocalParameter4dARB = save_ProgramLocalParameter4dARB;
-   table->ProgramLocalParameter4dvARB = save_ProgramLocalParameter4dvARB;
-   table->ProgramLocalParameter4fARB = save_ProgramLocalParameter4fARB;
-   table->ProgramLocalParameter4fvARB = save_ProgramLocalParameter4fvARB;
-   table->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB;
-   table->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB;
+   SET_ProgramNamedParameter4fNV(table, save_ProgramNamedParameter4fNV);
+   SET_ProgramNamedParameter4dNV(table, save_ProgramNamedParameter4dNV);
+   SET_ProgramNamedParameter4fvNV(table, save_ProgramNamedParameter4fvNV);
+   SET_ProgramNamedParameter4dvNV(table, save_ProgramNamedParameter4dvNV);
+   SET_GetProgramNamedParameterfvNV(table, _mesa_GetProgramNamedParameterfvNV);
+   SET_GetProgramNamedParameterdvNV(table, _mesa_GetProgramNamedParameterdvNV);
+   SET_ProgramLocalParameter4dARB(table, save_ProgramLocalParameter4dARB);
+   SET_ProgramLocalParameter4dvARB(table, save_ProgramLocalParameter4dvARB);
+   SET_ProgramLocalParameter4fARB(table, save_ProgramLocalParameter4fARB);
+   SET_ProgramLocalParameter4fvARB(table, save_ProgramLocalParameter4fvARB);
+   SET_GetProgramLocalParameterdvARB(table, _mesa_GetProgramLocalParameterdvARB);
+   SET_GetProgramLocalParameterfvARB(table, _mesa_GetProgramLocalParameterfvARB);
 #endif
 
    /* 262. GL_NV_point_sprite */
-   table->PointParameteriNV = save_PointParameteriNV;
-   table->PointParameterivNV = save_PointParameterivNV;
+   SET_PointParameteriNV(table, save_PointParameteriNV);
+   SET_PointParameterivNV(table, save_PointParameterivNV);
 
    /* 268. GL_EXT_stencil_two_side */
-   table->ActiveStencilFaceEXT = save_ActiveStencilFaceEXT;
+   SET_ActiveStencilFaceEXT(table, save_ActiveStencilFaceEXT);
 
    /* ???. GL_EXT_depth_bounds_test */
-   table->DepthBoundsEXT = save_DepthBoundsEXT;
+   SET_DepthBoundsEXT(table, save_DepthBoundsEXT);
 
    /* ARB 1. GL_ARB_multitexture */
-   table->ActiveTextureARB = save_ActiveTextureARB;
-   table->ClientActiveTextureARB = exec_ClientActiveTextureARB;
+   SET_ActiveTextureARB(table, save_ActiveTextureARB);
+   SET_ClientActiveTextureARB(table, exec_ClientActiveTextureARB);
 
    /* ARB 3. GL_ARB_transpose_matrix */
-   table->LoadTransposeMatrixdARB = save_LoadTransposeMatrixdARB;
-   table->LoadTransposeMatrixfARB = save_LoadTransposeMatrixfARB;
-   table->MultTransposeMatrixdARB = save_MultTransposeMatrixdARB;
-   table->MultTransposeMatrixfARB = save_MultTransposeMatrixfARB;
+   SET_LoadTransposeMatrixdARB(table, save_LoadTransposeMatrixdARB);
+   SET_LoadTransposeMatrixfARB(table, save_LoadTransposeMatrixfARB);
+   SET_MultTransposeMatrixdARB(table, save_MultTransposeMatrixdARB);
+   SET_MultTransposeMatrixfARB(table, save_MultTransposeMatrixfARB);
 
    /* ARB 5. GL_ARB_multisample */
-   table->SampleCoverageARB = save_SampleCoverageARB;
+   SET_SampleCoverageARB(table, save_SampleCoverageARB);
 
    /* ARB 12. GL_ARB_texture_compression */
-   table->CompressedTexImage3DARB = save_CompressedTexImage3DARB;
-   table->CompressedTexImage2DARB = save_CompressedTexImage2DARB;
-   table->CompressedTexImage1DARB = save_CompressedTexImage1DARB;
-   table->CompressedTexSubImage3DARB = save_CompressedTexSubImage3DARB;
-   table->CompressedTexSubImage2DARB = save_CompressedTexSubImage2DARB;
-   table->CompressedTexSubImage1DARB = save_CompressedTexSubImage1DARB;
-   table->GetCompressedTexImageARB = exec_GetCompressedTexImageARB;
+   SET_CompressedTexImage3DARB(table, save_CompressedTexImage3DARB);
+   SET_CompressedTexImage2DARB(table, save_CompressedTexImage2DARB);
+   SET_CompressedTexImage1DARB(table, save_CompressedTexImage1DARB);
+   SET_CompressedTexSubImage3DARB(table, save_CompressedTexSubImage3DARB);
+   SET_CompressedTexSubImage2DARB(table, save_CompressedTexSubImage2DARB);
+   SET_CompressedTexSubImage1DARB(table, save_CompressedTexSubImage1DARB);
+   SET_GetCompressedTexImageARB(table, exec_GetCompressedTexImageARB);
 
    /* ARB 14. GL_ARB_point_parameters */
    /* aliased with EXT_point_parameters functions */
@@ -7969,64 +7971,64 @@ _mesa_init_dlist_table( struct _glapi_table *table )
    /* ARB 27. GL_ARB_fragment_program */
 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
    /* glVertexAttrib* functions alias the NV ones, handled elsewhere */
-   table->VertexAttribPointerARB = _mesa_VertexAttribPointerARB;
-   table->EnableVertexAttribArrayARB = _mesa_EnableVertexAttribArrayARB;
-   table->DisableVertexAttribArrayARB = _mesa_DisableVertexAttribArrayARB;
-   table->ProgramStringARB = save_ProgramStringARB;
-   table->BindProgramNV = save_BindProgramNV;
-   table->DeleteProgramsNV = _mesa_DeletePrograms;
-   table->GenProgramsNV = _mesa_GenPrograms;
-   table->IsProgramNV = _mesa_IsProgram;
-   table->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV;
-   table->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV;
-   table->GetVertexAttribivNV = _mesa_GetVertexAttribivNV;
-   table->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV;
-   table->ProgramEnvParameter4dARB = save_ProgramEnvParameter4dARB;
-   table->ProgramEnvParameter4dvARB = save_ProgramEnvParameter4dvARB;
-   table->ProgramEnvParameter4fARB = save_ProgramEnvParameter4fARB;
-   table->ProgramEnvParameter4fvARB = save_ProgramEnvParameter4fvARB;
-   table->ProgramLocalParameter4dARB = save_ProgramLocalParameter4dARB;
-   table->ProgramLocalParameter4dvARB = save_ProgramLocalParameter4dvARB;
-   table->ProgramLocalParameter4fARB = save_ProgramLocalParameter4fARB;
-   table->ProgramLocalParameter4fvARB = save_ProgramLocalParameter4fvARB;
-   table->GetProgramEnvParameterdvARB = _mesa_GetProgramEnvParameterdvARB;
-   table->GetProgramEnvParameterfvARB = _mesa_GetProgramEnvParameterfvARB;
-   table->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB;
-   table->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB;
-   table->GetProgramivARB = _mesa_GetProgramivARB;
-   table->GetProgramStringARB = _mesa_GetProgramStringARB;
+   SET_VertexAttribPointerARB(table, _mesa_VertexAttribPointerARB);
+   SET_EnableVertexAttribArrayARB(table, _mesa_EnableVertexAttribArrayARB);
+   SET_DisableVertexAttribArrayARB(table, _mesa_DisableVertexAttribArrayARB);
+   SET_ProgramStringARB(table, save_ProgramStringARB);
+   SET_BindProgramNV(table, save_BindProgramNV);
+   SET_DeleteProgramsNV(table, _mesa_DeletePrograms);
+   SET_GenProgramsNV(table, _mesa_GenPrograms);
+   SET_IsProgramNV(table, _mesa_IsProgram);
+   SET_GetVertexAttribdvNV(table, _mesa_GetVertexAttribdvNV);
+   SET_GetVertexAttribfvNV(table, _mesa_GetVertexAttribfvNV);
+   SET_GetVertexAttribivNV(table, _mesa_GetVertexAttribivNV);
+   SET_GetVertexAttribPointervNV(table, _mesa_GetVertexAttribPointervNV);
+   SET_ProgramEnvParameter4dARB(table, save_ProgramEnvParameter4dARB);
+   SET_ProgramEnvParameter4dvARB(table, save_ProgramEnvParameter4dvARB);
+   SET_ProgramEnvParameter4fARB(table, save_ProgramEnvParameter4fARB);
+   SET_ProgramEnvParameter4fvARB(table, save_ProgramEnvParameter4fvARB);
+   SET_ProgramLocalParameter4dARB(table, save_ProgramLocalParameter4dARB);
+   SET_ProgramLocalParameter4dvARB(table, save_ProgramLocalParameter4dvARB);
+   SET_ProgramLocalParameter4fARB(table, save_ProgramLocalParameter4fARB);
+   SET_ProgramLocalParameter4fvARB(table, save_ProgramLocalParameter4fvARB);
+   SET_GetProgramEnvParameterdvARB(table, _mesa_GetProgramEnvParameterdvARB);
+   SET_GetProgramEnvParameterfvARB(table, _mesa_GetProgramEnvParameterfvARB);
+   SET_GetProgramLocalParameterdvARB(table, _mesa_GetProgramLocalParameterdvARB);
+   SET_GetProgramLocalParameterfvARB(table, _mesa_GetProgramLocalParameterfvARB);
+   SET_GetProgramivARB(table, _mesa_GetProgramivARB);
+   SET_GetProgramStringARB(table, _mesa_GetProgramStringARB);
 #endif
 
    /* ARB 28. GL_ARB_vertex_buffer_object */
 #if FEATURE_ARB_vertex_buffer_object
    /* None of the extension's functions get compiled */
-   table->BindBufferARB = _mesa_BindBufferARB;
-   table->BufferDataARB = _mesa_BufferDataARB;
-   table->BufferSubDataARB = _mesa_BufferSubDataARB;
-   table->DeleteBuffersARB = _mesa_DeleteBuffersARB;
-   table->GenBuffersARB = _mesa_GenBuffersARB;
-   table->GetBufferParameterivARB = _mesa_GetBufferParameterivARB;
-   table->GetBufferPointervARB = _mesa_GetBufferPointervARB;
-   table->GetBufferSubDataARB = _mesa_GetBufferSubDataARB;
-   table->IsBufferARB = _mesa_IsBufferARB;
-   table->MapBufferARB = _mesa_MapBufferARB;
-   table->UnmapBufferARB = _mesa_UnmapBufferARB;
+   SET_BindBufferARB(table, _mesa_BindBufferARB);
+   SET_BufferDataARB(table, _mesa_BufferDataARB);
+   SET_BufferSubDataARB(table, _mesa_BufferSubDataARB);
+   SET_DeleteBuffersARB(table, _mesa_DeleteBuffersARB);
+   SET_GenBuffersARB(table, _mesa_GenBuffersARB);
+   SET_GetBufferParameterivARB(table, _mesa_GetBufferParameterivARB);
+   SET_GetBufferPointervARB(table, _mesa_GetBufferPointervARB);
+   SET_GetBufferSubDataARB(table, _mesa_GetBufferSubDataARB);
+   SET_IsBufferARB(table, _mesa_IsBufferARB);
+   SET_MapBufferARB(table, _mesa_MapBufferARB);
+   SET_UnmapBufferARB(table, _mesa_UnmapBufferARB);
 #endif
 
 #if FEATURE_ARB_occlusion_query
-   table->BeginQueryARB = save_BeginQueryARB;
-   table->EndQueryARB = save_EndQueryARB;
-   table->GenQueriesARB = _mesa_GenQueriesARB;
-   table->DeleteQueriesARB = _mesa_DeleteQueriesARB;
-   table->IsQueryARB = _mesa_IsQueryARB;
-   table->GetQueryivARB = _mesa_GetQueryivARB;
-   table->GetQueryObjectivARB = _mesa_GetQueryObjectivARB;
-   table->GetQueryObjectuivARB = _mesa_GetQueryObjectuivARB;
+   SET_BeginQueryARB(table, save_BeginQueryARB);
+   SET_EndQueryARB(table, save_EndQueryARB);
+   SET_GenQueriesARB(table, _mesa_GenQueriesARB);
+   SET_DeleteQueriesARB(table, _mesa_DeleteQueriesARB);
+   SET_IsQueryARB(table, _mesa_IsQueryARB);
+   SET_GetQueryivARB(table, _mesa_GetQueryivARB);
+   SET_GetQueryObjectivARB(table, _mesa_GetQueryObjectivARB);
+   SET_GetQueryObjectuivARB(table, _mesa_GetQueryObjectuivARB);
 #endif
-   table->DrawBuffersARB = save_DrawBuffersARB;
+   SET_DrawBuffersARB(table, save_DrawBuffersARB);
 
    /* 299. GL_EXT_blend_equation_separate */
-   table->BlendEquationSeparateEXT = save_BlendEquationSeparateEXT;
+   SET_BlendEquationSeparateEXT(table, save_BlendEquationSeparateEXT);
 }
 
 
@@ -8050,7 +8052,7 @@ static void GLAPIENTRY print_list( GLcontext *ctx, GLuint list )
    Node *n;
    GLboolean done;
 
-   if (!GL_CALL(IsList)(list)) {
+   if (!CALL_IsList(GET_DISPATCH(), (list))) {
       _mesa_printf("%u is not a display list ID\n", list);
       return;
    }
index 13b6a7d..6fc770e 100644 (file)
@@ -96,6 +96,7 @@
 #include "shaderobjects.h"
 #endif
 #include "debug.h"
+#include "dispatch.h"
 
 
 
  * Pointers to glBegin()/glEnd() object commands and a few others
  * are provided via the GLvertexformat interface.
  *
+ * \param ctx  GL context to which \c exec belongs.
  * \param exec dispatch table.
- * \param tableSize dispatch table size.
  */
 void
 _mesa_init_exec_table(struct _glapi_table *exec)
@@ -117,499 +118,499 @@ _mesa_init_exec_table(struct _glapi_table *exec)
 #endif
 
    /* load the dispatch slots we understand */
-   exec->AlphaFunc = _mesa_AlphaFunc;
-   exec->BlendFunc = _mesa_BlendFunc;
-   exec->Clear = _mesa_Clear;
-   exec->ClearColor = _mesa_ClearColor;
-   exec->ClearStencil = _mesa_ClearStencil;
-   exec->ColorMask = _mesa_ColorMask;
-   exec->CullFace = _mesa_CullFace;
-   exec->Disable = _mesa_Disable;
-   exec->DrawBuffer = _mesa_DrawBuffer;
-   exec->Enable = _mesa_Enable;
-   exec->Finish = _mesa_Finish;
-   exec->Flush = _mesa_Flush;
-   exec->FrontFace = _mesa_FrontFace;
-   exec->Frustum = _mesa_Frustum;
-   exec->GetError = _mesa_GetError;
-   exec->GetFloatv = _mesa_GetFloatv;
-   exec->GetString = _mesa_GetString;
-   exec->InitNames = _mesa_InitNames;
-   exec->LineStipple = _mesa_LineStipple;
-   exec->LineWidth = _mesa_LineWidth;
-   exec->LoadIdentity = _mesa_LoadIdentity;
-   exec->LoadMatrixf = _mesa_LoadMatrixf;
-   exec->LoadName = _mesa_LoadName;
-   exec->LogicOp = _mesa_LogicOp;
-   exec->MatrixMode = _mesa_MatrixMode;
-   exec->MultMatrixf = _mesa_MultMatrixf;
-   exec->Ortho = _mesa_Ortho;
-   exec->PixelStorei = _mesa_PixelStorei;
-   exec->PopMatrix = _mesa_PopMatrix;
-   exec->PopName = _mesa_PopName;
-   exec->PushMatrix = _mesa_PushMatrix;
-   exec->PushName = _mesa_PushName;
-   exec->RasterPos2f = _mesa_RasterPos2f;
-   exec->RasterPos2fv = _mesa_RasterPos2fv;
-   exec->RasterPos2i = _mesa_RasterPos2i;
-   exec->RasterPos2iv = _mesa_RasterPos2iv;
-   exec->ReadBuffer = _mesa_ReadBuffer;
-   exec->RenderMode = _mesa_RenderMode;
-   exec->Rotatef = _mesa_Rotatef;
-   exec->Scalef = _mesa_Scalef;
-   exec->Scissor = _mesa_Scissor;
-   exec->SelectBuffer = _mesa_SelectBuffer;
-   exec->ShadeModel = _mesa_ShadeModel;
-   exec->StencilFunc = _mesa_StencilFunc;
-   exec->StencilMask = _mesa_StencilMask;
-   exec->StencilOp = _mesa_StencilOp;
-   exec->TexEnvfv = _mesa_TexEnvfv;
-   exec->TexEnvi = _mesa_TexEnvi;
-   exec->TexImage2D = _mesa_TexImage2D;
-   exec->TexParameteri = _mesa_TexParameteri; 
-   exec->Translatef = _mesa_Translatef;
-   exec->Viewport = _mesa_Viewport;
+   SET_AlphaFunc(exec, _mesa_AlphaFunc);
+   SET_BlendFunc(exec, _mesa_BlendFunc);
+   SET_Clear(exec, _mesa_Clear);
+   SET_ClearColor(exec, _mesa_ClearColor);
+   SET_ClearStencil(exec, _mesa_ClearStencil);
+   SET_ColorMask(exec, _mesa_ColorMask);
+   SET_CullFace(exec, _mesa_CullFace);
+   SET_Disable(exec, _mesa_Disable);
+   SET_DrawBuffer(exec, _mesa_DrawBuffer);
+   SET_Enable(exec, _mesa_Enable);
+   SET_Finish(exec, _mesa_Finish);
+   SET_Flush(exec, _mesa_Flush);
+   SET_FrontFace(exec, _mesa_FrontFace);
+   SET_Frustum(exec, _mesa_Frustum);
+   SET_GetError(exec, _mesa_GetError);
+   SET_GetFloatv(exec, _mesa_GetFloatv);
+   SET_GetString(exec, _mesa_GetString);
+   SET_InitNames(exec, _mesa_InitNames);
+   SET_LineStipple(exec, _mesa_LineStipple);
+   SET_LineWidth(exec, _mesa_LineWidth);
+   SET_LoadIdentity(exec, _mesa_LoadIdentity);
+   SET_LoadMatrixf(exec, _mesa_LoadMatrixf);
+   SET_LoadName(exec, _mesa_LoadName);
+   SET_LogicOp(exec, _mesa_LogicOp);
+   SET_MatrixMode(exec, _mesa_MatrixMode);
+   SET_MultMatrixf(exec, _mesa_MultMatrixf);
+   SET_Ortho(exec, _mesa_Ortho);
+   SET_PixelStorei(exec, _mesa_PixelStorei);
+   SET_PopMatrix(exec, _mesa_PopMatrix);
+   SET_PopName(exec, _mesa_PopName);
+   SET_PushMatrix(exec, _mesa_PushMatrix);
+   SET_PushName(exec, _mesa_PushName);
+   SET_RasterPos2f(exec, _mesa_RasterPos2f);
+   SET_RasterPos2fv(exec, _mesa_RasterPos2fv);
+   SET_RasterPos2i(exec, _mesa_RasterPos2i);
+   SET_RasterPos2iv(exec, _mesa_RasterPos2iv);
+   SET_ReadBuffer(exec, _mesa_ReadBuffer);
+   SET_RenderMode(exec, _mesa_RenderMode);
+   SET_Rotatef(exec, _mesa_Rotatef);
+   SET_Scalef(exec, _mesa_Scalef);
+   SET_Scissor(exec, _mesa_Scissor);
+   SET_SelectBuffer(exec, _mesa_SelectBuffer);
+   SET_ShadeModel(exec, _mesa_ShadeModel);
+   SET_StencilFunc(exec, _mesa_StencilFunc);
+   SET_StencilMask(exec, _mesa_StencilMask);
+   SET_StencilOp(exec, _mesa_StencilOp);
+   SET_TexEnvfv(exec, _mesa_TexEnvfv);
+   SET_TexEnvi(exec, _mesa_TexEnvi);
+   SET_TexImage2D(exec, _mesa_TexImage2D);
+   SET_TexParameteri(exec, _mesa_TexParameteri);
+   SET_Translatef(exec, _mesa_Translatef);
+   SET_Viewport(exec, _mesa_Viewport);
 #if _HAVE_FULL_GL
-   exec->Accum = _mesa_Accum;
-   exec->Bitmap = _mesa_Bitmap;
-   exec->CallList = _mesa_CallList;
-   exec->CallLists = _mesa_CallLists;
-   exec->ClearAccum = _mesa_ClearAccum;
-   exec->ClearDepth = _mesa_ClearDepth;
-   exec->ClearIndex = _mesa_ClearIndex;
-   exec->ClipPlane = _mesa_ClipPlane;
-   exec->ColorMaterial = _mesa_ColorMaterial;
-   exec->CopyPixels = _mesa_CopyPixels;
-   exec->CullParameterfvEXT = _mesa_CullParameterfvEXT;
-   exec->CullParameterdvEXT = _mesa_CullParameterdvEXT;
-   exec->DeleteLists = _mesa_DeleteLists;
-   exec->DepthFunc = _mesa_DepthFunc;
-   exec->DepthMask = _mesa_DepthMask;
-   exec->DepthRange = _mesa_DepthRange;
-   exec->DrawPixels = _mesa_DrawPixels;
-   exec->EndList = _mesa_EndList;
-   exec->FeedbackBuffer = _mesa_FeedbackBuffer;
-   exec->FogCoordPointerEXT = _mesa_FogCoordPointerEXT;
-   exec->Fogf = _mesa_Fogf;
-   exec->Fogfv = _mesa_Fogfv;
-   exec->Fogi = _mesa_Fogi;
-   exec->Fogiv = _mesa_Fogiv;
-   exec->GenLists = _mesa_GenLists;
-   exec->GetClipPlane = _mesa_GetClipPlane;
-   exec->GetBooleanv = _mesa_GetBooleanv;
-   exec->GetDoublev = _mesa_GetDoublev;
-   exec->GetIntegerv = _mesa_GetIntegerv;
-   exec->GetLightfv = _mesa_GetLightfv;
-   exec->GetLightiv = _mesa_GetLightiv;
-   exec->GetMapdv = _mesa_GetMapdv;
-   exec->GetMapfv = _mesa_GetMapfv;
-   exec->GetMapiv = _mesa_GetMapiv;
-   exec->GetMaterialfv = _mesa_GetMaterialfv;
-   exec->GetMaterialiv = _mesa_GetMaterialiv;
-   exec->GetPixelMapfv = _mesa_GetPixelMapfv;
-   exec->GetPixelMapuiv = _mesa_GetPixelMapuiv;
-   exec->GetPixelMapusv = _mesa_GetPixelMapusv;
-   exec->GetPolygonStipple = _mesa_GetPolygonStipple;
-   exec->GetTexEnvfv = _mesa_GetTexEnvfv;
-   exec->GetTexEnviv = _mesa_GetTexEnviv;
-   exec->GetTexLevelParameterfv = _mesa_GetTexLevelParameterfv;
-   exec->GetTexLevelParameteriv = _mesa_GetTexLevelParameteriv;
-   exec->GetTexParameterfv = _mesa_GetTexParameterfv;
-   exec->GetTexParameteriv = _mesa_GetTexParameteriv;
-   exec->GetTexGendv = _mesa_GetTexGendv;
-   exec->GetTexGenfv = _mesa_GetTexGenfv;
-   exec->GetTexGeniv = _mesa_GetTexGeniv;
-   exec->GetTexImage = _mesa_GetTexImage;
-   exec->Hint = _mesa_Hint;
-   exec->IndexMask = _mesa_IndexMask;
-   exec->IsEnabled = _mesa_IsEnabled;
-   exec->IsList = _mesa_IsList;
-   exec->LightModelf = _mesa_LightModelf;
-   exec->LightModelfv = _mesa_LightModelfv;
-   exec->LightModeli = _mesa_LightModeli;
-   exec->LightModeliv = _mesa_LightModeliv;
-   exec->Lightf = _mesa_Lightf;
-   exec->Lightfv = _mesa_Lightfv;
-   exec->Lighti = _mesa_Lighti;
-   exec->Lightiv = _mesa_Lightiv;
-   exec->ListBase = _mesa_ListBase;
-   exec->LoadMatrixd = _mesa_LoadMatrixd;
-   exec->Map1d = _mesa_Map1d;
-   exec->Map1f = _mesa_Map1f;
-   exec->Map2d = _mesa_Map2d;
-   exec->Map2f = _mesa_Map2f;
-   exec->MapGrid1d = _mesa_MapGrid1d;
-   exec->MapGrid1f = _mesa_MapGrid1f;
-   exec->MapGrid2d = _mesa_MapGrid2d;
-   exec->MapGrid2f = _mesa_MapGrid2f;
-   exec->MultMatrixd = _mesa_MultMatrixd;
-   exec->NewList = _mesa_NewList;
-   exec->PassThrough = _mesa_PassThrough;
-   exec->PixelMapfv = _mesa_PixelMapfv;
-   exec->PixelMapuiv = _mesa_PixelMapuiv;
-   exec->PixelMapusv = _mesa_PixelMapusv;
-   exec->PixelStoref = _mesa_PixelStoref;
-   exec->PixelTransferf = _mesa_PixelTransferf;
-   exec->PixelTransferi = _mesa_PixelTransferi;
-   exec->PixelZoom = _mesa_PixelZoom;
-   exec->PointSize = _mesa_PointSize;
-   exec->PolygonMode = _mesa_PolygonMode;
-   exec->PolygonOffset = _mesa_PolygonOffset;
-   exec->PolygonStipple = _mesa_PolygonStipple;
-   exec->PopAttrib = _mesa_PopAttrib;
-   exec->PushAttrib = _mesa_PushAttrib;
-   exec->RasterPos2d = _mesa_RasterPos2d;
-   exec->RasterPos2dv = _mesa_RasterPos2dv;
-   exec->RasterPos2s = _mesa_RasterPos2s;
-   exec->RasterPos2sv = _mesa_RasterPos2sv;
-   exec->RasterPos3d = _mesa_RasterPos3d;
-   exec->RasterPos3dv = _mesa_RasterPos3dv;
-   exec->RasterPos3f = _mesa_RasterPos3f;
-   exec->RasterPos3fv = _mesa_RasterPos3fv;
-   exec->RasterPos3i = _mesa_RasterPos3i;
-   exec->RasterPos3iv = _mesa_RasterPos3iv;
-   exec->RasterPos3s = _mesa_RasterPos3s;
-   exec->RasterPos3sv = _mesa_RasterPos3sv;
-   exec->RasterPos4d = _mesa_RasterPos4d;
-   exec->RasterPos4dv = _mesa_RasterPos4dv;
-   exec->RasterPos4f = _mesa_RasterPos4f;
-   exec->RasterPos4fv = _mesa_RasterPos4fv;
-   exec->RasterPos4i = _mesa_RasterPos4i;
-   exec->RasterPos4iv = _mesa_RasterPos4iv;
-   exec->RasterPos4s = _mesa_RasterPos4s;
-   exec->RasterPos4sv = _mesa_RasterPos4sv;
-   exec->ReadPixels = _mesa_ReadPixels;
-   exec->Rotated = _mesa_Rotated;
-   exec->Scaled = _mesa_Scaled;
-   exec->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT;
-   exec->TexEnvf = _mesa_TexEnvf;
-   exec->TexEnviv = _mesa_TexEnviv;
-   exec->TexGend = _mesa_TexGend;
-   exec->TexGendv = _mesa_TexGendv;
-   exec->TexGenf = _mesa_TexGenf;
-   exec->TexGenfv = _mesa_TexGenfv;
-   exec->TexGeni = _mesa_TexGeni;
-   exec->TexGeniv = _mesa_TexGeniv;
-   exec->TexImage1D = _mesa_TexImage1D;
-   exec->TexParameterf = _mesa_TexParameterf;
-   exec->TexParameterfv = _mesa_TexParameterfv;
-   exec->TexParameteriv = _mesa_TexParameteriv;
-   exec->Translated = _mesa_Translated;
+   SET_Accum(exec, _mesa_Accum);
+   SET_Bitmap(exec, _mesa_Bitmap);
+   SET_CallList(exec, _mesa_CallList);
+   SET_CallLists(exec, _mesa_CallLists);
+   SET_ClearAccum(exec, _mesa_ClearAccum);
+   SET_ClearDepth(exec, _mesa_ClearDepth);
+   SET_ClearIndex(exec, _mesa_ClearIndex);
+   SET_ClipPlane(exec, _mesa_ClipPlane);
+   SET_ColorMaterial(exec, _mesa_ColorMaterial);
+   SET_CopyPixels(exec, _mesa_CopyPixels);
+   SET_CullParameterfvEXT(exec, _mesa_CullParameterfvEXT);
+   SET_CullParameterdvEXT(exec, _mesa_CullParameterdvEXT);
+   SET_DeleteLists(exec, _mesa_DeleteLists);
+   SET_DepthFunc(exec, _mesa_DepthFunc);
+   SET_DepthMask(exec, _mesa_DepthMask);
+   SET_DepthRange(exec, _mesa_DepthRange);
+   SET_DrawPixels(exec, _mesa_DrawPixels);
+   SET_EndList(exec, _mesa_EndList);
+   SET_FeedbackBuffer(exec, _mesa_FeedbackBuffer);
+   SET_FogCoordPointerEXT(exec, _mesa_FogCoordPointerEXT);
+   SET_Fogf(exec, _mesa_Fogf);
+   SET_Fogfv(exec, _mesa_Fogfv);
+   SET_Fogi(exec, _mesa_Fogi);
+   SET_Fogiv(exec, _mesa_Fogiv);
+   SET_GenLists(exec, _mesa_GenLists);
+   SET_GetClipPlane(exec, _mesa_GetClipPlane);
+   SET_GetBooleanv(exec, _mesa_GetBooleanv);
+   SET_GetDoublev(exec, _mesa_GetDoublev);
+   SET_GetIntegerv(exec, _mesa_GetIntegerv);
+   SET_GetLightfv(exec, _mesa_GetLightfv);
+   SET_GetLightiv(exec, _mesa_GetLightiv);
+   SET_GetMapdv(exec, _mesa_GetMapdv);
+   SET_GetMapfv(exec, _mesa_GetMapfv);
+   SET_GetMapiv(exec, _mesa_GetMapiv);
+   SET_GetMaterialfv(exec, _mesa_GetMaterialfv);
+   SET_GetMaterialiv(exec, _mesa_GetMaterialiv);
+   SET_GetPixelMapfv(exec, _mesa_GetPixelMapfv);
+   SET_GetPixelMapuiv(exec, _mesa_GetPixelMapuiv);
+   SET_GetPixelMapusv(exec, _mesa_GetPixelMapusv);
+   SET_GetPolygonStipple(exec, _mesa_GetPolygonStipple);
+   SET_GetTexEnvfv(exec, _mesa_GetTexEnvfv);
+   SET_GetTexEnviv(exec, _mesa_GetTexEnviv);
+   SET_GetTexLevelParameterfv(exec, _mesa_GetTexLevelParameterfv);
+   SET_GetTexLevelParameteriv(exec, _mesa_GetTexLevelParameteriv);
+   SET_GetTexParameterfv(exec, _mesa_GetTexParameterfv);
+   SET_GetTexParameteriv(exec, _mesa_GetTexParameteriv);
+   SET_GetTexGendv(exec, _mesa_GetTexGendv);
+   SET_GetTexGenfv(exec, _mesa_GetTexGenfv);
+   SET_GetTexGeniv(exec, _mesa_GetTexGeniv);
+   SET_GetTexImage(exec, _mesa_GetTexImage);
+   SET_Hint(exec, _mesa_Hint);
+   SET_IndexMask(exec, _mesa_IndexMask);
+   SET_IsEnabled(exec, _mesa_IsEnabled);
+   SET_IsList(exec, _mesa_IsList);
+   SET_LightModelf(exec, _mesa_LightModelf);
+   SET_LightModelfv(exec, _mesa_LightModelfv);
+   SET_LightModeli(exec, _mesa_LightModeli);
+   SET_LightModeliv(exec, _mesa_LightModeliv);
+   SET_Lightf(exec, _mesa_Lightf);
+   SET_Lightfv(exec, _mesa_Lightfv);
+   SET_Lighti(exec, _mesa_Lighti);
+   SET_Lightiv(exec, _mesa_Lightiv);
+   SET_ListBase(exec, _mesa_ListBase);
+   SET_LoadMatrixd(exec, _mesa_LoadMatrixd);
+   SET_Map1d(exec, _mesa_Map1d);
+   SET_Map1f(exec, _mesa_Map1f);
+   SET_Map2d(exec, _mesa_Map2d);
+   SET_Map2f(exec, _mesa_Map2f);
+   SET_MapGrid1d(exec, _mesa_MapGrid1d);
+   SET_MapGrid1f(exec, _mesa_MapGrid1f);
+   SET_MapGrid2d(exec, _mesa_MapGrid2d);
+   SET_MapGrid2f(exec, _mesa_MapGrid2f);
+   SET_MultMatrixd(exec, _mesa_MultMatrixd);
+   SET_NewList(exec, _mesa_NewList);
+   SET_PassThrough(exec, _mesa_PassThrough);
+   SET_PixelMapfv(exec, _mesa_PixelMapfv);
+   SET_PixelMapuiv(exec, _mesa_PixelMapuiv);
+   SET_PixelMapusv(exec, _mesa_PixelMapusv);
+   SET_PixelStoref(exec, _mesa_PixelStoref);
+   SET_PixelTransferf(exec, _mesa_PixelTransferf);
+   SET_PixelTransferi(exec, _mesa_PixelTransferi);
+   SET_PixelZoom(exec, _mesa_PixelZoom);
+   SET_PointSize(exec, _mesa_PointSize);
+   SET_PolygonMode(exec, _mesa_PolygonMode);
+   SET_PolygonOffset(exec, _mesa_PolygonOffset);
+   SET_PolygonStipple(exec, _mesa_PolygonStipple);
+   SET_PopAttrib(exec, _mesa_PopAttrib);
+   SET_PushAttrib(exec, _mesa_PushAttrib);
+   SET_RasterPos2d(exec, _mesa_RasterPos2d);
+   SET_RasterPos2dv(exec, _mesa_RasterPos2dv);
+   SET_RasterPos2s(exec, _mesa_RasterPos2s);
+   SET_RasterPos2sv(exec, _mesa_RasterPos2sv);
+   SET_RasterPos3d(exec, _mesa_RasterPos3d);
+   SET_RasterPos3dv(exec, _mesa_RasterPos3dv);
+   SET_RasterPos3f(exec, _mesa_RasterPos3f);
+   SET_RasterPos3fv(exec, _mesa_RasterPos3fv);
+   SET_RasterPos3i(exec, _mesa_RasterPos3i);
+   SET_RasterPos3iv(exec, _mesa_RasterPos3iv);
+   SET_RasterPos3s(exec, _mesa_RasterPos3s);
+   SET_RasterPos3sv(exec, _mesa_RasterPos3sv);
+   SET_RasterPos4d(exec, _mesa_RasterPos4d);
+   SET_RasterPos4dv(exec, _mesa_RasterPos4dv);
+   SET_RasterPos4f(exec, _mesa_RasterPos4f);
+   SET_RasterPos4fv(exec, _mesa_RasterPos4fv);
+   SET_RasterPos4i(exec, _mesa_RasterPos4i);
+   SET_RasterPos4iv(exec, _mesa_RasterPos4iv);
+   SET_RasterPos4s(exec, _mesa_RasterPos4s);
+   SET_RasterPos4sv(exec, _mesa_RasterPos4sv);
+   SET_ReadPixels(exec, _mesa_ReadPixels);
+   SET_Rotated(exec, _mesa_Rotated);
+   SET_Scaled(exec, _mesa_Scaled);
+   SET_SecondaryColorPointerEXT(exec, _mesa_SecondaryColorPointerEXT);
+   SET_TexEnvf(exec, _mesa_TexEnvf);
+   SET_TexEnviv(exec, _mesa_TexEnviv);
+   SET_TexGend(exec, _mesa_TexGend);
+   SET_TexGendv(exec, _mesa_TexGendv);
+   SET_TexGenf(exec, _mesa_TexGenf);
+   SET_TexGenfv(exec, _mesa_TexGenfv);
+   SET_TexGeni(exec, _mesa_TexGeni);
+   SET_TexGeniv(exec, _mesa_TexGeniv);
+   SET_TexImage1D(exec, _mesa_TexImage1D);
+   SET_TexParameterf(exec, _mesa_TexParameterf);
+   SET_TexParameterfv(exec, _mesa_TexParameterfv);
+   SET_TexParameteriv(exec, _mesa_TexParameteriv);
+   SET_Translated(exec, _mesa_Translated);
 #endif
 
    /* 1.1 */
-   exec->BindTexture = _mesa_BindTexture;
-   exec->DeleteTextures = _mesa_DeleteTextures;
-   exec->GenTextures = _mesa_GenTextures;
+   SET_BindTexture(exec, _mesa_BindTexture);
+   SET_DeleteTextures(exec, _mesa_DeleteTextures);
+   SET_GenTextures(exec, _mesa_GenTextures);
 #if _HAVE_FULL_GL
-   exec->AreTexturesResident = _mesa_AreTexturesResident;
-   exec->AreTexturesResidentEXT = _mesa_AreTexturesResident;
-   exec->ColorPointer = _mesa_ColorPointer;
-   exec->CopyTexImage1D = _mesa_CopyTexImage1D;
-   exec->CopyTexImage2D = _mesa_CopyTexImage2D;
-   exec->CopyTexSubImage1D = _mesa_CopyTexSubImage1D;
-   exec->CopyTexSubImage2D = _mesa_CopyTexSubImage2D;
-   exec->DisableClientState = _mesa_DisableClientState;
-   exec->EdgeFlagPointer = _mesa_EdgeFlagPointer;
-   exec->EnableClientState = _mesa_EnableClientState;
-   exec->GenTexturesEXT = _mesa_GenTextures;
-   exec->GetPointerv = _mesa_GetPointerv;
-   exec->IndexPointer = _mesa_IndexPointer;
-   exec->InterleavedArrays = _mesa_InterleavedArrays;
-   exec->IsTexture = _mesa_IsTexture;
-   exec->IsTextureEXT = _mesa_IsTexture;
-   exec->NormalPointer = _mesa_NormalPointer;
-   exec->PopClientAttrib = _mesa_PopClientAttrib;
-   exec->PrioritizeTextures = _mesa_PrioritizeTextures;
-   exec->PushClientAttrib = _mesa_PushClientAttrib;
-   exec->TexCoordPointer = _mesa_TexCoordPointer;
-   exec->TexSubImage1D = _mesa_TexSubImage1D;
-   exec->TexSubImage2D = _mesa_TexSubImage2D;
-   exec->VertexPointer = _mesa_VertexPointer;
+   SET_AreTexturesResident(exec, _mesa_AreTexturesResident);
+   SET_AreTexturesResidentEXT(exec, _mesa_AreTexturesResident);
+   SET_ColorPointer(exec, _mesa_ColorPointer);
+   SET_CopyTexImage1D(exec, _mesa_CopyTexImage1D);
+   SET_CopyTexImage2D(exec, _mesa_CopyTexImage2D);
+   SET_CopyTexSubImage1D(exec, _mesa_CopyTexSubImage1D);
+   SET_CopyTexSubImage2D(exec, _mesa_CopyTexSubImage2D);
+   SET_DisableClientState(exec, _mesa_DisableClientState);
+   SET_EdgeFlagPointer(exec, _mesa_EdgeFlagPointer);
+   SET_EnableClientState(exec, _mesa_EnableClientState);
+   SET_GenTexturesEXT(exec, _mesa_GenTextures);
+   SET_GetPointerv(exec, _mesa_GetPointerv);
+   SET_IndexPointer(exec, _mesa_IndexPointer);
+   SET_InterleavedArrays(exec, _mesa_InterleavedArrays);
+   SET_IsTexture(exec, _mesa_IsTexture);
+   SET_IsTextureEXT(exec, _mesa_IsTexture);
+   SET_NormalPointer(exec, _mesa_NormalPointer);
+   SET_PopClientAttrib(exec, _mesa_PopClientAttrib);
+   SET_PrioritizeTextures(exec, _mesa_PrioritizeTextures);
+   SET_PushClientAttrib(exec, _mesa_PushClientAttrib);
+   SET_TexCoordPointer(exec, _mesa_TexCoordPointer);
+   SET_TexSubImage1D(exec, _mesa_TexSubImage1D);
+   SET_TexSubImage2D(exec, _mesa_TexSubImage2D);
+   SET_VertexPointer(exec, _mesa_VertexPointer);
 #endif
 
    /* 1.2 */
 #if _HAVE_FULL_GL
-   exec->CopyTexSubImage3D = _mesa_CopyTexSubImage3D;
-   exec->TexImage3D = _mesa_TexImage3D;
-   exec->TexSubImage3D = _mesa_TexSubImage3D;
+   SET_CopyTexSubImage3D(exec, _mesa_CopyTexSubImage3D);
+   SET_TexImage3D(exec, _mesa_TexImage3D);
+   SET_TexSubImage3D(exec, _mesa_TexSubImage3D);
 #endif
 
    /* OpenGL 1.2  GL_ARB_imaging */
 #if _HAVE_FULL_GL
-   exec->BlendColor = _mesa_BlendColor;
-   exec->BlendEquation = _mesa_BlendEquation;
-   exec->BlendEquationSeparateEXT = _mesa_BlendEquationSeparateEXT;
-   exec->ColorSubTable = _mesa_ColorSubTable;
-   exec->ColorTable = _mesa_ColorTable;
-   exec->ColorTableParameterfv = _mesa_ColorTableParameterfv;
-   exec->ColorTableParameteriv = _mesa_ColorTableParameteriv;
-   exec->ConvolutionFilter1D = _mesa_ConvolutionFilter1D;
-   exec->ConvolutionFilter2D = _mesa_ConvolutionFilter2D;
-   exec->ConvolutionParameterf = _mesa_ConvolutionParameterf;
-   exec->ConvolutionParameterfv = _mesa_ConvolutionParameterfv;
-   exec->ConvolutionParameteri = _mesa_ConvolutionParameteri;
-   exec->ConvolutionParameteriv = _mesa_ConvolutionParameteriv;
-   exec->CopyColorSubTable = _mesa_CopyColorSubTable;
-   exec->CopyColorTable = _mesa_CopyColorTable;
-   exec->CopyConvolutionFilter1D = _mesa_CopyConvolutionFilter1D;
-   exec->CopyConvolutionFilter2D = _mesa_CopyConvolutionFilter2D;
-   exec->GetColorTable = _mesa_GetColorTable;
-   exec->GetColorTableEXT = _mesa_GetColorTable;
-   exec->GetColorTableParameterfv = _mesa_GetColorTableParameterfv;
-   exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv;
-   exec->GetColorTableParameteriv = _mesa_GetColorTableParameteriv;
-   exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv;
-   exec->GetConvolutionFilter = _mesa_GetConvolutionFilter;
-   exec->GetConvolutionFilterEXT = _mesa_GetConvolutionFilter;
-   exec->GetConvolutionParameterfv = _mesa_GetConvolutionParameterfv;
-   exec->GetConvolutionParameterfvEXT = _mesa_GetConvolutionParameterfv;
-   exec->GetConvolutionParameteriv = _mesa_GetConvolutionParameteriv;
-   exec->GetConvolutionParameterivEXT = _mesa_GetConvolutionParameteriv;
-   exec->GetHistogram = _mesa_GetHistogram;
-   exec->GetHistogramEXT = _mesa_GetHistogram;
-   exec->GetHistogramParameterfv = _mesa_GetHistogramParameterfv;
-   exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv;
-   exec->GetHistogramParameteriv = _mesa_GetHistogramParameteriv;
-   exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv;
-   exec->GetMinmax = _mesa_GetMinmax;
-   exec->GetMinmaxEXT = _mesa_GetMinmax;
-   exec->GetMinmaxParameterfv = _mesa_GetMinmaxParameterfv;
-   exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv;
-   exec->GetMinmaxParameteriv = _mesa_GetMinmaxParameteriv;
-   exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv;
-   exec->GetSeparableFilter = _mesa_GetSeparableFilter;
-   exec->GetSeparableFilterEXT = _mesa_GetSeparableFilter;
-   exec->Histogram = _mesa_Histogram;
-   exec->Minmax = _mesa_Minmax;
-   exec->ResetHistogram = _mesa_ResetHistogram;
-   exec->ResetMinmax = _mesa_ResetMinmax;
-   exec->SeparableFilter2D = _mesa_SeparableFilter2D;
+   SET_BlendColor(exec, _mesa_BlendColor);
+   SET_BlendEquation(exec, _mesa_BlendEquation);
+   SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT);
+   SET_ColorSubTable(exec, _mesa_ColorSubTable);
+   SET_ColorTable(exec, _mesa_ColorTable);
+   SET_ColorTableParameterfv(exec, _mesa_ColorTableParameterfv);
+   SET_ColorTableParameteriv(exec, _mesa_ColorTableParameteriv);
+   SET_ConvolutionFilter1D(exec, _mesa_ConvolutionFilter1D);
+   SET_ConvolutionFilter2D(exec, _mesa_ConvolutionFilter2D);
+   SET_ConvolutionParameterf(exec, _mesa_ConvolutionParameterf);
+   SET_ConvolutionParameterfv(exec, _mesa_ConvolutionParameterfv);
+   SET_ConvolutionParameteri(exec, _mesa_ConvolutionParameteri);
+   SET_ConvolutionParameteriv(exec, _mesa_ConvolutionParameteriv);
+   SET_CopyColorSubTable(exec, _mesa_CopyColorSubTable);
+   SET_CopyColorTable(exec, _mesa_CopyColorTable);
+   SET_CopyConvolutionFilter1D(exec, _mesa_CopyConvolutionFilter1D);
+   SET_CopyConvolutionFilter2D(exec, _mesa_CopyConvolutionFilter2D);
+   SET_GetColorTable(exec, _mesa_GetColorTable);
+   SET_GetColorTableEXT(exec, _mesa_GetColorTable);
+   SET_GetColorTableParameterfv(exec, _mesa_GetColorTableParameterfv);
+   SET_GetColorTableParameterfvEXT(exec, _mesa_GetColorTableParameterfv);
+   SET_GetColorTableParameteriv(exec, _mesa_GetColorTableParameteriv);
+   SET_GetColorTableParameterivEXT(exec, _mesa_GetColorTableParameteriv);
+   SET_GetConvolutionFilter(exec, _mesa_GetConvolutionFilter);
+   SET_GetConvolutionFilterEXT(exec, _mesa_GetConvolutionFilter);
+   SET_GetConvolutionParameterfv(exec, _mesa_GetConvolutionParameterfv);
+   SET_GetConvolutionParameterfvEXT(exec, _mesa_GetConvolutionParameterfv);
+   SET_GetConvolutionParameteriv(exec, _mesa_GetConvolutionParameteriv);
+   SET_GetConvolutionParameterivEXT(exec, _mesa_GetConvolutionParameteriv);
+   SET_GetHistogram(exec, _mesa_GetHistogram);
+   SET_GetHistogramEXT(exec, _mesa_GetHistogram);
+   SET_GetHistogramParameterfv(exec, _mesa_GetHistogramParameterfv);
+   SET_GetHistogramParameterfvEXT(exec, _mesa_GetHistogramParameterfv);
+   SET_GetHistogramParameteriv(exec, _mesa_GetHistogramParameteriv);
+   SET_GetHistogramParameterivEXT(exec, _mesa_GetHistogramParameteriv);
+   SET_GetMinmax(exec, _mesa_GetMinmax);
+   SET_GetMinmaxEXT(exec, _mesa_GetMinmax);
+   SET_GetMinmaxParameterfv(exec, _mesa_GetMinmaxParameterfv);
+   SET_GetMinmaxParameterfvEXT(exec, _mesa_GetMinmaxParameterfv);
+   SET_GetMinmaxParameteriv(exec, _mesa_GetMinmaxParameteriv);
+   SET_GetMinmaxParameterivEXT(exec, _mesa_GetMinmaxParameteriv);
+   SET_GetSeparableFilter(exec, _mesa_GetSeparableFilter);
+   SET_GetSeparableFilterEXT(exec, _mesa_GetSeparableFilter);
+   SET_Histogram(exec, _mesa_Histogram);
+   SET_Minmax(exec, _mesa_Minmax);
+   SET_ResetHistogram(exec, _mesa_ResetHistogram);
+   SET_ResetMinmax(exec, _mesa_ResetMinmax);
+   SET_SeparableFilter2D(exec, _mesa_SeparableFilter2D);
 #endif
 
    /* OpenGL 2.0 */
-   exec->StencilFuncSeparate = _mesa_StencilFuncSeparate;
-   exec->StencilMaskSeparate = _mesa_StencilMaskSeparate;
-   exec->StencilOpSeparate = _mesa_StencilOpSeparate;
+   SET_StencilFuncSeparate(exec, _mesa_StencilFuncSeparate);
+   SET_StencilMaskSeparate(exec, _mesa_StencilMaskSeparate);
+   SET_StencilOpSeparate(exec, _mesa_StencilOpSeparate);
 
    /* 2. GL_EXT_blend_color */
 #if 0
-/*    exec->BlendColorEXT = _mesa_BlendColorEXT; */
+/*    SET_BlendColorEXT(exec, _mesa_BlendColorEXT); */
 #endif
 
    /* 3. GL_EXT_polygon_offset */
 #if _HAVE_FULL_GL
-   exec->PolygonOffsetEXT = _mesa_PolygonOffsetEXT;
+   SET_PolygonOffsetEXT(exec, _mesa_PolygonOffsetEXT);
 #endif
 
    /* 6. GL_EXT_texture3d */
 #if 0
-/*    exec->CopyTexSubImage3DEXT = _mesa_CopyTexSubImage3D; */
-/*    exec->TexImage3DEXT = _mesa_TexImage3DEXT; */
-/*    exec->TexSubImage3DEXT = _mesa_TexSubImage3D; */
+/*    SET_CopyTexSubImage3DEXT(exec, _mesa_CopyTexSubImage3D); */
+/*    SET_TexImage3DEXT(exec, _mesa_TexImage3DEXT); */
+/*    SET_TexSubImage3DEXT(exec, _mesa_TexSubImage3D); */
 #endif
 
    /* 11. GL_EXT_histogram */
 #if _HAVE_FULL_GL
-   exec->GetHistogramEXT = _mesa_GetHistogram;
-   exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv;
-   exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv;
-   exec->GetMinmaxEXT = _mesa_GetMinmax;
-   exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv;
-   exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv;
+   SET_GetHistogramEXT(exec, _mesa_GetHistogram);
+   SET_GetHistogramParameterfvEXT(exec, _mesa_GetHistogramParameterfv);
+   SET_GetHistogramParameterivEXT(exec, _mesa_GetHistogramParameteriv);
+   SET_GetMinmaxEXT(exec, _mesa_GetMinmax);
+   SET_GetMinmaxParameterfvEXT(exec, _mesa_GetMinmaxParameterfv);
+   SET_GetMinmaxParameterivEXT(exec, _mesa_GetMinmaxParameteriv);
 #endif
 
    /* ?. GL_SGIX_pixel_texture */
 #if _HAVE_FULL_GL
-   exec->PixelTexGenSGIX = _mesa_PixelTexGenSGIX;
+   SET_PixelTexGenSGIX(exec, _mesa_PixelTexGenSGIX);
 #endif
 
    /* 15. GL_SGIS_pixel_texture */
 #if _HAVE_FULL_GL
-   exec->PixelTexGenParameteriSGIS = _mesa_PixelTexGenParameteriSGIS;
-   exec->PixelTexGenParameterivSGIS = _mesa_PixelTexGenParameterivSGIS;
-   exec->PixelTexGenParameterfSGIS = _mesa_PixelTexGenParameterfSGIS;
-   exec->PixelTexGenParameterfvSGIS = _mesa_PixelTexGenParameterfvSGIS;
-   exec->GetPixelTexGenParameterivSGIS = _mesa_GetPixelTexGenParameterivSGIS;
-   exec->GetPixelTexGenParameterfvSGIS = _mesa_GetPixelTexGenParameterfvSGIS;
+   SET_PixelTexGenParameteriSGIS(exec, _mesa_PixelTexGenParameteriSGIS);
+   SET_PixelTexGenParameterivSGIS(exec, _mesa_PixelTexGenParameterivSGIS);
+   SET_PixelTexGenParameterfSGIS(exec, _mesa_PixelTexGenParameterfSGIS);
+   SET_PixelTexGenParameterfvSGIS(exec, _mesa_PixelTexGenParameterfvSGIS);
+   SET_GetPixelTexGenParameterivSGIS(exec, _mesa_GetPixelTexGenParameterivSGIS);
+   SET_GetPixelTexGenParameterfvSGIS(exec, _mesa_GetPixelTexGenParameterfvSGIS);
 #endif
 
    /* 30. GL_EXT_vertex_array */
 #if _HAVE_FULL_GL
-   exec->ColorPointerEXT = _mesa_ColorPointerEXT;
-   exec->EdgeFlagPointerEXT = _mesa_EdgeFlagPointerEXT;
-   exec->IndexPointerEXT = _mesa_IndexPointerEXT;
-   exec->NormalPointerEXT = _mesa_NormalPointerEXT;
-   exec->TexCoordPointerEXT = _mesa_TexCoordPointerEXT;
-   exec->VertexPointerEXT = _mesa_VertexPointerEXT;
+   SET_ColorPointerEXT(exec, _mesa_ColorPointerEXT);
+   SET_EdgeFlagPointerEXT(exec, _mesa_EdgeFlagPointerEXT);
+   SET_IndexPointerEXT(exec, _mesa_IndexPointerEXT);
+   SET_NormalPointerEXT(exec, _mesa_NormalPointerEXT);
+   SET_TexCoordPointerEXT(exec, _mesa_TexCoordPointerEXT);
+   SET_VertexPointerEXT(exec, _mesa_VertexPointerEXT);
 #endif
 
    /* 37. GL_EXT_blend_minmax */
 #if 0
-   exec->BlendEquationEXT = _mesa_BlendEquationEXT;
+   SET_BlendEquationEXT(exec, _mesa_BlendEquationEXT);
 #endif
 
    /* 54. GL_EXT_point_parameters */
 #if _HAVE_FULL_GL
-   exec->PointParameterfEXT = _mesa_PointParameterfEXT;
-   exec->PointParameterfvEXT = _mesa_PointParameterfvEXT;
+   SET_PointParameterfEXT(exec, _mesa_PointParameterfEXT);
+   SET_PointParameterfvEXT(exec, _mesa_PointParameterfvEXT);
 #endif
 
    /* 78. GL_EXT_paletted_texture */
 #if 0
-   exec->ColorTableEXT = _mesa_ColorTableEXT;
-   exec->ColorSubTableEXT = _mesa_ColorSubTableEXT;
+   SET_ColorTableEXT(exec, _mesa_ColorTableEXT);
+   SET_ColorSubTableEXT(exec, _mesa_ColorSubTableEXT);
 #endif
 #if _HAVE_FULL_GL
-   exec->GetColorTableEXT = _mesa_GetColorTable;
-   exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv;
-   exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv;
+   SET_GetColorTableEXT(exec, _mesa_GetColorTable);
+   SET_GetColorTableParameterfvEXT(exec, _mesa_GetColorTableParameterfv);
+   SET_GetColorTableParameterivEXT(exec, _mesa_GetColorTableParameteriv);
 #endif
 
    /* 97. GL_EXT_compiled_vertex_array */
 #if _HAVE_FULL_GL
-   exec->LockArraysEXT = _mesa_LockArraysEXT;
-   exec->UnlockArraysEXT = _mesa_UnlockArraysEXT;
+   SET_LockArraysEXT(exec, _mesa_LockArraysEXT);
+   SET_UnlockArraysEXT(exec, _mesa_UnlockArraysEXT);
 #endif
 
    /* 148. GL_EXT_multi_draw_arrays */
 #if _HAVE_FULL_GL
-   exec->MultiDrawArraysEXT = _mesa_MultiDrawArraysEXT;
-   exec->MultiDrawElementsEXT = _mesa_MultiDrawElementsEXT;
+   SET_MultiDrawArraysEXT(exec, _mesa_MultiDrawArraysEXT);
+   SET_MultiDrawElementsEXT(exec, _mesa_MultiDrawElementsEXT);
 #endif
 
    /* 173. GL_INGR_blend_func_separate */
 #if _HAVE_FULL_GL
-   exec->BlendFuncSeparateEXT = _mesa_BlendFuncSeparateEXT;
+   SET_BlendFuncSeparateEXT(exec, _mesa_BlendFuncSeparateEXT);
 #endif
 
    /* 196. GL_MESA_resize_buffers */
 #if _HAVE_FULL_GL
-   exec->ResizeBuffersMESA = _mesa_ResizeBuffersMESA;
+   SET_ResizeBuffersMESA(exec, _mesa_ResizeBuffersMESA);
 #endif
 
    /* 197. GL_MESA_window_pos */
 #if _HAVE_FULL_GL
-   exec->WindowPos2dMESA = _mesa_WindowPos2dMESA;
-   exec->WindowPos2dvMESA = _mesa_WindowPos2dvMESA;
-   exec->WindowPos2fMESA = _mesa_WindowPos2fMESA;
-   exec->WindowPos2fvMESA = _mesa_WindowPos2fvMESA;
-   exec->WindowPos2iMESA = _mesa_WindowPos2iMESA;
-   exec->WindowPos2ivMESA = _mesa_WindowPos2ivMESA;
-   exec->WindowPos2sMESA = _mesa_WindowPos2sMESA;
-   exec->WindowPos2svMESA = _mesa_WindowPos2svMESA;
-   exec->WindowPos3dMESA = _mesa_WindowPos3dMESA;
-   exec->WindowPos3dvMESA = _mesa_WindowPos3dvMESA;
-   exec->WindowPos3fMESA = _mesa_WindowPos3fMESA;
-   exec->WindowPos3fvMESA = _mesa_WindowPos3fvMESA;
-   exec->WindowPos3iMESA = _mesa_WindowPos3iMESA;
-   exec->WindowPos3ivMESA = _mesa_WindowPos3ivMESA;
-   exec->WindowPos3sMESA = _mesa_WindowPos3sMESA;
-   exec->WindowPos3svMESA = _mesa_WindowPos3svMESA;
-   exec->WindowPos4dMESA = _mesa_WindowPos4dMESA;
-   exec->WindowPos4dvMESA = _mesa_WindowPos4dvMESA;
-   exec->WindowPos4fMESA = _mesa_WindowPos4fMESA;
-   exec->WindowPos4fvMESA = _mesa_WindowPos4fvMESA;
-   exec->WindowPos4iMESA = _mesa_WindowPos4iMESA;
-   exec->WindowPos4ivMESA = _mesa_WindowPos4ivMESA;
-   exec->WindowPos4sMESA = _mesa_WindowPos4sMESA;
-   exec->WindowPos4svMESA = _mesa_WindowPos4svMESA;
+   SET_WindowPos2dMESA(exec, _mesa_WindowPos2dMESA);
+   SET_WindowPos2dvMESA(exec, _mesa_WindowPos2dvMESA);
+   SET_WindowPos2fMESA(exec, _mesa_WindowPos2fMESA);
+   SET_WindowPos2fvMESA(exec, _mesa_WindowPos2fvMESA);
+   SET_WindowPos2iMESA(exec, _mesa_WindowPos2iMESA);
+   SET_WindowPos2ivMESA(exec, _mesa_WindowPos2ivMESA);
+   SET_WindowPos2sMESA(exec, _mesa_WindowPos2sMESA);
+   SET_WindowPos2svMESA(exec, _mesa_WindowPos2svMESA);
+   SET_WindowPos3dMESA(exec, _mesa_WindowPos3dMESA);
+   SET_WindowPos3dvMESA(exec, _mesa_WindowPos3dvMESA);
+   SET_WindowPos3fMESA(exec, _mesa_WindowPos3fMESA);
+   SET_WindowPos3fvMESA(exec, _mesa_WindowPos3fvMESA);
+   SET_WindowPos3iMESA(exec, _mesa_WindowPos3iMESA);
+   SET_WindowPos3ivMESA(exec, _mesa_WindowPos3ivMESA);
+   SET_WindowPos3sMESA(exec, _mesa_WindowPos3sMESA);
+   SET_WindowPos3svMESA(exec, _mesa_WindowPos3svMESA);
+   SET_WindowPos4dMESA(exec, _mesa_WindowPos4dMESA);
+   SET_WindowPos4dvMESA(exec, _mesa_WindowPos4dvMESA);
+   SET_WindowPos4fMESA(exec, _mesa_WindowPos4fMESA);
+   SET_WindowPos4fvMESA(exec, _mesa_WindowPos4fvMESA);
+   SET_WindowPos4iMESA(exec, _mesa_WindowPos4iMESA);
+   SET_WindowPos4ivMESA(exec, _mesa_WindowPos4ivMESA);
+   SET_WindowPos4sMESA(exec, _mesa_WindowPos4sMESA);
+   SET_WindowPos4svMESA(exec, _mesa_WindowPos4svMESA);
 #endif
 
    /* 200. GL_IBM_multimode_draw_arrays */
 #if _HAVE_FULL_GL
-   exec->MultiModeDrawArraysIBM = _mesa_MultiModeDrawArraysIBM;
-   exec->MultiModeDrawElementsIBM = _mesa_MultiModeDrawElementsIBM;
+   SET_MultiModeDrawArraysIBM(exec, _mesa_MultiModeDrawArraysIBM);
+   SET_MultiModeDrawElementsIBM(exec, _mesa_MultiModeDrawElementsIBM);
 #endif
 
    /* 233. GL_NV_vertex_program */
 #if FEATURE_NV_vertex_program
-   exec->BindProgramNV = _mesa_BindProgram;
-   exec->DeleteProgramsNV = _mesa_DeletePrograms;
-   exec->ExecuteProgramNV = _mesa_ExecuteProgramNV;
-   exec->GenProgramsNV = _mesa_GenPrograms;
-   exec->AreProgramsResidentNV = _mesa_AreProgramsResidentNV;
-   exec->RequestResidentProgramsNV = _mesa_RequestResidentProgramsNV;
-   exec->GetProgramParameterfvNV = _mesa_GetProgramParameterfvNV;
-   exec->GetProgramParameterdvNV = _mesa_GetProgramParameterdvNV;
-   exec->GetProgramivNV = _mesa_GetProgramivNV;
-   exec->GetProgramStringNV = _mesa_GetProgramStringNV;
-   exec->GetTrackMatrixivNV = _mesa_GetTrackMatrixivNV;
-   exec->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV;
-   exec->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV;
-   exec->GetVertexAttribivNV = _mesa_GetVertexAttribivNV;
-   exec->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV;
-   exec->IsProgramNV = _mesa_IsProgram;
-   exec->LoadProgramNV = _mesa_LoadProgramNV;
-   exec->ProgramParameter4dNV = _mesa_ProgramParameter4dNV;
-   exec->ProgramParameter4dvNV = _mesa_ProgramParameter4dvNV;
-   exec->ProgramParameter4fNV = _mesa_ProgramParameter4fNV;
-   exec->ProgramParameter4fvNV = _mesa_ProgramParameter4fvNV;
-   exec->ProgramParameters4dvNV = _mesa_ProgramParameters4dvNV;
-   exec->ProgramParameters4fvNV = _mesa_ProgramParameters4fvNV;
-   exec->TrackMatrixNV = _mesa_TrackMatrixNV;
-   exec->VertexAttribPointerNV = _mesa_VertexAttribPointerNV;
+   SET_BindProgramNV(exec, _mesa_BindProgram);
+   SET_DeleteProgramsNV(exec, _mesa_DeletePrograms);
+   SET_ExecuteProgramNV(exec, _mesa_ExecuteProgramNV);
+   SET_GenProgramsNV(exec, _mesa_GenPrograms);
+   SET_AreProgramsResidentNV(exec, _mesa_AreProgramsResidentNV);
+   SET_RequestResidentProgramsNV(exec, _mesa_RequestResidentProgramsNV);
+   SET_GetProgramParameterfvNV(exec, _mesa_GetProgramParameterfvNV);
+   SET_GetProgramParameterdvNV(exec, _mesa_GetProgramParameterdvNV);
+   SET_GetProgramivNV(exec, _mesa_GetProgramivNV);
+   SET_GetProgramStringNV(exec, _mesa_GetProgramStringNV);
+   SET_GetTrackMatrixivNV(exec, _mesa_GetTrackMatrixivNV);
+   SET_GetVertexAttribdvNV(exec, _mesa_GetVertexAttribdvNV);
+   SET_GetVertexAttribfvNV(exec, _mesa_GetVertexAttribfvNV);
+   SET_GetVertexAttribivNV(exec, _mesa_GetVertexAttribivNV);
+   SET_GetVertexAttribPointervNV(exec, _mesa_GetVertexAttribPointervNV);
+   SET_IsProgramNV(exec, _mesa_IsProgram);
+   SET_LoadProgramNV(exec, _mesa_LoadProgramNV);
+   SET_ProgramParameter4dNV(exec, _mesa_ProgramParameter4dNV);
+   SET_ProgramParameter4dvNV(exec, _mesa_ProgramParameter4dvNV);
+   SET_ProgramParameter4fNV(exec, _mesa_ProgramParameter4fNV);
+   SET_ProgramParameter4fvNV(exec, _mesa_ProgramParameter4fvNV);
+   SET_ProgramParameters4dvNV(exec, _mesa_ProgramParameters4dvNV);
+   SET_ProgramParameters4fvNV(exec, _mesa_ProgramParameters4fvNV);
+   SET_TrackMatrixNV(exec, _mesa_TrackMatrixNV);
+   SET_VertexAttribPointerNV(exec, _mesa_VertexAttribPointerNV);
    /* glVertexAttrib*NV functions handled in api_loopback.c */
 #endif
 
    /* 282. GL_NV_fragment_program */
 #if FEATURE_NV_fragment_program
-   exec->ProgramNamedParameter4fNV = _mesa_ProgramNamedParameter4fNV;
-   exec->ProgramNamedParameter4dNV = _mesa_ProgramNamedParameter4dNV;
-   exec->ProgramNamedParameter4fvNV = _mesa_ProgramNamedParameter4fvNV;
-   exec->ProgramNamedParameter4dvNV = _mesa_ProgramNamedParameter4dvNV;
-   exec->GetProgramNamedParameterfvNV = _mesa_GetProgramNamedParameterfvNV;
-   exec->GetProgramNamedParameterdvNV = _mesa_GetProgramNamedParameterdvNV;
-   exec->ProgramLocalParameter4dARB = _mesa_ProgramLocalParameter4dARB;
-   exec->ProgramLocalParameter4dvARB = _mesa_ProgramLocalParameter4dvARB;
-   exec->ProgramLocalParameter4fARB = _mesa_ProgramLocalParameter4fARB;
-   exec->ProgramLocalParameter4fvARB = _mesa_ProgramLocalParameter4fvARB;
-   exec->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB;
-   exec->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB;
+   SET_ProgramNamedParameter4fNV(exec, _mesa_ProgramNamedParameter4fNV);
+   SET_ProgramNamedParameter4dNV(exec, _mesa_ProgramNamedParameter4dNV);
+   SET_ProgramNamedParameter4fvNV(exec, _mesa_ProgramNamedParameter4fvNV);
+   SET_ProgramNamedParameter4dvNV(exec, _mesa_ProgramNamedParameter4dvNV);
+   SET_GetProgramNamedParameterfvNV(exec, _mesa_GetProgramNamedParameterfvNV);
+   SET_GetProgramNamedParameterdvNV(exec, _mesa_GetProgramNamedParameterdvNV);
+   SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB);
+   SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB);
+   SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB);
+   SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB);
+   SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB);
+   SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB);
 #endif
 
    /* 262. GL_NV_point_sprite */
 #if _HAVE_FULL_GL
-   exec->PointParameteriNV = _mesa_PointParameteriNV;
-   exec->PointParameterivNV = _mesa_PointParameterivNV;
+   SET_PointParameteriNV(exec, _mesa_PointParameteriNV);
+   SET_PointParameterivNV(exec, _mesa_PointParameterivNV);
 #endif
 
    /* 268. GL_EXT_stencil_two_side */
 #if _HAVE_FULL_GL
-   exec->ActiveStencilFaceEXT = _mesa_ActiveStencilFaceEXT;
+   SET_ActiveStencilFaceEXT(exec, _mesa_ActiveStencilFaceEXT);
 #endif
 
    /* ???. GL_EXT_depth_bounds_test */
-   exec->DepthBoundsEXT = _mesa_DepthBoundsEXT;
+   SET_DepthBoundsEXT(exec, _mesa_DepthBoundsEXT);
 
    /* ARB 1. GL_ARB_multitexture */
 #if _HAVE_FULL_GL
-   exec->ActiveTextureARB = _mesa_ActiveTextureARB;
-   exec->ClientActiveTextureARB = _mesa_ClientActiveTextureARB;
+   SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB);
+   SET_ClientActiveTextureARB(exec, _mesa_ClientActiveTextureARB);
 #endif
 
    /* ARB 3. GL_ARB_transpose_matrix */
 #if _HAVE_FULL_GL
-   exec->LoadTransposeMatrixdARB = _mesa_LoadTransposeMatrixdARB;
-   exec->LoadTransposeMatrixfARB = _mesa_LoadTransposeMatrixfARB;
-   exec->MultTransposeMatrixdARB = _mesa_MultTransposeMatrixdARB;
-   exec->MultTransposeMatrixfARB = _mesa_MultTransposeMatrixfARB;
+   SET_LoadTransposeMatrixdARB(exec, _mesa_LoadTransposeMatrixdARB);
+   SET_LoadTransposeMatrixfARB(exec, _mesa_LoadTransposeMatrixfARB);
+   SET_MultTransposeMatrixdARB(exec, _mesa_MultTransposeMatrixdARB);
+   SET_MultTransposeMatrixfARB(exec, _mesa_MultTransposeMatrixfARB);
 #endif
 
    /* ARB 5. GL_ARB_multisample */
 #if _HAVE_FULL_GL
-   exec->SampleCoverageARB = _mesa_SampleCoverageARB;
+   SET_SampleCoverageARB(exec, _mesa_SampleCoverageARB);
 #endif
 
    /* ARB 12. GL_ARB_texture_compression */
 #if _HAVE_FULL_GL
-   exec->CompressedTexImage3DARB = _mesa_CompressedTexImage3DARB;
-   exec->CompressedTexImage2DARB = _mesa_CompressedTexImage2DARB;
-   exec->CompressedTexImage1DARB = _mesa_CompressedTexImage1DARB;
-   exec->CompressedTexSubImage3DARB = _mesa_CompressedTexSubImage3DARB;
-   exec->CompressedTexSubImage2DARB = _mesa_CompressedTexSubImage2DARB;
-   exec->CompressedTexSubImage1DARB = _mesa_CompressedTexSubImage1DARB;
-   exec->GetCompressedTexImageARB = _mesa_GetCompressedTexImageARB;
+   SET_CompressedTexImage3DARB(exec, _mesa_CompressedTexImage3DARB);
+   SET_CompressedTexImage2DARB(exec, _mesa_CompressedTexImage2DARB);
+   SET_CompressedTexImage1DARB(exec, _mesa_CompressedTexImage1DARB);
+   SET_CompressedTexSubImage3DARB(exec, _mesa_CompressedTexSubImage3DARB);
+   SET_CompressedTexSubImage2DARB(exec, _mesa_CompressedTexSubImage2DARB);
+   SET_CompressedTexSubImage1DARB(exec, _mesa_CompressedTexSubImage1DARB);
+   SET_GetCompressedTexImageARB(exec, _mesa_GetCompressedTexImageARB);
 #endif
 
    /* ARB 14. GL_ARB_point_parameters */
@@ -654,148 +655,148 @@ _mesa_init_exec_table(struct _glapi_table *exec)
    /* glVertexAttrib4NivARB handled in api_loopback.c */
    /* glVertexAttrib4NusvARB handled in api_loopback.c */
    /* glVertexAttrib4NuivARB handled in api_loopback.c */
-   exec->VertexAttribPointerARB = _mesa_VertexAttribPointerARB;
-   exec->EnableVertexAttribArrayARB = _mesa_EnableVertexAttribArrayARB;
-   exec->DisableVertexAttribArrayARB = _mesa_DisableVertexAttribArrayARB;
-   exec->ProgramStringARB = _mesa_ProgramStringARB;
+   SET_VertexAttribPointerARB(exec, _mesa_VertexAttribPointerARB);
+   SET_EnableVertexAttribArrayARB(exec, _mesa_EnableVertexAttribArrayARB);
+   SET_DisableVertexAttribArrayARB(exec, _mesa_DisableVertexAttribArrayARB);
+   SET_ProgramStringARB(exec, _mesa_ProgramStringARB);
    /* glBindProgramARB aliases glBindProgramNV */
    /* glDeleteProgramsARB aliases glDeleteProgramsNV */
    /* glGenProgramsARB aliases glGenProgramsNV */
    /* glIsProgramARB aliases glIsProgramNV */
-   exec->GetVertexAttribdvARB = _mesa_GetVertexAttribdvARB;
-   exec->GetVertexAttribfvARB = _mesa_GetVertexAttribfvARB;
-   exec->GetVertexAttribivARB = _mesa_GetVertexAttribivARB;
+   SET_GetVertexAttribdvARB(exec, _mesa_GetVertexAttribdvARB);
+   SET_GetVertexAttribfvARB(exec, _mesa_GetVertexAttribfvARB);
+   SET_GetVertexAttribivARB(exec, _mesa_GetVertexAttribivARB);
    /* glGetVertexAttribPointervARB aliases glGetVertexAttribPointervNV */
-   exec->ProgramEnvParameter4dARB = _mesa_ProgramEnvParameter4dARB;
-   exec->ProgramEnvParameter4dvARB = _mesa_ProgramEnvParameter4dvARB;
-   exec->ProgramEnvParameter4fARB = _mesa_ProgramEnvParameter4fARB;
-   exec->ProgramEnvParameter4fvARB = _mesa_ProgramEnvParameter4fvARB;
-   exec->ProgramLocalParameter4dARB = _mesa_ProgramLocalParameter4dARB;
-   exec->ProgramLocalParameter4dvARB = _mesa_ProgramLocalParameter4dvARB;
-   exec->ProgramLocalParameter4fARB = _mesa_ProgramLocalParameter4fARB;
-   exec->ProgramLocalParameter4fvARB = _mesa_ProgramLocalParameter4fvARB;
-   exec->GetProgramEnvParameterdvARB = _mesa_GetProgramEnvParameterdvARB;
-   exec->GetProgramEnvParameterfvARB = _mesa_GetProgramEnvParameterfvARB;
-   exec->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB;
-   exec->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB;
-   exec->GetProgramivARB = _mesa_GetProgramivARB;
-   exec->GetProgramStringARB = _mesa_GetProgramStringARB;
+   SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB);
+   SET_ProgramEnvParameter4dvARB(exec, _mesa_ProgramEnvParameter4dvARB);
+   SET_ProgramEnvParameter4fARB(exec, _mesa_ProgramEnvParameter4fARB);
+   SET_ProgramEnvParameter4fvARB(exec, _mesa_ProgramEnvParameter4fvARB);
+   SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB);
+   SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB);
+   SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB);
+   SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB);
+   SET_GetProgramEnvParameterdvARB(exec, _mesa_GetProgramEnvParameterdvARB);
+   SET_GetProgramEnvParameterfvARB(exec, _mesa_GetProgramEnvParameterfvARB);
+   SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB);
+   SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB);
+   SET_GetProgramivARB(exec, _mesa_GetProgramivARB);
+   SET_GetProgramStringARB(exec, _mesa_GetProgramStringARB);
 #endif
 
    /* ARB 28. GL_ARB_vertex_buffer_object */
 #if FEATURE_ARB_vertex_buffer_object
-   exec->BindBufferARB = _mesa_BindBufferARB;
-   exec->BufferDataARB = _mesa_BufferDataARB;
-   exec->BufferSubDataARB = _mesa_BufferSubDataARB;
-   exec->DeleteBuffersARB = _mesa_DeleteBuffersARB;
-   exec->GenBuffersARB = _mesa_GenBuffersARB;
-   exec->GetBufferParameterivARB = _mesa_GetBufferParameterivARB;
-   exec->GetBufferPointervARB = _mesa_GetBufferPointervARB;
-   exec->GetBufferSubDataARB = _mesa_GetBufferSubDataARB;
-   exec->IsBufferARB = _mesa_IsBufferARB;
-   exec->MapBufferARB = _mesa_MapBufferARB;
-   exec->UnmapBufferARB = _mesa_UnmapBufferARB;
+   SET_BindBufferARB(exec, _mesa_BindBufferARB);
+   SET_BufferDataARB(exec, _mesa_BufferDataARB);
+   SET_BufferSubDataARB(exec, _mesa_BufferSubDataARB);
+   SET_DeleteBuffersARB(exec, _mesa_DeleteBuffersARB);
+   SET_GenBuffersARB(exec, _mesa_GenBuffersARB);
+   SET_GetBufferParameterivARB(exec, _mesa_GetBufferParameterivARB);
+   SET_GetBufferPointervARB(exec, _mesa_GetBufferPointervARB);
+   SET_GetBufferSubDataARB(exec, _mesa_GetBufferSubDataARB);
+   SET_IsBufferARB(exec, _mesa_IsBufferARB);
+   SET_MapBufferARB(exec, _mesa_MapBufferARB);
+   SET_UnmapBufferARB(exec, _mesa_UnmapBufferARB);
 #endif
 
    /* ARB 29. GL_ARB_occlusion_query */
 #if FEATURE_ARB_occlusion_query
-   exec->GenQueriesARB = _mesa_GenQueriesARB;
-   exec->DeleteQueriesARB = _mesa_DeleteQueriesARB;
-   exec->IsQueryARB = _mesa_IsQueryARB;
-   exec->BeginQueryARB = _mesa_BeginQueryARB;
-   exec->EndQueryARB = _mesa_EndQueryARB;
-   exec->GetQueryivARB = _mesa_GetQueryivARB;
-   exec->GetQueryObjectivARB = _mesa_GetQueryObjectivARB;
-   exec->GetQueryObjectuivARB = _mesa_GetQueryObjectuivARB;
+   SET_GenQueriesARB(exec, _mesa_GenQueriesARB);
+   SET_DeleteQueriesARB(exec, _mesa_DeleteQueriesARB);
+   SET_IsQueryARB(exec, _mesa_IsQueryARB);
+   SET_BeginQueryARB(exec, _mesa_BeginQueryARB);
+   SET_EndQueryARB(exec, _mesa_EndQueryARB);
+   SET_GetQueryivARB(exec, _mesa_GetQueryivARB);
+   SET_GetQueryObjectivARB(exec, _mesa_GetQueryObjectivARB);
+   SET_GetQueryObjectuivARB(exec, _mesa_GetQueryObjectuivARB);
 #endif
 
    /* ARB 37. GL_ARB_draw_buffers */
-   exec->DrawBuffersARB = _mesa_DrawBuffersARB;
+   SET_DrawBuffersARB(exec, _mesa_DrawBuffersARB);
    
 #if FEATURE_ARB_shader_objects
-   exec->DeleteObjectARB = _mesa_DeleteObjectARB;
-   exec->GetHandleARB = _mesa_GetHandleARB;
-   exec->DetachObjectARB = _mesa_DetachObjectARB;
-   exec->CreateShaderObjectARB = _mesa_CreateShaderObjectARB;
-   exec->ShaderSourceARB = _mesa_ShaderSourceARB;
-   exec->CompileShaderARB = _mesa_CompileShaderARB;
-   exec->CreateProgramObjectARB = _mesa_CreateProgramObjectARB;
-   exec->AttachObjectARB = _mesa_AttachObjectARB;
-   exec->LinkProgramARB = _mesa_LinkProgramARB;
-   exec->UseProgramObjectARB = _mesa_UseProgramObjectARB;
-   exec->ValidateProgramARB = _mesa_ValidateProgramARB;
-   exec->Uniform1fARB = _mesa_Uniform1fARB;
-   exec->Uniform2fARB = _mesa_Uniform2fARB;
-   exec->Uniform3fARB = _mesa_Uniform3fARB;
-   exec->Uniform4fARB = _mesa_Uniform4fARB;
-   exec->Uniform1iARB = _mesa_Uniform1iARB;
-   exec->Uniform2iARB = _mesa_Uniform2iARB;
-   exec->Uniform3iARB = _mesa_Uniform3iARB;
-   exec->Uniform4iARB = _mesa_Uniform4iARB;
-   exec->Uniform1fvARB = _mesa_Uniform1fvARB;
-   exec->Uniform2fvARB = _mesa_Uniform2fvARB;
-   exec->Uniform3fvARB = _mesa_Uniform3fvARB;
-   exec->Uniform4fvARB = _mesa_Uniform4fvARB;
-   exec->Uniform1ivARB = _mesa_Uniform1ivARB;
-   exec->Uniform2ivARB = _mesa_Uniform2ivARB;
-   exec->Uniform3ivARB = _mesa_Uniform3ivARB;
-   exec->Uniform4ivARB = _mesa_Uniform4ivARB;
-   exec->UniformMatrix2fvARB = _mesa_UniformMatrix2fvARB;
-   exec->UniformMatrix3fvARB = _mesa_UniformMatrix3fvARB;
-   exec->UniformMatrix4fvARB = _mesa_UniformMatrix4fvARB;
-   exec->GetObjectParameterfvARB = _mesa_GetObjectParameterfvARB;
-   exec->GetObjectParameterivARB = _mesa_GetObjectParameterivARB;
-   exec->GetInfoLogARB = _mesa_GetInfoLogARB;
-   exec->GetAttachedObjectsARB = _mesa_GetAttachedObjectsARB;
-   exec->GetUniformLocationARB = _mesa_GetUniformLocationARB;
-   exec->GetActiveUniformARB = _mesa_GetActiveUniformARB;
-   exec->GetUniformfvARB = _mesa_GetUniformfvARB;
-   exec->GetUniformivARB = _mesa_GetUniformivARB;
-   exec->GetShaderSourceARB = _mesa_GetShaderSourceARB;
-#endif    /* FEATURE_ARB_shader_objects */\r
-\r
-#if FEATURE_ARB_vertex_shader\r
-   exec->BindAttribLocationARB = _mesa_BindAttribLocationARB;\r
-   exec->GetActiveAttribARB = _mesa_GetActiveAttribARB;\r
-   exec->GetAttribLocationARB = _mesa_GetAttribLocationARB;\r
+   SET_DeleteObjectARB(exec, _mesa_DeleteObjectARB);
+   SET_GetHandleARB(exec, _mesa_GetHandleARB);
+   SET_DetachObjectARB(exec, _mesa_DetachObjectARB);
+   SET_CreateShaderObjectARB(exec, _mesa_CreateShaderObjectARB);
+   SET_ShaderSourceARB(exec, _mesa_ShaderSourceARB);
+   SET_CompileShaderARB(exec, _mesa_CompileShaderARB);
+   SET_CreateProgramObjectARB(exec, _mesa_CreateProgramObjectARB);
+   SET_AttachObjectARB(exec, _mesa_AttachObjectARB);
+   SET_LinkProgramARB(exec, _mesa_LinkProgramARB);
+   SET_UseProgramObjectARB(exec, _mesa_UseProgramObjectARB);
+   SET_ValidateProgramARB(exec, _mesa_ValidateProgramARB);
+   SET_Uniform1fARB(exec, _mesa_Uniform1fARB);
+   SET_Uniform2fARB(exec, _mesa_Uniform2fARB);
+   SET_Uniform3fARB(exec, _mesa_Uniform3fARB);
+   SET_Uniform4fARB(exec, _mesa_Uniform4fARB);
+   SET_Uniform1iARB(exec, _mesa_Uniform1iARB);
+   SET_Uniform2iARB(exec, _mesa_Uniform2iARB);
+   SET_Uniform3iARB(exec, _mesa_Uniform3iARB);
+   SET_Uniform4iARB(exec, _mesa_Uniform4iARB);
+   SET_Uniform1fvARB(exec, _mesa_Uniform1fvARB);
+   SET_Uniform2fvARB(exec, _mesa_Uniform2fvARB);
+   SET_Uniform3fvARB(exec, _mesa_Uniform3fvARB);
+   SET_Uniform4fvARB(exec, _mesa_Uniform4fvARB);
+   SET_Uniform1ivARB(exec, _mesa_Uniform1ivARB);
+   SET_Uniform2ivARB(exec, _mesa_Uniform2ivARB);
+   SET_Uniform3ivARB(exec, _mesa_Uniform3ivARB);
+   SET_Uniform4ivARB(exec, _mesa_Uniform4ivARB);
+   SET_UniformMatrix2fvARB(exec, _mesa_UniformMatrix2fvARB);
+   SET_UniformMatrix3fvARB(exec, _mesa_UniformMatrix3fvARB);
+   SET_UniformMatrix4fvARB(exec, _mesa_UniformMatrix4fvARB);
+   SET_GetObjectParameterfvARB(exec, _mesa_GetObjectParameterfvARB);
+   SET_GetObjectParameterivARB(exec, _mesa_GetObjectParameterivARB);
+   SET_GetInfoLogARB(exec, _mesa_GetInfoLogARB);
+   SET_GetAttachedObjectsARB(exec, _mesa_GetAttachedObjectsARB);
+   SET_GetUniformLocationARB(exec, _mesa_GetUniformLocationARB);
+   SET_GetActiveUniformARB(exec, _mesa_GetActiveUniformARB);
+   SET_GetUniformfvARB(exec, _mesa_GetUniformfvARB);
+   SET_GetUniformivARB(exec, _mesa_GetUniformivARB);
+   SET_GetShaderSourceARB(exec, _mesa_GetShaderSourceARB);
+#endif    /* FEATURE_ARB_shader_objects */
+
+#if FEATURE_ARB_vertex_shader
+   SET_BindAttribLocationARB(exec, _mesa_BindAttribLocationARB);
+   SET_GetActiveAttribARB(exec, _mesa_GetActiveAttribARB);
+   SET_GetAttribLocationARB(exec, _mesa_GetAttribLocationARB);
 #endif    /* FEATURE_ARB_vertex_shader */
 
   /* GL_ATI_fragment_shader */
 #if FEATURE_ATI_fragment_shader
-   exec->GenFragmentShadersATI = _mesa_GenFragmentShadersATI;
-   exec->BindFragmentShaderATI = _mesa_BindFragmentShaderATI;
-   exec->DeleteFragmentShaderATI = _mesa_DeleteFragmentShaderATI;
-   exec->BeginFragmentShaderATI = _mesa_BeginFragmentShaderATI;
-   exec->EndFragmentShaderATI = _mesa_EndFragmentShaderATI;
-   exec->PassTexCoordATI = _mesa_PassTexCoordATI;
-   exec->SampleMapATI = _mesa_SampleMapATI;
-   exec->ColorFragmentOp1ATI = _mesa_ColorFragmentOp1ATI;
-   exec->ColorFragmentOp2ATI = _mesa_ColorFragmentOp2ATI;
-   exec->ColorFragmentOp3ATI = _mesa_ColorFragmentOp3ATI;
-   exec->AlphaFragmentOp1ATI = _mesa_AlphaFragmentOp1ATI;
-   exec->AlphaFragmentOp2ATI = _mesa_AlphaFragmentOp2ATI;
-   exec->AlphaFragmentOp3ATI = _mesa_AlphaFragmentOp3ATI;
-   exec->SetFragmentShaderConstantATI = _mesa_SetFragmentShaderConstantATI;
+   SET_GenFragmentShadersATI(exec, _mesa_GenFragmentShadersATI);
+   SET_BindFragmentShaderATI(exec, _mesa_BindFragmentShaderATI);
+   SET_DeleteFragmentShaderATI(exec, _mesa_DeleteFragmentShaderATI);
+   SET_BeginFragmentShaderATI(exec, _mesa_BeginFragmentShaderATI);
+   SET_EndFragmentShaderATI(exec, _mesa_EndFragmentShaderATI);
+   SET_PassTexCoordATI(exec, _mesa_PassTexCoordATI);
+   SET_SampleMapATI(exec, _mesa_SampleMapATI);
+   SET_ColorFragmentOp1ATI(exec, _mesa_ColorFragmentOp1ATI);
+   SET_ColorFragmentOp2ATI(exec, _mesa_ColorFragmentOp2ATI);
+   SET_ColorFragmentOp3ATI(exec, _mesa_ColorFragmentOp3ATI);
+   SET_AlphaFragmentOp1ATI(exec, _mesa_AlphaFragmentOp1ATI);
+   SET_AlphaFragmentOp2ATI(exec, _mesa_AlphaFragmentOp2ATI);
+   SET_AlphaFragmentOp3ATI(exec, _mesa_AlphaFragmentOp3ATI);
+   SET_SetFragmentShaderConstantATI(exec, _mesa_SetFragmentShaderConstantATI);
 #endif
 
 #if FEATURE_EXT_framebuffer_object
-   exec->IsRenderbufferEXT = _mesa_IsRenderbufferEXT;
-   exec->BindRenderbufferEXT = _mesa_BindRenderbufferEXT;
-   exec->DeleteRenderbuffersEXT = _mesa_DeleteRenderbuffersEXT;
-   exec->GenRenderbuffersEXT = _mesa_GenRenderbuffersEXT;
-   exec->RenderbufferStorageEXT = _mesa_RenderbufferStorageEXT;
-   exec->GetRenderbufferParameterivEXT = _mesa_GetRenderbufferParameterivEXT;
-   exec->IsFramebufferEXT = _mesa_IsFramebufferEXT;
-   exec->BindFramebufferEXT = _mesa_BindFramebufferEXT;
-   exec->DeleteFramebuffersEXT = _mesa_DeleteFramebuffersEXT;
-   exec->GenFramebuffersEXT = _mesa_GenFramebuffersEXT;
-   exec->CheckFramebufferStatusEXT = _mesa_CheckFramebufferStatusEXT;
-   exec->FramebufferTexture1DEXT = _mesa_FramebufferTexture1DEXT;
-   exec->FramebufferTexture2DEXT = _mesa_FramebufferTexture2DEXT;
-   exec->FramebufferTexture3DEXT = _mesa_FramebufferTexture3DEXT;
-   exec->FramebufferRenderbufferEXT = _mesa_FramebufferRenderbufferEXT;
-   exec->GetFramebufferAttachmentParameterivEXT = _mesa_GetFramebufferAttachmentParameterivEXT;
-   exec->GenerateMipmapEXT = _mesa_GenerateMipmapEXT;
+   SET_IsRenderbufferEXT(exec, _mesa_IsRenderbufferEXT);
+   SET_BindRenderbufferEXT(exec, _mesa_BindRenderbufferEXT);
+   SET_DeleteRenderbuffersEXT(exec, _mesa_DeleteRenderbuffersEXT);
+   SET_GenRenderbuffersEXT(exec, _mesa_GenRenderbuffersEXT);
+   SET_RenderbufferStorageEXT(exec, _mesa_RenderbufferStorageEXT);
+   SET_GetRenderbufferParameterivEXT(exec, _mesa_GetRenderbufferParameterivEXT);
+   SET_IsFramebufferEXT(exec, _mesa_IsFramebufferEXT);
+   SET_BindFramebufferEXT(exec, _mesa_BindFramebufferEXT);
+   SET_DeleteFramebuffersEXT(exec, _mesa_DeleteFramebuffersEXT);
+   SET_GenFramebuffersEXT(exec, _mesa_GenFramebuffersEXT);
+   SET_CheckFramebufferStatusEXT(exec, _mesa_CheckFramebufferStatusEXT);
+   SET_FramebufferTexture1DEXT(exec, _mesa_FramebufferTexture1DEXT);
+   SET_FramebufferTexture2DEXT(exec, _mesa_FramebufferTexture2DEXT);
+   SET_FramebufferTexture3DEXT(exec, _mesa_FramebufferTexture3DEXT);
+   SET_FramebufferRenderbufferEXT(exec, _mesa_FramebufferRenderbufferEXT);
+   SET_GetFramebufferAttachmentParameterivEXT(exec, _mesa_GetFramebufferAttachmentParameterivEXT);
+   SET_GenerateMipmapEXT(exec, _mesa_GenerateMipmapEXT);
 #endif
 }
 
index 4043028..6781b69 100644 (file)
@@ -33,7 +33,7 @@
 #include "texstate.h"
 #include "mtypes.h"
 #include "varray.h"
-
+#include "dispatch.h"
 
 #ifndef GL_BOOLEAN
 #define GL_BOOLEAN 0x9999
@@ -851,7 +851,7 @@ _mesa_MultiDrawArraysEXT( GLenum mode, GLint *first,
 
    for (i = 0; i < primcount; i++) {
       if (count[i] > 0) {
-         (ctx->Exec->DrawArrays)(mode, first[i], count[i]);
+         CALL_DrawArrays(ctx->Exec, (mode, first[i], count[i]));
       }
    }
 }
@@ -869,7 +869,7 @@ _mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
 
    for (i = 0; i < primcount; i++) {
       if (count[i] > 0) {
-         (ctx->Exec->DrawElements)(mode, count[i], type, indices[i]);
+         CALL_DrawElements(ctx->Exec, (mode, count[i], type, indices[i]));
       }
    }
 }
@@ -889,7 +889,7 @@ _mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
    for ( i = 0 ; i < primcount ; i++ ) {
       if ( count[i] > 0 ) {
          GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride));
-        (ctx->Exec->DrawArrays)( m, first[i], count[i] );
+        CALL_DrawArrays(ctx->Exec, ( m, first[i], count[i] ));
       }
    }
 }
@@ -911,7 +911,7 @@ _mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
    for ( i = 0 ; i < primcount ; i++ ) {
       if ( count[i] > 0 ) {
          GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride));
-        (ctx->Exec->DrawElements)( m, count[i], type, indices[i] );
+        CALL_DrawElements(ctx->Exec, ( m, count[i], type, indices[i] ));
       }
    }
 }
index 1496fd1..0d285cb 100644 (file)
@@ -56,7 +56,7 @@
                                                                        \
    /* Save the swapped function's dispatch entry so it can be */       \
    /* restored later. */                                               \
-   tnl->Swapped[tnl->SwapCount][0] = (void *)&(ctx->Exec->FUNC);       \
+   tnl->Swapped[tnl->SwapCount][0] = (void *)&(GET_ ## FUNC (ctx->Exec)); \
    *(func_ptr_t *)(tnl->Swapped[tnl->SwapCount]+1) = (func_ptr_t)TAG(FUNC);    \
    tnl->SwapCount++;                                                   \
                                                                        \
@@ -64,7 +64,7 @@
       _mesa_debug(ctx, "   swapping gl" #FUNC"...\n" );                        \
                                                                        \
    /* Install the tnl function pointer.        */                              \
-   ctx->Exec->FUNC = tnl->Current->FUNC;                               \
+   SET_ ## FUNC(ctx->Exec, tnl->Current->FUNC);                                \
 }
 
 #define TAG(x) neutral_##x
 static void
 install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
 {
-   tab->ArrayElement = vfmt->ArrayElement;
-   tab->Color3f = vfmt->Color3f;
-   tab->Color3fv = vfmt->Color3fv;
-   tab->Color4f = vfmt->Color4f;
-   tab->Color4fv = vfmt->Color4fv;
-   tab->EdgeFlag = vfmt->EdgeFlag;
-   tab->EdgeFlagv = vfmt->EdgeFlagv;
-   tab->EvalCoord1f = vfmt->EvalCoord1f;
-   tab->EvalCoord1fv = vfmt->EvalCoord1fv;
-   tab->EvalCoord2f = vfmt->EvalCoord2f;
-   tab->EvalCoord2fv = vfmt->EvalCoord2fv;
-   tab->EvalPoint1 = vfmt->EvalPoint1;
-   tab->EvalPoint2 = vfmt->EvalPoint2;
-   tab->FogCoordfEXT = vfmt->FogCoordfEXT;
-   tab->FogCoordfvEXT = vfmt->FogCoordfvEXT;
-   tab->Indexf = vfmt->Indexf;
-   tab->Indexfv = vfmt->Indexfv;
-   tab->Materialfv = vfmt->Materialfv;
-   tab->MultiTexCoord1fARB = vfmt->MultiTexCoord1fARB;
-   tab->MultiTexCoord1fvARB = vfmt->MultiTexCoord1fvARB;
-   tab->MultiTexCoord2fARB = vfmt->MultiTexCoord2fARB;
-   tab->MultiTexCoord2fvARB = vfmt->MultiTexCoord2fvARB;
-   tab->MultiTexCoord3fARB = vfmt->MultiTexCoord3fARB;
-   tab->MultiTexCoord3fvARB = vfmt->MultiTexCoord3fvARB;
-   tab->MultiTexCoord4fARB = vfmt->MultiTexCoord4fARB;
-   tab->MultiTexCoord4fvARB = vfmt->MultiTexCoord4fvARB;
-   tab->Normal3f = vfmt->Normal3f;
-   tab->Normal3fv = vfmt->Normal3fv;
-   tab->SecondaryColor3fEXT = vfmt->SecondaryColor3fEXT;
-   tab->SecondaryColor3fvEXT = vfmt->SecondaryColor3fvEXT;
-   tab->TexCoord1f = vfmt->TexCoord1f;
-   tab->TexCoord1fv = vfmt->TexCoord1fv;
-   tab->TexCoord2f = vfmt->TexCoord2f;
-   tab->TexCoord2fv = vfmt->TexCoord2fv;
-   tab->TexCoord3f = vfmt->TexCoord3f;
-   tab->TexCoord3fv = vfmt->TexCoord3fv;
-   tab->TexCoord4f = vfmt->TexCoord4f;
-   tab->TexCoord4fv = vfmt->TexCoord4fv;
-   tab->Vertex2f = vfmt->Vertex2f;
-   tab->Vertex2fv = vfmt->Vertex2fv;
-   tab->Vertex3f = vfmt->Vertex3f;
-   tab->Vertex3fv = vfmt->Vertex3fv;
-   tab->Vertex4f = vfmt->Vertex4f;
-   tab->Vertex4fv = vfmt->Vertex4fv;
-   tab->CallList = vfmt->CallList;
-   tab->CallLists = vfmt->CallLists;
-   tab->Begin = vfmt->Begin;
-   tab->End = vfmt->End;
-   tab->VertexAttrib1fNV = vfmt->VertexAttrib1fNV;
-   tab->VertexAttrib1fvNV = vfmt->VertexAttrib1fvNV;
-   tab->VertexAttrib2fNV = vfmt->VertexAttrib2fNV;
-   tab->VertexAttrib2fvNV = vfmt->VertexAttrib2fvNV;
-   tab->VertexAttrib3fNV = vfmt->VertexAttrib3fNV;
-   tab->VertexAttrib3fvNV = vfmt->VertexAttrib3fvNV;
-   tab->VertexAttrib4fNV = vfmt->VertexAttrib4fNV;
-   tab->VertexAttrib4fvNV = vfmt->VertexAttrib4fvNV;
-   tab->VertexAttrib1fARB = vfmt->VertexAttrib1fARB;
-   tab->VertexAttrib1fvARB = vfmt->VertexAttrib1fvARB;
-   tab->VertexAttrib2fARB = vfmt->VertexAttrib2fARB;
-   tab->VertexAttrib2fvARB = vfmt->VertexAttrib2fvARB;
-   tab->VertexAttrib3fARB = vfmt->VertexAttrib3fARB;
-   tab->VertexAttrib3fvARB = vfmt->VertexAttrib3fvARB;
-   tab->VertexAttrib4fARB = vfmt->VertexAttrib4fARB;
-   tab->VertexAttrib4fvARB = vfmt->VertexAttrib4fvARB;
-   tab->Rectf = vfmt->Rectf;
-   tab->DrawArrays = vfmt->DrawArrays;
-   tab->DrawElements = vfmt->DrawElements;
-   tab->DrawRangeElements = vfmt->DrawRangeElements;
-   tab->EvalMesh1 = vfmt->EvalMesh1;
-   tab->EvalMesh2 = vfmt->EvalMesh2;
+   SET_ArrayElement(tab, vfmt->ArrayElement);
+   SET_Color3f(tab, vfmt->Color3f);
+   SET_Color3fv(tab, vfmt->Color3fv);
+   SET_Color4f(tab, vfmt->Color4f);
+   SET_Color4fv(tab, vfmt->Color4fv);
+   SET_EdgeFlag(tab, vfmt->EdgeFlag);
+   SET_EdgeFlagv(tab, vfmt->EdgeFlagv);
+   SET_EvalCoord1f(tab, vfmt->EvalCoord1f);
+   SET_EvalCoord1fv(tab, vfmt->EvalCoord1fv);
+   SET_EvalCoord2f(tab, vfmt->EvalCoord2f);
+   SET_EvalCoord2fv(tab, vfmt->EvalCoord2fv);
+   SET_EvalPoint1(tab, vfmt->EvalPoint1);
+   SET_EvalPoint2(tab, vfmt->EvalPoint2);
+   SET_FogCoordfEXT(tab, vfmt->FogCoordfEXT);
+   SET_FogCoordfvEXT(tab, vfmt->FogCoordfvEXT);
+   SET_Indexf(tab, vfmt->Indexf);
+   SET_Indexfv(tab, vfmt->Indexfv);
+   SET_Materialfv(tab, vfmt->Materialfv);
+   SET_MultiTexCoord1fARB(tab, vfmt->MultiTexCoord1fARB);
+   SET_MultiTexCoord1fvARB(tab, vfmt->MultiTexCoord1fvARB);
+   SET_MultiTexCoord2fARB(tab, vfmt->MultiTexCoord2fARB);
+   SET_MultiTexCoord2fvARB(tab, vfmt->MultiTexCoord2fvARB);
+   SET_MultiTexCoord3fARB(tab, vfmt->MultiTexCoord3fARB);
+   SET_MultiTexCoord3fvARB(tab, vfmt->MultiTexCoord3fvARB);
+   SET_MultiTexCoord4fARB(tab, vfmt->MultiTexCoord4fARB);
+   SET_MultiTexCoord4fvARB(tab, vfmt->MultiTexCoord4fvARB);
+   SET_Normal3f(tab, vfmt->Normal3f);
+   SET_Normal3fv(tab, vfmt->Normal3fv);
+   SET_SecondaryColor3fEXT(tab, vfmt->SecondaryColor3fEXT);
+   SET_SecondaryColor3fvEXT(tab, vfmt->SecondaryColor3fvEXT);
+   SET_TexCoord1f(tab, vfmt->TexCoord1f);
+   SET_TexCoord1fv(tab, vfmt->TexCoord1fv);
+   SET_TexCoord2f(tab, vfmt->TexCoord2f);
+   SET_TexCoord2fv(tab, vfmt->TexCoord2fv);
+   SET_TexCoord3f(tab, vfmt->TexCoord3f);
+   SET_TexCoord3fv(tab, vfmt->TexCoord3fv);
+   SET_TexCoord4f(tab, vfmt->TexCoord4f);
+   SET_TexCoord4fv(tab, vfmt->TexCoord4fv);
+   SET_Vertex2f(tab, vfmt->Vertex2f);
+   SET_Vertex2fv(tab, vfmt->Vertex2fv);
+   SET_Vertex3f(tab, vfmt->Vertex3f);
+   SET_Vertex3fv(tab, vfmt->Vertex3fv);
+   SET_Vertex4f(tab, vfmt->Vertex4f);
+   SET_Vertex4fv(tab, vfmt->Vertex4fv);
+   SET_CallList(tab, vfmt->CallList);
+   SET_CallLists(tab, vfmt->CallLists);
+   SET_Begin(tab, vfmt->Begin);
+   SET_End(tab, vfmt->End);
+   SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV);
+   SET_VertexAttrib1fvNV(tab, vfmt->VertexAttrib1fvNV);
+   SET_VertexAttrib2fNV(tab, vfmt->VertexAttrib2fNV);
+   SET_VertexAttrib2fvNV(tab, vfmt->VertexAttrib2fvNV);
+   SET_VertexAttrib3fNV(tab, vfmt->VertexAttrib3fNV);
+   SET_VertexAttrib3fvNV(tab, vfmt->VertexAttrib3fvNV);
+   SET_VertexAttrib4fNV(tab, vfmt->VertexAttrib4fNV);
+   SET_VertexAttrib4fvNV(tab, vfmt->VertexAttrib4fvNV);
+   SET_VertexAttrib1fARB(tab, vfmt->VertexAttrib1fARB);
+   SET_VertexAttrib1fvARB(tab, vfmt->VertexAttrib1fvARB);
+   SET_VertexAttrib2fARB(tab, vfmt->VertexAttrib2fARB);
+   SET_VertexAttrib2fvARB(tab, vfmt->VertexAttrib2fvARB);
+   SET_VertexAttrib3fARB(tab, vfmt->VertexAttrib3fARB);
+   SET_VertexAttrib3fvARB(tab, vfmt->VertexAttrib3fvARB);
+   SET_VertexAttrib4fARB(tab, vfmt->VertexAttrib4fARB);
+   SET_VertexAttrib4fvARB(tab, vfmt->VertexAttrib4fvARB);
+   SET_Rectf(tab, vfmt->Rectf);
+   SET_DrawArrays(tab, vfmt->DrawArrays);
+   SET_DrawElements(tab, vfmt->DrawElements);
+   SET_DrawRangeElements(tab, vfmt->DrawRangeElements);
+   SET_EvalMesh1(tab, vfmt->EvalMesh1);
+   SET_EvalMesh2(tab, vfmt->EvalMesh2);
    ASSERT(tab->EvalMesh2);
 }
 
index 8b0bd79..4c9691f 100644 (file)
 #define PRE_LOOPBACK( FUNC )
 #endif
 
+#include "dispatch.h"
+
 static void GLAPIENTRY TAG(ArrayElement)( GLint i )
 {
    PRE_LOOPBACK( ArrayElement );
-   GL_CALL(ArrayElement)( i );
+   CALL_ArrayElement(GET_DISPATCH(), ( i ));
 }
 
 static void GLAPIENTRY TAG(Color3f)( GLfloat r, GLfloat g, GLfloat b )
 {
    PRE_LOOPBACK( Color3f );
-   GL_CALL(Color3f)( r, g, b );
+   CALL_Color3f(GET_DISPATCH(), ( r, g, b ));
 }
 
 static void GLAPIENTRY TAG(Color3fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Color3fv );
-   GL_CALL(Color3fv)( v );
+   CALL_Color3fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(Color4f)( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
 {
    PRE_LOOPBACK( Color4f );
-   GL_CALL(Color4f)( r, g, b, a );
+   CALL_Color4f(GET_DISPATCH(), ( r, g, b, a ));
 }
 
 static void GLAPIENTRY TAG(Color4fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Color4fv );
-   GL_CALL(Color4fv)( v );
+   CALL_Color4fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(EdgeFlag)( GLboolean e )
 {
    PRE_LOOPBACK( EdgeFlag );
-   GL_CALL(EdgeFlag)( e );
+   CALL_EdgeFlag(GET_DISPATCH(), ( e ));
 }
 
 static void GLAPIENTRY TAG(EdgeFlagv)( const GLboolean *v )
 {
    PRE_LOOPBACK( EdgeFlagv );
-   GL_CALL(EdgeFlagv)( v );
+   CALL_EdgeFlagv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(EvalCoord1f)( GLfloat s )
 {
    PRE_LOOPBACK( EvalCoord1f );
-   GL_CALL(EvalCoord1f)( s );
+   CALL_EvalCoord1f(GET_DISPATCH(), ( s ));
 }
 
 static void GLAPIENTRY TAG(EvalCoord1fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( EvalCoord1fv );
-   GL_CALL(EvalCoord1fv)( v );
+   CALL_EvalCoord1fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(EvalCoord2f)( GLfloat s, GLfloat t )
 {
    PRE_LOOPBACK( EvalCoord2f );
-   GL_CALL(EvalCoord2f)( s, t );
+   CALL_EvalCoord2f(GET_DISPATCH(), ( s, t ));
 }
 
 static void GLAPIENTRY TAG(EvalCoord2fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( EvalCoord2fv );
-   GL_CALL(EvalCoord2fv)( v );
+   CALL_EvalCoord2fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(EvalPoint1)( GLint i )
 {
    PRE_LOOPBACK( EvalPoint1 );
-   GL_CALL(EvalPoint1)( i );
+   CALL_EvalPoint1(GET_DISPATCH(), ( i ));
 }
 
 static void GLAPIENTRY TAG(EvalPoint2)( GLint i, GLint j )
 {
    PRE_LOOPBACK( EvalPoint2 );
-   GL_CALL(EvalPoint2)( i, j );
+   CALL_EvalPoint2(GET_DISPATCH(), ( i, j ));
 }
 
 static void GLAPIENTRY TAG(FogCoordfEXT)( GLfloat f )
 {
    PRE_LOOPBACK( FogCoordfEXT );
-   GL_CALL(FogCoordfEXT)( f );
+   CALL_FogCoordfEXT(GET_DISPATCH(), ( f ));
 }
 
 static void GLAPIENTRY TAG(FogCoordfvEXT)( const GLfloat *v )
 {
    PRE_LOOPBACK( FogCoordfvEXT );
-   GL_CALL(FogCoordfvEXT)( v );
+   CALL_FogCoordfvEXT(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(Indexf)( GLfloat f )
 {
    PRE_LOOPBACK( Indexf );
-   GL_CALL(Indexf)( f );
+   CALL_Indexf(GET_DISPATCH(), ( f ));
 }
 
 static void GLAPIENTRY TAG(Indexfv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Indexfv );
-   GL_CALL(Indexfv)( v );
+   CALL_Indexfv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(Materialfv)( GLenum face, GLenum pname, const GLfloat *v )
 {
    PRE_LOOPBACK( Materialfv );
-   GL_CALL(Materialfv)( face, pname, v );
+   CALL_Materialfv(GET_DISPATCH(), ( face, pname, v ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord1fARB)( GLenum target, GLfloat a )
 {
    PRE_LOOPBACK( MultiTexCoord1fARB );
-   GL_CALL(MultiTexCoord1fARB)( target, a );
+   CALL_MultiTexCoord1fARB(GET_DISPATCH(), ( target, a ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord1fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord1fvARB );
-   GL_CALL(MultiTexCoord1fvARB)( target, tc );
+   CALL_MultiTexCoord1fvARB(GET_DISPATCH(), ( target, tc ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord2fARB)( GLenum target, GLfloat s, GLfloat t )
 {
    PRE_LOOPBACK( MultiTexCoord2fARB );
-   GL_CALL(MultiTexCoord2fARB)( target, s, t );
+   CALL_MultiTexCoord2fARB(GET_DISPATCH(), ( target, s, t ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord2fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord2fvARB );
-   GL_CALL(MultiTexCoord2fvARB)( target, tc );
+   CALL_MultiTexCoord2fvARB(GET_DISPATCH(), ( target, tc ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord3fARB)( GLenum target, GLfloat s,
                                     GLfloat t, GLfloat r )
 {
    PRE_LOOPBACK( MultiTexCoord3fARB );
-   GL_CALL(MultiTexCoord3fARB)( target, s, t, r );
+   CALL_MultiTexCoord3fARB(GET_DISPATCH(), ( target, s, t, r ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord3fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord3fvARB );
-   GL_CALL(MultiTexCoord3fvARB)( target, tc );
+   CALL_MultiTexCoord3fvARB(GET_DISPATCH(), ( target, tc ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord4fARB)( GLenum target, GLfloat s,
                                     GLfloat t, GLfloat r, GLfloat q )
 {
    PRE_LOOPBACK( MultiTexCoord4fARB );
-   GL_CALL(MultiTexCoord4fARB)( target, s, t, r, q );
+   CALL_MultiTexCoord4fARB(GET_DISPATCH(), ( target, s, t, r, q ));
 }
 
 static void GLAPIENTRY TAG(MultiTexCoord4fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord4fvARB );
-   GL_CALL(MultiTexCoord4fvARB)( target, tc );
+   CALL_MultiTexCoord4fvARB(GET_DISPATCH(), ( target, tc ));
 }
 
 static void GLAPIENTRY TAG(Normal3f)( GLfloat x, GLfloat y, GLfloat z )
 {
    PRE_LOOPBACK( Normal3f );
-   GL_CALL(Normal3f)( x, y, z );
+   CALL_Normal3f(GET_DISPATCH(), ( x, y, z ));
 }
 
 static void GLAPIENTRY TAG(Normal3fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Normal3fv );
-   GL_CALL(Normal3fv)( v );
+   CALL_Normal3fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(SecondaryColor3fEXT)( GLfloat r, GLfloat g, GLfloat b )
 {
    PRE_LOOPBACK( SecondaryColor3fEXT );
-   GL_CALL(SecondaryColor3fEXT)( r, g, b );
+   CALL_SecondaryColor3fEXT(GET_DISPATCH(), ( r, g, b ));
 }
 
 static void GLAPIENTRY TAG(SecondaryColor3fvEXT)( const GLfloat *v )
 {
    PRE_LOOPBACK( SecondaryColor3fvEXT );
-   GL_CALL(SecondaryColor3fvEXT)( v );
+   CALL_SecondaryColor3fvEXT(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(TexCoord1f)( GLfloat s )
 {
    PRE_LOOPBACK( TexCoord1f );
-   GL_CALL(TexCoord1f)( s );
+   CALL_TexCoord1f(GET_DISPATCH(), ( s ));
 }
 
 static void GLAPIENTRY TAG(TexCoord1fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord1fv );
-   GL_CALL(TexCoord1fv)( tc );
+   CALL_TexCoord1fv(GET_DISPATCH(), ( tc ));
 }
 
 static void GLAPIENTRY TAG(TexCoord2f)( GLfloat s, GLfloat t )
 {
    PRE_LOOPBACK( TexCoord2f );
-   GL_CALL(TexCoord2f)( s, t );
+   CALL_TexCoord2f(GET_DISPATCH(), ( s, t ));
 }
 
 static void GLAPIENTRY TAG(TexCoord2fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord2fv );
-   GL_CALL(TexCoord2fv)( tc );
+   CALL_TexCoord2fv(GET_DISPATCH(), ( tc ));
 }
 
 static void GLAPIENTRY TAG(TexCoord3f)( GLfloat s, GLfloat t, GLfloat r )
 {
    PRE_LOOPBACK( TexCoord3f );
-   GL_CALL(TexCoord3f)( s, t, r );
+   CALL_TexCoord3f(GET_DISPATCH(), ( s, t, r ));
 }
 
 static void GLAPIENTRY TAG(TexCoord3fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord3fv );
-   GL_CALL(TexCoord3fv)( tc );
+   CALL_TexCoord3fv(GET_DISPATCH(), ( tc ));
 }
 
 static void GLAPIENTRY TAG(TexCoord4f)( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
 {
    PRE_LOOPBACK( TexCoord4f );
-   GL_CALL(TexCoord4f)( s, t, r, q );
+   CALL_TexCoord4f(GET_DISPATCH(), ( s, t, r, q ));
 }
 
 static void GLAPIENTRY TAG(TexCoord4fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord4fv );
-   GL_CALL(TexCoord4fv)( tc );
+   CALL_TexCoord4fv(GET_DISPATCH(), ( tc ));
 }
 
 static void GLAPIENTRY TAG(Vertex2f)( GLfloat x, GLfloat y )
 {
    PRE_LOOPBACK( Vertex2f );
-   GL_CALL(Vertex2f)( x, y );
+   CALL_Vertex2f(GET_DISPATCH(), ( x, y ));
 }
 
 static void GLAPIENTRY TAG(Vertex2fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Vertex2fv );
-   GL_CALL(Vertex2fv)( v );
+   CALL_Vertex2fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(Vertex3f)( GLfloat x, GLfloat y, GLfloat z )
 {
    PRE_LOOPBACK( Vertex3f );
-   GL_CALL(Vertex3f)( x, y, z );
+   CALL_Vertex3f(GET_DISPATCH(), ( x, y, z ));
 }
 
 static void GLAPIENTRY TAG(Vertex3fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Vertex3fv );
-   GL_CALL(Vertex3fv)( v );
+   CALL_Vertex3fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(Vertex4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    PRE_LOOPBACK( Vertex4f );
-   GL_CALL(Vertex4f)( x, y, z, w );
+   CALL_Vertex4f(GET_DISPATCH(), ( x, y, z, w ));
 }
 
 static void GLAPIENTRY TAG(Vertex4fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Vertex4fv );
-   GL_CALL(Vertex4fv)( v );
+   CALL_Vertex4fv(GET_DISPATCH(), ( v ));
 }
 
 static void GLAPIENTRY TAG(CallList)( GLuint i )
 {
    PRE_LOOPBACK( CallList );
-   GL_CALL(CallList)( i );
+   CALL_CallList(GET_DISPATCH(), ( i ));
 }
 
 static void GLAPIENTRY TAG(CallLists)( GLsizei sz, GLenum type, const GLvoid *v )
 {
    PRE_LOOPBACK( CallLists );
-   GL_CALL(CallLists)( sz, type, v );
+   CALL_CallLists(GET_DISPATCH(), ( sz, type, v ));
 }
 
 static void GLAPIENTRY TAG(Begin)( GLenum mode )
 {
    PRE_LOOPBACK( Begin );
-   GL_CALL(Begin)( mode );
+   CALL_Begin(GET_DISPATCH(), ( mode ));
 }
 
 static void GLAPIENTRY TAG(End)( void )
 {
    PRE_LOOPBACK( End );
-   GL_CALL(End)();
+   CALL_End(GET_DISPATCH(), ());
 }
 
 static void GLAPIENTRY TAG(Rectf)( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
 {
    PRE_LOOPBACK( Rectf );
-   GL_CALL(Rectf)( x1, y1, x2, y2 );
+   CALL_Rectf(GET_DISPATCH(), ( x1, y1, x2, y2 ));
 }
 
 static void GLAPIENTRY TAG(DrawArrays)( GLenum mode, GLint start, GLsizei count )
 {
    PRE_LOOPBACK( DrawArrays );
-   GL_CALL(DrawArrays)( mode, start, count );
+   CALL_DrawArrays(GET_DISPATCH(), ( mode, start, count ));
 }
 
 static void GLAPIENTRY TAG(DrawElements)( GLenum mode, GLsizei count, GLenum type,
                               const GLvoid *indices )
 {
    PRE_LOOPBACK( DrawElements );
-   GL_CALL(DrawElements)( mode, count, type, indices );
+   CALL_DrawElements(GET_DISPATCH(), ( mode, count, type, indices ));
 }
 
 static void GLAPIENTRY TAG(DrawRangeElements)( GLenum mode, GLuint start,
@@ -343,117 +345,117 @@ static void GLAPIENTRY TAG(DrawRangeElements)( GLenum mode, GLuint start,
                                    GLenum type, const GLvoid *indices )
 {
    PRE_LOOPBACK( DrawRangeElements );
-   GL_CALL(DrawRangeElements)( mode, start, end, count, type, indices );
+   CALL_DrawRangeElements(GET_DISPATCH(), ( mode, start, end, count, type, indices ));
 }
 
 static void GLAPIENTRY TAG(EvalMesh1)( GLenum mode, GLint i1, GLint i2 )
 {
    PRE_LOOPBACK( EvalMesh1 );
-   GL_CALL(EvalMesh1)( mode, i1, i2 );
+   CALL_EvalMesh1(GET_DISPATCH(), ( mode, i1, i2 ));
 }
 
 static void GLAPIENTRY TAG(EvalMesh2)( GLenum mode, GLint i1, GLint i2,
                            GLint j1, GLint j2 )
 {
    PRE_LOOPBACK( EvalMesh2 );
-   GL_CALL(EvalMesh2)( mode, i1, i2, j1, j2 );
+   CALL_EvalMesh2(GET_DISPATCH(), ( mode, i1, i2, j1, j2 ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib1fNV)( GLuint index, GLfloat x )
 {
    PRE_LOOPBACK( VertexAttrib1fNV );
-   GL_CALL(VertexAttrib1fNV)( index, x );
+   CALL_VertexAttrib1fNV(GET_DISPATCH(), ( index, x ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib1fvNV)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib1fvNV );
-   GL_CALL(VertexAttrib1fvNV)( index, v );
+   CALL_VertexAttrib1fvNV(GET_DISPATCH(), ( index, v ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y )
 {
    PRE_LOOPBACK( VertexAttrib2fNV );
-   GL_CALL(VertexAttrib2fNV)( index, x, y );
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), ( index, x, y ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib2fvNV)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib2fvNV );
-   GL_CALL(VertexAttrib2fvNV)( index, v );
+   CALL_VertexAttrib2fvNV(GET_DISPATCH(), ( index, v ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z )
 {
    PRE_LOOPBACK( VertexAttrib3fNV );
-   GL_CALL(VertexAttrib3fNV)( index, x, y, z );
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), ( index, x, y, z ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib3fvNV)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib3fvNV );
-   GL_CALL(VertexAttrib3fvNV)( index, v );
+   CALL_VertexAttrib3fvNV(GET_DISPATCH(), ( index, v ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    PRE_LOOPBACK( VertexAttrib4fNV );
-   GL_CALL(VertexAttrib4fNV)( index, x, y, z, w );
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), ( index, x, y, z, w ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib4fvNV)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib4fvNV );
-   GL_CALL(VertexAttrib4fvNV)( index, v );
+   CALL_VertexAttrib4fvNV(GET_DISPATCH(), ( index, v ));
 }
 
 
 static void GLAPIENTRY TAG(VertexAttrib1fARB)( GLuint index, GLfloat x )
 {
    PRE_LOOPBACK( VertexAttrib1fARB );
-   GL_CALL(VertexAttrib1fARB)( index, x );
+   CALL_VertexAttrib1fARB(GET_DISPATCH(), ( index, x ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib1fvARB)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib1fvARB );
-   GL_CALL(VertexAttrib1fvARB)( index, v );
+   CALL_VertexAttrib1fvARB(GET_DISPATCH(), ( index, v ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y )
 {
    PRE_LOOPBACK( VertexAttrib2fARB );
-   GL_CALL(VertexAttrib2fARB)( index, x, y );
+   CALL_VertexAttrib2fARB(GET_DISPATCH(), ( index, x, y ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib2fvARB)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib2fvARB );
-   GL_CALL(VertexAttrib2fvARB)( index, v );
+   CALL_VertexAttrib2fvARB(GET_DISPATCH(), ( index, v ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z )
 {
    PRE_LOOPBACK( VertexAttrib3fARB );
-   GL_CALL(VertexAttrib3fARB)( index, x, y, z );
+   CALL_VertexAttrib3fARB(GET_DISPATCH(), ( index, x, y, z ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib3fvARB)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib3fvARB );
-   GL_CALL(VertexAttrib3fvARB)( index, v );
+   CALL_VertexAttrib3fvARB(GET_DISPATCH(), ( index, v ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    PRE_LOOPBACK( VertexAttrib4fARB );
-   GL_CALL(VertexAttrib4fARB)( index, x, y, z, w );
+   CALL_VertexAttrib4fARB(GET_DISPATCH(), ( index, x, y, z, w ));
 }
 
 static void GLAPIENTRY TAG(VertexAttrib4fvARB)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib4fvARB );
-   GL_CALL(VertexAttrib4fvARB)( index, v );
+   CALL_VertexAttrib4fvARB(GET_DISPATCH(), ( index, v ));
 }
 
 
index e33b79e..e671c3f 100644 (file)
@@ -42,6 +42,8 @@
 #include "arbprogparse.h"
 #include "grammar_mesa.h"
 
+#include "dispatch.h"
+
 #ifndef __extension__
 #if !defined(__GNUC__) || (__GNUC__ < 2) || \
     ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7))
@@ -3884,7 +3886,8 @@ static int set_reg8 (GLcontext *ctx, grammar id, const byte *name, byte value)
 
 static int extension_is_supported (const GLubyte *ext)
 {
-   const GLubyte *extensions = GL_CALL(GetString)(GL_EXTENSIONS);
+   GET_CURRENT_CONTEXT(ctx);
+   const GLubyte *extensions = CALL_GetString(GET_DISPATCH(), (GL_EXTENSIONS));
    const GLubyte *end = extensions + _mesa_strlen ((const char *) extensions);
    const GLint ext_len = (GLint)_mesa_strlen ((const char *) ext);
 
index c8cd22f..1ad77c5 100644 (file)
@@ -43,6 +43,7 @@
 #include "t_save_api.h"
 #include "t_context.h"
 #include "t_pipeline.h"
+#include "dispatch.h"
 
 static void fallback_drawarrays( GLcontext *ctx, GLenum mode, GLint start,
                                 GLsizei count )
@@ -52,10 +53,10 @@ static void fallback_drawarrays( GLcontext *ctx, GLenum mode, GLint start,
    assert(!ctx->CompileFlag);
    assert(ctx->Driver.CurrentExecPrimitive == GL_POLYGON+1);
 
-   GL_CALL(Begin)(mode);
+   CALL_Begin(GET_DISPATCH(), (mode));
    for (i = 0; i < count; i++) 
-       GL_CALL(ArrayElement)( start + i );
-   GL_CALL(End)();
+       CALL_ArrayElement(GET_DISPATCH(), ( start + i ));
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
@@ -69,11 +70,11 @@ static void fallback_drawelements( GLcontext *ctx, GLenum mode, GLsizei count,
 
    /* Here, indices will already reflect the buffer object if active */
 
-   GL_CALL(Begin)(mode);
+   CALL_Begin(GET_DISPATCH(), (mode));
    for (i = 0 ; i < count ; i++) {
-      GL_CALL(ArrayElement)( indices[i] );
+      CALL_ArrayElement(GET_DISPATCH(), ( indices[i] ));
    }
-   GL_CALL(End)();
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
index dcc8850..b3637cf 100644 (file)
@@ -77,6 +77,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "api_arrayelt.h"
 #include "vtxfmt.h"
 #include "t_save_api.h"
+#include "dispatch.h"
 
 /*
  * NOTE: Old 'parity' issue is gone, but copying can still be
@@ -1212,56 +1213,56 @@ static void GLAPIENTRY _save_EvalCoord1f( GLfloat u )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->EvalCoord1f( u );
+   CALL_EvalCoord1f(ctx->Save, ( u ));
 }
 
 static void GLAPIENTRY _save_EvalCoord1fv( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->EvalCoord1fv( v );
+   CALL_EvalCoord1fv(ctx->Save, ( v ));
 }
 
 static void GLAPIENTRY _save_EvalCoord2f( GLfloat u, GLfloat v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->EvalCoord2f( u, v );
+   CALL_EvalCoord2f(ctx->Save, ( u, v ));
 }
 
 static void GLAPIENTRY _save_EvalCoord2fv( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->EvalCoord2fv( v );
+   CALL_EvalCoord2fv(ctx->Save, ( v ));
 }
 
 static void GLAPIENTRY _save_EvalPoint1( GLint i )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->EvalPoint1( i );
+   CALL_EvalPoint1(ctx->Save, ( i ));
 }
 
 static void GLAPIENTRY _save_EvalPoint2( GLint i, GLint j )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->EvalPoint2( i, j );
+   CALL_EvalPoint2(ctx->Save, ( i, j ));
 }
 
 static void GLAPIENTRY _save_CallList( GLuint l )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->CallList( l );
+   CALL_CallList(ctx->Save, ( l ));
 }
 
 static void GLAPIENTRY _save_CallLists( GLsizei n, GLenum type, const GLvoid *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FALLBACK(ctx);
-   ctx->Save->CallLists( n, type, v );
+   CALL_CallLists(ctx->Save, ( n, type, v ));
 }
 
 
@@ -1383,11 +1384,11 @@ static void GLAPIENTRY _save_OBE_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfl
 {
    GET_CURRENT_CONTEXT(ctx);
    _save_NotifyBegin( ctx, GL_QUADS | PRIM_WEAK );
-   GL_CALL(Vertex2f)( x1, y1 );
-   GL_CALL(Vertex2f)( x2, y1 );
-   GL_CALL(Vertex2f)( x2, y2 );
-   GL_CALL(Vertex2f)( x1, y2 );
-   GL_CALL(End)();
+   CALL_Vertex2f(GET_DISPATCH(), ( x1, y1 ));
+   CALL_Vertex2f(GET_DISPATCH(), ( x2, y1 ));
+   CALL_Vertex2f(GET_DISPATCH(), ( x2, y2 ));
+   CALL_Vertex2f(GET_DISPATCH(), ( x1, y2 ));
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
@@ -1401,8 +1402,8 @@ static void GLAPIENTRY _save_OBE_DrawArrays(GLenum mode, GLint start, GLsizei co
 
    _save_NotifyBegin( ctx, mode | PRIM_WEAK );
    for (i = 0; i < count; i++)
-       GL_CALL(ArrayElement)(start + i);
-   GL_CALL(End)();
+       CALL_ArrayElement(GET_DISPATCH(), (start + i));
+   CALL_End(GET_DISPATCH(), ());
 }
 
 
@@ -1420,22 +1421,22 @@ static void GLAPIENTRY _save_OBE_DrawElements(GLenum mode, GLsizei count, GLenum
    switch (type) {
    case GL_UNSIGNED_BYTE:
       for (i = 0 ; i < count ; i++)
-         GL_CALL(ArrayElement)( ((GLubyte *)indices)[i] );
+         CALL_ArrayElement(GET_DISPATCH(), ( ((GLubyte *)indices)[i] ));
       break;
    case GL_UNSIGNED_SHORT:
       for (i = 0 ; i < count ; i++)
-         GL_CALL(ArrayElement)( ((GLushort *)indices)[i] );
+         CALL_ArrayElement(GET_DISPATCH(), ( ((GLushort *)indices)[i] ));
       break;
    case GL_UNSIGNED_INT:
       for (i = 0 ; i < count ; i++)
-         GL_CALL(ArrayElement)( ((GLuint *)indices)[i] );
+         CALL_ArrayElement(GET_DISPATCH(), ( ((GLuint *)indices)[i] ));
       break;
    default:
       _mesa_error( ctx, GL_INVALID_ENUM, "glDrawElements(type)" );
       break;
    }
 
-   GL_CALL(End)();
+   CALL_End(GET_DISPATCH(), ());
 }
 
 static void GLAPIENTRY _save_OBE_DrawRangeElements(GLenum mode,
index 2dae9c6..7b2e4a4 100644 (file)
@@ -35,6 +35,7 @@
 #include "mtypes.h"
 #include "t_context.h"
 #include "t_save_api.h"
+#include "dispatch.h"
 
 /* If someone compiles a display list like:
  *      glBegin(Triangles)
@@ -70,22 +71,22 @@ typedef void (*attr_func)( GLcontext *ctx, GLint target, const GLfloat * );
 /* Wrapper functions in case glVertexAttrib*fvNV doesn't exist */
 static void VertexAttrib1fvNV(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib1fvNV(target, v);
+   CALL_VertexAttrib1fvNV(ctx->Exec, (target, v));
 }
 
 static void VertexAttrib2fvNV(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib2fvNV(target, v);
+   CALL_VertexAttrib2fvNV(ctx->Exec, (target, v));
 }
 
 static void VertexAttrib3fvNV(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib3fvNV(target, v);
+   CALL_VertexAttrib3fvNV(ctx->Exec, (target, v));
 }
 
 static void VertexAttrib4fvNV(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib4fvNV(target, v);
+   CALL_VertexAttrib4fvNV(ctx->Exec, (target, v));
 }
 
 static attr_func vert_attrfunc[4] = {
@@ -98,22 +99,22 @@ static attr_func vert_attrfunc[4] = {
 
 static void VertexAttrib1fvARB(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib1fvARB(target, v);
+   CALL_VertexAttrib1fvARB(ctx->Exec, (target, v));
 }
 
 static void VertexAttrib2fvARB(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib2fvARB(target, v);
+   CALL_VertexAttrib2fvARB(ctx->Exec, (target, v));
 }
 
 static void VertexAttrib3fvARB(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib3fvARB(target, v);
+   CALL_VertexAttrib3fvARB(ctx->Exec, (target, v));
 }
 
 static void VertexAttrib4fvARB(GLcontext *ctx, GLint target, const GLfloat *v)
 {
-   ctx->Exec->VertexAttrib4fvARB(target, v);
+   CALL_VertexAttrib4fvARB(ctx->Exec, (target, v));
 }
 
 static attr_func vert_attrfunc_arb[4] = {
@@ -133,10 +134,10 @@ static void mat_attr1fv( GLcontext *ctx, GLint target, const GLfloat *v )
 {
    switch (target) {
    case _TNL_ATTRIB_MAT_FRONT_SHININESS:
-      ctx->Exec->Materialfv( GL_FRONT, GL_SHININESS, v );
+      CALL_Materialfv(ctx->Exec, ( GL_FRONT, GL_SHININESS, v ));
       break;
    case _TNL_ATTRIB_MAT_BACK_SHININESS:
-      ctx->Exec->Materialfv( GL_BACK, GL_SHININESS, v );
+      CALL_Materialfv(ctx->Exec, ( GL_BACK, GL_SHININESS, v ));
       break;
    }
 }
@@ -146,10 +147,10 @@ static void mat_attr3fv( GLcontext *ctx, GLint target, const GLfloat *v )
 {
    switch (target) {
    case _TNL_ATTRIB_MAT_FRONT_INDEXES:
-      ctx->Exec->Materialfv( GL_FRONT, GL_COLOR_INDEXES, v );
+      CALL_Materialfv(ctx->Exec, ( GL_FRONT, GL_COLOR_INDEXES, v ));
       break;
    case _TNL_ATTRIB_MAT_BACK_INDEXES:
-      ctx->Exec->Materialfv( GL_BACK, GL_COLOR_INDEXES, v );
+      CALL_Materialfv(ctx->Exec, ( GL_BACK, GL_COLOR_INDEXES, v ));
       break;
    }
 }
@@ -159,28 +160,28 @@ static void mat_attr4fv( GLcontext *ctx, GLint target, const GLfloat *v )
 {
    switch (target) {
    case _TNL_ATTRIB_MAT_FRONT_EMISSION:
-      ctx->Exec->Materialfv( GL_FRONT, GL_EMISSION, v );
+      CALL_Materialfv(ctx->Exec, ( GL_FRONT, GL_EMISSION, v ));
       break;
    case _TNL_ATTRIB_MAT_BACK_EMISSION:
-      ctx->Exec->Materialfv( GL_BACK, GL_EMISSION, v );
+      CALL_Materialfv(ctx->Exec, ( GL_BACK, GL_EMISSION, v ));
       break;
    case _TNL_ATTRIB_MAT_FRONT_AMBIENT:
-      ctx->Exec->Materialfv( GL_FRONT, GL_AMBIENT, v );
+      CALL_Materialfv(ctx->Exec, ( GL_FRONT, GL_AMBIENT, v ));
       break;
    case _TNL_ATTRIB_MAT_BACK_AMBIENT:
-      ctx->Exec->Materialfv( GL_BACK, GL_AMBIENT, v );
+      CALL_Materialfv(ctx->Exec, ( GL_BACK, GL_AMBIENT, v ));
       break;
    case _TNL_ATTRIB_MAT_FRONT_DIFFUSE:
-      ctx->Exec->Materialfv( GL_FRONT, GL_DIFFUSE, v );
+      CALL_Materialfv(ctx->Exec, ( GL_FRONT, GL_DIFFUSE, v ));
       break;
    case _TNL_ATTRIB_MAT_BACK_DIFFUSE:
-      ctx->Exec->Materialfv( GL_BACK, GL_DIFFUSE, v );
+      CALL_Materialfv(ctx->Exec, ( GL_BACK, GL_DIFFUSE, v ));
       break;
    case _TNL_ATTRIB_MAT_FRONT_SPECULAR:
-      ctx->Exec->Materialfv( GL_FRONT, GL_SPECULAR, v );
+      CALL_Materialfv(ctx->Exec, ( GL_FRONT, GL_SPECULAR, v ));
       break;
    case _TNL_ATTRIB_MAT_BACK_SPECULAR:
-      ctx->Exec->Materialfv( GL_BACK, GL_SPECULAR, v );
+      CALL_Materialfv(ctx->Exec, ( GL_BACK, GL_SPECULAR, v ));
       break;
    }
 }
@@ -197,13 +198,13 @@ static attr_func mat_attrfunc[4] = {
 static void index_attr1fv(GLcontext *ctx, GLint target, const GLfloat *v)
 {
    (void) target;
-   ctx->Exec->Indexf(v[0]);
+   CALL_Indexf(ctx->Exec, (v[0]));
 }
 
 static void edgeflag_attr1fv(GLcontext *ctx, GLint target, const GLfloat *v)
 {
    (void) target;
-   ctx->Exec->EdgeFlag((GLboolean)(v[0] == 1.0));
+   CALL_EdgeFlag(ctx->Exec, ((GLboolean)(v[0] == 1.0)));
 }
 
 struct loopback_attr {
@@ -228,7 +229,7 @@ static void loopback_prim( GLcontext *ctx,
    GLuint k;
 
    if (prim->mode & PRIM_BEGIN) {
-      GL_CALL(Begin)( prim->mode & PRIM_MODE_MASK );
+      CALL_Begin(GET_DISPATCH(), ( prim->mode & PRIM_MODE_MASK ));
    }
    else {
       assert(i == 0);
@@ -253,7 +254,7 @@ static void loopback_prim( GLcontext *ctx,
    }
 
    if (prim->mode & PRIM_END) {
-      GL_CALL(End)();
+      CALL_End(GET_DISPATCH(), ());
    }
    else {
       assert (i == list->prim_count-1);
index 129b19c..fa9e04a 100644 (file)
@@ -43,6 +43,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "t_vtx_api.h"
 #include "simple_list.h"
 
+#include "dispatch.h"
+
 static void reset_attrfv( TNLcontext *tnl );
 
 static tnl_attrfv_func choose[_TNL_MAX_ATTR_CODEGEN+1][4]; /* +1 for ERROR_ATTRIB */
@@ -749,7 +751,7 @@ static void GLAPIENTRY _tnl_Begin( GLenum mode )
 
         if (!(tnl->Driver.NotifyBegin && 
               tnl->Driver.NotifyBegin( ctx, mode )))
-            ctx->Exec->Begin(mode);
+            CALL_Begin(ctx->Exec, (mode));
         return;
       }
 
index 3b09bd2..d948e70 100644 (file)
@@ -31,6 +31,7 @@
 #include "macros.h"
 #include "math/m_eval.h"
 #include "t_vtx_api.h"
+#include "dispatch.h"
 
 
 static void clear_active_eval1( TNLcontext *tnl, GLuint attr ) 
@@ -165,9 +166,9 @@ void _tnl_do_EvalCoord1f(GLcontext* ctx, GLfloat u)
                                map->Order);
 
       if (tnl->vtx.eval.map1[0].sz == 4) 
-        GL_CALL(Vertex4fv)( vertex );
+        CALL_Vertex4fv(GET_DISPATCH(), ( vertex ));
       else
-        GL_CALL(Vertex3fv)( vertex ); 
+        CALL_Vertex3fv(GET_DISPATCH(), ( vertex )); 
    }
 }
 
@@ -244,9 +245,9 @@ void _tnl_do_EvalCoord2f( GLcontext* ctx, GLfloat u, GLfloat v )
       }
 
       if (tnl->vtx.attrsz[0] == 4) 
-        GL_CALL(Vertex4fv)( vertex );
+        CALL_Vertex4fv(GET_DISPATCH(), ( vertex ));
       else
-        GL_CALL(Vertex3fv)( vertex ); 
+        CALL_Vertex3fv(GET_DISPATCH(), ( vertex )); 
    }
 }
 
index 77f3a4a..eecbf0d 100644 (file)
@@ -287,12 +287,12 @@ static void TAG(choose_Color3f)( GLfloat r, GLfloat g, GLfloat b )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color3f = TAG(ColorMaterial3f);
+        SET_Color3f(ctx->Exec, TAG(ColorMaterial3f));
       } else {
-        ctx->Exec->Color3f = _mesa_noop_Color3f;
+        SET_Color3f(ctx->Exec, _mesa_noop_Color3f);
       }
    } else {
-      ctx->Exec->Color3f = TAG(Color3f);
+      SET_Color3f(ctx->Exec, TAG(Color3f));
    }
    glColor3f( r, g, b );
 }
@@ -303,12 +303,12 @@ static void TAG(choose_Color3fv)( const GLfloat *v )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color3fv = TAG(ColorMaterial3fv);
+        SET_Color3fv(ctx->Exec, TAG(ColorMaterial3fv));
       } else {
-        ctx->Exec->Color3fv = _mesa_noop_Color3fv;
+        SET_Color3fv(ctx->Exec, _mesa_noop_Color3fv);
       }
    } else {
-      ctx->Exec->Color3fv = TAG(Color3fv);
+      SET_Color3fv(ctx->Exec, TAG(Color3fv));
    }
    glColor3fv( v );
 }
@@ -319,12 +319,12 @@ static void TAG(choose_Color3ub)( GLubyte r, GLubyte g, GLubyte b )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color3ub = TAG(ColorMaterial3ub);
+        SET_Color3ub(ctx->Exec, TAG(ColorMaterial3ub));
       } else {
-        ctx->Exec->Color3ub = _mesa_noop_Color3ub;
+        SET_Color3ub(ctx->Exec, _mesa_noop_Color3ub);
       }
    } else {
-      ctx->Exec->Color3ub = TAG(Color3ub);
+      SET_Color3ub(ctx->Exec, TAG(Color3ub));
    }
    glColor3ub( r, g, b );
 }
@@ -335,12 +335,12 @@ static void TAG(choose_Color3ubv)( const GLubyte *v )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color3ubv = TAG(ColorMaterial3ubv);
+        SET_Color3ubv(ctx->Exec, TAG(ColorMaterial3ubv));
       } else {
-        ctx->Exec->Color3ubv = _mesa_noop_Color3ubv;
+        SET_Color3ubv(ctx->Exec, _mesa_noop_Color3ubv);
       }
    } else {
-      ctx->Exec->Color3ubv = TAG(Color3ubv);
+      SET_Color3ubv(ctx->Exec, TAG(Color3ubv));
    }
    glColor3ubv( v );
 }
@@ -351,12 +351,12 @@ static void TAG(choose_Color4f)( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color4f = TAG(ColorMaterial4f);
+        SET_Color4f(ctx->Exec, TAG(ColorMaterial4f));
       } else {
-        ctx->Exec->Color4f = _mesa_noop_Color4f;
+        SET_Color4f(ctx->Exec, _mesa_noop_Color4f);
       }
    } else {
-      ctx->Exec->Color4f = TAG(Color4f);
+      SET_Color4f(ctx->Exec, TAG(Color4f));
    }
    glColor4f( r, g, b, a );
 }
@@ -367,12 +367,12 @@ static void TAG(choose_Color4fv)( const GLfloat *v )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color4fv = TAG(ColorMaterial4fv);
+        SET_Color4fv(ctx->Exec, TAG(ColorMaterial4fv));
       } else {
-        ctx->Exec->Color4fv = _mesa_noop_Color4fv;
+        SET_Color4fv(ctx->Exec, _mesa_noop_Color4fv);
       }
    } else {
-      ctx->Exec->Color4fv = TAG(Color4fv);
+      SET_Color4fv(ctx->Exec, TAG(Color4fv));
    }
    glColor4fv( v );
 }
@@ -383,12 +383,12 @@ static void TAG(choose_Color4ub)( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color4ub = TAG(ColorMaterial4ub);
+        SET_Color4ub(ctx->Exec, TAG(ColorMaterial4ub));
       } else {
-        ctx->Exec->Color4ub = _mesa_noop_Color4ub;
+        SET_Color4ub(ctx->Exec, _mesa_noop_Color4ub);
       }
    } else {
-      ctx->Exec->Color4ub = TAG(Color4ub);
+      SET_Color4ub(ctx->Exec, TAG(Color4ub));
    }
    glColor4ub( r, g, b, a );
 }
@@ -399,12 +399,12 @@ static void TAG(choose_Color4ubv)( const GLubyte *v )
 
    if ( ctx->Light.Enabled ) {
       if ( ctx->Light.ColorMaterialEnabled ) {
-        ctx->Exec->Color4ubv = TAG(ColorMaterial4ubv);
+        SET_Color4ubv(ctx->Exec, TAG(ColorMaterial4ubv));
       } else {
-        ctx->Exec->Color4ubv = _mesa_noop_Color4ubv;
+        SET_Color4ubv(ctx->Exec, _mesa_noop_Color4ubv);
       }
    } else {
-      ctx->Exec->Color4ubv = TAG(Color4ubv);
+      SET_Color4ubv(ctx->Exec, TAG(Color4ubv));
    }
    glColor4ubv( v );
 }