clean up code related to dispatch table initialization
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 27 Nov 2004 05:05:32 +0000 (05:05 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 27 Nov 2004 05:05:32 +0000 (05:05 +0000)
src/mesa/main/context.c
src/mesa/main/dlist.c
src/mesa/main/dlist.h
src/mesa/main/state.c
src/mesa/main/state.h

index f90751fd0926eb840c24bf83701588511655cb83..924359a389b0310edd49c85db91c20abfaccec16 100644 (file)
@@ -1390,6 +1390,45 @@ add_newer_entrypoints(void)
 }
 
 
+/**
+ * This is the default function we plug into all dispatch table slots
+ * This helps prevents a segfault when someone calls a GL function without
+ * first checking if the extension's supported.
+ */
+static int
+generic_nop(void)
+{
+   _mesa_problem(NULL, "User called no-op dispatch function (an unsupported extension function?)");
+   return 0;
+}
+
+
+/**
+ * Allocate and initialize a new dispatch table.
+ */
+static struct _glapi_table *
+alloc_dispatch_table(void)
+{
+   /* Find the larger of Mesa's dispatch table and libGL's dispatch table.
+    * In practice, this'll be the same for stand-alone Mesa.  But for DRI
+    * Mesa we do this to accomodate different versions of libGL and various
+    * DRI drivers.
+    */
+   GLint numEntries = MAX2(_glapi_get_dispatch_table_size(),
+                           sizeof(struct _glapi_table) / sizeof(_glapi_proc));
+   struct _glapi_table *table =
+      (struct _glapi_table *) _mesa_malloc(numEntries * sizeof(_glapi_proc));
+   if (table) {
+      _glapi_proc *entry = (_glapi_proc *) table;
+      GLuint i;
+      for (i = 0; i < numEntries; i++) {
+         entry[i] = (_glapi_proc) generic_nop;
+      }
+   }
+   return table;
+}
+
+
 /**
  * Initialize a GLcontext struct (rendering context).
  *
@@ -1423,8 +1462,6 @@ _mesa_initialize_context( GLcontext *ctx,
                           const struct dd_function_table *driverFunctions,
                           void *driverContext )
 {
-   GLuint dispatchSize;
-
    ASSERT(driverContext);
    assert(driverFunctions->NewTextureObject);
 
@@ -1473,30 +1510,19 @@ _mesa_initialize_context( GLcontext *ctx,
    /* libGL ABI coordination */
    add_newer_entrypoints();
 
-   /* Find the larger of Mesa's dispatch table and libGL's dispatch table.
-    * In practice, this'll be the same for stand-alone Mesa.  But for DRI
-    * Mesa we do this to accomodate different versions of libGL and various
-    * DRI drivers.
-    */
-   dispatchSize = MAX2(_glapi_get_dispatch_table_size(),
-                       sizeof(struct _glapi_table) / sizeof(void *));
-
-   /* setup API dispatch tables */
-   ctx->Exec = (struct _glapi_table *) CALLOC(dispatchSize * sizeof(void*));
-   ctx->Save = (struct _glapi_table *) CALLOC(dispatchSize * sizeof(void*));
+   /* setup the API dispatch tables */
+   ctx->Exec = alloc_dispatch_table();
+   ctx->Save = alloc_dispatch_table();
    if (!ctx->Exec || !ctx->Save) {
       free_shared_state(ctx, ctx->Shared);
       if (ctx->Exec)
-         FREE( ctx->Exec );
+         _mesa_free(ctx->Exec);
    }
-   _mesa_init_exec_table(ctx->Exec, dispatchSize);
+   _mesa_init_exec_table(ctx->Exec);
    ctx->CurrentDispatch = ctx->Exec;
-
 #if _HAVE_FULL_GL
-   _mesa_init_dlist_table(ctx->Save, dispatchSize);
+   _mesa_init_dlist_table(ctx->Save);
    _mesa_install_save_vtxfmt( ctx, &ctx->ListState.ListVtxfmt );
