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