浏览代码

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.
tags/mesa-7.9-rc1
Kristian Høgsberg 15 年前
父节点
当前提交
fa41610630
共有 6 个文件被更改,包括 48 次插入22 次删除
  1. 10
    2
      src/mesa/es/main/es_generator.py
  2. 10
    2
      src/mesa/main/api_exec.c
  3. 4
    2
      src/mesa/main/api_exec.h
  4. 13
    13
      src/mesa/main/context.c
  5. 10
    2
      src/mesa/main/dlist.c
  6. 1
    1
      src/mesa/main/dlist.h

+ 10
- 2
src/mesa/es/main/es_generator.py 查看文件

@@ -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 "}"

+ 10
- 2
src/mesa/main/api_exec.c 查看文件

@@ -119,9 +119,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
@@ -777,4 +783,6 @@ _mesa_init_exec_table(struct _glapi_table *exec)
SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE);
SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE);
#endif

return exec;
}

+ 4
- 2
src/mesa/main/api_exec.h 查看文件

@@ -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

+ 13
- 13
src/mesa/main/context.c 查看文件

@@ -129,8 +129,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"
@@ -749,8 +747,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
@@ -758,7 +756,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) {
@@ -853,22 +851,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


+ 10
- 2
src/mesa/main/dlist.c 查看文件

@@ -8747,9 +8747,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 */
@@ -9349,6 +9355,8 @@ _mesa_init_save_table(struct _glapi_table *table)
(void) save_ClearBufferfv;
(void) save_ClearBufferfi;
#endif

return table;
}



+ 1
- 1
src/mesa/main/dlist.h 查看文件

@@ -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);

正在加载...
取消
保存