summaryrefslogtreecommitdiff
path: root/lib/mesa/src/mapi/shared-glapi/glapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mesa/src/mapi/shared-glapi/glapi.c')
-rw-r--r--lib/mesa/src/mapi/shared-glapi/glapi.c122
1 files changed, 12 insertions, 110 deletions
diff --git a/lib/mesa/src/mapi/shared-glapi/glapi.c b/lib/mesa/src/mapi/shared-glapi/glapi.c
index afc466504..7f83d536f 100644
--- a/lib/mesa/src/mapi/shared-glapi/glapi.c
+++ b/lib/mesa/src/mapi/shared-glapi/glapi.c
@@ -79,127 +79,29 @@ _glapi_get_dispatch_table_size(void)
}
/**
- * Fill-in the dispatch stub for the named function.
- *
- * This function is intended to be called by a hardware driver. When called,
- * a dispatch stub may be created created for the function. A pointer to this
- * dispatch function will be returned by glXGetProcAddress.
- *
- * \param function_names Array of pointers to function names that should
- * share a common dispatch offset.
- * \param parameter_signature String representing the types of the parameters
- * passed to the named function. Parameter types
- * are converted to characters using the following
- * rules:
- * - 'i' for \c GLint, \c GLuint, and \c GLenum
- * - 'p' for any pointer type
- * - 'f' for \c GLfloat and \c GLclampf
- * - 'd' for \c GLdouble and \c GLclampd
- *
- * \returns
- * The offset in the dispatch table of the named function. A pointer to the
- * driver's implementation of the named function should be stored at
- * \c dispatch_table[\c offset]. Return -1 if error/problem.
- *
- * \sa glXGetProcAddress
- *
- * \warning
- * This function can only handle up to 8 names at a time. As far as I know,
- * the maximum number of names ever associated with an existing GL function is
- * 4 (\c glPointParameterfSGIS, \c glPointParameterfEXT,
- * \c glPointParameterfARB, and \c glPointParameterf), so this should not be
- * too painful of a limitation.
- *
- * \todo
- * Check parameter_signature.
+ * Initializes the glapi relocs table (no-op for shared-glapi), and returns the
+ * offset of the given function in the dispatch table.
*/
int
-_glapi_add_dispatch( const char * const * function_names,
- const char * parameter_signature )
+_glapi_add_dispatch( const char * function_name )
{
- const struct mapi_stub *function_stubs[8];
- const struct mapi_stub *alias = NULL;
- unsigned i;
-
- (void) memset((void*)function_stubs, 0, sizeof(function_stubs));
-
- /* find the missing stubs, and decide the alias */
- for (i = 0; function_names[i] != NULL && i < 8; i++) {
- const char * funcName = function_names[i];
- const struct mapi_stub *stub;
- int slot;
-
- if (!funcName || funcName[0] != 'g' || funcName[1] != 'l')
- return -1;
- funcName += 2;
-
- stub = stub_find_public(funcName);
- if (!stub)
- stub = stub_find_dynamic(funcName, 0);
-
- slot = (stub) ? stub_get_slot(stub) : -1;
- if (slot >= 0) {
- if (alias && stub_get_slot(alias) != slot)
- return -1;
- /* use the first existing stub as the alias */
- if (!alias)
- alias = stub;
-
- function_stubs[i] = stub;
- }
- }
-
- /* generate missing stubs */
- for (i = 0; function_names[i] != NULL && i < 8; i++) {
- const char * funcName = function_names[i] + 2;
- struct mapi_stub *stub;
-
- if (function_stubs[i])
- continue;
-
- stub = stub_find_dynamic(funcName, 1);
- if (!stub)
- return -1;
-
- stub_fix_dynamic(stub, alias);
- if (!alias)
- alias = stub;
- }
+ assert(function_name[0] == 'g' && function_name[1] == 'l');
- return (alias) ? stub_get_slot(alias) : -1;
-}
+ const struct mapi_stub *stub = stub_find_public(function_name + 2);
+ if (!stub)
+ return -1;
-#if defined(ANDROID) && ANDROID_API_LEVEL <= 30
-static int is_debug_marker_func(const char *name)
-{
- return (!strcmp(name, "InsertEventMarkerEXT") ||
- !strcmp(name, "PushGroupMarkerEXT") ||
- !strcmp(name, "PopGroupMarkerEXT"));
+ return stub_get_slot(stub);
}
-#endif
static const struct mapi_stub *
-_glapi_get_stub(const char *name, int generate)
+_glapi_get_stub(const char *name)
{
- const struct mapi_stub *stub;
-
if (!name || name[0] != 'g' || name[1] != 'l')
return NULL;
name += 2;
- stub = stub_find_public(name);
-#if defined(ANDROID) && ANDROID_API_LEVEL <= 30
- /* Android framework till API Level 30 uses function pointers from
- * eglGetProcAddress without checking GL_EXT_debug_marker.
- * Make sure we don't return stub function pointers if we don't
- * support GL_EXT_debug_marker */
- if (!stub && !is_debug_marker_func(name))
-#else
- if (!stub)
-#endif
- stub = stub_find_dynamic(name, generate);
-
- return stub;
+ return stub_find_public(name);
}
/**
@@ -208,7 +110,7 @@ _glapi_get_stub(const char *name, int generate)
int
_glapi_get_proc_offset(const char *funcName)
{
- const struct mapi_stub *stub = _glapi_get_stub(funcName, 0);
+ const struct mapi_stub *stub = _glapi_get_stub(funcName);
return (stub) ? stub_get_slot(stub) : -1;
}
@@ -220,7 +122,7 @@ _glapi_get_proc_offset(const char *funcName)
_glapi_proc
_glapi_get_proc_address(const char *funcName)
{
- const struct mapi_stub *stub = _glapi_get_stub(funcName, 1);
+ const struct mapi_stub *stub = _glapi_get_stub(funcName);
return (stub) ? (_glapi_proc) stub_get_addr(stub) : NULL;
}