diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/es/main/es_generator.py | 26 | ||||
-rw-r--r-- | src/mesa/glapi/gen/remap_helper.py | 12 | ||||
-rw-r--r-- | src/mesa/main/api_exec.c | 34 | ||||
-rw-r--r-- | src/mesa/main/remap.c | 48 | ||||
-rw-r--r-- | src/mesa/main/remap.h | 32 | ||||
-rw-r--r-- | src/mesa/main/remap_helper.h | 11 |
6 files changed, 100 insertions, 63 deletions
diff --git a/src/mesa/es/main/es_generator.py b/src/mesa/es/main/es_generator.py index dbb516a4c1..8dedafbceb 100644 --- a/src/mesa/es/main/es_generator.py +++ b/src/mesa/es/main/es_generator.py @@ -209,6 +209,32 @@ extern void _mesa_error(void *ctx, GLenum error, const char *fmtString, ... ); #include "main/dispatch.h" +#if FEATURE_remap_table + +#include "main/remap.h" + +#ifdef IN_DRI_DRIVER +#define _GLAPI_USE_REMAP_TABLE +#endif + +#define need_MESA_remap_table +#include "main/remap_helper.h" + +void +_mesa_init_remap_table(void) +{ + _mesa_do_init_remap_table(_mesa_function_pool, + driDispatchRemapTable_size, + MESA_remap_table_functions); +} + +void +_mesa_map_static_functions(void) +{ +} + +#endif + typedef void (*_glapi_proc)(void); /* generic function pointer */ """ diff --git a/src/mesa/glapi/gen/remap_helper.py b/src/mesa/glapi/gen/remap_helper.py index 8b50526d2b..69b8e5e9d0 100644 --- a/src/mesa/glapi/gen/remap_helper.py +++ b/src/mesa/glapi/gen/remap_helper.py @@ -65,17 +65,12 @@ class PrintGlRemap(gl_XML.gl_print_base): def printRealHeader(self): print '#include "main/dispatch.h"' + print '#include "main/remap.h"' print '' return def printBody(self, api): - print 'struct gl_function_remap {' - print ' GLint func_index;' - print ' GLint dispatch_offset; /* for sanity check */' - print '};' - print '' - pool_indices = {} print '/* this is internal to remap.c */' @@ -108,10 +103,7 @@ class PrintGlRemap(gl_XML.gl_print_base): print '' print '/* these functions need to be remapped */' - print 'static const struct {' - print ' GLint pool_index;' - print ' GLint remap_index;' - print '} MESA_remap_table_functions[] = {' + print 'static const struct gl_function_pool_remap MESA_remap_table_functions[] = {' # output all functions that need to be remapped # iterate by offsets so that they are sorted by remap indices for f in api.functionIterateByOffset(): diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c index 7b3f3d9ea1..7b6ac63fac 100644 --- a/src/mesa/main/api_exec.c +++ b/src/mesa/main/api_exec.c @@ -107,6 +107,40 @@ #endif #include "main/dispatch.h" +#define need_MESA_remap_table +#include "main/remap.h" +#include "main/remap_helper.h" + +/* This is shared across all APIs but We define this here since + * desktop GL has the biggest remap table. */ +int driDispatchRemapTable[driDispatchRemapTable_size]; + +/** + * Map the functions which are already static. + * + * When a extension function are incorporated into the ABI, the + * extension suffix is usually stripped. Mapping such functions + * makes sure the alternative names are available. + * + * Note that functions mapped by _mesa_init_remap_table() are + * excluded. + */ +void +_mesa_map_static_functions(void) +{ + /* Remap static functions which have alternative names and are in the ABI. + * This is to be on the safe side. glapi should have defined those names. + */ + _mesa_map_function_array(MESA_alt_functions); +} + +void +_mesa_init_remap_table(void) +{ + _mesa_do_init_remap_table(_mesa_function_pool, + driDispatchRemapTable_size, + MESA_remap_table_functions); +} /** diff --git a/src/mesa/main/remap.c b/src/mesa/main/remap.c index bfceb43c97..38ddc0c1dd 100644 --- a/src/mesa/main/remap.c +++ b/src/mesa/main/remap.c @@ -38,23 +38,15 @@ #include "remap.h" #include "imports.h" - -#include "main/dispatch.h" - +#include "glapi/glapi.h" #if FEATURE_remap_table -#define need_MESA_remap_table -#include "main/remap_helper.h" - #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) #define MAX_ENTRY_POINTS 16 - -/* this is global for quick access */ -int driDispatchRemapTable[driDispatchRemapTable_size]; - +static const char *_mesa_function_pool; /** * Return the spec string associated with the given function index. @@ -67,10 +59,7 @@ int driDispatchRemapTable[driDispatchRemapTable_size]; const char * _mesa_get_function_spec(GLint func_index) { - if (func_index < ARRAY_SIZE(_mesa_function_pool)) - return _mesa_function_pool + func_index; - else - return NULL; + return _mesa_function_pool + func_index; } @@ -162,32 +151,14 @@ _mesa_map_function_array(const struct gl_function_remap *func_array) /** - * Map the functions which are already static. - * - * When a extension function are incorporated into the ABI, the - * extension suffix is usually stripped. Mapping such functions - * makes sure the alternative names are available. - * - * Note that functions mapped by _mesa_init_remap_table() are - * excluded. - */ -void -_mesa_map_static_functions(void) -{ - /* Remap static functions which have alternative names and are in the ABI. - * This is to be on the safe side. glapi should have defined those names. - */ - _mesa_map_function_array(MESA_alt_functions); -} - - -/** * Initialize the remap table. This is called in one_time_init(). * The remap table needs to be initialized before calling the * CALL/GET/SET macros defined in main/dispatch.h. */ void -_mesa_init_remap_table(void) +_mesa_do_init_remap_table(const char *pool, + int size, + const struct gl_function_pool_remap *remap) { static GLboolean initialized = GL_FALSE; GLint i; @@ -195,15 +166,16 @@ _mesa_init_remap_table(void) if (initialized) return; initialized = GL_TRUE; + _mesa_function_pool = pool; /* initialize the remap table */ - for (i = 0; i < ARRAY_SIZE(driDispatchRemapTable); i++) { + for (i = 0; i < size; i++) { GLint offset; const char *spec; /* sanity check */ - ASSERT(i == MESA_remap_table_functions[i].remap_index); - spec = _mesa_function_pool + MESA_remap_table_functions[i].pool_index; + ASSERT(i == remap[i].remap_index); + spec = _mesa_function_pool + remap[i].pool_index; offset = _mesa_map_function_spec(spec); /* store the dispatch offset in the remap table */ diff --git a/src/mesa/main/remap.h b/src/mesa/main/remap.h index d080188d89..dda1a6be3a 100644 --- a/src/mesa/main/remap.h +++ b/src/mesa/main/remap.h @@ -28,9 +28,17 @@ #define REMAP_H -#include "main/mtypes.h" +#include "main/mfeatures.h" -struct gl_function_remap; +struct gl_function_pool_remap { + int pool_index; + int remap_index; +}; + +struct gl_function_remap { + int func_index; + int dispatch_offset; /* for sanity check */ +}; #if FEATURE_remap_table @@ -39,9 +47,9 @@ extern int driDispatchRemapTable[]; extern const char * -_mesa_get_function_spec(GLint func_index); +_mesa_get_function_spec(int func_index); -extern GLint +extern int _mesa_map_function_spec(const char *spec); extern void @@ -51,17 +59,22 @@ extern void _mesa_map_static_functions(void); extern void +_mesa_do_init_remap_table(const char *pool, + int size, + const struct gl_function_pool_remap *remap); + +extern void _mesa_init_remap_table(void); #else /* FEATURE_remap_table */ static INLINE const char * -_mesa_get_function_spec(GLint func_index) +_mesa_get_function_spec(int func_index) { return NULL; } -static INLINE GLint +static INLINE int _mesa_map_function_spec(const char *spec) { return -1; @@ -78,6 +91,13 @@ _mesa_map_static_functions(void) } static INLINE void +_mesa_do_init_remap_table(const char *pool, + int size, + const struct gl_function_pool_remap *remap) +{ +} + +static INLINE void _mesa_init_remap_table(void) { } diff --git a/src/mesa/main/remap_helper.h b/src/mesa/main/remap_helper.h index 52edf67b54..2df11a454d 100644 --- a/src/mesa/main/remap_helper.h +++ b/src/mesa/main/remap_helper.h @@ -26,11 +26,7 @@ */ #include "main/dispatch.h" - -struct gl_function_remap { - GLint func_index; - GLint dispatch_offset; /* for sanity check */ -}; +#include "main/remap.h" /* this is internal to remap.c */ #ifdef need_MESA_remap_table @@ -4427,10 +4423,7 @@ static const char _mesa_function_pool[] = ; /* these functions need to be remapped */ -static const struct { - GLint pool_index; - GLint remap_index; -} MESA_remap_table_functions[] = { +static const struct gl_function_pool_remap MESA_remap_table_functions[] = { { 1461, AttachShader_remap_index }, { 8848, CreateProgram_remap_index }, { 20883, CreateShader_remap_index }, |