mesa: Implement glGet*(GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED).
[mesa.git] / src / mesa / main / remap.c
index bfceb43c974155d092812e7a51a4337a369b14c8..5a95387728512ffa149ff2e0a1e518f7605ff793 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Mesa 3-D graphics library
- * Version:  7.7
  *
  * Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
  *
 
 #include "remap.h"
 #include "imports.h"
+#include "glapi/glapi.h"
 
-#include "main/dispatch.h"
-
-
-#if FEATURE_remap_table
-
+#define MAX_ENTRY_POINTS 16
 
 #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];
@@ -186,8 +179,10 @@ _mesa_map_static_functions(void)
  * 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)
+static 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;
@@ -197,21 +192,29 @@ _mesa_init_remap_table(void)
    initialized = GL_TRUE;
 
    /* 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 */
       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 */
+void
+_mesa_init_remap_table(void)
+{
+   _mesa_do_init_remap_table(_mesa_function_pool,
+                            driDispatchRemapTable_size,
+                            MESA_remap_table_functions);
+}