add a number of PBO validate/map/unmap functions
[mesa.git] / src / mesa / main / vtxfmt.c
index dcb684837c8dda620e49f1ce7f9735014f1576d2..0204979003e16fdae97ff821027e50195e879070 100644 (file)
 #define PRE_LOOPBACK( FUNC )                                           \
 {                                                                      \
    GET_CURRENT_CONTEXT(ctx);                                           \
-   struct gl_tnl_module *tnl = &(ctx->TnlModule);                      \
+   struct gl_tnl_module * const tnl = &(ctx->TnlModule);               \
+   const int tmp_offset = _gloffset_ ## FUNC ;                         \
                                                                        \
    ASSERT( tnl->Current );                                             \
    ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES );               \
+   ASSERT( tmp_offset >= 0 );                                          \
                                                                        \
    /* Save the swapped function's dispatch entry so it can be */       \
    /* restored later. */                                               \
-   tnl->Swapped[tnl->SwapCount].location = (_glapi_proc *) & (GET_ ## FUNC (ctx->Exec)); \
+   tnl->Swapped[tnl->SwapCount].location = & (((_glapi_proc *)ctx->Exec)[tmp_offset]); \
    tnl->Swapped[tnl->SwapCount].function = (_glapi_proc)TAG(FUNC);     \
    tnl->SwapCount++;                                                   \
                                                                        \
 #include "vtxfmt_tmp.h"
 
 
-
+/**
+ * Use the per-vertex functions found in <vfmt> to initialze the given
+ * API dispatch table.
+ */
 static void
 install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
 {
@@ -80,7 +85,6 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    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);
@@ -122,6 +126,15 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    SET_CallLists(tab, vfmt->CallLists);
    SET_Begin(tab, vfmt->Begin);
    SET_End(tab, vfmt->End);
+   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);
+
+   /* GL_NV_vertex_program */
    SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV);
    SET_VertexAttrib1fvNV(tab, vfmt->VertexAttrib1fvNV);
    SET_VertexAttrib2fNV(tab, vfmt->VertexAttrib2fNV);
@@ -130,6 +143,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    SET_VertexAttrib3fvNV(tab, vfmt->VertexAttrib3fvNV);
    SET_VertexAttrib4fNV(tab, vfmt->VertexAttrib4fNV);
    SET_VertexAttrib4fvNV(tab, vfmt->VertexAttrib4fvNV);
+#if FEATURE_ARB_vertex_program
    SET_VertexAttrib1fARB(tab, vfmt->VertexAttrib1fARB);
    SET_VertexAttrib1fvARB(tab, vfmt->VertexAttrib1fvARB);
    SET_VertexAttrib2fARB(tab, vfmt->VertexAttrib2fARB);
@@ -138,13 +152,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    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);
+#endif
 }