summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/es/main/es_generator.py26
-rw-r--r--src/mesa/glapi/gen/remap_helper.py12
-rw-r--r--src/mesa/main/api_exec.c34
-rw-r--r--src/mesa/main/remap.c48
-rw-r--r--src/mesa/main/remap.h32
-rw-r--r--src/mesa/main/remap_helper.h11
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 dbb516a4c16..8dedafbceb0 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 8b50526d2b0..69b8e5e9d02 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 7b3f3d9ea19..7b6ac63fac4 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 bfceb43c974..38ddc0c1dd7 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 d080188d89f..dda1a6be3a9 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 52edf67b545..2df11a454df 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 },