16fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/*
26fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Mesa 3-D graphics library
36fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Version:  7.9
46fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
56fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
66fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Copyright (C) 2010 LunarG Inc.
76fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
86fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
96fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * copy of this software and associated documentation files (the "Software"),
106fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * to deal in the Software without restriction, including without limitation
116fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
126fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * and/or sell copies of the Software, and to permit persons to whom the
136fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Software is furnished to do so, subject to the following conditions:
146fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
156fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * The above copyright notice and this permission notice shall be included
166fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * in all copies or substantial portions of the Software.
176fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
186fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
196fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
206fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
216fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
226fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
236fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
246fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * DEALINGS IN THE SOFTWARE.
256fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
266fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Authors:
276fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *    Chia-I Wu <olv@lunarg.com>
286fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
296fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
306fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#include <string.h>
316fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#include "glapi/glapi.h"
326fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#include "mapi/u_current.h"
336fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#include "mapi/table.h" /* for MAPI_TABLE_NUM_SLOTS */
346fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#include "mapi/stub.h"
356fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
366fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/*
376fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Global variables, _glapi_get_context, and _glapi_get_dispatch are defined in
386fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * u_current.c.
396fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
406fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
416fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#ifdef GLX_USE_TLS
426fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/* not used, but defined for compatibility */
436fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuconst struct _glapi_table *_glapi_Dispatch;
446fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuconst void *_glapi_Context;
456fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#endif /* GLX_USE_TLS */
466fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
476fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuvoid
486fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_destroy_multithread(void)
496fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
506fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   u_current_destroy();
516fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
526fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
536fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuvoid
546fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_check_multithread(void)
556fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
566fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   u_current_init();
576fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
586fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
596fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuvoid
606fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_set_context(void *context)
616fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
626fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   u_current_set_user((const void *) context);
636fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
646fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
656fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuvoid
666fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_set_dispatch(struct _glapi_table *dispatch)
676fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
686fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   u_current_set((const struct mapi_table *) dispatch);
696fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
706fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
716fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/**
726fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Return size of dispatch table struct as number of functions (or
736fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * slots).
746fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
756fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuunsigned int
766fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_get_dispatch_table_size(void)
776fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
786fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return MAPI_TABLE_NUM_SLOTS;
796fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
806fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
816fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/**
826fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Fill-in the dispatch stub for the named function.
836fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
846fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * This function is intended to be called by a hardware driver.  When called,
856fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * a dispatch stub may be created created for the function.  A pointer to this
866fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * dispatch function will be returned by glXGetProcAddress.
876fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
886fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \param function_names       Array of pointers to function names that should
896fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                             share a common dispatch offset.
906fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \param parameter_signature  String representing the types of the parameters
916fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                             passed to the named function.  Parameter types
926fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                             are converted to characters using the following
936fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                             rules:
946fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                               - 'i' for \c GLint, \c GLuint, and \c GLenum
956fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                               - 'p' for any pointer type
966fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                               - 'f' for \c GLfloat and \c GLclampf
976fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *                               - 'd' for \c GLdouble and \c GLclampd
986fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
996fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \returns
1006fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * The offset in the dispatch table of the named function.  A pointer to the
1016fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * driver's implementation of the named function should be stored at
1026fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \c dispatch_table[\c offset].  Return -1 if error/problem.
1036fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
1046fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \sa glXGetProcAddress
1056fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
1066fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \warning
1076fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * This function can only handle up to 8 names at a time.  As far as I know,
1086fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * the maximum number of names ever associated with an existing GL function is
1096fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * 4 (\c glPointParameterfSGIS, \c glPointParameterfEXT,
1106fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \c glPointParameterfARB, and \c glPointParameterf), so this should not be
1116fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * too painful of a limitation.
1126fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu *
1136fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * \todo
1146fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Check parameter_signature.
1156fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
1166fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuint
1176fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_add_dispatch( const char * const * function_names,
1186fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu		     const char * parameter_signature )
1196fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
1206fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   const struct mapi_stub *function_stubs[8];
1216fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   const struct mapi_stub *alias = NULL;
1226fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   unsigned i;
1236fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1246fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   (void) memset(function_stubs, 0, sizeof(function_stubs));
1256fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1266fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   /* find the missing stubs, and decide the alias */
1276fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   for (i = 0; function_names[i] != NULL && i < 8; i++) {
1286fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      const char * funcName = function_names[i];
1296fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      const struct mapi_stub *stub;
1306fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      int slot;
1316fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1326fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      if (!funcName || funcName[0] != 'g' || funcName[1] != 'l')
1336fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         return -1;
1346fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      funcName += 2;
1356fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1366fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      stub = stub_find_public(funcName);
1376fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      if (!stub)
1386fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         stub = stub_find_dynamic(funcName, 0);
1396fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1406fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      slot = (stub) ? stub_get_slot(stub) : -1;
1416fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      if (slot >= 0) {
1426fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         if (alias && stub_get_slot(alias) != slot)
1436fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu            return -1;
1446fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         /* use the first existing stub as the alias */
1456fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         if (!alias)
1466fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu            alias = stub;
1476fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1486fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         function_stubs[i] = stub;
1496fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      }
1506fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   }
1516fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1526fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   /* generate missing stubs */
1536fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   for (i = 0; function_names[i] != NULL && i < 8; i++) {
1546fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      const char * funcName = function_names[i] + 2;
1556fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      struct mapi_stub *stub;
1566fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1576fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      if (function_stubs[i])
1586fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         continue;
1596fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1606fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      stub = stub_find_dynamic(funcName, 1);
1616fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      if (!stub)
1626fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         return -1;
1636fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1646fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      stub_fix_dynamic(stub, alias);
1656fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      if (!alias)
1666fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu         alias = stub;
1676fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   }
1686fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1696fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return (alias) ? stub_get_slot(alias) : -1;
1706fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
1716fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1726fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wustatic const struct mapi_stub *
1736fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_get_stub(const char *name, int generate)
1746fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
1756fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   const struct mapi_stub *stub;
1766fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1776fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#ifdef USE_MGL_NAMESPACE
1786fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   if (name)
1796fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      name++;
1806fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu#endif
1816fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1826fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   if (!name || name[0] != 'g' || name[1] != 'l')
1836fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      return NULL;
1846fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   name += 2;
1856fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1866fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   stub = stub_find_public(name);
1876fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   if (!stub)
1886fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu      stub = stub_find_dynamic(name, generate);
1896fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1906fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return stub;
1916fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
1926fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
1936fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/**
1946fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Return offset of entrypoint for named function within dispatch table.
1956fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
1966fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuint
1976fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_get_proc_offset(const char *funcName)
1986fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
1996fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   const struct mapi_stub *stub = _glapi_get_stub(funcName, 0);
2006fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return (stub) ? stub_get_slot(stub) : -1;
2016fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
2026fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
2036fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/**
2046fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Return pointer to the named function.  If the function name isn't found
2056fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * in the name of static functions, try generating a new API entrypoint on
2066fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * the fly with assembly language.
2076fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
2086fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_proc
2096fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_get_proc_address(const char *funcName)
2106fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
2116fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   const struct mapi_stub *stub = _glapi_get_stub(funcName, 1);
2126fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return (stub) ? (_glapi_proc) stub_get_addr(stub) : NULL;
2136fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
2146fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
2156fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu/**
2166fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * Return the name of the function at the given dispatch offset.
2176fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu * This is only intended for debugging.
2186fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu */
2196fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuconst char *
2206fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_get_proc_name(unsigned int offset)
2216fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
2226fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   /* not implemented */
2236fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return NULL;
2246fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
2256fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
2266fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuunsigned long
2276fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glthread_GetID(void)
2286fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
2296fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu   return u_thread_self();
2306fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
2316fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
2326fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuvoid
2336fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_noop_enable_warnings(unsigned char enable)
2346fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
2356fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
2366fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu
2376fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wuvoid
2386fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu_glapi_set_warning_func(_glapi_proc func)
2396fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu{
2406fc152f660ed995fb6c785b9e8e925bb1640532aChia-I Wu}
241