-
-
    /* Neutral tnl module stuff */
    _mesa_init_exec_vtxfmt( ctx ); 
    ctx->TnlModule.Current = NULL;
index 1f36411a94ac8000b6bb0c4ee0a89555f41243e7..9da97d8c75cbdb890a041283514166224af3d759 100644 (file)
@@ -7154,10 +7154,8 @@ static void GLAPIENTRY exec_MultiModeDrawElementsIBM(const GLenum *mode,
  * struct.
  */
 void
-_mesa_init_dlist_table( struct _glapi_table *table, GLuint tableSize )
+_mesa_init_dlist_table( struct _glapi_table *table )
 {
-   _mesa_init_no_op_table(table, tableSize);
-
    _mesa_loopback_init_api_table( table );
 
    /* GL 1.0 */
index 6245713f952c965ffd5ba0d2ec807d91856f9ef4..1a5b391e760d395f492c835298c403df77c630e2 100644 (file)
@@ -58,8 +58,7 @@ extern void GLAPIENTRY _mesa_ListBase( GLuint base );
 
 extern void GLAPIENTRY _mesa_NewList( GLuint list, GLenum mode );
 
-extern void _mesa_init_dlist_table( struct _glapi_table *table,
-                                    GLuint tableSize );
+extern void _mesa_init_dlist_table( struct _glapi_table *table );
 
 extern void _mesa_save_error( GLcontext *ctx, GLenum error, const char *s );
 
index 517cf6819c74ddb1d80a6d966ecba6bceccc604d..babc1868e778c50c6dbf2af08211a7e10d6b6628 100644 (file)
 
 
 
-/**********************************************************************/
-/** \name Dispatch table setup */
-/*@{*/
-
-/**
- * Generic no-op dispatch function.
- *
- * Used in replacement of the functions which are not part of Mesa subset.
- *
- * Displays a message.
- */
-static int
-generic_noop(void)
-{
-   _mesa_problem(NULL, "User called no-op dispatch function (an unsupported extension function?)");
-   return 0;
-}
-
-
-/**
- * Set all pointers in the given dispatch table to point to a
- * generic no-op function - generic_noop().
- *
- * \param table dispatch table.
- * \param tableSize dispatch table size.
- */
-void
-_mesa_init_no_op_table(struct _glapi_table *table, GLuint tableSize)
-{
-   GLuint i;
-   _glapi_proc *dispatch = (_glapi_proc *) table;
-   for (i = 0; i < tableSize; i++) {
-      dispatch[i] = (_glapi_proc) generic_noop;
-   }
-}
-
-
 /**
  * Initialize a dispatch table with pointers to Mesa's immediate-mode
  * commands.
@@ -139,11 +102,8 @@ _mesa_init_no_op_table(struct _glapi_table *table, GLuint tableSize)
  * \param tableSize dispatch table size.
  */
 void
-_mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize)
+_mesa_init_exec_table(struct _glapi_table *exec)
 {
-   /* first initialize all dispatch slots to no-op */
-   _mesa_init_no_op_table(exec, tableSize);
-
 #if _HAVE_FULL_GL
    _mesa_loopback_init_api_table( exec );
 #endif
@@ -787,7 +747,6 @@ _mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize)
 #endif    /* FEATURE_ARB_shader_objects */
 }
 
-/*@}*/
 
 
 /**********************************************************************/
index fe577a8563736c070101ce00cee7b75ba0072b47..58cfcc414626de1fa99c18e5afb83887fd5f8032 100644 (file)
@@ -5,9 +5,9 @@
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  6.3
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
 #include "mtypes.h"
 
 extern void
-_mesa_init_no_op_table(struct _glapi_table *exec, GLuint tableSize);
-
-extern void
-_mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize);
+_mesa_init_exec_table(struct _glapi_table *exec);
 
 extern void
 _mesa_update_state( GLcontext *ctx );