mesa: Move struct _glapi_table allocation out of context.c

We now allocate the table from api_exec.c and dlist.c where we fill out
the table.  This way, context.c doesn't need to know the actual contents
of struct _glapi_table.
This commit is contained in:
Kristian Høgsberg 2010-04-22 12:40:47 -04:00
parent 2a2f8580b7
commit 2180ba68f1
6 changed files with 48 additions and 22 deletions

View file

@ -667,9 +667,15 @@ for funcName in keys:
# end for each function
print "void"
print "_mesa_init_exec_table(struct _glapi_table *exec)"
print "struct _glapi_table *"
print "_mesa_create_exec_table(void)"
print "{"
print " struct _glapi_table *exec;"
print " exec = _mesa_alloc_dispatch_table(sizeof *exec);"
print " if (exec == NULL)"
print " return NULL;"
print ""
for func in keys:
prefix = "_es_" if func not in allSpecials else "_check_"
for spec in apiutil.Categories(func):
@ -682,4 +688,6 @@ for func in keys:
suffix = ext[0].split("_")[0]
entry += suffix
print " SET_%s(exec, %s%s);" % (entry, prefix, entry)
print ""
print " return exec;"
print "}"

View file

@ -118,9 +118,15 @@
* \param ctx GL context to which \c exec belongs.
* \param exec dispatch table.
*/
void
_mesa_init_exec_table(struct _glapi_table *exec)
struct _glapi_table *
_mesa_create_exec_table(void)
{
struct _glapi_table *exec;
exec = _mesa_alloc_dispatch_table(sizeof *exec);
if (exec == NULL)
return NULL;
#if _HAVE_FULL_GL
_mesa_loopback_init_api_table( exec );
#endif
@ -764,4 +770,6 @@ _mesa_init_exec_table(struct _glapi_table *exec)
SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE);
SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE);
#endif
return exec;
}

View file

@ -29,9 +29,11 @@
struct _glapi_table;
extern struct _glapi_table *
_mesa_alloc_dispatch_table(int size);
extern void
_mesa_init_exec_table(struct _glapi_table *exec);
extern struct _glapi_table *
_mesa_create_exec_table(void);
#endif

View file

@ -128,8 +128,6 @@
#include "version.h"
#include "viewport.h"
#include "vtxfmt.h"
#include "glapi/glthread.h"
#include "glapi/glapitable.h"
#include "shader/program.h"
#include "shader/prog_print.h"
#include "shader/shader_api.h"
@ -739,8 +737,8 @@ generic_nop(void)
/**
* Allocate and initialize a new dispatch table.
*/
static struct _glapi_table *
alloc_dispatch_table(void)
struct _glapi_table *
_mesa_alloc_dispatch_table(int size)
{
/* 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
@ -748,7 +746,7 @@ alloc_dispatch_table(void)
* DRI drivers.
*/
GLint numEntries = MAX2(_glapi_get_dispatch_table_size(),
sizeof(struct _glapi_table) / sizeof(_glapi_proc));
size / sizeof(_glapi_proc));
struct _glapi_table *table =
(struct _glapi_table *) malloc(numEntries * sizeof(_glapi_proc));
if (table) {
@ -843,22 +841,24 @@ _mesa_initialize_context_for_api(GLcontext *ctx,
return GL_FALSE;
}
#if FEATURE_dispatch
/* setup the API dispatch tables */
ctx->Exec = alloc_dispatch_table();
ctx->Save = alloc_dispatch_table();
if (!ctx->Exec || !ctx->Save) {
ctx->Exec = _mesa_create_exec_table();
if (!ctx->Exec) {
_mesa_release_shared_state(ctx, ctx->Shared);
if (ctx->Exec)
free(ctx->Exec);
return GL_FALSE;
}
#if FEATURE_dispatch
_mesa_init_exec_table(ctx->Exec);
#endif
ctx->CurrentDispatch = ctx->Exec;
#if FEATURE_dlist
_mesa_init_save_table(ctx->Save);
ctx->Save = _mesa_create_save_table();
if (!ctx->Save) {
_mesa_release_shared_state(ctx, ctx->Shared);
free(ctx->Exec);
return GL_FALSE;
}
_mesa_install_save_vtxfmt( ctx, &ctx->ListState.ListVtxfmt );
#endif

View file

@ -8707,9 +8707,15 @@ exec_MultiModeDrawElementsIBM(const GLenum * mode,
* initialized from _mesa_init_api_defaults and from the active vtxfmt
* struct.
*/
void
_mesa_init_save_table(struct _glapi_table *table)
struct _glapi_table *
_mesa_create_save_table(void)
{
struct _glapi_table *table;
table = _mesa_alloc_dispatch_table(sizeof *table);
if (table == NULL)
return NULL;
_mesa_loopback_init_api_table(table);
/* GL 1.0 */
@ -9303,6 +9309,8 @@ _mesa_init_save_table(struct _glapi_table *table)
(void) save_ClearBufferfv;
(void) save_ClearBufferfi;
#endif
return table;
}

View file

@ -72,7 +72,7 @@ extern void _mesa_delete_list(GLcontext *ctx, struct gl_display_list *dlist);
extern void _mesa_save_vtxfmt_init( GLvertexformat *vfmt );
extern void _mesa_init_save_table( struct _glapi_table *table );
extern struct _glapi_table *_mesa_create_save_table(void);
extern void _mesa_install_dlist_vtxfmt(struct _glapi_table *disp,
const GLvertexformat *vfmt);