X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fremap.c;h=6dc4235cba0b43ef5494fde1db2d4442b585240a;hb=203c8794a1debc0e45019fe945d1cc55459e6c6f;hp=2341f8488d117f030e7043604b13f0ef570989e2;hpb=1218430e1200a08cd64b6555d3fd1fd0274ad9e5;p=mesa.git diff --git a/src/mesa/main/remap.c b/src/mesa/main/remap.c index 2341f8488d1..6dc4235cba0 100644 --- a/src/mesa/main/remap.c +++ b/src/mesa/main/remap.c @@ -1,6 +1,5 @@ /* * Mesa 3-D graphics library - * Version: 7.7 * * Copyright (C) 2009 Chia-I Wu * @@ -36,32 +35,19 @@ * a dynamic entry, or the corresponding static entry, in glapi. */ -#include "mfeatures.h" - -#if FEATURE_remap_table - +#include #include "remap.h" #include "imports.h" #include "glapi/glapi.h" -#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) #define MAX_ENTRY_POINTS 16 -static const char *_mesa_function_pool; +#define need_MESA_remap_table +#include "main/remap_helper.h" -/** - * Return the spec string associated with the given function index. - * The index is available from including remap_helper.h. - * - * \param func_index an opaque function index. - * - * \return the spec string associated with the function index, or NULL. - */ -const char * -_mesa_get_function_spec(GLint func_index) -{ - return _mesa_function_pool + func_index; -} + +/* this is global for quick access */ +int driDispatchRemapTable[driDispatchRemapTable_size]; /** @@ -76,12 +62,12 @@ _mesa_get_function_spec(GLint func_index) * \return the offset of the (re-)mapped function in the dispatch * table, or -1. */ -GLint -_mesa_map_function_spec(const char *spec) +static int +map_function_spec(const char *spec) { const char *signature; const char *names[MAX_ENTRY_POINTS + 1]; - GLint num_names = 0; + int num_names = 0; if (!spec) return -1; @@ -107,84 +93,36 @@ _mesa_map_function_spec(const char *spec) } -/** - * Map an array of functions. This is a convenient function for - * use with arrays available from including remap_helper.h. - * - * Note that the dispatch offsets of the functions are not returned. - * If they are needed, _mesa_map_function_spec() should be used. - * - * \param func_array an array of function remaps. - */ -void -_mesa_map_function_array(const struct gl_function_remap *func_array) -{ - GLint i; - - if (!func_array) - return; - - for (i = 0; func_array[i].func_index != -1; i++) { - const char *spec; - GLint offset; - - spec = _mesa_get_function_spec(func_array[i].func_index); - if (!spec) { - _mesa_problem(NULL, "invalid function index %d", - func_array[i].func_index); - continue; - } - - offset = _mesa_map_function_spec(spec); - /* error checks */ - if (offset < 0) { - const char *name = spec + strlen(spec) + 1; - _mesa_warning(NULL, "failed to remap %s", name); - } - else if (func_array[i].dispatch_offset >= 0 && - offset != func_array[i].dispatch_offset) { - const char *name = spec + strlen(spec) + 1; - _mesa_problem(NULL, "%s should be mapped to %d, not %d", - name, func_array[i].dispatch_offset, offset); - } - } -} - - /** * 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_do_init_remap_table(const char *pool, - int size, - const struct gl_function_pool_remap *remap) +_mesa_init_remap_table(void) { - static GLboolean initialized = GL_FALSE; + static bool initialized = false; GLint i; if (initialized) return; - initialized = GL_TRUE; - _mesa_function_pool = pool; + initialized = true; - /* initialize the remap table */ - for (i = 0; i < size; i++) { - GLint offset; + /* initialize the MESA_remap_table_functions table */ + for (i = 0; i < driDispatchRemapTable_size; i++) { + int offset; const char *spec; /* sanity check */ - ASSERT(i == remap[i].remap_index); - spec = _mesa_function_pool + remap[i].pool_index; + assert(i == MESA_remap_table_functions[i].remap_index); + spec = _mesa_function_pool + MESA_remap_table_functions[i].pool_index; - offset = _mesa_map_function_spec(spec); - /* store the dispatch offset in the remap table */ + offset = map_function_spec(spec); + /* store the dispatch offset in the MESA_remap_table_functions table */ driDispatchRemapTable[i] = offset; - if (offset < 0) - _mesa_warning(NULL, "failed to remap index %d", i); + if (offset < 0) { + const char *name = spec + strlen(spec) + 1; + _mesa_warning(NULL, "failed to remap %s", name); + } } } - - -#endif /* FEATURE_remap_table */