diff options
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/state_trackers/glx/xlib/fakeglx.c | 596 | ||||
| -rw-r--r-- | src/gallium/state_trackers/glx/xlib/fakeglx_fonts.c | 19 | ||||
| -rw-r--r-- | src/gallium/state_trackers/glx/xlib/glxapi.c | 1060 | ||||
| -rw-r--r-- | src/gallium/state_trackers/glx/xlib/glxapi.h | 179 | 
4 files changed, 280 insertions, 1574 deletions
| diff --git a/src/gallium/state_trackers/glx/xlib/fakeglx.c b/src/gallium/state_trackers/glx/xlib/fakeglx.c index 23777c76f6..d56d2b7ed1 100644 --- a/src/gallium/state_trackers/glx/xlib/fakeglx.c +++ b/src/gallium/state_trackers/glx/xlib/fakeglx.c @@ -1,8 +1,9 @@  /*   * Mesa 3-D graphics library - * Version:  7.1 + * Version:  7.6   *   * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved. + * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -23,24 +24,16 @@   */ -/* - * This is an emulation of the GLX API which allows Mesa/GLX-based programs - * to run on X servers which do not have the real GLX extension. - * - * Thanks to the contributors: - * - * Initial version:  Philip Brown (phil@bolthole.com) - * Better glXGetConfig() support: Armin Liebchen (liebchen@asylum.cs.utah.edu) - * Further visual-handling refinements: Wolfram Gloger - *    (wmglo@Dent.MED.Uni-Muenchen.DE). - * - * Notes: - *   Don't be fooled, stereo isn't supported yet. +/** + * "Fake" GLX API implemented in terms of the XMesa*() functions. + * XXX rename this file to glx_api.c   */ -#include "glxapi.h" +#define GLX_GLXEXT_PROTOTYPES +#include "GL/glx.h" +  #include "xm_api.h"  #include "context.h"  #include "config.h" @@ -80,24 +73,68 @@     "GLX_SGIX_fbconfig " \     "GLX_SGIX_pbuffer " -/* +#define DEFAULT_DIRECT GL_TRUE + + + +/** + * Minimal __GLXContextRec that mimics a "real" GLX context. + */ +typedef struct __GLXcontextRec +{ +   Display *currentDpy; +   GLboolean isDirect; +   GLXDrawable currentDrawable; +   GLXDrawable currentReadable; +   XID xid; +} __GLXcontext; + + +/**   * Our fake GLX context will contain a "real" GLX context and an XMesa context.   *   * Note that a pointer to a __GLXcontext is a pointer to a fake_glx_context,   * and vice versa.   * - * We really just need this structure in order to make the libGL functions - * glXGetCurrentContext(), glXGetCurrentDrawable() and glXGetCurrentDisplay() - * work correctly. + * XXX merge this struct with the one above.   */ -struct fake_glx_context { +struct fake_glx_context +{     __GLXcontext glxContext;   /* this MUST be first! */     XMesaContext xmesaContext;  }; -#define DEFAULT_DIRECT GL_TRUE +static pipe_tsd ContextTSD; + +/** Set current context for calling thread */ +static void +SetCurrentContext(GLXContext c) +{ +   pipe_tsd_set(&ContextTSD, c); +} + +/** Get current context for calling thread */ +static GLXContext +GetCurrentContext(void) +{ +   return pipe_tsd_get(&ContextTSD); +} + + + +/**********************************************************************/ +/***                     Debug helper code                          ***/ +/**********************************************************************/ + +extern void _kw_ungrab_all( Display *dpy ); +void _kw_ungrab_all( Display *dpy ) +{ +   XUngrabPointer( dpy, CurrentTime ); +   XUngrabKeyboard( dpy, CurrentTime ); +} +  /**********************************************************************/ @@ -366,10 +403,6 @@ find_glx_visual( Display *dpy, XVisualInfo *vinfo )  } - - - -  /**   * Try to get an X visual which matches the given arguments.   */ @@ -418,7 +451,6 @@ get_visual( Display *dpy, int scr, unsigned int depth, int xclass )  } -  /*   * Retrieve the value of the given environment variable and find   * the X visual which matches it. @@ -1002,8 +1034,8 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )  } -static XVisualInfo * -Fake_glXChooseVisual( Display *dpy, int screen, int *list ) +XVisualInfo * +glXChooseVisual( Display *dpy, int screen, int *list )  {     XMesaVisual xmvis; @@ -1024,9 +1056,9 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )  } -static GLXContext -Fake_glXCreateContext( Display *dpy, XVisualInfo *visinfo, -                       GLXContext share_list, Bool direct ) +GLXContext +glXCreateContext( Display *dpy, XVisualInfo *visinfo, +                  GLXContext share_list, Bool direct )  {     XMesaVisual xmvis;     struct fake_glx_context *glxCtx; @@ -1081,9 +1113,9 @@ static XMesaBuffer MakeCurrent_PrevReadBuffer = 0;  /* GLX 1.3 and later */ -static Bool -Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw, -                            GLXDrawable read, GLXContext ctx ) +Bool +glXMakeContextCurrent( Display *dpy, GLXDrawable draw, +                       GLXDrawable read, GLXContext ctx )  {     struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx;     static boolean firsttime = 1, no_rast = 0; @@ -1093,7 +1125,6 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,        firsttime = 0;     } -     if (ctx && draw && read) {        XMesaBuffer drawBuffer, readBuffer;        XMesaContext xmctx = glxCtx->xmesaContext; @@ -1151,6 +1182,7 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,           ((__GLXcontext *) ctx)->currentDpy = dpy;           ((__GLXcontext *) ctx)->currentDrawable = draw;           ((__GLXcontext *) ctx)->currentReadable = read; +         SetCurrentContext(ctx);           return True;        }        else { @@ -1165,6 +1197,7 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,        MakeCurrent_PrevReadable = 0;        MakeCurrent_PrevDrawBuffer = 0;        MakeCurrent_PrevReadBuffer = 0; +      SetCurrentContext(NULL);        return True;     }     else { @@ -1176,15 +1209,62 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,  } -static Bool -Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) +Bool +glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) +{ +   return glXMakeContextCurrent( dpy, drawable, drawable, ctx ); +} + + +GLXContext +glXGetCurrentContext(void)  { -   return Fake_glXMakeContextCurrent( dpy, drawable, drawable, ctx ); +   return GetCurrentContext();  } -static GLXPixmap -Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap ) +Display * +glXGetCurrentDisplay(void) +{ +   struct fake_glx_context *glxCtx = +      (struct fake_glx_context *) glXGetCurrentContext(); + +   return glxCtx ? glxCtx->glxContext.currentDpy : NULL; +} + + +Display * +glXGetCurrentDisplayEXT(void) +{ +   return glXGetCurrentDisplay(); +} + + +GLXDrawable +glXGetCurrentDrawable(void) +{ +   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext(); +   return gc ? gc->currentDrawable : 0; +} + + +GLXDrawable +glXGetCurrentReadDrawable(void) +{ +   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext(); +   return gc ? gc->currentReadable : 0; +} + + +GLXDrawable +glXGetCurrentReadDrawableSGI(void) +{ +   return glXGetCurrentReadDrawable(); +} + + +GLXPixmap +glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap )  {     XMesaVisual v;     XMesaBuffer b; @@ -1208,9 +1288,9 @@ Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap )  /*** GLX_MESA_pixmap_colormap ***/ -static GLXPixmap -Fake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo, -                             Pixmap pixmap, Colormap cmap ) +GLXPixmap +glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo, +                        Pixmap pixmap, Colormap cmap )  {     XMesaVisual v;     XMesaBuffer b; @@ -1232,8 +1312,8 @@ Fake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo,  } -static void -Fake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ) +void +glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap )  {     XMesaBuffer b = XMesaFindBuffer(dpy, pixmap);     if (b) { @@ -1245,9 +1325,9 @@ Fake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap )  } -static void -Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, -                     unsigned long mask ) +void +glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, +                unsigned long mask )  {     struct fake_glx_context *fakeSrc = (struct fake_glx_context *) src;     struct fake_glx_context *fakeDst = (struct fake_glx_context *) dst; @@ -1261,8 +1341,8 @@ Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,  } -static Bool -Fake_glXQueryExtension( Display *dpy, int *errorb, int *event ) +Bool +glXQueryExtension( Display *dpy, int *errorb, int *event )  {     /* Mesa's GLX isn't really an X extension but we try to act like one. */     (void) dpy; @@ -1272,16 +1352,8 @@ Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )  } -extern void _kw_ungrab_all( Display *dpy ); -void _kw_ungrab_all( Display *dpy ) -{ -   XUngrabPointer( dpy, CurrentTime ); -   XUngrabKeyboard( dpy, CurrentTime ); -} - - -static void -Fake_glXDestroyContext( Display *dpy, GLXContext ctx ) +void +glXDestroyContext( Display *dpy, GLXContext ctx )  {     struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx;     (void) dpy; @@ -1296,8 +1368,8 @@ Fake_glXDestroyContext( Display *dpy, GLXContext ctx )  } -static Bool -Fake_glXIsDirect( Display *dpy, GLXContext ctx ) +Bool +glXIsDirect( Display *dpy, GLXContext ctx )  {     struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx;     (void) ctx; @@ -1306,8 +1378,8 @@ Fake_glXIsDirect( Display *dpy, GLXContext ctx ) -static void -Fake_glXSwapBuffers( Display *dpy, GLXDrawable drawable ) +void +glXSwapBuffers( Display *dpy, GLXDrawable drawable )  {     XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable );     static boolean firsttime = 1, no_rast = 0; @@ -1333,8 +1405,8 @@ Fake_glXSwapBuffers( Display *dpy, GLXDrawable drawable )  /*** GLX_MESA_copy_sub_buffer ***/ -static void -Fake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable, +void +glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,                             int x, int y, int width, int height )  {     XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); @@ -1347,8 +1419,8 @@ Fake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,  } -static Bool -Fake_glXQueryVersion( Display *dpy, int *maj, int *min ) +Bool +glXQueryVersion( Display *dpy, int *maj, int *min )  {     (void) dpy;     /* Return GLX version, not Mesa version */ @@ -1564,8 +1636,8 @@ get_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig )  } -static int -Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo, +int +glXGetConfig( Display *dpy, XVisualInfo *visinfo,                     int attrib, int *value )  {     XMesaVisual xmvis; @@ -1594,8 +1666,8 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,  } -static void -Fake_glXWaitGL( void ) +void +glXWaitGL( void )  {     XMesaContext xmesa = XMesaGetCurrentContext();     XMesaFlush( xmesa ); @@ -1603,8 +1675,8 @@ Fake_glXWaitGL( void ) -static void -Fake_glXWaitX( void ) +void +glXWaitX( void )  {     XMesaContext xmesa = XMesaGetCurrentContext();     XMesaFlush( xmesa ); @@ -1620,8 +1692,8 @@ get_extensions( void )  /* GLX 1.1 and later */ -static const char * -Fake_glXQueryExtensionsString( Display *dpy, int screen ) +const char * +glXQueryExtensionsString( Display *dpy, int screen )  {     (void) dpy;     (void) screen; @@ -1631,8 +1703,8 @@ Fake_glXQueryExtensionsString( Display *dpy, int screen )  /* GLX 1.1 and later */ -static const char * -Fake_glXQueryServerString( Display *dpy, int screen, int name ) +const char * +glXQueryServerString( Display *dpy, int screen, int name )  {     static char version[1000];     _mesa_sprintf(version, "%d.%d %s", @@ -1656,8 +1728,8 @@ Fake_glXQueryServerString( Display *dpy, int screen, int name )  /* GLX 1.1 and later */ -static const char * -Fake_glXGetClientString( Display *dpy, int name ) +const char * +glXGetClientString( Display *dpy, int name )  {     static char version[1000];     _mesa_sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION, @@ -1684,8 +1756,8 @@ Fake_glXGetClientString( Display *dpy, int name )   */ -static int -Fake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config, +int +glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,                             int attribute, int *value )  {     XMesaVisual v = (XMesaVisual) config; @@ -1699,8 +1771,8 @@ Fake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,  } -static GLXFBConfig * -Fake_glXGetFBConfigs( Display *dpy, int screen, int *nelements ) +GLXFBConfig * +glXGetFBConfigs( Display *dpy, int screen, int *nelements )  {     XVisualInfo *visuals, visTemplate;     const long visMask = VisualScreenMask; @@ -1725,15 +1797,15 @@ Fake_glXGetFBConfigs( Display *dpy, int screen, int *nelements )  } -static GLXFBConfig * -Fake_glXChooseFBConfig( Display *dpy, int screen, +GLXFBConfig * +glXChooseFBConfig( Display *dpy, int screen,                          const int *attribList, int *nitems )  {     XMesaVisual xmvis;     if (!attribList || !attribList[0]) {        /* return list of all configs (per GLX_SGIX_fbconfig spec) */ -      return Fake_glXGetFBConfigs(dpy, screen, nitems); +      return glXGetFBConfigs(dpy, screen, nitems);     }     xmvis = choose_visual(dpy, screen, attribList, GL_TRUE); @@ -1754,8 +1826,8 @@ Fake_glXChooseFBConfig( Display *dpy, int screen,  } -static XVisualInfo * -Fake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config ) +XVisualInfo * +glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config )  {     if (dpy && config) {        XMesaVisual xmvis = (XMesaVisual) config; @@ -1776,8 +1848,8 @@ Fake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config )  } -static GLXWindow -Fake_glXCreateWindow( Display *dpy, GLXFBConfig config, Window win, +GLXWindow +glXCreateWindow( Display *dpy, GLXFBConfig config, Window win,                        const int *attribList )  {     XMesaVisual xmvis = (XMesaVisual) config; @@ -1796,8 +1868,8 @@ Fake_glXCreateWindow( Display *dpy, GLXFBConfig config, Window win,  } -static void -Fake_glXDestroyWindow( Display *dpy, GLXWindow window ) +void +glXDestroyWindow( Display *dpy, GLXWindow window )  {     XMesaBuffer b = XMesaFindBuffer(dpy, (Drawable) window);     if (b) @@ -1807,8 +1879,8 @@ Fake_glXDestroyWindow( Display *dpy, GLXWindow window )  /* XXX untested */ -static GLXPixmap -Fake_glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap, +GLXPixmap +glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap,                        const int *attribList )  {     XMesaVisual v = (XMesaVisual) config; @@ -1917,8 +1989,8 @@ Fake_glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap,  } -static void -Fake_glXDestroyPixmap( Display *dpy, GLXPixmap pixmap ) +void +glXDestroyPixmap( Display *dpy, GLXPixmap pixmap )  {     XMesaBuffer b = XMesaFindBuffer(dpy, (Drawable)pixmap);     if (b) @@ -1927,8 +1999,8 @@ Fake_glXDestroyPixmap( Display *dpy, GLXPixmap pixmap )  } -static GLXPbuffer -Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config, +GLXPbuffer +glXCreatePbuffer( Display *dpy, GLXFBConfig config,                         const int *attribList )  {     XMesaVisual xmvis = (XMesaVisual) config; @@ -1980,8 +2052,8 @@ Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config,  } -static void -Fake_glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf ) +void +glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf )  {     XMesaBuffer b = XMesaFindBuffer(dpy, pbuf);     if (b) { @@ -1990,8 +2062,8 @@ Fake_glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf )  } -static void -Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute, +void +glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,                         unsigned int *value )  {     XMesaBuffer xmbuf = XMesaFindBuffer(dpy, draw); @@ -2032,8 +2104,8 @@ Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,  } -static GLXContext -Fake_glXCreateNewContext( Display *dpy, GLXFBConfig config, +GLXContext +glXCreateNewContext( Display *dpy, GLXFBConfig config,                            int renderType, GLXContext shareList, Bool direct )  {     struct fake_glx_context *glxCtx; @@ -2068,8 +2140,8 @@ Fake_glXCreateNewContext( Display *dpy, GLXFBConfig config,  } -static int -Fake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value ) +int +glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )  {     struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx;     XMesaContext xmctx = glxCtx->xmesaContext; @@ -2097,8 +2169,8 @@ Fake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )  } -static void -Fake_glXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask ) +void +glXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask )  {     XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable);     if (xmbuf) @@ -2106,8 +2178,8 @@ Fake_glXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask )  } -static void -Fake_glXGetSelectedEvent( Display *dpy, GLXDrawable drawable, +void +glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,                            unsigned long *mask )  {     XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); @@ -2121,8 +2193,8 @@ Fake_glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,  /*** GLX_SGI_swap_control ***/ -static int -Fake_glXSwapIntervalSGI(int interval) +int +glXSwapIntervalSGI(int interval)  {     (void) interval;     return 0; @@ -2134,16 +2206,16 @@ Fake_glXSwapIntervalSGI(int interval)  static unsigned int FrameCounter = 0; -static int -Fake_glXGetVideoSyncSGI(unsigned int *count) +int +glXGetVideoSyncSGI(unsigned int *count)  {     /* this is a bogus implementation */     *count = FrameCounter++;     return 0;  } -static int -Fake_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count) +int +glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)  {     if (divisor <= 0 || remainder < 0)        return GLX_BAD_VALUE; @@ -2159,15 +2231,15 @@ Fake_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)  /*** GLX_SGI_make_current_read ***/ -static Bool -Fake_glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) +Bool +glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)  { -   return Fake_glXMakeContextCurrent( dpy, draw, read, ctx ); +   return glXMakeContextCurrent( dpy, draw, read, ctx );  }  /* not used  static GLXDrawable -Fake_glXGetCurrentReadDrawableSGI(void) +glXGetCurrentReadDrawableSGI(void)  {     return 0;  } @@ -2177,8 +2249,8 @@ Fake_glXGetCurrentReadDrawableSGI(void)  /*** GLX_SGIX_video_source ***/  #if defined(_VL_H) -static GLXVideoSourceSGIX -Fake_glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode) +GLXVideoSourceSGIX +glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode)  {     (void) dpy;     (void) screen; @@ -2189,8 +2261,8 @@ Fake_glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPa     return 0;  } -static void -Fake_glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src) +void +glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)  {     (void) dpy;     (void) src; @@ -2201,30 +2273,30 @@ Fake_glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)  /*** GLX_EXT_import_context ***/ -static void -Fake_glXFreeContextEXT(Display *dpy, GLXContext context) +void +glXFreeContextEXT(Display *dpy, GLXContext context)  {     (void) dpy;     (void) context;  } -static GLXContextID -Fake_glXGetContextIDEXT(const GLXContext context) +GLXContextID +glXGetContextIDEXT(const GLXContext context)  {     (void) context;     return 0;  } -static GLXContext -Fake_glXImportContextEXT(Display *dpy, GLXContextID contextID) +GLXContext +glXImportContextEXT(Display *dpy, GLXContextID contextID)  {     (void) dpy;     (void) contextID;     return 0;  } -static int -Fake_glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, int *value) +int +glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, int *value)  {     (void) dpy;     (void) context; @@ -2237,21 +2309,21 @@ Fake_glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, int  /*** GLX_SGIX_fbconfig ***/ -static int -Fake_glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value) +int +glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value)  { -   return Fake_glXGetFBConfigAttrib(dpy, config, attribute, value); +   return glXGetFBConfigAttrib(dpy, config, attribute, value);  } -static GLXFBConfigSGIX * -Fake_glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements) +GLXFBConfigSGIX * +glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements)  { -   return (GLXFBConfig *) Fake_glXChooseFBConfig(dpy, screen, attrib_list, nelements); +   return (GLXFBConfig *) glXChooseFBConfig(dpy, screen, attrib_list, nelements);  } -static GLXPixmap -Fake_glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap) +GLXPixmap +glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap)  {     XMesaVisual xmvis = (XMesaVisual) config;     XMesaBuffer xmbuf = XMesaCreatePixmapBuffer(xmvis, pixmap, 0); @@ -2259,8 +2331,8 @@ Fake_glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixm  } -static GLXContext -Fake_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) +GLXContext +glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct)  {     XMesaVisual xmvis = (XMesaVisual) config;     struct fake_glx_context *glxCtx; @@ -2290,15 +2362,15 @@ Fake_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int re  } -static XVisualInfo * -Fake_glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config) +XVisualInfo * +glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)  { -   return Fake_glXGetVisualFromFBConfig(dpy, config); +   return glXGetVisualFromFBConfig(dpy, config);  } -static GLXFBConfigSGIX -Fake_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis) +GLXFBConfigSGIX +glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)  {     XMesaVisual xmvis = find_glx_visual(dpy, vis);     if (!xmvis) { @@ -2313,8 +2385,8 @@ Fake_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)  /*** GLX_SGIX_pbuffer ***/ -static GLXPbufferSGIX -Fake_glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, +GLXPbufferSGIX +glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config,                               unsigned int width, unsigned int height,                               int *attribList)  { @@ -2352,8 +2424,8 @@ Fake_glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config,  } -static void -Fake_glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf) +void +glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)  {     XMesaBuffer xmbuf = XMesaFindBuffer(dpy, pbuf);     if (xmbuf) { @@ -2362,8 +2434,8 @@ Fake_glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)  } -static int -Fake_glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value) +int +glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value)  {     const XMesaBuffer xmbuf = XMesaFindBuffer(dpy, pbuf); @@ -2395,8 +2467,8 @@ Fake_glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, un  } -static void -Fake_glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask) +void +glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)  {     XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable);     if (xmbuf) { @@ -2406,8 +2478,8 @@ Fake_glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)  } -static void -Fake_glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask) +void +glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask)  {     XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable);     if (xmbuf) { @@ -2422,8 +2494,8 @@ Fake_glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *  /*** GLX_SGI_cushion ***/ -static void -Fake_glXCushionSGI(Display *dpy, Window win, float cushion) +void +glXCushionSGI(Display *dpy, Window win, float cushion)  {     (void) dpy;     (void) win; @@ -2434,8 +2506,8 @@ Fake_glXCushionSGI(Display *dpy, Window win, float cushion)  /*** GLX_SGIX_video_resize ***/ -static int -Fake_glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window) +int +glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window)  {     (void) dpy;     (void) screen; @@ -2444,8 +2516,8 @@ Fake_glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window w     return 0;  } -static int -Fake_glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h) +int +glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h)  {     (void) dpy;     (void) screen; @@ -2457,8 +2529,8 @@ Fake_glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int     return 0;  } -static int -Fake_glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h) +int +glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h)  {     (void) dpy;     (void) screen; @@ -2470,8 +2542,8 @@ Fake_glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int     return 0;  } -static int -Fake_glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh) +int +glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh)  {     (void) dpy;     (void) screen; @@ -2483,8 +2555,8 @@ Fake_glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, i     return 0;  } -static int -Fake_glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype) +int +glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype)  {     (void) dpy;     (void) screen; @@ -2498,8 +2570,8 @@ Fake_glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum syncty  /*** GLX_SGIX_dmbuffer **/  #if defined(_DM_BUFFER_H_) -static Bool -Fake_glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer) +Bool +glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer)  {     (void) dpy;     (void) pbuffer; @@ -2512,8 +2584,8 @@ Fake_glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *p  /*** GLX_SGIX_swap_group ***/ -static void -Fake_glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member) +void +glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member)  {     (void) dpy;     (void) drawable; @@ -2524,16 +2596,16 @@ Fake_glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member  /*** GLX_SGIX_swap_barrier ***/ -static void -Fake_glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier) +void +glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier)  {     (void) dpy;     (void) drawable;     (void) barrier;  } -static Bool -Fake_glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max) +Bool +glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)  {     (void) dpy;     (void) screen; @@ -2545,8 +2617,8 @@ Fake_glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)  /*** GLX_SUN_get_transparent_index ***/ -static Status -Fake_glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent) +Status +glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent)  {     (void) dpy;     (void) overlay; @@ -2563,8 +2635,8 @@ Fake_glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, lo   * Release the depth, stencil, accum buffers attached to a GLXDrawable   * (a window or pixmap) prior to destroying the GLXDrawable.   */ -static Bool -Fake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d ) +Bool +glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )  {     XMesaBuffer b = XMesaFindBuffer(dpy, d);     if (b) { @@ -2576,8 +2648,8 @@ Fake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )  /*** GLX_EXT_texture_from_pixmap ***/ -static void -Fake_glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, +void +glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer,                          const int *attrib_list)  {     XMesaBuffer b = XMesaFindBuffer(dpy, drawable); @@ -2585,162 +2657,10 @@ Fake_glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer,        XMesaBindTexImage(dpy, b, buffer, attrib_list);  } -static void -Fake_glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer) +void +glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer)  {     XMesaBuffer b = XMesaFindBuffer(dpy, drawable);     if (b)        XMesaReleaseTexImage(dpy, b, buffer);  } - - - -/** - * Create a new GLX API dispatch table with its function pointers - * initialized to point to Mesa's "fake" GLX API functions. - * - * Note: there used to be a similar function - * (_real_GetGLXDispatchTable) that returns a new dispatch table with - * all pointers initalized to point to "real" GLX functions (which - * understand GLX wire protocol, etc). - */ -struct _glxapi_table * -_mesa_GetGLXDispatchTable(void) -{ -   static struct _glxapi_table glx; - -   /* be sure our dispatch table size <= libGL's table */ -   { -      GLuint size = sizeof(struct _glxapi_table) / sizeof(void *); -      (void) size; -      assert(_glxapi_get_dispatch_table_size() >= size); -   } - -   /* initialize the whole table to no-ops */ -   _glxapi_set_no_op_table(&glx); - -   /* now initialize the table with the functions I implement */ -   glx.ChooseVisual = Fake_glXChooseVisual; -   glx.CopyContext = Fake_glXCopyContext; -   glx.CreateContext = Fake_glXCreateContext; -   glx.CreateGLXPixmap = Fake_glXCreateGLXPixmap; -   glx.DestroyContext = Fake_glXDestroyContext; -   glx.DestroyGLXPixmap = Fake_glXDestroyGLXPixmap; -   glx.GetConfig = Fake_glXGetConfig; -   /*glx.GetCurrentContext = Fake_glXGetCurrentContext;*/ -   /*glx.GetCurrentDrawable = Fake_glXGetCurrentDrawable;*/ -   glx.IsDirect = Fake_glXIsDirect; -   glx.MakeCurrent = Fake_glXMakeCurrent; -   glx.QueryExtension = Fake_glXQueryExtension; -   glx.QueryVersion = Fake_glXQueryVersion; -   glx.SwapBuffers = Fake_glXSwapBuffers; -   glx.UseXFont = Fake_glXUseXFont; -   glx.WaitGL = Fake_glXWaitGL; -   glx.WaitX = Fake_glXWaitX; - -   /*** GLX_VERSION_1_1 ***/ -   glx.GetClientString = Fake_glXGetClientString; -   glx.QueryExtensionsString = Fake_glXQueryExtensionsString; -   glx.QueryServerString = Fake_glXQueryServerString; - -   /*** GLX_VERSION_1_2 ***/ -   /*glx.GetCurrentDisplay = Fake_glXGetCurrentDisplay;*/ - -   /*** GLX_VERSION_1_3 ***/ -   glx.ChooseFBConfig = Fake_glXChooseFBConfig; -   glx.CreateNewContext = Fake_glXCreateNewContext; -   glx.CreatePbuffer = Fake_glXCreatePbuffer; -   glx.CreatePixmap = Fake_glXCreatePixmap; -   glx.CreateWindow = Fake_glXCreateWindow; -   glx.DestroyPbuffer = Fake_glXDestroyPbuffer; -   glx.DestroyPixmap = Fake_glXDestroyPixmap; -   glx.DestroyWindow = Fake_glXDestroyWindow; -   /*glx.GetCurrentReadDrawable = Fake_glXGetCurrentReadDrawable;*/ -   glx.GetFBConfigAttrib = Fake_glXGetFBConfigAttrib; -   glx.GetFBConfigs = Fake_glXGetFBConfigs; -   glx.GetSelectedEvent = Fake_glXGetSelectedEvent; -   glx.GetVisualFromFBConfig = Fake_glXGetVisualFromFBConfig; -   glx.MakeContextCurrent = Fake_glXMakeContextCurrent; -   glx.QueryContext = Fake_glXQueryContext; -   glx.QueryDrawable = Fake_glXQueryDrawable; -   glx.SelectEvent = Fake_glXSelectEvent; - -   /*** GLX_SGI_swap_control ***/ -   glx.SwapIntervalSGI = Fake_glXSwapIntervalSGI; - -   /*** GLX_SGI_video_sync ***/ -   glx.GetVideoSyncSGI = Fake_glXGetVideoSyncSGI; -   glx.WaitVideoSyncSGI = Fake_glXWaitVideoSyncSGI; - -   /*** GLX_SGI_make_current_read ***/ -   glx.MakeCurrentReadSGI = Fake_glXMakeCurrentReadSGI; -   /*glx.GetCurrentReadDrawableSGI = Fake_glXGetCurrentReadDrawableSGI;*/ - -/*** GLX_SGIX_video_source ***/ -#if defined(_VL_H) -   glx.CreateGLXVideoSourceSGIX = Fake_glXCreateGLXVideoSourceSGIX; -   glx.DestroyGLXVideoSourceSGIX = Fake_glXDestroyGLXVideoSourceSGIX; -#endif - -   /*** GLX_EXT_import_context ***/ -   glx.FreeContextEXT = Fake_glXFreeContextEXT; -   glx.GetContextIDEXT = Fake_glXGetContextIDEXT; -   /*glx.GetCurrentDisplayEXT = Fake_glXGetCurrentDisplayEXT;*/ -   glx.ImportContextEXT = Fake_glXImportContextEXT; -   glx.QueryContextInfoEXT = Fake_glXQueryContextInfoEXT; - -   /*** GLX_SGIX_fbconfig ***/ -   glx.GetFBConfigAttribSGIX = Fake_glXGetFBConfigAttribSGIX; -   glx.ChooseFBConfigSGIX = Fake_glXChooseFBConfigSGIX; -   glx.CreateGLXPixmapWithConfigSGIX = Fake_glXCreateGLXPixmapWithConfigSGIX; -   glx.CreateContextWithConfigSGIX = Fake_glXCreateContextWithConfigSGIX; -   glx.GetVisualFromFBConfigSGIX = Fake_glXGetVisualFromFBConfigSGIX; -   glx.GetFBConfigFromVisualSGIX = Fake_glXGetFBConfigFromVisualSGIX; - -   /*** GLX_SGIX_pbuffer ***/ -   glx.CreateGLXPbufferSGIX = Fake_glXCreateGLXPbufferSGIX; -   glx.DestroyGLXPbufferSGIX = Fake_glXDestroyGLXPbufferSGIX; -   glx.QueryGLXPbufferSGIX = Fake_glXQueryGLXPbufferSGIX; -   glx.SelectEventSGIX = Fake_glXSelectEventSGIX; -   glx.GetSelectedEventSGIX = Fake_glXGetSelectedEventSGIX; - -   /*** GLX_SGI_cushion ***/ -   glx.CushionSGI = Fake_glXCushionSGI; - -   /*** GLX_SGIX_video_resize ***/ -   glx.BindChannelToWindowSGIX = Fake_glXBindChannelToWindowSGIX; -   glx.ChannelRectSGIX = Fake_glXChannelRectSGIX; -   glx.QueryChannelRectSGIX = Fake_glXQueryChannelRectSGIX; -   glx.QueryChannelDeltasSGIX = Fake_glXQueryChannelDeltasSGIX; -   glx.ChannelRectSyncSGIX = Fake_glXChannelRectSyncSGIX; - -   /*** GLX_SGIX_dmbuffer **/ -#if defined(_DM_BUFFER_H_) -   glx.AssociateDMPbufferSGIX = NULL; -#endif - -   /*** GLX_SGIX_swap_group ***/ -   glx.JoinSwapGroupSGIX = Fake_glXJoinSwapGroupSGIX; - -   /*** GLX_SGIX_swap_barrier ***/ -   glx.BindSwapBarrierSGIX = Fake_glXBindSwapBarrierSGIX; -   glx.QueryMaxSwapBarriersSGIX = Fake_glXQueryMaxSwapBarriersSGIX; - -   /*** GLX_SUN_get_transparent_index ***/ -   glx.GetTransparentIndexSUN = Fake_glXGetTransparentIndexSUN; - -   /*** GLX_MESA_copy_sub_buffer ***/ -   glx.CopySubBufferMESA = Fake_glXCopySubBufferMESA; - -   /*** GLX_MESA_release_buffers ***/ -   glx.ReleaseBuffersMESA = Fake_glXReleaseBuffersMESA; - -   /*** GLX_MESA_pixmap_colormap ***/ -   glx.CreateGLXPixmapMESA = Fake_glXCreateGLXPixmapMESA; - -   /*** GLX_EXT_texture_from_pixmap ***/ -   glx.BindTexImageEXT = Fake_glXBindTexImageEXT; -   glx.ReleaseTexImageEXT = Fake_glXReleaseTexImageEXT; - -   return &glx; -} diff --git a/src/gallium/state_trackers/glx/xlib/fakeglx_fonts.c b/src/gallium/state_trackers/glx/xlib/fakeglx_fonts.c index e359046756..45b91c850a 100644 --- a/src/gallium/state_trackers/glx/xlib/fakeglx_fonts.c +++ b/src/gallium/state_trackers/glx/xlib/fakeglx_fonts.c @@ -1,9 +1,10 @@ -  /*   * Mesa 3-D graphics library - * Version:  3.5 + * Version:  7.6   * - * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. + * Copyright (C) 1995 Thorsten.Ohl @ Physik.TH-Darmstadt.de + * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved. + * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -24,13 +25,14 @@   */ -/* xfonts.c -- glXUseXFont() for Mesa written by - * Copyright (C) 1995 Thorsten.Ohl @ Physik.TH-Darmstadt.de +/** + * Fake implementation of glXUseXFont(). + * XXX rename this file to glx_usefont.c   */ +  #include "context.h"  #include "imports.h" -#include "fakeglx.h"  #include <GL/glx.h> @@ -210,7 +212,7 @@ isvalid(XFontStruct * fs, unsigned int which)  void -Fake_glXUseXFont(Font font, int first, int count, int listbase) +glXUseXFont(Font font, int first, int count, int listbase)  {     Display *dpy;     Window win; @@ -228,7 +230,8 @@ Fake_glXUseXFont(Font font, int first, int count, int listbase)     dpy = glXGetCurrentDisplay();     if (!dpy)        return;			/* I guess glXMakeCurrent wasn't called */ -   win = RootWindow(dpy, DefaultScreen(dpy)); +   i = DefaultScreen(dpy); +   win = RootWindow(dpy, i);     fs = XQueryFont(dpy, font);     if (!fs) { diff --git a/src/gallium/state_trackers/glx/xlib/glxapi.c b/src/gallium/state_trackers/glx/xlib/glxapi.c index c2cb34d7cf..e3d120fbcb 100644 --- a/src/gallium/state_trackers/glx/xlib/glxapi.c +++ b/src/gallium/state_trackers/glx/xlib/glxapi.c @@ -1,8 +1,9 @@  /*   * Mesa 3-D graphics library - * Version:  7.1 + * Version:  7.6   *  - * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved. + * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved. + * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.   *    * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -24,1052 +25,15 @@  /* - * This is the GLX API dispatcher.  Calls to the glX* functions are - * either routed to the real GLX encoders or to Mesa's pseudo-GLX functions. - * See the glxapi.h file for more details. + * XXX rename this file to glx_getproc.c   */ -#include <assert.h> -#include <stdlib.h> -#include <stdio.h> +#define GLX_GLXEXT_PROTOTYPES +  #include <string.h> +#include "GL/glx.h"  #include "glapi/glapi.h" -#include "glxapi.h" -#include "fakeglx.h" -#include "pipe/p_thread.h" - - -#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 -#  define PUBLIC __attribute__((visibility("default"))) -#  define USED __attribute__((used)) -#else -#  define PUBLIC -#  define USED -#endif - - -struct display_dispatch { -   Display *Dpy; -   struct _glxapi_table *Table; -   struct display_dispatch *Next; -}; - -static struct display_dispatch *DispatchList = NULL; - - -/* Display -> Dispatch caching */ -static Display *prevDisplay = NULL; -static struct _glxapi_table *prevTable = NULL; - - -static struct _glxapi_table * -get_dispatch(Display *dpy) -{ -   if (!dpy) -      return NULL; - -   /* search list of display/dispatch pairs for this display */ -   { -      const struct display_dispatch *d = DispatchList; -      while (d) { -         if (d->Dpy == dpy) { -            prevDisplay = dpy; -            prevTable = d->Table; -            return d->Table;  /* done! */ -         } -         d = d->Next; -      } -   } - -   /* A new display, determine if we should use real GLX -    * or Mesa's pseudo-GLX. -    */ -   { -      struct _glxapi_table *t = _mesa_GetGLXDispatchTable(); - -      if (t) { -         struct display_dispatch *d; -         d = (struct display_dispatch *) malloc(sizeof(struct display_dispatch)); -         if (d) { -            d->Dpy = dpy; -            d->Table = t; -            /* insert at head of list */ -            d->Next = DispatchList; -            DispatchList = d; -            /* update cache */ -            prevDisplay = dpy; -            prevTable = t; -            return t; -         } -      } -   } - -   /* If we get here that means we can't use real GLX on this display -    * and the Mesa pseudo-GLX software renderer wasn't compiled in. -    * Or, we ran out of memory! -    */ -   return NULL; -} - - -/* Don't use the GET_DISPATCH defined in glthread.h */ -#undef GET_DISPATCH - -#define GET_DISPATCH(DPY, TABLE)	\ -   if (DPY == prevDisplay) {		\ -      TABLE = prevTable;		\ -   }					\ -   else if (!DPY) {			\ -      TABLE = NULL;			\ -   }					\ -   else {				\ -      TABLE = get_dispatch(DPY);	\ -   } - -    - - -/** - * GLX API current context. - */ -pipe_tsd ContextTSD; - - -static void -SetCurrentContext(GLXContext c) -{ -   pipe_tsd_set(&ContextTSD, c); -} - - -/* - * GLX API entrypoints - */ - -/*** GLX_VERSION_1_0 ***/ - -XVisualInfo PUBLIC * -glXChooseVisual(Display *dpy, int screen, int *list) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return NULL; -   return (t->ChooseVisual)(dpy, screen, list); -} - - -void PUBLIC -glXCopyContext(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->CopyContext)(dpy, src, dst, mask); -} - - -GLXContext PUBLIC -glXCreateContext(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateContext)(dpy, visinfo, shareList, direct); -} - - -GLXPixmap PUBLIC -glXCreateGLXPixmap(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateGLXPixmap)(dpy, visinfo, pixmap); -} - - -void PUBLIC -glXDestroyContext(Display *dpy, GLXContext ctx) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   if (glXGetCurrentContext() == ctx) -      SetCurrentContext(NULL); -   (t->DestroyContext)(dpy, ctx); -} - - -void PUBLIC -glXDestroyGLXPixmap(Display *dpy, GLXPixmap pixmap) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->DestroyGLXPixmap)(dpy, pixmap); -} - - -int PUBLIC -glXGetConfig(Display *dpy, XVisualInfo *visinfo, int attrib, int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return GLX_NO_EXTENSION; -   return (t->GetConfig)(dpy, visinfo, attrib, value); -} - - -GLXContext PUBLIC -glXGetCurrentContext(void) -{ -   return (GLXContext) pipe_tsd_get(&ContextTSD); -} - - -GLXDrawable PUBLIC -glXGetCurrentDrawable(void) -{ -   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext(); -   return gc ? gc->currentDrawable : 0; -} - - -Bool PUBLIC -glXIsDirect(Display *dpy, GLXContext ctx) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (t->IsDirect)(dpy, ctx); -} - - -Bool PUBLIC -glXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx) -{ -   Bool b; -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) { -      return False; -   } -   b = (*t->MakeCurrent)(dpy, drawable, ctx); -   if (b) { -      SetCurrentContext(ctx); -   } -   return b; -} - - -Bool PUBLIC -glXQueryExtension(Display *dpy, int *errorb, int *event) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (t->QueryExtension)(dpy, errorb, event); -} - - -Bool PUBLIC -glXQueryVersion(Display *dpy, int *maj, int *min) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (t->QueryVersion)(dpy, maj, min); -} - - -void PUBLIC -glXSwapBuffers(Display *dpy, GLXDrawable drawable) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->SwapBuffers)(dpy, drawable); -} - - -void PUBLIC -glXUseXFont(Font font, int first, int count, int listBase) -{ -   struct _glxapi_table *t; -   Display *dpy = glXGetCurrentDisplay(); -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->UseXFont)(font, first, count, listBase); -} - - -void PUBLIC -glXWaitGL(void) -{ -   struct _glxapi_table *t; -   Display *dpy = glXGetCurrentDisplay(); -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->WaitGL)(); -} - - -void PUBLIC -glXWaitX(void) -{ -   struct _glxapi_table *t; -   Display *dpy = glXGetCurrentDisplay(); -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->WaitX)(); -} - - - -/*** GLX_VERSION_1_1 ***/ - -const char PUBLIC * -glXGetClientString(Display *dpy, int name) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return NULL; -   return (t->GetClientString)(dpy, name); -} - - -const char PUBLIC * -glXQueryExtensionsString(Display *dpy, int screen) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return NULL; -   return (t->QueryExtensionsString)(dpy, screen); -} - - -const char PUBLIC * -glXQueryServerString(Display *dpy, int screen, int name) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return NULL; -   return (t->QueryServerString)(dpy, screen, name); -} - - -/*** GLX_VERSION_1_2 ***/ - -Display PUBLIC * -glXGetCurrentDisplay(void) -{ -   /* Same code as in libGL's glxext.c */ -   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext(); -   if (NULL == gc) return NULL; -   return gc->currentDpy; -} - - - -/*** GLX_VERSION_1_3 ***/ - -GLXFBConfig PUBLIC * -glXChooseFBConfig(Display *dpy, int screen, const int *attribList, int *nitems) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->ChooseFBConfig)(dpy, screen, attribList, nitems); -} - - -GLXContext PUBLIC -glXCreateNewContext(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateNewContext)(dpy, config, renderType, shareList, direct); -} - - -GLXPbuffer PUBLIC -glXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribList) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreatePbuffer)(dpy, config, attribList); -} - - -GLXPixmap PUBLIC -glXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreatePixmap)(dpy, config, pixmap, attribList); -} - - -GLXWindow PUBLIC -glXCreateWindow(Display *dpy, GLXFBConfig config, Window win, const int *attribList) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateWindow)(dpy, config, win, attribList); -} - - -void PUBLIC -glXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->DestroyPbuffer)(dpy, pbuf); -} - - -void PUBLIC -glXDestroyPixmap(Display *dpy, GLXPixmap pixmap) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->DestroyPixmap)(dpy, pixmap); -} - - -void PUBLIC -glXDestroyWindow(Display *dpy, GLXWindow window) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->DestroyWindow)(dpy, window); -} - - -GLXDrawable PUBLIC -glXGetCurrentReadDrawable(void) -{ -   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext(); -   return gc ? gc->currentReadable : 0; -} - - -int PUBLIC -glXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return GLX_NO_EXTENSION; -   return (t->GetFBConfigAttrib)(dpy, config, attribute, value); -} - - -GLXFBConfig PUBLIC * -glXGetFBConfigs(Display *dpy, int screen, int *nelements) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->GetFBConfigs)(dpy, screen, nelements); -} - -void PUBLIC -glXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->GetSelectedEvent)(dpy, drawable, mask); -} - - -XVisualInfo PUBLIC * -glXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return NULL; -   return (t->GetVisualFromFBConfig)(dpy, config); -} - - -Bool PUBLIC -glXMakeContextCurrent(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) -{ -   Bool b; -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   b = (t->MakeContextCurrent)(dpy, draw, read, ctx); -   if (b) { -      SetCurrentContext(ctx); -   } -   return b; -} - - -int PUBLIC -glXQueryContext(Display *dpy, GLXContext ctx, int attribute, int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   assert(t); -   if (!t) -      return 0; /* XXX correct? */ -   return (t->QueryContext)(dpy, ctx, attribute, value); -} - - -void PUBLIC -glXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->QueryDrawable)(dpy, draw, attribute, value); -} - - -void PUBLIC -glXSelectEvent(Display *dpy, GLXDrawable drawable, unsigned long mask) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->SelectEvent)(dpy, drawable, mask); -} - - - -/*** GLX_SGI_swap_control ***/ - -int PUBLIC -glXSwapIntervalSGI(int interval) -{ -   struct _glxapi_table *t; -   Display *dpy = glXGetCurrentDisplay(); -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->SwapIntervalSGI)(interval); -} - - - -/*** GLX_SGI_video_sync ***/ - -int PUBLIC -glXGetVideoSyncSGI(unsigned int *count) -{ -   struct _glxapi_table *t; -   Display *dpy = glXGetCurrentDisplay(); -   GET_DISPATCH(dpy, t); -   if (!t || !glXGetCurrentContext()) -      return GLX_BAD_CONTEXT; -   return (t->GetVideoSyncSGI)(count); -} - -int PUBLIC -glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count) -{ -   struct _glxapi_table *t; -   Display *dpy = glXGetCurrentDisplay(); -   GET_DISPATCH(dpy, t); -   if (!t || !glXGetCurrentContext()) -      return GLX_BAD_CONTEXT; -   return (t->WaitVideoSyncSGI)(divisor, remainder, count); -} - - - -/*** GLX_SGI_make_current_read ***/ - -Bool PUBLIC -glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (t->MakeCurrentReadSGI)(dpy, draw, read, ctx); -} - -GLXDrawable PUBLIC -glXGetCurrentReadDrawableSGI(void) -{ -   return glXGetCurrentReadDrawable(); -} - - -#if defined(_VL_H) - -GLXVideoSourceSGIX PUBLIC -glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateGLXVideoSourceSGIX)(dpy, screen, server, path, nodeClass, drainNode); -} - -void PUBLIC -glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->DestroyGLXVideoSourceSGIX)(dpy, src); -} - -#endif - - -/*** GLX_EXT_import_context ***/ - -void PUBLIC -glXFreeContextEXT(Display *dpy, GLXContext context) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->FreeContextEXT)(dpy, context); -} - -GLXContextID PUBLIC -glXGetContextIDEXT(const GLXContext context) -{ -   return ((__GLXcontext *) context)->xid; -} - -Display PUBLIC * -glXGetCurrentDisplayEXT(void) -{ -   return glXGetCurrentDisplay(); -} - -GLXContext PUBLIC -glXImportContextEXT(Display *dpy, GLXContextID contextID) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->ImportContextEXT)(dpy, contextID); -} - -int PUBLIC -glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute,int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0;  /* XXX ok? */ -   return (t->QueryContextInfoEXT)(dpy, context, attribute, value); -} - - - -/*** GLX_SGIX_fbconfig ***/ - -int PUBLIC -glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->GetFBConfigAttribSGIX)(dpy, config, attribute, value); -} - -GLXFBConfigSGIX PUBLIC * -glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->ChooseFBConfigSGIX)(dpy, screen, attrib_list, nelements); -} - -GLXPixmap PUBLIC -glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateGLXPixmapWithConfigSGIX)(dpy, config, pixmap); -} - -GLXContext PUBLIC -glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateContextWithConfigSGIX)(dpy, config, render_type, share_list, direct); -} - -XVisualInfo PUBLIC * -glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->GetVisualFromFBConfigSGIX)(dpy, config); -} - -GLXFBConfigSGIX PUBLIC -glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->GetFBConfigFromVisualSGIX)(dpy, vis); -} - - - -/*** GLX_SGIX_pbuffer ***/ - -GLXPbufferSGIX PUBLIC -glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateGLXPbufferSGIX)(dpy, config, width, height, attrib_list); -} - -void PUBLIC -glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->DestroyGLXPbufferSGIX)(dpy, pbuf); -} - -int PUBLIC -glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->QueryGLXPbufferSGIX)(dpy, pbuf, attribute, value); -} - -void PUBLIC -glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->SelectEventSGIX)(dpy, drawable, mask); -} - -void PUBLIC -glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->GetSelectedEventSGIX)(dpy, drawable, mask); -} - - - -/*** GLX_SGI_cushion ***/ - -void PUBLIC -glXCushionSGI(Display *dpy, Window win, float cushion) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->CushionSGI)(dpy, win, cushion); -} - - - -/*** GLX_SGIX_video_resize ***/ - -int PUBLIC -glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->BindChannelToWindowSGIX)(dpy, screen, channel, window); -} - -int PUBLIC -glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->ChannelRectSGIX)(dpy, screen, channel, x, y, w, h); -} - -int PUBLIC -glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->QueryChannelRectSGIX)(dpy, screen, channel, x, y, w, h); -} - -int PUBLIC -glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->QueryChannelDeltasSGIX)(dpy, screen, channel, dx, dy, dw, dh); -} - -int PUBLIC -glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->ChannelRectSyncSGIX)(dpy, screen, channel, synctype); -} - - - -#if defined(_DM_BUFFER_H_) - -Bool PUBLIC -glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (t->AssociateDMPbufferSGIX)(dpy, pbuffer, params, dmbuffer); -} - -#endif - - -/*** GLX_SGIX_swap_group ***/ - -void PUBLIC -glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (*t->JoinSwapGroupSGIX)(dpy, drawable, member); -} - - -/*** GLX_SGIX_swap_barrier ***/ - -void PUBLIC -glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (*t->BindSwapBarrierSGIX)(dpy, drawable, barrier); -} - -Bool PUBLIC -glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (*t->QueryMaxSwapBarriersSGIX)(dpy, screen, max); -} - - - -/*** GLX_SUN_get_transparent_index ***/ - -Status PUBLIC -glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (*t->GetTransparentIndexSUN)(dpy, overlay, underlay, pTransparent); -} - - - -/*** GLX_MESA_copy_sub_buffer ***/ - -void PUBLIC -glXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return; -   (t->CopySubBufferMESA)(dpy, drawable, x, y, width, height); -} - - - -/*** GLX_MESA_release_buffers ***/ - -Bool PUBLIC -glXReleaseBuffersMESA(Display *dpy, Window w) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return False; -   return (t->ReleaseBuffersMESA)(dpy, w); -} - - - -/*** GLX_MESA_pixmap_colormap ***/ - -GLXPixmap PUBLIC -glXCreateGLXPixmapMESA(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (!t) -      return 0; -   return (t->CreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap); -} - -/*** GLX_EXT_texture_from_pixmap */ - -void -glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, -                   const int *attrib_list) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (t) -      t->BindTexImageEXT(dpy, drawable, buffer, attrib_list); -} - -void -glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer) -{ -   struct _glxapi_table *t; -   GET_DISPATCH(dpy, t); -   if (t) -      t->ReleaseTexImageEXT(dpy, drawable, buffer); -} - - -/**********************************************************************/ -/* GLX API management functions                                       */ -/**********************************************************************/ - - -const char * -_glxapi_get_version(void) -{ -   return "1.3"; -} - - - -/* - * Return size of the GLX dispatch table, in entries, not bytes. - */ -GLuint -_glxapi_get_dispatch_table_size(void) -{ -   return sizeof(struct _glxapi_table) / sizeof(void *); -} - - -static int -generic_no_op_func(void) -{ -   return 0; -} - - -/* - * Initialize all functions in given dispatch table to be no-ops - */ -void -_glxapi_set_no_op_table(struct _glxapi_table *t) -{ -   typedef int (*nop_func)(void); -   nop_func *dispatch = (nop_func *) t; -   GLuint n = _glxapi_get_dispatch_table_size(); -   GLuint i; -   for (i = 0; i < n; i++) { -      dispatch[i] = generic_no_op_func; -   } -}  struct name_address_pair { @@ -1077,6 +41,7 @@ struct name_address_pair {     __GLXextFuncPtr Address;  }; +  static struct name_address_pair GLX_functions[] = {     /*** GLX_VERSION_1_0 ***/     { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual }, @@ -1212,10 +177,10 @@ static struct name_address_pair GLX_functions[] = { -/* +/**   * Return address of named glX function, or NULL if not found.   */ -__GLXextFuncPtr +static __GLXextFuncPtr  _glxapi_get_proc_address(const char *funcName)  {     GLuint i; @@ -1227,11 +192,6 @@ _glxapi_get_proc_address(const char *funcName)  } - -/* - * This function does not get dispatched through the dispatch table - * since it's really a "meta" function. - */  __GLXextFuncPtr  glXGetProcAddressARB(const GLubyte *procName)  { diff --git a/src/gallium/state_trackers/glx/xlib/glxapi.h b/src/gallium/state_trackers/glx/xlib/glxapi.h index b4e12b4162..83ce38fe37 100644 --- a/src/gallium/state_trackers/glx/xlib/glxapi.h +++ b/src/gallium/state_trackers/glx/xlib/glxapi.h @@ -30,184 +30,7 @@  #define GLX_GLXEXT_PROTOTYPES  #include "GL/glx.h" - -/* The GLX API dispatcher (i.e. this code) is being built into stand-alone - * Mesa.  We don't know anything about XFree86 or real GLX so we define a - * minimal __GLXContextRec here so some of the functions in this file can - * work properly. - */ -typedef struct __GLXcontextRec { -   Display *currentDpy; -   GLboolean isDirect; -   GLXDrawable currentDrawable; -   GLXDrawable currentReadable; -   XID xid; -} __GLXcontext; - - -/* - * Almost all the GLX API functions get routed through this dispatch table. - * The exceptions are the glXGetCurrentXXX() functions. - * - * This dispatch table allows multiple GLX client-side modules to coexist. - * Specifically, a real GLX library (like SGI's or the Utah GLX) and Mesa's - * pseudo-GLX can be present at the same time.  The former being used on - * GLX-enabled X servers and the later on non-GLX X servers. - * - * Red Hat has been using this since Red Hat Linux 7.0 (I think). - * This'll be a standard feature in XFree86 4.3.  It basically allows one - * libGL to do both DRI-rendering and "fake GLX" rendering to X displays - * that lack the GLX extension. - */ -struct _glxapi_table { -   /*** GLX_VERSION_1_0 ***/ -   XVisualInfo *(*ChooseVisual)(Display *dpy, int screen, int *list); -   void (*CopyContext)(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask); -   GLXContext (*CreateContext)(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct); -   GLXPixmap (*CreateGLXPixmap)(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap); -   void (*DestroyContext)(Display *dpy, GLXContext ctx); -   void (*DestroyGLXPixmap)(Display *dpy, GLXPixmap pixmap); -   int (*GetConfig)(Display *dpy, XVisualInfo *visinfo, int attrib, int *value); -   /*GLXContext (*GetCurrentContext)(void);*/ -   /*GLXDrawable (*GetCurrentDrawable)(void);*/ -   Bool (*IsDirect)(Display *dpy, GLXContext ctx); -   Bool (*MakeCurrent)(Display *dpy, GLXDrawable drawable, GLXContext ctx); -   Bool (*QueryExtension)(Display *dpy, int *errorb, int *event); -   Bool (*QueryVersion)(Display *dpy, int *maj, int *min); -   void (*SwapBuffers)(Display *dpy, GLXDrawable drawable); -   void (*UseXFont)(Font font, int first, int count, int listBase); -   void (*WaitGL)(void); -   void (*WaitX)(void); - -   /*** GLX_VERSION_1_1 ***/ -   const char *(*GetClientString)(Display *dpy, int name); -   const char *(*QueryExtensionsString)(Display *dpy, int screen); -   const char *(*QueryServerString)(Display *dpy, int screen, int name); - -   /*** GLX_VERSION_1_2 ***/ -   /*Display *(*GetCurrentDisplay)(void);*/ - -   /*** GLX_VERSION_1_3 ***/ -   GLXFBConfig *(*ChooseFBConfig)(Display *dpy, int screen, const int *attribList, int *nitems); -   GLXContext (*CreateNewContext)(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct); -   GLXPbuffer (*CreatePbuffer)(Display *dpy, GLXFBConfig config, const int *attribList); -   GLXPixmap (*CreatePixmap)(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList); -   GLXWindow (*CreateWindow)(Display *dpy, GLXFBConfig config, Window win, const int *attribList); -   void (*DestroyPbuffer)(Display *dpy, GLXPbuffer pbuf); -   void (*DestroyPixmap)(Display *dpy, GLXPixmap pixmap); -   void (*DestroyWindow)(Display *dpy, GLXWindow window); -   /*GLXDrawable (*GetCurrentReadDrawable)(void);*/ -   int (*GetFBConfigAttrib)(Display *dpy, GLXFBConfig config, int attribute, int *value); -   GLXFBConfig *(*GetFBConfigs)(Display *dpy, int screen, int *nelements); -   void (*GetSelectedEvent)(Display *dpy, GLXDrawable drawable, unsigned long *mask); -   XVisualInfo *(*GetVisualFromFBConfig)(Display *dpy, GLXFBConfig config); -   Bool (*MakeContextCurrent)(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -   int (*QueryContext)(Display *dpy, GLXContext ctx, int attribute, int *value); -   void (*QueryDrawable)(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); -   void (*SelectEvent)(Display *dpy, GLXDrawable drawable, unsigned long mask); - -   /*** GLX_SGI_swap_control ***/ -   int (*SwapIntervalSGI)(int); - -   /*** GLX_SGI_video_sync ***/ -   int (*GetVideoSyncSGI)(unsigned int *count); -   int (*WaitVideoSyncSGI)(int divisor, int remainder, unsigned int *count); - -   /*** GLX_SGI_make_current_read ***/ -   Bool (*MakeCurrentReadSGI)(Display *, GLXDrawable, GLXDrawable, GLXContext); -   /*GLXDrawable (*GetCurrentReadDrawableSGI)(void);*/ - -   /*** GLX_SGIX_video_source (needs video library) ***/ -#if defined(_VL_H_) -   GLXVideoSourceSGIX (*CreateGLXVideoSourceSGIX)(Display *, int, VLServer, VLPath, int, VLNode); -   void (*DestroyGLXVideoSourceSGIX)(Display *, GLXVideoSourceSGIX); -#else -   void *CreateGLXVideoSourceSGIX; -   void *DestroyGLXVideoSourceSGIX; -#endif - -   /*** GLX_EXT_import_context ***/ -   void (*FreeContextEXT)(Display *dpy, GLXContext context); -   GLXContextID (*GetContextIDEXT)(const GLXContext context); -   /*Display *(*GetCurrentDisplayEXT)(void);*/ -   GLXContext (*ImportContextEXT)(Display *dpy, GLXContextID contextID); -   int (*QueryContextInfoEXT)(Display *dpy, GLXContext context, int attribute,int *value); - -   /*** GLX_SGIX_fbconfig ***/ -   int (*GetFBConfigAttribSGIX)(Display *, GLXFBConfigSGIX, int, int *); -   GLXFBConfigSGIX * (*ChooseFBConfigSGIX)(Display *, int, int *, int *); -   GLXPixmap (*CreateGLXPixmapWithConfigSGIX)(Display *, GLXFBConfigSGIX, Pixmap); -   GLXContext (*CreateContextWithConfigSGIX)(Display *, GLXFBConfigSGIX, int, GLXContext, Bool); -   XVisualInfo * (*GetVisualFromFBConfigSGIX)(Display *, GLXFBConfigSGIX); -   GLXFBConfigSGIX (*GetFBConfigFromVisualSGIX)(Display *, XVisualInfo *); - -   /*** GLX_SGIX_pbuffer ***/ -   GLXPbufferSGIX (*CreateGLXPbufferSGIX)(Display *, GLXFBConfigSGIX, unsigned int, unsigned int, int *); -   void (*DestroyGLXPbufferSGIX)(Display *, GLXPbufferSGIX); -   int (*QueryGLXPbufferSGIX)(Display *, GLXPbufferSGIX, int, unsigned int *); -   void (*SelectEventSGIX)(Display *, GLXDrawable, unsigned long); -   void (*GetSelectedEventSGIX)(Display *, GLXDrawable, unsigned long *); - -   /*** GLX_SGI_cushion ***/ -   void (*CushionSGI)(Display *, Window, float); - -   /*** GLX_SGIX_video_resize ***/ -   int (*BindChannelToWindowSGIX)(Display *, int, int, Window); -   int (*ChannelRectSGIX)(Display *, int, int, int, int, int, int); -   int (*QueryChannelRectSGIX)(Display *, int, int, int *, int *, int *, int *); -   int (*QueryChannelDeltasSGIX)(Display *, int, int, int *, int *, int *, int *); -   int (*ChannelRectSyncSGIX)(Display *, int, int, GLenum); - -   /*** GLX_SGIX_dmbuffer (needs dmedia library) ***/ -#if defined (_DM_BUFFER_H_) -   Bool (*AssociateDMPbufferSGIX)(Display *, GLXPbufferSGIX, DMparams *, DMbuffer); -#else -   void *AssociciateDMPbufferSGIX; -#endif - -   /*** GLX_SGIX_swap_group ***/ -   void (*JoinSwapGroupSGIX)(Display *, GLXDrawable, GLXDrawable); - -   /*** GLX_SGIX_swap_barrier ***/ -   void (*BindSwapBarrierSGIX)(Display *, GLXDrawable, int); -   Bool (*QueryMaxSwapBarriersSGIX)(Display *, int, int *); - -   /*** GLX_SUN_get_transparent_index ***/ -   Status (*GetTransparentIndexSUN)(Display *, Window, Window, long *); - -   /*** GLX_MESA_copy_sub_buffer ***/ -   void (*CopySubBufferMESA)(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); - -   /*** GLX_MESA_release_buffers ***/ -   Bool (*ReleaseBuffersMESA)(Display *dpy, Window w); - -   /*** GLX_MESA_pixmap_colormap ***/ -   GLXPixmap (*CreateGLXPixmapMESA)(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap); - -   /*** GLX_EXT_texture_from_pixmap ***/ -   void (*BindTexImageEXT)(Display *dpy, GLXDrawable drawable, int buffer, -                           const int *attrib_list); -   void (*ReleaseTexImageEXT)(Display *dpy, GLXDrawable drawable, int buffer); -}; - - - -extern const char * -_glxapi_get_version(void); - - - - -extern GLuint -_glxapi_get_dispatch_table_size(void); - - -extern void -_glxapi_set_no_op_table(struct _glxapi_table *t); - - -extern __GLXextFuncPtr -_glxapi_get_proc_address(const char *funcName); +/* this header is no longer needed */  #endif | 
