This commit is contained in:
Brian Paul
2000-02-12 16:44:24 +00:00
parent e39ed58116
commit ef5d084d3c
2 changed files with 69 additions and 25 deletions

View File

@@ -1,4 +1,4 @@
/* $Id: glapi.c,v 1.32 2000/02/10 21:27:48 brianp Exp $ */ /* $Id: glapi.c,v 1.33 2000/02/12 16:44:25 brianp Exp $ */
/* /*
* Mesa 3-D graphics library * Mesa 3-D graphics library
@@ -272,13 +272,16 @@ get_static_proc_address(const char *funcName)
*/ */
#define MAX_EXTENSION_FUNCS 1000
struct _glapi_ext_entrypoint { struct _glapi_ext_entrypoint {
const char *Name; /* the extension function's name */ const char *Name; /* the extension function's name */
GLuint Offset; /* relative to start of dispatch table */ GLuint Offset; /* relative to start of dispatch table */
GLvoid *Address; /* address of dispatch function */ GLvoid *Address; /* address of dispatch function */
}; };
static struct _glapi_ext_entrypoint ExtEntryTable[_GLAPI_EXTRA_SLOTS]; static struct _glapi_ext_entrypoint ExtEntryTable[MAX_EXTENSION_FUNCS];
static GLuint NumExtEntryPoints = 0; static GLuint NumExtEntryPoints = 0;
@@ -354,10 +357,8 @@ _glapi_add_entrypoint(const char *funcName, GLuint offset)
index = get_static_proc_offset(funcName); index = get_static_proc_offset(funcName);
if (index >= 0) { if (index >= 0) {
assert(index == offset); return (GLboolean) (index == offset); /* bad offset! */
return GL_TRUE;
} }
/* else if (offset < _glapi_get_dispatch_table_size()) { */
else { else {
/* be sure index and name match known data */ /* be sure index and name match known data */
GLuint i; GLuint i;
@@ -372,26 +373,75 @@ _glapi_add_entrypoint(const char *funcName, GLuint offset)
} }
} }
} }
assert(NumExtEntryPoints < _GLAPI_EXTRA_SLOTS);
ExtEntryTable[NumExtEntryPoints].Name = strdup(funcName);
ExtEntryTable[NumExtEntryPoints].Offset = offset;
ExtEntryTable[NumExtEntryPoints].Address = generate_entrypoint(offset);
NumExtEntryPoints++;
if (offset > MaxDispatchOffset) /* make sure we have space */
MaxDispatchOffset = offset; if (NumExtEntryPoints >= MAX_EXTENSION_FUNCS) {
return GL_FALSE;
}
else {
void *entrypoint = generate_entrypoint(offset);
if (!entrypoint)
return GL_FALSE;
return GL_TRUE; ExtEntryTable[NumExtEntryPoints].Name = strdup(funcName);
ExtEntryTable[NumExtEntryPoints].Offset = offset;
ExtEntryTable[NumExtEntryPoints].Address = entrypoint;
NumExtEntryPoints++;
if (offset > MaxDispatchOffset)
MaxDispatchOffset = offset;
return GL_TRUE; /* success */
}
} }
/*
else { /* should never get here, but play it safe */
return GL_FALSE; return GL_FALSE;
}
*/
} }
#if 0000 /* prototype code for dynamic extension slot allocation */
static int NextFreeOffset = 409; /*XXX*/
#define MAX_DISPATCH_TABLE_SIZE 1000
/*
* Dynamically allocate a dispatch slot for an extension entrypoint
* and generate the assembly language dispatch stub.
* Return the dispatch offset for the function or -1 if no room or error.
*/
GLint
_glapi_add_entrypoint2(const char *funcName)
{
int offset;
/* first see if extension func is already known */
offset = _glapi_get_proc_offset(funcName);
if (offset >= 0)
return offset;
if (NumExtEntryPoints < MAX_EXTENSION_FUNCS
&& NextFreeOffset < MAX_DISPATCH_TABLE_SIZE) {
void *entryPoint;
offset = NextFreeOffset;
entryPoint = generate_entrypoint(offset);
if (entryPoint) {
NextFreeOffset++;
ExtEntryTable[NumExtEntryPoints].Name = strdup(funcName);
ExtEntryTable[NumExtEntryPoints].Offset = offset;
ExtEntryTable[NumExtEntryPoints].Address = entryPoint;
NumExtEntryPoints++;
return offset;
}
}
return -1;
}
#endif
/* /*
* Return offset of entrypoint for named function within dispatch table. * Return offset of entrypoint for named function within dispatch table.
*/ */

View File

@@ -1,4 +1,4 @@
/* $Id: glapitable.h,v 1.9 2000/02/11 21:14:28 brianp Exp $ */ /* $Id: glapitable.h,v 1.10 2000/02/12 16:44:24 brianp Exp $ */
/* /*
* Mesa 3-D graphics library * Mesa 3-D graphics library
@@ -44,9 +44,6 @@
#include "GL/gl.h" #include "GL/gl.h"
#define _GLAPI_EXTRA_SLOTS 1000
/* /*
* This struct contains pointers for all the GL API entrypoints * This struct contains pointers for all the GL API entrypoints
* plus some reserved slots for dynamic extensions. * plus some reserved slots for dynamic extensions.
@@ -851,9 +848,6 @@ struct _glapi_table
void (*MultTransposeMatrixdARB)(const GLdouble m[16]); void (*MultTransposeMatrixdARB)(const GLdouble m[16]);
void (*MultTransposeMatrixfARB)(const GLfloat m[16]); void (*MultTransposeMatrixfARB)(const GLfloat m[16]);
#if 0
void *ExtensionFuncs[_GLAPI_EXTRA_SLOTS];
#endif
}; };