mesa: add Const.BufferCreateMapUnsynchronizedThreadSafe & MESA_MAP_THREAD_SAFE
[mesa.git] / src / mesa / main / remap.c
index 2341f8488d117f030e7043604b13f0ef570989e2..2110140ab958fdf69a10ebcfc3b4f022b7fd54d5 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Mesa 3-D graphics library
- * Version:  7.7
  *
  * Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
  *
  * a dynamic entry, or the corresponding static entry, in glapi.
  */
 
-#include "mfeatures.h"
-
-#if FEATURE_remap_table
-
+#include <stdbool.h>
+#include <string.h>
 #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"
+#include "errors.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 +64,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 +95,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 */