Index: configs/linux-dri =================================================================== RCS file: /cvs/mesa/Mesa/configs/linux-dri,v retrieving revision 1.17 diff -u -d -r1.17 linux-dri --- configs/linux-dri 29 Oct 2004 00:10:43 -0000 1.17 +++ configs/linux-dri 10 Nov 2004 22:03:47 -0000 @@ -17,7 +17,7 @@ CFLAGS = -DDRI_NEW_INTERFACE_ONLY $(WARN_FLAGS) -g $(OPT_FLAGS) $(ASM_FLAGS) \ -std=c99 $(PIC_FLAGS) -ffast-math $(SOURCE_FLAGS) -DPTHREADS \ - -DUSE_EXTERNAL_DXTN_LIB=1 \ + -DUSE_EXTERNAL_DXTN_LIB=1 -DGLX_USE_TLS -DHAVE_ALIAS \ -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY $(WARN_FLAGS) -g $(OPT_FLAGS) -fPIC \ @@ -34,7 +34,7 @@ # Directories -SRC_DIRS = mesa glu glut/glx glw glx/x11 +SRC_DIRS = mesa glx/x11 glu glut/glx glw DRIVER_DIRS = dri PROGRAM_DIRS = WINDOW_SYSTEM=dri Index: src/mesa/glapi/gl_x86_asm.py =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/glapi/gl_x86_asm.py,v retrieving revision 1.6 diff -u -d -r1.6 gl_x86_asm.py --- src/mesa/glapi/gl_x86_asm.py 25 Aug 2004 15:10:51 -0000 1.6 +++ src/mesa/glapi/gl_x86_asm.py 10 Nov 2004 22:03:47 -0000 @@ -87,7 +87,17 @@ print '# define THREADS' print '#endif' print '' - print '#if defined(PTHREADS)' + print '#ifdef GLX_USE_TLS' + print '' + print '# define GL_STUB(fn,off,fn_alt)\t\t\t\\' + print 'ALIGNTEXT16;\t\t\t\t\t\t\\' + print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\' + print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\' + print '\tCALL(get_dispatch) ;\t\t\t\t\\' + print '\tNOP ;\t\t\t\t\t\t\\' + print '\tJMP(GL_OFFSET(off))' + print '' + print '#elif defined(PTHREADS)' print '# define GL_STUB(fn,off,fn_alt)\t\t\t\\' print 'ALIGNTEXT16;\t\t\t\t\t\t\\' print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\' @@ -118,9 +128,25 @@ print '\tJMP(GL_OFFSET(off))' print '#endif' print '' + print '#ifdef HAVE_ALIAS' + print '# define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\' + print '\t.globl\tGL_PREFIX(fn, fn_alt) ;\t\t\t\\' + print '\t.set\tGL_PREFIX(fn, fn_alt), GL_PREFIX(alias, alias_alt)' + print '#else' + print '# define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\' + print ' GL_STUB(fn, off, fn_alt)' + print '#endif' + print '' print 'SEG_TEXT' print '' - print '#ifdef PTHREADS' + print '#ifdef GLX_USE_TLS' + print '' + print 'ALIGNTEXT16' + print 'GLNAME(get_dispatch):' + print '\tmovl\t%gs:_glapi_tls_Dispatch@NTPOFF, %eax' + print '\tret' + print '' + print '#elif defined(PTHREADS)' print 'EXTERN GLNAME(_glapi_Dispatch)' print 'EXTERN GLNAME(_gl_DispatchTSD)' print 'EXTERN GLNAME(pthread_getspecific)' @@ -143,6 +169,19 @@ def printRealFooter(self): print '' + print '#if defined(GLX_USE_TLS) && defined(__linux__)' + print ' .section ".note.ABI-tag", "a"' + print ' .p2align 2' + print ' .long 1f - 0f /* name length */' + print ' .long 3f - 2f /* data length */' + print ' .long 1 /* note length */' + print '0: .asciz "GNU" /* vendor name */' + print '1: .p2align 2' + print '2: .long 0 /* note data: the ABI tag */' + print ' .long 2,4,20 /* Minimum kernel version w/TLS */' + print '3: .p2align 2 /* pad out section */' + print '#endif /* GLX_USE_TLS */' + print '' print '#endif /* __WIN32__ */' return @@ -150,7 +189,12 @@ stack = self.get_stack_size(f) alt = "%s@%u" % (f.name, stack) - print '\tGL_STUB(%s, _gloffset_%s, %s)' % (f.name, f.real_name, alt) + if f.fn_alias == None: + print '\tGL_STUB(%s, _gloffset_%s, %s)' % (f.name, f.real_name, alt) + else: + alias_alt = "%s@%u" % (f.real_name, stack) + print '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % \ + (f.name, f.real_name, alt, f.real_name, alias_alt) return def show_usage(): Index: src/mesa/glapi/glapi.c =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/glapi/glapi.c,v retrieving revision 1.83 diff -u -d -r1.83 glapi.c --- src/mesa/glapi/glapi.c 5 Nov 2004 18:32:02 -0000 1.83 +++ src/mesa/glapi/glapi.c 10 Nov 2004 22:03:47 -0000 @@ -134,6 +134,28 @@ #if defined(THREADS) +#if defined(GLX_USE_TLS) + +__thread struct _glapi_table * _glapi_tls_Dispatch + __attribute__((tls_model("initial-exec"))) + = (struct _glapi_table *) __glapi_noop_table; + +static __thread struct _glapi_table * _glapi_tls_RealDispatch + __attribute__((tls_model("initial-exec"))) + = (struct _glapi_table *) __glapi_noop_table; + +__thread void * _glapi_tls_Context + __attribute__((tls_model("initial-exec"))); + +/** + * Legacy per-thread dispatch pointer. This is only needed to support + * non-TLS DRI drivers. + */ + +_glthread_TSD _gl_DispatchTSD; + +#else + /** * \name Multi-threaded control support variables * @@ -167,6 +189,7 @@ static _glthread_TSD ContextTSD; /**< Per-thread context pointer */ /*@}*/ +#endif /* defined(GLX_USE_TLS) */ #define DISPATCH_TABLE_NAME __glapi_threadsafe_table #define UNUSED_TABLE_NAME __usused_threadsafe_functions @@ -186,16 +209,41 @@ +#if defined(GLX_USE_TLS) + +/** + * \name Old dispatch pointers + * + * Very old DRI based drivers assume that \c _glapi_Dispatch will never be + * \c NULL. Becuase of that, special "thread-safe" dispatch functions are + * needed here. Slightly more recent drivers detect the multi-threaded case + * by \c _glapi_DispatchTSD being \c NULL. + * + * \deprecated + * + * \warning + * \c _glapi_RealDispatch does not exist in TLS builds. I don't think it was + * ever used outside libGL.so, so this should be safe. + */ +/*@{*/ +const struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table; +const struct _glapi_table *_glapi_DispatchTSD = NULL; +const void *_glapi_Context = NULL; +/*@}*/ + +#else + struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table; #if defined( THREADS ) struct _glapi_table *_glapi_DispatchTSD = (struct _glapi_table *) __glapi_noop_table; #endif struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table; - - /* Used when thread safety disabled */ void *_glapi_Context = NULL; +#endif /* defined(GLX_USE_TLS) */ + + static GLboolean DispatchOverride = GL_FALSE; @@ -224,7 +272,7 @@ void _glapi_check_multithread(void) { -#if defined(THREADS) +#if defined(THREADS) && !defined(GLX_USE_TLS) if (!ThreadSafe) { static unsigned long knownID; static GLboolean firstCall = GL_TRUE; @@ -246,7 +294,7 @@ -/* +/** * Set the current context pointer for this thread. * The context pointer is an opaque type which should be cast to * void from the real context pointer type. @@ -254,7 +302,9 @@ void _glapi_set_context(void *context) { -#if defined(THREADS) +#if defined(GLX_USE_TLS) + _glapi_tls_Context = context; +#elif defined(THREADS) _glthread_SetTSD(&ContextTSD, context); _glapi_Context = (ThreadSafe) ? NULL : context; #else @@ -264,7 +314,7 @@ -/* +/** * Get the current context pointer for this thread. * The context pointer is an opaque type which should be cast from * void to the real context pointer type. @@ -272,7 +322,9 @@ void * _glapi_get_context(void) { -#if defined(THREADS) +#if defined(GLX_USE_TLS) + return _glapi_tls_Context; +#elif defined(THREADS) if (ThreadSafe) { return _glthread_GetTSD(&ContextTSD); } @@ -302,7 +354,15 @@ } #endif -#if defined(THREADS) +#if defined(GLX_USE_TLS) + if (DispatchOverride) { + _glapi_tls_RealDispatch = dispatch; + } + else { + _glthread_SetTSD(&_gl_DispatchTSD, (void *) dispatch); + _glapi_tls_Dispatch = dispatch; + } +#elif defined(THREADS) if (DispatchOverride) { _glthread_SetTSD(&RealDispatchTSD, (void *) dispatch); if (ThreadSafe) @@ -340,7 +400,13 @@ struct _glapi_table * _glapi_get_dispatch(void) { -#if defined(THREADS) +#if defined(GLX_USE_TLS) + struct _glapi_table * api = (DispatchOverride) + ? _glapi_tls_RealDispatch : _glapi_tls_Dispatch; + + assert( api != NULL ); + return api; +#elif defined(THREADS) if (ThreadSafe) { if (DispatchOverride) { return (struct _glapi_table *) _glthread_GetTSD(&RealDispatchTSD); @@ -397,7 +463,10 @@ _glapi_set_dispatch(real); -#if defined(THREADS) +#if defined(GLX_USE_TLS) + _glthread_SetTSD(&_gl_DispatchTSD, (void *) override); + _glapi_tls_Dispatch = override; +#elif defined(THREADS) _glthread_SetTSD(&_gl_DispatchTSD, (void *) override); if ( ThreadSafe ) { _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table; @@ -422,10 +491,14 @@ DispatchOverride = GL_FALSE; _glapi_set_dispatch(real); /* the rest of this isn't needed, just play it safe */ -#if defined(THREADS) +#if defined(GLX_USE_TLS) + _glapi_tls_RealDispatch = NULL; +#else +# if defined(THREADS) _glthread_SetTSD(&RealDispatchTSD, NULL); -#endif +# endif _glapi_RealDispatch = NULL; +#endif } @@ -437,7 +510,9 @@ } else { if (DispatchOverride) { -#if defined(THREADS) +#if defined(GLX_USE_TLS) + return (struct _glapi_table *) _glapi_tls_Dispatch; +#elif defined(THREADS) return (struct _glapi_table *) _glthread_GetTSD(&_gl_DispatchTSD); #else return _glapi_Dispatch; @@ -500,7 +575,7 @@ #ifdef USE_X86_ASM extern const GLubyte gl_dispatch_functions_start[]; -# if defined(THREADS) +# if defined(THREADS) && !defined(GLX_USE_TLS) # define X86_DISPATCH_FUNCTION_SIZE 32 # else # define X86_DISPATCH_FUNCTION_SIZE 16 @@ -583,10 +658,14 @@ extern void __glapi_sparc_icache_flush(unsigned int *); #endif -/* +/** * Generate a dispatch function (entrypoint) which jumps through * the given slot number (offset) in the current dispatch table. * We need assembly language in order to accomplish this. + * + * \todo + * A TLS version of this is needed. The code right now will work on x86 in + * TLS mode, but it will be inefficient. */ static void * generate_entrypoint(GLuint functionOffset) Index: src/mesa/glapi/glapi.h =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/glapi/glapi.h,v retrieving revision 1.22 diff -u -d -r1.22 glapi.h --- src/mesa/glapi/glapi.h 10 Sep 2004 00:45:12 -0000 1.22 +++ src/mesa/glapi/glapi.h 10 Nov 2004 22:03:47 -0000 @@ -52,10 +52,17 @@ typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...); -extern void *_glapi_Context; +#if defined (GLX_USE_TLS) + +const extern struct _glapi_table *_glapi_Dispatch; +const extern void *_glapi_Context; + +#else extern struct _glapi_table *_glapi_Dispatch; +extern void *_glapi_Context; +#endif /* defined (GLX_USE_TLS) */ extern void _glapi_noop_enable_warnings(GLboolean enable); Index: src/mesa/glapi/glthread.h =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/glapi/glthread.h,v retrieving revision 1.16 diff -u -d -r1.16 glthread.h --- src/mesa/glapi/glthread.h 14 Aug 2004 09:48:57 -0000 1.16 +++ src/mesa/glapi/glthread.h 10 Nov 2004 22:03:47 -0000 @@ -307,7 +307,14 @@ extern void _glthread_SetTSD(_glthread_TSD *, void *); -#ifndef GL_CALL +#if defined(GLX_USE_TLS) + +extern __thread struct _glapi_table * _glapi_tls_Dispatch + __attribute__((tls_model("initial-exec"))); + +# define GL_CALL(name) (*(_glapi_tls_Dispatch-> name)) + +#elif !defined(GL_CALL) # if defined(THREADS) extern struct _glapi_table * _glapi_DispatchTSD; # define GL_CALL(name) \ Index: src/mesa/x86/Makefile =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/x86/Makefile,v retrieving revision 1.2 diff -u -d -r1.2 Makefile --- src/mesa/x86/Makefile 23 Oct 2004 16:57:45 -0000 1.2 +++ src/mesa/x86/Makefile 10 Nov 2004 22:03:47 -0000 @@ -21,7 +21,7 @@ # need some special rules here, unfortunately matypes.h: ../main/mtypes.h ../tnl/t_context.h gen_matypes.c - $(CC) $(INCLUDE_DIRS) $(CFLAGS) gen_matypes.c -o gen_matypes + gcc $(INCLUDE_DIRS) $(CFLAGS) gen_matypes.c -o gen_matypes ./gen_matypes > matypes.h common_x86_asm.o: matypes.h Index: src/mesa/x86/glapi_x86.S =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/x86/glapi_x86.S,v retrieving revision 1.44 diff -u -d -r1.44 glapi_x86.S --- src/mesa/x86/glapi_x86.S 28 Oct 2004 11:14:03 -0000 1.44 +++ src/mesa/x86/glapi_x86.S 10 Nov 2004 22:03:48 -0000 @@ -57,7 +57,17 @@ # define THREADS #endif -#if defined(PTHREADS) +#ifdef GLX_USE_TLS + +# define GL_STUB(fn,off,fn_alt) \ +ALIGNTEXT16; \ +GLOBL_FN(GL_PREFIX(fn, fn_alt)); \ +GL_PREFIX(fn, fn_alt): \ + CALL(get_dispatch) ; \ + NOP ; \ + JMP(GL_OFFSET(off)) + +#elif defined(PTHREADS) # define GL_STUB(fn,off,fn_alt) \ ALIGNTEXT16; \ GLOBL_FN(GL_PREFIX(fn, fn_alt)); \ @@ -88,9 +98,25 @@ JMP(GL_OFFSET(off)) #endif +#ifdef HAVE_ALIAS +# define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt) \ + .globl GL_PREFIX(fn, fn_alt) ; \ + .set GL_PREFIX(fn, fn_alt), GL_PREFIX(alias, alias_alt) +#else +# define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt) \ + GL_STUB(fn, off, fn_alt) +#endif + SEG_TEXT -#ifdef PTHREADS +#ifdef GLX_USE_TLS + +ALIGNTEXT16 +GLNAME(get_dispatch): + movl %gs:_glapi_tls_Dispatch@NTPOFF, %eax + ret + +#elif defined(PTHREADS) EXTERN GLNAME(_glapi_Dispatch) EXTERN GLNAME(_gl_DispatchTSD) EXTERN GLNAME(pthread_getspecific) @@ -862,212 +888,225 @@ GL_STUB(BindAttribLocationARB, _gloffset_BindAttribLocationARB, BindAttribLocationARB@12) GL_STUB(GetActiveAttribARB, _gloffset_GetActiveAttribARB, GetActiveAttribARB@28) GL_STUB(GetAttribLocationARB, _gloffset_GetAttribLocationARB, GetAttribLocationARB@8) - GL_STUB(ActiveTexture, _gloffset_ActiveTextureARB, ActiveTexture@4) - GL_STUB(ClientActiveTexture, _gloffset_ClientActiveTextureARB, ClientActiveTexture@4) - GL_STUB(MultiTexCoord1d, _gloffset_MultiTexCoord1dARB, MultiTexCoord1d@12) - GL_STUB(MultiTexCoord1dv, _gloffset_MultiTexCoord1dvARB, MultiTexCoord1dv@8) - GL_STUB(MultiTexCoord1f, _gloffset_MultiTexCoord1fARB, MultiTexCoord1f@8) - GL_STUB(MultiTexCoord1fv, _gloffset_MultiTexCoord1fvARB, MultiTexCoord1fv@8) - GL_STUB(MultiTexCoord1i, _gloffset_MultiTexCoord1iARB, MultiTexCoord1i@8) - GL_STUB(MultiTexCoord1iv, _gloffset_MultiTexCoord1ivARB, MultiTexCoord1iv@8) - GL_STUB(MultiTexCoord1s, _gloffset_MultiTexCoord1sARB, MultiTexCoord1s@8) - GL_STUB(MultiTexCoord1sv, _gloffset_MultiTexCoord1svARB, MultiTexCoord1sv@8) - GL_STUB(MultiTexCoord2d, _gloffset_MultiTexCoord2dARB, MultiTexCoord2d@20) - GL_STUB(MultiTexCoord2dv, _gloffset_MultiTexCoord2dvARB, MultiTexCoord2dv@8) - GL_STUB(MultiTexCoord2f, _gloffset_MultiTexCoord2fARB, MultiTexCoord2f@12) - GL_STUB(MultiTexCoord2fv, _gloffset_MultiTexCoord2fvARB, MultiTexCoord2fv@8) - GL_STUB(MultiTexCoord2i, _gloffset_MultiTexCoord2iARB, MultiTexCoord2i@12) - GL_STUB(MultiTexCoord2iv, _gloffset_MultiTexCoord2ivARB, MultiTexCoord2iv@8) - GL_STUB(MultiTexCoord2s, _gloffset_MultiTexCoord2sARB, MultiTexCoord2s@12) - GL_STUB(MultiTexCoord2sv, _gloffset_MultiTexCoord2svARB, MultiTexCoord2sv@8) - GL_STUB(MultiTexCoord3d, _gloffset_MultiTexCoord3dARB, MultiTexCoord3d@28) - GL_STUB(MultiTexCoord3dv, _gloffset_MultiTexCoord3dvARB, MultiTexCoord3dv@8) - GL_STUB(MultiTexCoord3f, _gloffset_MultiTexCoord3fARB, MultiTexCoord3f@16) - GL_STUB(MultiTexCoord3fv, _gloffset_MultiTexCoord3fvARB, MultiTexCoord3fv@8) - GL_STUB(MultiTexCoord3i, _gloffset_MultiTexCoord3iARB, MultiTexCoord3i@16) - GL_STUB(MultiTexCoord3iv, _gloffset_MultiTexCoord3ivARB, MultiTexCoord3iv@8) - GL_STUB(MultiTexCoord3s, _gloffset_MultiTexCoord3sARB, MultiTexCoord3s@16) - GL_STUB(MultiTexCoord3sv, _gloffset_MultiTexCoord3svARB, MultiTexCoord3sv@8) - GL_STUB(MultiTexCoord4d, _gloffset_MultiTexCoord4dARB, MultiTexCoord4d@36) - GL_STUB(MultiTexCoord4dv, _gloffset_MultiTexCoord4dvARB, MultiTexCoord4dv@8) - GL_STUB(MultiTexCoord4f, _gloffset_MultiTexCoord4fARB, MultiTexCoord4f@20) - GL_STUB(MultiTexCoord4fv, _gloffset_MultiTexCoord4fvARB, MultiTexCoord4fv@8) - GL_STUB(MultiTexCoord4i, _gloffset_MultiTexCoord4iARB, MultiTexCoord4i@20) - GL_STUB(MultiTexCoord4iv, _gloffset_MultiTexCoord4ivARB, MultiTexCoord4iv@8) - GL_STUB(MultiTexCoord4s, _gloffset_MultiTexCoord4sARB, MultiTexCoord4s@20) - GL_STUB(MultiTexCoord4sv, _gloffset_MultiTexCoord4svARB, MultiTexCoord4sv@8) - GL_STUB(LoadTransposeMatrixf, _gloffset_LoadTransposeMatrixfARB, LoadTransposeMatrixf@4) - GL_STUB(LoadTransposeMatrixd, _gloffset_LoadTransposeMatrixdARB, LoadTransposeMatrixd@4) - GL_STUB(MultTransposeMatrixf, _gloffset_MultTransposeMatrixfARB, MultTransposeMatrixf@4) - GL_STUB(MultTransposeMatrixd, _gloffset_MultTransposeMatrixdARB, MultTransposeMatrixd@4) - GL_STUB(SampleCoverage, _gloffset_SampleCoverageARB, SampleCoverage@8) - GL_STUB(CompressedTexImage3D, _gloffset_CompressedTexImage3DARB, CompressedTexImage3D@36) - GL_STUB(CompressedTexImage2D, _gloffset_CompressedTexImage2DARB, CompressedTexImage2D@32) - GL_STUB(CompressedTexImage1D, _gloffset_CompressedTexImage1DARB, CompressedTexImage1D@28) - GL_STUB(CompressedTexSubImage3D, _gloffset_CompressedTexSubImage3DARB, CompressedTexSubImage3D@44) - GL_STUB(CompressedTexSubImage2D, _gloffset_CompressedTexSubImage2DARB, CompressedTexSubImage2D@36) - GL_STUB(CompressedTexSubImage1D, _gloffset_CompressedTexSubImage1DARB, CompressedTexSubImage1D@28) - GL_STUB(GetCompressedTexImage, _gloffset_GetCompressedTexImageARB, GetCompressedTexImage@12) - GL_STUB(BlendFuncSeparate, _gloffset_BlendFuncSeparateEXT, BlendFuncSeparate@16) - GL_STUB(FogCoordf, _gloffset_FogCoordfEXT, FogCoordf@4) - GL_STUB(FogCoordfv, _gloffset_FogCoordfvEXT, FogCoordfv@4) - GL_STUB(FogCoordd, _gloffset_FogCoorddEXT, FogCoordd@8) - GL_STUB(FogCoorddv, _gloffset_FogCoorddvEXT, FogCoorddv@4) - GL_STUB(FogCoordPointer, _gloffset_FogCoordPointerEXT, FogCoordPointer@12) - GL_STUB(MultiDrawArrays, _gloffset_MultiDrawArraysEXT, MultiDrawArrays@16) - GL_STUB(MultiDrawElements, _gloffset_MultiDrawElementsEXT, MultiDrawElements@20) - GL_STUB(PointParameterf, _gloffset_PointParameterfEXT, PointParameterf@8) - GL_STUB(PointParameterfv, _gloffset_PointParameterfvEXT, PointParameterfv@8) - GL_STUB(PointParameteri, _gloffset_PointParameteriNV, PointParameteri@8) - GL_STUB(PointParameteriv, _gloffset_PointParameterivNV, PointParameteriv@8) - GL_STUB(SecondaryColor3b, _gloffset_SecondaryColor3bEXT, SecondaryColor3b@12) - GL_STUB(SecondaryColor3bv, _gloffset_SecondaryColor3bvEXT, SecondaryColor3bv@4) - GL_STUB(SecondaryColor3d, _gloffset_SecondaryColor3dEXT, SecondaryColor3d@24) - GL_STUB(SecondaryColor3dv, _gloffset_SecondaryColor3dvEXT, SecondaryColor3dv@4) - GL_STUB(SecondaryColor3f, _gloffset_SecondaryColor3fEXT, SecondaryColor3f@12) - GL_STUB(SecondaryColor3fv, _gloffset_SecondaryColor3fvEXT, SecondaryColor3fv@4) - GL_STUB(SecondaryColor3i, _gloffset_SecondaryColor3iEXT, SecondaryColor3i@12) - GL_STUB(SecondaryColor3iv, _gloffset_SecondaryColor3ivEXT, SecondaryColor3iv@4) - GL_STUB(SecondaryColor3s, _gloffset_SecondaryColor3sEXT, SecondaryColor3s@12) - GL_STUB(SecondaryColor3sv, _gloffset_SecondaryColor3svEXT, SecondaryColor3sv@4) - GL_STUB(SecondaryColor3ub, _gloffset_SecondaryColor3ubEXT, SecondaryColor3ub@12) - GL_STUB(SecondaryColor3ubv, _gloffset_SecondaryColor3ubvEXT, SecondaryColor3ubv@4) - GL_STUB(SecondaryColor3ui, _gloffset_SecondaryColor3uiEXT, SecondaryColor3ui@12) - GL_STUB(SecondaryColor3uiv, _gloffset_SecondaryColor3uivEXT, SecondaryColor3uiv@4) - GL_STUB(SecondaryColor3us, _gloffset_SecondaryColor3usEXT, SecondaryColor3us@12) - GL_STUB(SecondaryColor3usv, _gloffset_SecondaryColor3usvEXT, SecondaryColor3usv@4) - GL_STUB(SecondaryColorPointer, _gloffset_SecondaryColorPointerEXT, SecondaryColorPointer@16) - GL_STUB(WindowPos2d, _gloffset_WindowPos2dMESA, WindowPos2d@16) - GL_STUB(WindowPos2dv, _gloffset_WindowPos2dvMESA, WindowPos2dv@4) - GL_STUB(WindowPos2f, _gloffset_WindowPos2fMESA, WindowPos2f@8) - GL_STUB(WindowPos2fv, _gloffset_WindowPos2fvMESA, WindowPos2fv@4) - GL_STUB(WindowPos2i, _gloffset_WindowPos2iMESA, WindowPos2i@8) - GL_STUB(WindowPos2iv, _gloffset_WindowPos2ivMESA, WindowPos2iv@4) - GL_STUB(WindowPos2s, _gloffset_WindowPos2sMESA, WindowPos2s@8) - GL_STUB(WindowPos2sv, _gloffset_WindowPos2svMESA, WindowPos2sv@4) - GL_STUB(WindowPos3d, _gloffset_WindowPos3dMESA, WindowPos3d@24) - GL_STUB(WindowPos3dv, _gloffset_WindowPos3dvMESA, WindowPos3dv@4) - GL_STUB(WindowPos3f, _gloffset_WindowPos3fMESA, WindowPos3f@12) - GL_STUB(WindowPos3fv, _gloffset_WindowPos3fvMESA, WindowPos3fv@4) - GL_STUB(WindowPos3i, _gloffset_WindowPos3iMESA, WindowPos3i@12) - GL_STUB(WindowPos3iv, _gloffset_WindowPos3ivMESA, WindowPos3iv@4) - GL_STUB(WindowPos3s, _gloffset_WindowPos3sMESA, WindowPos3s@12) - GL_STUB(WindowPos3sv, _gloffset_WindowPos3svMESA, WindowPos3sv@4) - GL_STUB(BindBuffer, _gloffset_BindBufferARB, BindBuffer@8) - GL_STUB(BufferData, _gloffset_BufferDataARB, BufferData@16) - GL_STUB(BufferSubData, _gloffset_BufferSubDataARB, BufferSubData@16) - GL_STUB(DeleteBuffers, _gloffset_DeleteBuffersARB, DeleteBuffers@8) - GL_STUB(GenBuffers, _gloffset_GenBuffersARB, GenBuffers@8) - GL_STUB(GetBufferParameteriv, _gloffset_GetBufferParameterivARB, GetBufferParameteriv@12) - GL_STUB(GetBufferPointerv, _gloffset_GetBufferPointervARB, GetBufferPointerv@12) - GL_STUB(GetBufferSubData, _gloffset_GetBufferSubDataARB, GetBufferSubData@16) - GL_STUB(IsBuffer, _gloffset_IsBufferARB, IsBuffer@4) - GL_STUB(MapBuffer, _gloffset_MapBufferARB, MapBuffer@8) - GL_STUB(UnmapBuffer, _gloffset_UnmapBufferARB, UnmapBuffer@4) - GL_STUB(GenQueries, _gloffset_GenQueriesARB, GenQueries@8) - GL_STUB(DeleteQueries, _gloffset_DeleteQueriesARB, DeleteQueries@8) - GL_STUB(IsQuery, _gloffset_IsQueryARB, IsQuery@4) - GL_STUB(BeginQuery, _gloffset_BeginQueryARB, BeginQuery@8) - GL_STUB(EndQuery, _gloffset_EndQueryARB, EndQuery@4) - GL_STUB(GetQueryiv, _gloffset_GetQueryivARB, GetQueryiv@12) - GL_STUB(GetQueryObjectiv, _gloffset_GetQueryObjectivARB, GetQueryObjectiv@12) - GL_STUB(GetQueryObjectuiv, _gloffset_GetQueryObjectuivARB, GetQueryObjectuiv@12) - GL_STUB(PointParameterfARB, _gloffset_PointParameterfEXT, PointParameterfARB@8) - GL_STUB(PointParameterfvARB, _gloffset_PointParameterfvEXT, PointParameterfvARB@8) - GL_STUB(WindowPos2dARB, _gloffset_WindowPos2dMESA, WindowPos2dARB@16) - GL_STUB(WindowPos2fARB, _gloffset_WindowPos2fMESA, WindowPos2fARB@8) - GL_STUB(WindowPos2iARB, _gloffset_WindowPos2iMESA, WindowPos2iARB@8) - GL_STUB(WindowPos2sARB, _gloffset_WindowPos2sMESA, WindowPos2sARB@8) - GL_STUB(WindowPos2dvARB, _gloffset_WindowPos2dvMESA, WindowPos2dvARB@4) - GL_STUB(WindowPos2fvARB, _gloffset_WindowPos2fvMESA, WindowPos2fvARB@4) - GL_STUB(WindowPos2ivARB, _gloffset_WindowPos2ivMESA, WindowPos2ivARB@4) - GL_STUB(WindowPos2svARB, _gloffset_WindowPos2svMESA, WindowPos2svARB@4) - GL_STUB(WindowPos3dARB, _gloffset_WindowPos3dMESA, WindowPos3dARB@24) - GL_STUB(WindowPos3fARB, _gloffset_WindowPos3fMESA, WindowPos3fARB@12) - GL_STUB(WindowPos3iARB, _gloffset_WindowPos3iMESA, WindowPos3iARB@12) - GL_STUB(WindowPos3sARB, _gloffset_WindowPos3sMESA, WindowPos3sARB@12) - GL_STUB(WindowPos3dvARB, _gloffset_WindowPos3dvMESA, WindowPos3dvARB@4) - GL_STUB(WindowPos3fvARB, _gloffset_WindowPos3fvMESA, WindowPos3fvARB@4) - GL_STUB(WindowPos3ivARB, _gloffset_WindowPos3ivMESA, WindowPos3ivARB@4) - GL_STUB(WindowPos3svARB, _gloffset_WindowPos3svMESA, WindowPos3svARB@4) - GL_STUB(VertexAttrib1sARB, _gloffset_VertexAttrib1sNV, VertexAttrib1sARB@8) - GL_STUB(VertexAttrib1fARB, _gloffset_VertexAttrib1fNV, VertexAttrib1fARB@8) - GL_STUB(VertexAttrib1dARB, _gloffset_VertexAttrib1dNV, VertexAttrib1dARB@12) - GL_STUB(VertexAttrib2sARB, _gloffset_VertexAttrib2sNV, VertexAttrib2sARB@12) - GL_STUB(VertexAttrib2fARB, _gloffset_VertexAttrib2fNV, VertexAttrib2fARB@12) - GL_STUB(VertexAttrib2dARB, _gloffset_VertexAttrib2dNV, VertexAttrib2dARB@20) - GL_STUB(VertexAttrib3sARB, _gloffset_VertexAttrib3sNV, VertexAttrib3sARB@16) - GL_STUB(VertexAttrib3fARB, _gloffset_VertexAttrib3fNV, VertexAttrib3fARB@16) - GL_STUB(VertexAttrib3dARB, _gloffset_VertexAttrib3dNV, VertexAttrib3dARB@28) - GL_STUB(VertexAttrib4sARB, _gloffset_VertexAttrib4sNV, VertexAttrib4sARB@20) - GL_STUB(VertexAttrib4fARB, _gloffset_VertexAttrib4fNV, VertexAttrib4fARB@20) - GL_STUB(VertexAttrib4dARB, _gloffset_VertexAttrib4dNV, VertexAttrib4dARB@36) - GL_STUB(VertexAttrib4NubARB, _gloffset_VertexAttrib4ubNV, VertexAttrib4NubARB@20) - GL_STUB(VertexAttrib1svARB, _gloffset_VertexAttrib1svNV, VertexAttrib1svARB@8) - GL_STUB(VertexAttrib1fvARB, _gloffset_VertexAttrib1fvNV, VertexAttrib1fvARB@8) - GL_STUB(VertexAttrib1dvARB, _gloffset_VertexAttrib1dvNV, VertexAttrib1dvARB@8) - GL_STUB(VertexAttrib2svARB, _gloffset_VertexAttrib2svNV, VertexAttrib2svARB@8) - GL_STUB(VertexAttrib2fvARB, _gloffset_VertexAttrib2fvNV, VertexAttrib2fvARB@8) - GL_STUB(VertexAttrib2dvARB, _gloffset_VertexAttrib2dvNV, VertexAttrib2dvARB@8) - GL_STUB(VertexAttrib3svARB, _gloffset_VertexAttrib3svNV, VertexAttrib3svARB@8) - GL_STUB(VertexAttrib3fvARB, _gloffset_VertexAttrib3fvNV, VertexAttrib3fvARB@8) - GL_STUB(VertexAttrib3dvARB, _gloffset_VertexAttrib3dvNV, VertexAttrib3dvARB@8) - GL_STUB(VertexAttrib4svARB, _gloffset_VertexAttrib4svNV, VertexAttrib4svARB@8) - GL_STUB(VertexAttrib4fvARB, _gloffset_VertexAttrib4fvNV, VertexAttrib4fvARB@8) - GL_STUB(VertexAttrib4dvARB, _gloffset_VertexAttrib4dvNV, VertexAttrib4dvARB@8) - GL_STUB(VertexAttrib4NubvARB, _gloffset_VertexAttrib4ubvNV, VertexAttrib4NubvARB@8) - GL_STUB(BindProgramARB, _gloffset_BindProgramNV, BindProgramARB@8) - GL_STUB(DeleteProgramsARB, _gloffset_DeleteProgramsNV, DeleteProgramsARB@8) - GL_STUB(GenProgramsARB, _gloffset_GenProgramsNV, GenProgramsARB@8) - GL_STUB(IsProgramARB, _gloffset_IsProgramNV, IsProgramARB@4) - GL_STUB(GetVertexAttribdvARB, _gloffset_GetVertexAttribdvNV, GetVertexAttribdvARB@12) - GL_STUB(GetVertexAttribfvARB, _gloffset_GetVertexAttribfvNV, GetVertexAttribfvARB@12) - GL_STUB(GetVertexAttribivARB, _gloffset_GetVertexAttribivNV, GetVertexAttribivARB@12) - GL_STUB(GetVertexAttribPointervARB, _gloffset_GetVertexAttribPointervNV, GetVertexAttribPointervARB@12) - GL_STUB(BlendColorEXT, _gloffset_BlendColor, BlendColorEXT@16) - GL_STUB(TexImage3DEXT, _gloffset_TexImage3D, TexImage3DEXT@40) - GL_STUB(TexSubImage3DEXT, _gloffset_TexSubImage3D, TexSubImage3DEXT@44) - GL_STUB(TexSubImage1DEXT, _gloffset_TexSubImage1D, TexSubImage1DEXT@28) - GL_STUB(TexSubImage2DEXT, _gloffset_TexSubImage2D, TexSubImage2DEXT@36) - GL_STUB(CopyTexImage1DEXT, _gloffset_CopyTexImage1D, CopyTexImage1DEXT@28) - GL_STUB(CopyTexImage2DEXT, _gloffset_CopyTexImage2D, CopyTexImage2DEXT@32) - GL_STUB(CopyTexSubImage1DEXT, _gloffset_CopyTexSubImage1D, CopyTexSubImage1DEXT@24) - GL_STUB(CopyTexSubImage2DEXT, _gloffset_CopyTexSubImage2D, CopyTexSubImage2DEXT@32) - GL_STUB(CopyTexSubImage3DEXT, _gloffset_CopyTexSubImage3D, CopyTexSubImage3DEXT@36) - GL_STUB(HistogramEXT, _gloffset_Histogram, HistogramEXT@16) - GL_STUB(MinmaxEXT, _gloffset_Minmax, MinmaxEXT@12) - GL_STUB(ResetHistogramEXT, _gloffset_ResetHistogram, ResetHistogramEXT@4) - GL_STUB(ResetMinmaxEXT, _gloffset_ResetMinmax, ResetMinmaxEXT@4) - GL_STUB(ConvolutionFilter1DEXT, _gloffset_ConvolutionFilter1D, ConvolutionFilter1DEXT@24) - GL_STUB(ConvolutionFilter2DEXT, _gloffset_ConvolutionFilter2D, ConvolutionFilter2DEXT@28) - GL_STUB(ConvolutionParameterfEXT, _gloffset_ConvolutionParameterf, ConvolutionParameterfEXT@12) - GL_STUB(ConvolutionParameterfvEXT, _gloffset_ConvolutionParameterfv, ConvolutionParameterfvEXT@12) - GL_STUB(ConvolutionParameteriEXT, _gloffset_ConvolutionParameteri, ConvolutionParameteriEXT@12) - GL_STUB(ConvolutionParameterivEXT, _gloffset_ConvolutionParameteriv, ConvolutionParameterivEXT@12) - GL_STUB(CopyConvolutionFilter1DEXT, _gloffset_CopyConvolutionFilter1D, CopyConvolutionFilter1DEXT@20) - GL_STUB(CopyConvolutionFilter2DEXT, _gloffset_CopyConvolutionFilter2D, CopyConvolutionFilter2DEXT@24) - GL_STUB(SeparableFilter2DEXT, _gloffset_SeparableFilter2D, SeparableFilter2DEXT@32) - GL_STUB(ColorTableSGI, _gloffset_ColorTable, ColorTableSGI@24) - GL_STUB(ColorTableParameterfvSGI, _gloffset_ColorTableParameterfv, ColorTableParameterfvSGI@12) - GL_STUB(ColorTableParameterivSGI, _gloffset_ColorTableParameteriv, ColorTableParameterivSGI@12) - GL_STUB(CopyColorTableSGI, _gloffset_CopyColorTable, CopyColorTableSGI@20) - GL_STUB(BindTextureEXT, _gloffset_BindTexture, BindTextureEXT@8) - GL_STUB(DeleteTexturesEXT, _gloffset_DeleteTextures, DeleteTexturesEXT@8) - GL_STUB(PrioritizeTexturesEXT, _gloffset_PrioritizeTextures, PrioritizeTexturesEXT@12) - GL_STUB(ArrayElementEXT, _gloffset_ArrayElement, ArrayElementEXT@4) - GL_STUB(DrawArraysEXT, _gloffset_DrawArrays, DrawArraysEXT@12) - GL_STUB(GetPointervEXT, _gloffset_GetPointerv, GetPointervEXT@8) - GL_STUB(BlendEquationEXT, _gloffset_BlendEquation, BlendEquationEXT@4) - GL_STUB(ColorSubTableEXT, _gloffset_ColorSubTable, ColorSubTableEXT@24) - GL_STUB(CopyColorSubTableEXT, _gloffset_CopyColorSubTable, CopyColorSubTableEXT@20) - GL_STUB(ColorTableEXT, _gloffset_ColorTable, ColorTableEXT@24) - GL_STUB(DrawRangeElementsEXT, _gloffset_DrawRangeElements, DrawRangeElementsEXT@24) - GL_STUB(SampleMaskEXT, _gloffset_SampleMaskSGIS, SampleMaskEXT@8) - GL_STUB(SamplePatternEXT, _gloffset_SamplePatternSGIS, SamplePatternEXT@4) - GL_STUB(DrawBuffersATI, _gloffset_DrawBuffersARB, DrawBuffersATI@8) - GL_STUB(BlendEquationSeparateATI, _gloffset_BlendEquationSeparateEXT, BlendEquationSeparateATI@8) - GL_STUB(BlendFuncSeparateINGR, _gloffset_BlendFuncSeparateEXT, BlendFuncSeparateINGR@16) - GL_STUB(PointParameterfSGIS, _gloffset_PointParameterfEXT, PointParameterfSGIS@8) - GL_STUB(PointParameterfvSGIS, _gloffset_PointParameterfvEXT, PointParameterfvSGIS@8) + GL_STUB_ALIAS(ActiveTexture, _gloffset_ActiveTextureARB, ActiveTexture@4, ActiveTextureARB, ActiveTextureARB@4) + GL_STUB_ALIAS(ClientActiveTexture, _gloffset_ClientActiveTextureARB, ClientActiveTexture@4, ClientActiveTextureARB, ClientActiveTextureARB@4) + GL_STUB_ALIAS(MultiTexCoord1d, _gloffset_MultiTexCoord1dARB, MultiTexCoord1d@12, MultiTexCoord1dARB, MultiTexCoord1dARB@12) + GL_STUB_ALIAS(MultiTexCoord1dv, _gloffset_MultiTexCoord1dvARB, MultiTexCoord1dv@8, MultiTexCoord1dvARB, MultiTexCoord1dvARB@8) + GL_STUB_ALIAS(MultiTexCoord1f, _gloffset_MultiTexCoord1fARB, MultiTexCoord1f@8, MultiTexCoord1fARB, MultiTexCoord1fARB@8) + GL_STUB_ALIAS(MultiTexCoord1fv, _gloffset_MultiTexCoord1fvARB, MultiTexCoord1fv@8, MultiTexCoord1fvARB, MultiTexCoord1fvARB@8) + GL_STUB_ALIAS(MultiTexCoord1i, _gloffset_MultiTexCoord1iARB, MultiTexCoord1i@8, MultiTexCoord1iARB, MultiTexCoord1iARB@8) + GL_STUB_ALIAS(MultiTexCoord1iv, _gloffset_MultiTexCoord1ivARB, MultiTexCoord1iv@8, MultiTexCoord1ivARB, MultiTexCoord1ivARB@8) + GL_STUB_ALIAS(MultiTexCoord1s, _gloffset_MultiTexCoord1sARB, MultiTexCoord1s@8, MultiTexCoord1sARB, MultiTexCoord1sARB@8) + GL_STUB_ALIAS(MultiTexCoord1sv, _gloffset_MultiTexCoord1svARB, MultiTexCoord1sv@8, MultiTexCoord1svARB, MultiTexCoord1svARB@8) + GL_STUB_ALIAS(MultiTexCoord2d, _gloffset_MultiTexCoord2dARB, MultiTexCoord2d@20, MultiTexCoord2dARB, MultiTexCoord2dARB@20) + GL_STUB_ALIAS(MultiTexCoord2dv, _gloffset_MultiTexCoord2dvARB, MultiTexCoord2dv@8, MultiTexCoord2dvARB, MultiTexCoord2dvARB@8) + GL_STUB_ALIAS(MultiTexCoord2f, _gloffset_MultiTexCoord2fARB, MultiTexCoord2f@12, MultiTexCoord2fARB, MultiTexCoord2fARB@12) + GL_STUB_ALIAS(MultiTexCoord2fv, _gloffset_MultiTexCoord2fvARB, MultiTexCoord2fv@8, MultiTexCoord2fvARB, MultiTexCoord2fvARB@8) + GL_STUB_ALIAS(MultiTexCoord2i, _gloffset_MultiTexCoord2iARB, MultiTexCoord2i@12, MultiTexCoord2iARB, MultiTexCoord2iARB@12) + GL_STUB_ALIAS(MultiTexCoord2iv, _gloffset_MultiTexCoord2ivARB, MultiTexCoord2iv@8, MultiTexCoord2ivARB, MultiTexCoord2ivARB@8) + GL_STUB_ALIAS(MultiTexCoord2s, _gloffset_MultiTexCoord2sARB, MultiTexCoord2s@12, MultiTexCoord2sARB, MultiTexCoord2sARB@12) + GL_STUB_ALIAS(MultiTexCoord2sv, _gloffset_MultiTexCoord2svARB, MultiTexCoord2sv@8, MultiTexCoord2svARB, MultiTexCoord2svARB@8) + GL_STUB_ALIAS(MultiTexCoord3d, _gloffset_MultiTexCoord3dARB, MultiTexCoord3d@28, MultiTexCoord3dARB, MultiTexCoord3dARB@28) + GL_STUB_ALIAS(MultiTexCoord3dv, _gloffset_MultiTexCoord3dvARB, MultiTexCoord3dv@8, MultiTexCoord3dvARB, MultiTexCoord3dvARB@8) + GL_STUB_ALIAS(MultiTexCoord3f, _gloffset_MultiTexCoord3fARB, MultiTexCoord3f@16, MultiTexCoord3fARB, MultiTexCoord3fARB@16) + GL_STUB_ALIAS(MultiTexCoord3fv, _gloffset_MultiTexCoord3fvARB, MultiTexCoord3fv@8, MultiTexCoord3fvARB, MultiTexCoord3fvARB@8) + GL_STUB_ALIAS(MultiTexCoord3i, _gloffset_MultiTexCoord3iARB, MultiTexCoord3i@16, MultiTexCoord3iARB, MultiTexCoord3iARB@16) + GL_STUB_ALIAS(MultiTexCoord3iv, _gloffset_MultiTexCoord3ivARB, MultiTexCoord3iv@8, MultiTexCoord3ivARB, MultiTexCoord3ivARB@8) + GL_STUB_ALIAS(MultiTexCoord3s, _gloffset_MultiTexCoord3sARB, MultiTexCoord3s@16, MultiTexCoord3sARB, MultiTexCoord3sARB@16) + GL_STUB_ALIAS(MultiTexCoord3sv, _gloffset_MultiTexCoord3svARB, MultiTexCoord3sv@8, MultiTexCoord3svARB, MultiTexCoord3svARB@8) + GL_STUB_ALIAS(MultiTexCoord4d, _gloffset_MultiTexCoord4dARB, MultiTexCoord4d@36, MultiTexCoord4dARB, MultiTexCoord4dARB@36) + GL_STUB_ALIAS(MultiTexCoord4dv, _gloffset_MultiTexCoord4dvARB, MultiTexCoord4dv@8, MultiTexCoord4dvARB, MultiTexCoord4dvARB@8) + GL_STUB_ALIAS(MultiTexCoord4f, _gloffset_MultiTexCoord4fARB, MultiTexCoord4f@20, MultiTexCoord4fARB, MultiTexCoord4fARB@20) + GL_STUB_ALIAS(MultiTexCoord4fv, _gloffset_MultiTexCoord4fvARB, MultiTexCoord4fv@8, MultiTexCoord4fvARB, MultiTexCoord4fvARB@8) + GL_STUB_ALIAS(MultiTexCoord4i, _gloffset_MultiTexCoord4iARB, MultiTexCoord4i@20, MultiTexCoord4iARB, MultiTexCoord4iARB@20) + GL_STUB_ALIAS(MultiTexCoord4iv, _gloffset_MultiTexCoord4ivARB, MultiTexCoord4iv@8, MultiTexCoord4ivARB, MultiTexCoord4ivARB@8) + GL_STUB_ALIAS(MultiTexCoord4s, _gloffset_MultiTexCoord4sARB, MultiTexCoord4s@20, MultiTexCoord4sARB, MultiTexCoord4sARB@20) + GL_STUB_ALIAS(MultiTexCoord4sv, _gloffset_MultiTexCoord4svARB, MultiTexCoord4sv@8, MultiTexCoord4svARB, MultiTexCoord4svARB@8) + GL_STUB_ALIAS(LoadTransposeMatrixf, _gloffset_LoadTransposeMatrixfARB, LoadTransposeMatrixf@4, LoadTransposeMatrixfARB, LoadTransposeMatrixfARB@4) + GL_STUB_ALIAS(LoadTransposeMatrixd, _gloffset_LoadTransposeMatrixdARB, LoadTransposeMatrixd@4, LoadTransposeMatrixdARB, LoadTransposeMatrixdARB@4) + GL_STUB_ALIAS(MultTransposeMatrixf, _gloffset_MultTransposeMatrixfARB, MultTransposeMatrixf@4, MultTransposeMatrixfARB, MultTransposeMatrixfARB@4) + GL_STUB_ALIAS(MultTransposeMatrixd, _gloffset_MultTransposeMatrixdARB, MultTransposeMatrixd@4, MultTransposeMatrixdARB, MultTransposeMatrixdARB@4) + GL_STUB_ALIAS(SampleCoverage, _gloffset_SampleCoverageARB, SampleCoverage@8, SampleCoverageARB, SampleCoverageARB@8) + GL_STUB_ALIAS(CompressedTexImage3D, _gloffset_CompressedTexImage3DARB, CompressedTexImage3D@36, CompressedTexImage3DARB, CompressedTexImage3DARB@36) + GL_STUB_ALIAS(CompressedTexImage2D, _gloffset_CompressedTexImage2DARB, CompressedTexImage2D@32, CompressedTexImage2DARB, CompressedTexImage2DARB@32) + GL_STUB_ALIAS(CompressedTexImage1D, _gloffset_CompressedTexImage1DARB, CompressedTexImage1D@28, CompressedTexImage1DARB, CompressedTexImage1DARB@28) + GL_STUB_ALIAS(CompressedTexSubImage3D, _gloffset_CompressedTexSubImage3DARB, CompressedTexSubImage3D@44, CompressedTexSubImage3DARB, CompressedTexSubImage3DARB@44) + GL_STUB_ALIAS(CompressedTexSubImage2D, _gloffset_CompressedTexSubImage2DARB, CompressedTexSubImage2D@36, CompressedTexSubImage2DARB, CompressedTexSubImage2DARB@36) + GL_STUB_ALIAS(CompressedTexSubImage1D, _gloffset_CompressedTexSubImage1DARB, CompressedTexSubImage1D@28, CompressedTexSubImage1DARB, CompressedTexSubImage1DARB@28) + GL_STUB_ALIAS(GetCompressedTexImage, _gloffset_GetCompressedTexImageARB, GetCompressedTexImage@12, GetCompressedTexImageARB, GetCompressedTexImageARB@12) + GL_STUB_ALIAS(BlendFuncSeparate, _gloffset_BlendFuncSeparateEXT, BlendFuncSeparate@16, BlendFuncSeparateEXT, BlendFuncSeparateEXT@16) + GL_STUB_ALIAS(FogCoordf, _gloffset_FogCoordfEXT, FogCoordf@4, FogCoordfEXT, FogCoordfEXT@4) + GL_STUB_ALIAS(FogCoordfv, _gloffset_FogCoordfvEXT, FogCoordfv@4, FogCoordfvEXT, FogCoordfvEXT@4) + GL_STUB_ALIAS(FogCoordd, _gloffset_FogCoorddEXT, FogCoordd@8, FogCoorddEXT, FogCoorddEXT@8) + GL_STUB_ALIAS(FogCoorddv, _gloffset_FogCoorddvEXT, FogCoorddv@4, FogCoorddvEXT, FogCoorddvEXT@4) + GL_STUB_ALIAS(FogCoordPointer, _gloffset_FogCoordPointerEXT, FogCoordPointer@12, FogCoordPointerEXT, FogCoordPointerEXT@12) + GL_STUB_ALIAS(MultiDrawArrays, _gloffset_MultiDrawArraysEXT, MultiDrawArrays@16, MultiDrawArraysEXT, MultiDrawArraysEXT@16) + GL_STUB_ALIAS(MultiDrawElements, _gloffset_MultiDrawElementsEXT, MultiDrawElements@20, MultiDrawElementsEXT, MultiDrawElementsEXT@20) + GL_STUB_ALIAS(PointParameterf, _gloffset_PointParameterfEXT, PointParameterf@8, PointParameterfEXT, PointParameterfEXT@8) + GL_STUB_ALIAS(PointParameterfv, _gloffset_PointParameterfvEXT, PointParameterfv@8, PointParameterfvEXT, PointParameterfvEXT@8) + GL_STUB_ALIAS(PointParameteri, _gloffset_PointParameteriNV, PointParameteri@8, PointParameteriNV, PointParameteriNV@8) + GL_STUB_ALIAS(PointParameteriv, _gloffset_PointParameterivNV, PointParameteriv@8, PointParameterivNV, PointParameterivNV@8) + GL_STUB_ALIAS(SecondaryColor3b, _gloffset_SecondaryColor3bEXT, SecondaryColor3b@12, SecondaryColor3bEXT, SecondaryColor3bEXT@12) + GL_STUB_ALIAS(SecondaryColor3bv, _gloffset_SecondaryColor3bvEXT, SecondaryColor3bv@4, SecondaryColor3bvEXT, SecondaryColor3bvEXT@4) + GL_STUB_ALIAS(SecondaryColor3d, _gloffset_SecondaryColor3dEXT, SecondaryColor3d@24, SecondaryColor3dEXT, SecondaryColor3dEXT@24) + GL_STUB_ALIAS(SecondaryColor3dv, _gloffset_SecondaryColor3dvEXT, SecondaryColor3dv@4, SecondaryColor3dvEXT, SecondaryColor3dvEXT@4) + GL_STUB_ALIAS(SecondaryColor3f, _gloffset_SecondaryColor3fEXT, SecondaryColor3f@12, SecondaryColor3fEXT, SecondaryColor3fEXT@12) + GL_STUB_ALIAS(SecondaryColor3fv, _gloffset_SecondaryColor3fvEXT, SecondaryColor3fv@4, SecondaryColor3fvEXT, SecondaryColor3fvEXT@4) + GL_STUB_ALIAS(SecondaryColor3i, _gloffset_SecondaryColor3iEXT, SecondaryColor3i@12, SecondaryColor3iEXT, SecondaryColor3iEXT@12) + GL_STUB_ALIAS(SecondaryColor3iv, _gloffset_SecondaryColor3ivEXT, SecondaryColor3iv@4, SecondaryColor3ivEXT, SecondaryColor3ivEXT@4) + GL_STUB_ALIAS(SecondaryColor3s, _gloffset_SecondaryColor3sEXT, SecondaryColor3s@12, SecondaryColor3sEXT, SecondaryColor3sEXT@12) + GL_STUB_ALIAS(SecondaryColor3sv, _gloffset_SecondaryColor3svEXT, SecondaryColor3sv@4, SecondaryColor3svEXT, SecondaryColor3svEXT@4) + GL_STUB_ALIAS(SecondaryColor3ub, _gloffset_SecondaryColor3ubEXT, SecondaryColor3ub@12, SecondaryColor3ubEXT, SecondaryColor3ubEXT@12) + GL_STUB_ALIAS(SecondaryColor3ubv, _gloffset_SecondaryColor3ubvEXT, SecondaryColor3ubv@4, SecondaryColor3ubvEXT, SecondaryColor3ubvEXT@4) + GL_STUB_ALIAS(SecondaryColor3ui, _gloffset_SecondaryColor3uiEXT, SecondaryColor3ui@12, SecondaryColor3uiEXT, SecondaryColor3uiEXT@12) + GL_STUB_ALIAS(SecondaryColor3uiv, _gloffset_SecondaryColor3uivEXT, SecondaryColor3uiv@4, SecondaryColor3uivEXT, SecondaryColor3uivEXT@4) + GL_STUB_ALIAS(SecondaryColor3us, _gloffset_SecondaryColor3usEXT, SecondaryColor3us@12, SecondaryColor3usEXT, SecondaryColor3usEXT@12) + GL_STUB_ALIAS(SecondaryColor3usv, _gloffset_SecondaryColor3usvEXT, SecondaryColor3usv@4, SecondaryColor3usvEXT, SecondaryColor3usvEXT@4) + GL_STUB_ALIAS(SecondaryColorPointer, _gloffset_SecondaryColorPointerEXT, SecondaryColorPointer@16, SecondaryColorPointerEXT, SecondaryColorPointerEXT@16) + GL_STUB_ALIAS(WindowPos2d, _gloffset_WindowPos2dMESA, WindowPos2d@16, WindowPos2dMESA, WindowPos2dMESA@16) + GL_STUB_ALIAS(WindowPos2dv, _gloffset_WindowPos2dvMESA, WindowPos2dv@4, WindowPos2dvMESA, WindowPos2dvMESA@4) + GL_STUB_ALIAS(WindowPos2f, _gloffset_WindowPos2fMESA, WindowPos2f@8, WindowPos2fMESA, WindowPos2fMESA@8) + GL_STUB_ALIAS(WindowPos2fv, _gloffset_WindowPos2fvMESA, WindowPos2fv@4, WindowPos2fvMESA, WindowPos2fvMESA@4) + GL_STUB_ALIAS(WindowPos2i, _gloffset_WindowPos2iMESA, WindowPos2i@8, WindowPos2iMESA, WindowPos2iMESA@8) + GL_STUB_ALIAS(WindowPos2iv, _gloffset_WindowPos2ivMESA, WindowPos2iv@4, WindowPos2ivMESA, WindowPos2ivMESA@4) + GL_STUB_ALIAS(WindowPos2s, _gloffset_WindowPos2sMESA, WindowPos2s@8, WindowPos2sMESA, WindowPos2sMESA@8) + GL_STUB_ALIAS(WindowPos2sv, _gloffset_WindowPos2svMESA, WindowPos2sv@4, WindowPos2svMESA, WindowPos2svMESA@4) + GL_STUB_ALIAS(WindowPos3d, _gloffset_WindowPos3dMESA, WindowPos3d@24, WindowPos3dMESA, WindowPos3dMESA@24) + GL_STUB_ALIAS(WindowPos3dv, _gloffset_WindowPos3dvMESA, WindowPos3dv@4, WindowPos3dvMESA, WindowPos3dvMESA@4) + GL_STUB_ALIAS(WindowPos3f, _gloffset_WindowPos3fMESA, WindowPos3f@12, WindowPos3fMESA, WindowPos3fMESA@12) + GL_STUB_ALIAS(WindowPos3fv, _gloffset_WindowPos3fvMESA, WindowPos3fv@4, WindowPos3fvMESA, WindowPos3fvMESA@4) + GL_STUB_ALIAS(WindowPos3i, _gloffset_WindowPos3iMESA, WindowPos3i@12, WindowPos3iMESA, WindowPos3iMESA@12) + GL_STUB_ALIAS(WindowPos3iv, _gloffset_WindowPos3ivMESA, WindowPos3iv@4, WindowPos3ivMESA, WindowPos3ivMESA@4) + GL_STUB_ALIAS(WindowPos3s, _gloffset_WindowPos3sMESA, WindowPos3s@12, WindowPos3sMESA, WindowPos3sMESA@12) + GL_STUB_ALIAS(WindowPos3sv, _gloffset_WindowPos3svMESA, WindowPos3sv@4, WindowPos3svMESA, WindowPos3svMESA@4) + GL_STUB_ALIAS(BindBuffer, _gloffset_BindBufferARB, BindBuffer@8, BindBufferARB, BindBufferARB@8) + GL_STUB_ALIAS(BufferData, _gloffset_BufferDataARB, BufferData@16, BufferDataARB, BufferDataARB@16) + GL_STUB_ALIAS(BufferSubData, _gloffset_BufferSubDataARB, BufferSubData@16, BufferSubDataARB, BufferSubDataARB@16) + GL_STUB_ALIAS(DeleteBuffers, _gloffset_DeleteBuffersARB, DeleteBuffers@8, DeleteBuffersARB, DeleteBuffersARB@8) + GL_STUB_ALIAS(GenBuffers, _gloffset_GenBuffersARB, GenBuffers@8, GenBuffersARB, GenBuffersARB@8) + GL_STUB_ALIAS(GetBufferParameteriv, _gloffset_GetBufferParameterivARB, GetBufferParameteriv@12, GetBufferParameterivARB, GetBufferParameterivARB@12) + GL_STUB_ALIAS(GetBufferPointerv, _gloffset_GetBufferPointervARB, GetBufferPointerv@12, GetBufferPointervARB, GetBufferPointervARB@12) + GL_STUB_ALIAS(GetBufferSubData, _gloffset_GetBufferSubDataARB, GetBufferSubData@16, GetBufferSubDataARB, GetBufferSubDataARB@16) + GL_STUB_ALIAS(IsBuffer, _gloffset_IsBufferARB, IsBuffer@4, IsBufferARB, IsBufferARB@4) + GL_STUB_ALIAS(MapBuffer, _gloffset_MapBufferARB, MapBuffer@8, MapBufferARB, MapBufferARB@8) + GL_STUB_ALIAS(UnmapBuffer, _gloffset_UnmapBufferARB, UnmapBuffer@4, UnmapBufferARB, UnmapBufferARB@4) + GL_STUB_ALIAS(GenQueries, _gloffset_GenQueriesARB, GenQueries@8, GenQueriesARB, GenQueriesARB@8) + GL_STUB_ALIAS(DeleteQueries, _gloffset_DeleteQueriesARB, DeleteQueries@8, DeleteQueriesARB, DeleteQueriesARB@8) + GL_STUB_ALIAS(IsQuery, _gloffset_IsQueryARB, IsQuery@4, IsQueryARB, IsQueryARB@4) + GL_STUB_ALIAS(BeginQuery, _gloffset_BeginQueryARB, BeginQuery@8, BeginQueryARB, BeginQueryARB@8) + GL_STUB_ALIAS(EndQuery, _gloffset_EndQueryARB, EndQuery@4, EndQueryARB, EndQueryARB@4) + GL_STUB_ALIAS(GetQueryiv, _gloffset_GetQueryivARB, GetQueryiv@12, GetQueryivARB, GetQueryivARB@12) + GL_STUB_ALIAS(GetQueryObjectiv, _gloffset_GetQueryObjectivARB, GetQueryObjectiv@12, GetQueryObjectivARB, GetQueryObjectivARB@12) + GL_STUB_ALIAS(GetQueryObjectuiv, _gloffset_GetQueryObjectuivARB, GetQueryObjectuiv@12, GetQueryObjectuivARB, GetQueryObjectuivARB@12) + GL_STUB_ALIAS(PointParameterfARB, _gloffset_PointParameterfEXT, PointParameterfARB@8, PointParameterfEXT, PointParameterfEXT@8) + GL_STUB_ALIAS(PointParameterfvARB, _gloffset_PointParameterfvEXT, PointParameterfvARB@8, PointParameterfvEXT, PointParameterfvEXT@8) + GL_STUB_ALIAS(WindowPos2dARB, _gloffset_WindowPos2dMESA, WindowPos2dARB@16, WindowPos2dMESA, WindowPos2dMESA@16) + GL_STUB_ALIAS(WindowPos2fARB, _gloffset_WindowPos2fMESA, WindowPos2fARB@8, WindowPos2fMESA, WindowPos2fMESA@8) + GL_STUB_ALIAS(WindowPos2iARB, _gloffset_WindowPos2iMESA, WindowPos2iARB@8, WindowPos2iMESA, WindowPos2iMESA@8) + GL_STUB_ALIAS(WindowPos2sARB, _gloffset_WindowPos2sMESA, WindowPos2sARB@8, WindowPos2sMESA, WindowPos2sMESA@8) + GL_STUB_ALIAS(WindowPos2dvARB, _gloffset_WindowPos2dvMESA, WindowPos2dvARB@4, WindowPos2dvMESA, WindowPos2dvMESA@4) + GL_STUB_ALIAS(WindowPos2fvARB, _gloffset_WindowPos2fvMESA, WindowPos2fvARB@4, WindowPos2fvMESA, WindowPos2fvMESA@4) + GL_STUB_ALIAS(WindowPos2ivARB, _gloffset_WindowPos2ivMESA, WindowPos2ivARB@4, WindowPos2ivMESA, WindowPos2ivMESA@4) + GL_STUB_ALIAS(WindowPos2svARB, _gloffset_WindowPos2svMESA, WindowPos2svARB@4, WindowPos2svMESA, WindowPos2svMESA@4) + GL_STUB_ALIAS(WindowPos3dARB, _gloffset_WindowPos3dMESA, WindowPos3dARB@24, WindowPos3dMESA, WindowPos3dMESA@24) + GL_STUB_ALIAS(WindowPos3fARB, _gloffset_WindowPos3fMESA, WindowPos3fARB@12, WindowPos3fMESA, WindowPos3fMESA@12) + GL_STUB_ALIAS(WindowPos3iARB, _gloffset_WindowPos3iMESA, WindowPos3iARB@12, WindowPos3iMESA, WindowPos3iMESA@12) + GL_STUB_ALIAS(WindowPos3sARB, _gloffset_WindowPos3sMESA, WindowPos3sARB@12, WindowPos3sMESA, WindowPos3sMESA@12) + GL_STUB_ALIAS(WindowPos3dvARB, _gloffset_WindowPos3dvMESA, WindowPos3dvARB@4, WindowPos3dvMESA, WindowPos3dvMESA@4) + GL_STUB_ALIAS(WindowPos3fvARB, _gloffset_WindowPos3fvMESA, WindowPos3fvARB@4, WindowPos3fvMESA, WindowPos3fvMESA@4) + GL_STUB_ALIAS(WindowPos3ivARB, _gloffset_WindowPos3ivMESA, WindowPos3ivARB@4, WindowPos3ivMESA, WindowPos3ivMESA@4) + GL_STUB_ALIAS(WindowPos3svARB, _gloffset_WindowPos3svMESA, WindowPos3svARB@4, WindowPos3svMESA, WindowPos3svMESA@4) + GL_STUB_ALIAS(VertexAttrib1sARB, _gloffset_VertexAttrib1sNV, VertexAttrib1sARB@8, VertexAttrib1sNV, VertexAttrib1sNV@8) + GL_STUB_ALIAS(VertexAttrib1fARB, _gloffset_VertexAttrib1fNV, VertexAttrib1fARB@8, VertexAttrib1fNV, VertexAttrib1fNV@8) + GL_STUB_ALIAS(VertexAttrib1dARB, _gloffset_VertexAttrib1dNV, VertexAttrib1dARB@12, VertexAttrib1dNV, VertexAttrib1dNV@12) + GL_STUB_ALIAS(VertexAttrib2sARB, _gloffset_VertexAttrib2sNV, VertexAttrib2sARB@12, VertexAttrib2sNV, VertexAttrib2sNV@12) + GL_STUB_ALIAS(VertexAttrib2fARB, _gloffset_VertexAttrib2fNV, VertexAttrib2fARB@12, VertexAttrib2fNV, VertexAttrib2fNV@12) + GL_STUB_ALIAS(VertexAttrib2dARB, _gloffset_VertexAttrib2dNV, VertexAttrib2dARB@20, VertexAttrib2dNV, VertexAttrib2dNV@20) + GL_STUB_ALIAS(VertexAttrib3sARB, _gloffset_VertexAttrib3sNV, VertexAttrib3sARB@16, VertexAttrib3sNV, VertexAttrib3sNV@16) + GL_STUB_ALIAS(VertexAttrib3fARB, _gloffset_VertexAttrib3fNV, VertexAttrib3fARB@16, VertexAttrib3fNV, VertexAttrib3fNV@16) + GL_STUB_ALIAS(VertexAttrib3dARB, _gloffset_VertexAttrib3dNV, VertexAttrib3dARB@28, VertexAttrib3dNV, VertexAttrib3dNV@28) + GL_STUB_ALIAS(VertexAttrib4sARB, _gloffset_VertexAttrib4sNV, VertexAttrib4sARB@20, VertexAttrib4sNV, VertexAttrib4sNV@20) + GL_STUB_ALIAS(VertexAttrib4fARB, _gloffset_VertexAttrib4fNV, VertexAttrib4fARB@20, VertexAttrib4fNV, VertexAttrib4fNV@20) + GL_STUB_ALIAS(VertexAttrib4dARB, _gloffset_VertexAttrib4dNV, VertexAttrib4dARB@36, VertexAttrib4dNV, VertexAttrib4dNV@36) + GL_STUB_ALIAS(VertexAttrib4NubARB, _gloffset_VertexAttrib4ubNV, VertexAttrib4NubARB@20, VertexAttrib4ubNV, VertexAttrib4ubNV@20) + GL_STUB_ALIAS(VertexAttrib1svARB, _gloffset_VertexAttrib1svNV, VertexAttrib1svARB@8, VertexAttrib1svNV, VertexAttrib1svNV@8) + GL_STUB_ALIAS(VertexAttrib1fvARB, _gloffset_VertexAttrib1fvNV, VertexAttrib1fvARB@8, VertexAttrib1fvNV, VertexAttrib1fvNV@8) + GL_STUB_ALIAS(VertexAttrib1dvARB, _gloffset_VertexAttrib1dvNV, VertexAttrib1dvARB@8, VertexAttrib1dvNV, VertexAttrib1dvNV@8) + GL_STUB_ALIAS(VertexAttrib2svARB, _gloffset_VertexAttrib2svNV, VertexAttrib2svARB@8, VertexAttrib2svNV, VertexAttrib2svNV@8) + GL_STUB_ALIAS(VertexAttrib2fvARB, _gloffset_VertexAttrib2fvNV, VertexAttrib2fvARB@8, VertexAttrib2fvNV, VertexAttrib2fvNV@8) + GL_STUB_ALIAS(VertexAttrib2dvARB, _gloffset_VertexAttrib2dvNV, VertexAttrib2dvARB@8, VertexAttrib2dvNV, VertexAttrib2dvNV@8) + GL_STUB_ALIAS(VertexAttrib3svARB, _gloffset_VertexAttrib3svNV, VertexAttrib3svARB@8, VertexAttrib3svNV, VertexAttrib3svNV@8) + GL_STUB_ALIAS(VertexAttrib3fvARB, _gloffset_VertexAttrib3fvNV, VertexAttrib3fvARB@8, VertexAttrib3fvNV, VertexAttrib3fvNV@8) + GL_STUB_ALIAS(VertexAttrib3dvARB, _gloffset_VertexAttrib3dvNV, VertexAttrib3dvARB@8, VertexAttrib3dvNV, VertexAttrib3dvNV@8) + GL_STUB_ALIAS(VertexAttrib4svARB, _gloffset_VertexAttrib4svNV, VertexAttrib4svARB@8, VertexAttrib4svNV, VertexAttrib4svNV@8) + GL_STUB_ALIAS(VertexAttrib4fvARB, _gloffset_VertexAttrib4fvNV, VertexAttrib4fvARB@8, VertexAttrib4fvNV, VertexAttrib4fvNV@8) + GL_STUB_ALIAS(VertexAttrib4dvARB, _gloffset_VertexAttrib4dvNV, VertexAttrib4dvARB@8, VertexAttrib4dvNV, VertexAttrib4dvNV@8) + GL_STUB_ALIAS(VertexAttrib4NubvARB, _gloffset_VertexAttrib4ubvNV, VertexAttrib4NubvARB@8, VertexAttrib4ubvNV, VertexAttrib4ubvNV@8) + GL_STUB_ALIAS(BindProgramARB, _gloffset_BindProgramNV, BindProgramARB@8, BindProgramNV, BindProgramNV@8) + GL_STUB_ALIAS(DeleteProgramsARB, _gloffset_DeleteProgramsNV, DeleteProgramsARB@8, DeleteProgramsNV, DeleteProgramsNV@8) + GL_STUB_ALIAS(GenProgramsARB, _gloffset_GenProgramsNV, GenProgramsARB@8, GenProgramsNV, GenProgramsNV@8) + GL_STUB_ALIAS(IsProgramARB, _gloffset_IsProgramNV, IsProgramARB@4, IsProgramNV, IsProgramNV@4) + GL_STUB_ALIAS(GetVertexAttribdvARB, _gloffset_GetVertexAttribdvNV, GetVertexAttribdvARB@12, GetVertexAttribdvNV, GetVertexAttribdvNV@12) + GL_STUB_ALIAS(GetVertexAttribfvARB, _gloffset_GetVertexAttribfvNV, GetVertexAttribfvARB@12, GetVertexAttribfvNV, GetVertexAttribfvNV@12) + GL_STUB_ALIAS(GetVertexAttribivARB, _gloffset_GetVertexAttribivNV, GetVertexAttribivARB@12, GetVertexAttribivNV, GetVertexAttribivNV@12) + GL_STUB_ALIAS(GetVertexAttribPointervARB, _gloffset_GetVertexAttribPointervNV, GetVertexAttribPointervARB@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12) + GL_STUB_ALIAS(BlendColorEXT, _gloffset_BlendColor, BlendColorEXT@16, BlendColor, BlendColor@16) + GL_STUB_ALIAS(TexImage3DEXT, _gloffset_TexImage3D, TexImage3DEXT@40, TexImage3D, TexImage3D@40) + GL_STUB_ALIAS(TexSubImage3DEXT, _gloffset_TexSubImage3D, TexSubImage3DEXT@44, TexSubImage3D, TexSubImage3D@44) + GL_STUB_ALIAS(TexSubImage1DEXT, _gloffset_TexSubImage1D, TexSubImage1DEXT@28, TexSubImage1D, TexSubImage1D@28) + GL_STUB_ALIAS(TexSubImage2DEXT, _gloffset_TexSubImage2D, TexSubImage2DEXT@36, TexSubImage2D, TexSubImage2D@36) + GL_STUB_ALIAS(CopyTexImage1DEXT, _gloffset_CopyTexImage1D, CopyTexImage1DEXT@28, CopyTexImage1D, CopyTexImage1D@28) + GL_STUB_ALIAS(CopyTexImage2DEXT, _gloffset_CopyTexImage2D, CopyTexImage2DEXT@32, CopyTexImage2D, CopyTexImage2D@32) + GL_STUB_ALIAS(CopyTexSubImage1DEXT, _gloffset_CopyTexSubImage1D, CopyTexSubImage1DEXT@24, CopyTexSubImage1D, CopyTexSubImage1D@24) + GL_STUB_ALIAS(CopyTexSubImage2DEXT, _gloffset_CopyTexSubImage2D, CopyTexSubImage2DEXT@32, CopyTexSubImage2D, CopyTexSubImage2D@32) + GL_STUB_ALIAS(CopyTexSubImage3DEXT, _gloffset_CopyTexSubImage3D, CopyTexSubImage3DEXT@36, CopyTexSubImage3D, CopyTexSubImage3D@36) + GL_STUB_ALIAS(HistogramEXT, _gloffset_Histogram, HistogramEXT@16, Histogram, Histogram@16) + GL_STUB_ALIAS(MinmaxEXT, _gloffset_Minmax, MinmaxEXT@12, Minmax, Minmax@12) + GL_STUB_ALIAS(ResetHistogramEXT, _gloffset_ResetHistogram, ResetHistogramEXT@4, ResetHistogram, ResetHistogram@4) + GL_STUB_ALIAS(ResetMinmaxEXT, _gloffset_ResetMinmax, ResetMinmaxEXT@4, ResetMinmax, ResetMinmax@4) + GL_STUB_ALIAS(ConvolutionFilter1DEXT, _gloffset_ConvolutionFilter1D, ConvolutionFilter1DEXT@24, ConvolutionFilter1D, ConvolutionFilter1D@24) + GL_STUB_ALIAS(ConvolutionFilter2DEXT, _gloffset_ConvolutionFilter2D, ConvolutionFilter2DEXT@28, ConvolutionFilter2D, ConvolutionFilter2D@28) + GL_STUB_ALIAS(ConvolutionParameterfEXT, _gloffset_ConvolutionParameterf, ConvolutionParameterfEXT@12, ConvolutionParameterf, ConvolutionParameterf@12) + GL_STUB_ALIAS(ConvolutionParameterfvEXT, _gloffset_ConvolutionParameterfv, ConvolutionParameterfvEXT@12, ConvolutionParameterfv, ConvolutionParameterfv@12) + GL_STUB_ALIAS(ConvolutionParameteriEXT, _gloffset_ConvolutionParameteri, ConvolutionParameteriEXT@12, ConvolutionParameteri, ConvolutionParameteri@12) + GL_STUB_ALIAS(ConvolutionParameterivEXT, _gloffset_ConvolutionParameteriv, ConvolutionParameterivEXT@12, ConvolutionParameteriv, ConvolutionParameteriv@12) + GL_STUB_ALIAS(CopyConvolutionFilter1DEXT, _gloffset_CopyConvolutionFilter1D, CopyConvolutionFilter1DEXT@20, CopyConvolutionFilter1D, CopyConvolutionFilter1D@20) + GL_STUB_ALIAS(CopyConvolutionFilter2DEXT, _gloffset_CopyConvolutionFilter2D, CopyConvolutionFilter2DEXT@24, CopyConvolutionFilter2D, CopyConvolutionFilter2D@24) + GL_STUB_ALIAS(SeparableFilter2DEXT, _gloffset_SeparableFilter2D, SeparableFilter2DEXT@32, SeparableFilter2D, SeparableFilter2D@32) + GL_STUB_ALIAS(ColorTableSGI, _gloffset_ColorTable, ColorTableSGI@24, ColorTable, ColorTable@24) + GL_STUB_ALIAS(ColorTableParameterfvSGI, _gloffset_ColorTableParameterfv, ColorTableParameterfvSGI@12, ColorTableParameterfv, ColorTableParameterfv@12) + GL_STUB_ALIAS(ColorTableParameterivSGI, _gloffset_ColorTableParameteriv, ColorTableParameterivSGI@12, ColorTableParameteriv, ColorTableParameteriv@12) + GL_STUB_ALIAS(CopyColorTableSGI, _gloffset_CopyColorTable, CopyColorTableSGI@20, CopyColorTable, CopyColorTable@20) + GL_STUB_ALIAS(BindTextureEXT, _gloffset_BindTexture, BindTextureEXT@8, BindTexture, BindTexture@8) + GL_STUB_ALIAS(DeleteTexturesEXT, _gloffset_DeleteTextures, DeleteTexturesEXT@8, DeleteTextures, DeleteTextures@8) + GL_STUB_ALIAS(PrioritizeTexturesEXT, _gloffset_PrioritizeTextures, PrioritizeTexturesEXT@12, PrioritizeTextures, PrioritizeTextures@12) + GL_STUB_ALIAS(ArrayElementEXT, _gloffset_ArrayElement, ArrayElementEXT@4, ArrayElement, ArrayElement@4) + GL_STUB_ALIAS(DrawArraysEXT, _gloffset_DrawArrays, DrawArraysEXT@12, DrawArrays, DrawArrays@12) + GL_STUB_ALIAS(GetPointervEXT, _gloffset_GetPointerv, GetPointervEXT@8, GetPointerv, GetPointerv@8) + GL_STUB_ALIAS(BlendEquationEXT, _gloffset_BlendEquation, BlendEquationEXT@4, BlendEquation, BlendEquation@4) + GL_STUB_ALIAS(ColorSubTableEXT, _gloffset_ColorSubTable, ColorSubTableEXT@24, ColorSubTable, ColorSubTable@24) + GL_STUB_ALIAS(CopyColorSubTableEXT, _gloffset_CopyColorSubTable, CopyColorSubTableEXT@20, CopyColorSubTable, CopyColorSubTable@20) + GL_STUB_ALIAS(ColorTableEXT, _gloffset_ColorTable, ColorTableEXT@24, ColorTable, ColorTable@24) + GL_STUB_ALIAS(DrawRangeElementsEXT, _gloffset_DrawRangeElements, DrawRangeElementsEXT@24, DrawRangeElements, DrawRangeElements@24) + GL_STUB_ALIAS(SampleMaskEXT, _gloffset_SampleMaskSGIS, SampleMaskEXT@8, SampleMaskSGIS, SampleMaskSGIS@8) + GL_STUB_ALIAS(SamplePatternEXT, _gloffset_SamplePatternSGIS, SamplePatternEXT@4, SamplePatternSGIS, SamplePatternSGIS@4) + GL_STUB_ALIAS(DrawBuffersATI, _gloffset_DrawBuffersARB, DrawBuffersATI@8, DrawBuffersARB, DrawBuffersARB@8) + GL_STUB_ALIAS(BlendEquationSeparateATI, _gloffset_BlendEquationSeparateEXT, BlendEquationSeparateATI@8, BlendEquationSeparateEXT, BlendEquationSeparateEXT@8) + GL_STUB_ALIAS(BlendFuncSeparateINGR, _gloffset_BlendFuncSeparateEXT, BlendFuncSeparateINGR@16, BlendFuncSeparateEXT, BlendFuncSeparateEXT@16) + GL_STUB_ALIAS(PointParameterfSGIS, _gloffset_PointParameterfEXT, PointParameterfSGIS@8, PointParameterfEXT, PointParameterfEXT@8) + GL_STUB_ALIAS(PointParameterfvSGIS, _gloffset_PointParameterfvEXT, PointParameterfvSGIS@8, PointParameterfvEXT, PointParameterfvEXT@8) + +#if defined(GLX_USE_TLS) && defined(__linux__) + .section ".note.ABI-tag", "a" + .p2align 2 + .long 1f - 0f /* name length */ + .long 3f - 2f /* data length */ + .long 1 /* note length */ +0: .asciz "GNU" /* vendor name */ +1: .p2align 2 +2: .long 0 /* note data: the ABI tag */ + .long 2,4,20 /* Minimum kernel version w/TLS */ +3: .p2align 2 /* pad out section */ +#endif /* GLX_USE_TLS */ #endif /* __WIN32__ */ Index: src/glx/x11/dispatch.c =================================================================== RCS file: /cvs/mesa/Mesa/src/glx/x11/dispatch.c,v retrieving revision 1.1 diff -u -d -r1.1 dispatch.c --- src/glx/x11/dispatch.c 25 Oct 2004 21:09:16 -0000 1.1 +++ src/glx/x11/dispatch.c 10 Nov 2004 22:03:48 -0000 @@ -56,15 +56,10 @@ #define NAME(func) gl##func #define DISPATCH(func, args, msg) \ - const struct _glapi_table *dispatch; \ - dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\ - (dispatch->func) args + GL_CALL(func) args #define RETURN_DISPATCH(func, args, msg) \ - const struct _glapi_table *dispatch; \ - dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\ - return (dispatch->func) args - + return GL_CALL(func) args #include "glapitemp.h" Index: src/glx/x11/dri_glx.c =================================================================== RCS file: /cvs/mesa/Mesa/src/glx/x11/dri_glx.c,v retrieving revision 1.1 diff -u -d -r1.1 dri_glx.c --- src/glx/x11/dri_glx.c 25 Oct 2004 21:09:16 -0000 1.1 +++ src/glx/x11/dri_glx.c 10 Nov 2004 22:03:48 -0000 @@ -119,18 +119,26 @@ -/* - * Extract the ith directory path out of a colon-separated list of - * paths. - * Input: - * index - index of path to extract (starting at zero) - * paths - the colon-separated list of paths - * dirLen - max length of result to store in - * Output: - * dir - the extracted directory path, dir[0] will be zero when - * extraction fails. +/** + * Extract the ith directory path out of a colon-separated list of paths. No + * more than \c dirLen characters, including the terminating \c NUL, will be + * written to \c dir. + * + * \param index Index of path to extract (starting at zero) + * \param paths The colon-separated list of paths + * \param dirLen Maximum length of result to store in \c dir + * \param dir Buffer to hold the extracted directory path + * + * \returns + * The number of characters that would have been written to \c dir had there + * been enough room. This does not include the terminating \c NUL. When + * extraction fails, zero will be returned. + * + * \todo + * It seems like this function could be rewritten to use \c strchr. */ -static void ExtractDir(int index, const char *paths, int dirLen, char *dir) +static size_t +ExtractDir(int index, const char *paths, int dirLen, char *dir) { int i, len; const char *start, *end; @@ -146,7 +154,7 @@ else if (*start == 0) { /* end of string and couldn't find ith colon */ dir[0] = 0; - return; + return 0; } else { start++; @@ -168,22 +176,27 @@ len = dirLen - 1; strncpy(dir, start, len); dir[len] = 0; + + return( end - start ); } -/* - * Try to dlopen() the named driver. This function adds the - * "_dri.so" suffix to the driver name and searches the - * directories specified by the LIBGL_DRIVERS_PATH env var - * in order to find the driver. - * Input: - * driverName - a name like "tdfx", "i810", "mga", etc. - * Return: - * handle from dlopen, or NULL if driver file not found. +/** + * Try to \c dlopen the named driver. + * + * This function adds the "_dri.so" suffix to the driver name and searches the + * directories specified by the \c LIBGL_DRIVERS_PATH environment variable in + * order to find the driver. + * + * \param driverName - a name like "tdfx", "i810", "mga", etc. + * + * \returns + * A handle from \c dlopen, or \c NULL if driver file not found. */ static __DRIdriver *OpenDriver(const char *driverName) { char *libPaths = NULL; + char libDir[1000]; int i; __DRIdriver *driver; @@ -204,16 +217,27 @@ if (!libPaths) libPaths = DEFAULT_DRIVER_DIR; - for (i = 0; ; i++) { - char libDir[1000], realDriverName[200]; - void *handle; - ExtractDir(i, libPaths, 1000, libDir); - if (!libDir[0]) - break; /* ran out of paths to search */ - snprintf(realDriverName, 200, "%s/%s_dri.so", libDir, driverName); + for ( i = 0 ; ExtractDir(i, libPaths, 1000, libDir) != 0 ; i++ ) { + char realDriverName[200]; + void *handle = NULL; + + + /* If TLS support is enabled, try to open the TLS version of the driver + * binary first. If that fails, try the non-TLS version. + */ +#ifdef GLX_USE_TLS + snprintf(realDriverName, 200, "%s/tls/%s_dri.so", libDir, driverName); InfoMessageF("OpenDriver: trying %s\n", realDriverName); handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL); - if (handle) { +#endif + + if ( handle == NULL ) { + snprintf(realDriverName, 200, "%s/%s_dri.so", libDir, driverName); + InfoMessageF("OpenDriver: trying %s\n", realDriverName); + handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL); + } + + if ( handle != NULL ) { /* allocate __DRIdriver struct */ driver = (__DRIdriver *) Xmalloc(sizeof(__DRIdriver)); if (!driver)