merge the (rest of) texmem branch
[mesa.git] / src / glx / x11 / glxcmds.c
index 6a31f24dd8cc7641d8dabf74a7363d42f992e4f3..9d1bb2a0b55db2d5eaf68484ba2fe4ba655eadba 100644 (file)
@@ -1650,18 +1650,10 @@ PUBLIC XVisualInfo *glXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config)
 }
 
 
-/*
-** GLX_SGI_make_current_read
-*/
-
-PUBLIC GLX_ALIAS(GLXDrawable, glXGetCurrentReadDrawableSGI, (void), (),
-         glXGetCurrentReadDrawable)
-
-
 /*
 ** GLX_SGI_swap_control
 */
-PUBLIC int glXSwapIntervalSGI(int interval)
+static int __glXSwapIntervalSGI(int interval)
 {
    xGLXVendorPrivateReq *req;
    GLXContext gc = __glXGetCurrentContext();
@@ -1708,7 +1700,7 @@ PUBLIC int glXSwapIntervalSGI(int interval)
    req->vendorCode = X_GLXvop_SwapIntervalSGI;
    req->contextTag = gc->currentContextTag;
 
-   interval_ptr = (CARD32 *) req + 1;
+   interval_ptr = (CARD32 *) (req + 1);
    *interval_ptr = interval;
 
    UnlockDisplay(dpy);
@@ -1722,7 +1714,7 @@ PUBLIC int glXSwapIntervalSGI(int interval)
 /*
 ** GLX_MESA_swap_control
 */
-PUBLIC GLint glXSwapIntervalMESA(unsigned interval)
+static int __glXSwapIntervalMESA(unsigned int interval)
 {
 #ifdef GLX_DIRECT_RENDERING
    GLXContext gc = __glXGetCurrentContext();
@@ -1754,7 +1746,8 @@ PUBLIC GLint glXSwapIntervalMESA(unsigned interval)
    return GLX_BAD_CONTEXT;
 }
  
-PUBLIC GLint glXGetSwapIntervalMESA( void )
+
+static int __glXGetSwapIntervalMESA(void)
 {
 #ifdef GLX_DIRECT_RENDERING
    GLXContext gc = __glXGetCurrentContext();
@@ -1784,7 +1777,7 @@ PUBLIC GLint glXGetSwapIntervalMESA( void )
 ** GLX_MESA_swap_frame_usage
 */
 
-PUBLIC GLint glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
+static GLint __glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
 {
    int   status = GLX_BAD_CONTEXT;
 #ifdef GLX_DIRECT_RENDERING
@@ -1804,7 +1797,7 @@ PUBLIC GLint glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
 }
 
     
-PUBLIC GLint glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
+static GLint __glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
 {
    int   status = GLX_BAD_CONTEXT;
 #ifdef GLX_DIRECT_RENDERING
@@ -1824,8 +1817,8 @@ PUBLIC GLint glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
 }
 
 
-PUBLIC GLint glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable,
-                                 GLfloat *usage)
+static GLint __glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable,
+                                   GLfloat *usage)
 {
    int   status = GLX_BAD_CONTEXT;
 #ifdef GLX_DIRECT_RENDERING
@@ -1851,9 +1844,9 @@ PUBLIC GLint glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable,
 }
 
 
-PUBLIC GLint glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable,
-                                      int64_t *sbc, int64_t *missedFrames,
-                                      GLfloat *lastMissedUsage)
+static GLint __glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable,
+                                        int64_t *sbc, int64_t *missedFrames,
+                                        GLfloat *lastMissedUsage)
 {
    int   status = GLX_BAD_CONTEXT;
 #ifdef GLX_DIRECT_RENDERING
@@ -1883,7 +1876,7 @@ PUBLIC GLint glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable,
 /*
 ** GLX_SGI_video_sync
 */
-PUBLIC int glXGetVideoSyncSGI(unsigned int *count)
+static int __glXGetVideoSyncSGI(unsigned int *count)
 {
    /* FIXME: Looking at the GLX_SGI_video_sync spec in the extension registry,
     * FIXME: there should be a GLX encoding for this call.  I can find no
@@ -1912,7 +1905,7 @@ PUBLIC int glXGetVideoSyncSGI(unsigned int *count)
    return GLX_BAD_CONTEXT;
 }
 
-PUBLIC int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
+static int __glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
 {
 #ifdef GLX_DIRECT_RENDERING
    GLXContext gc = __glXGetCurrentContext();
@@ -1949,33 +1942,6 @@ PUBLIC int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
 }
 
 
-/*
-** GLX_SGIS_video_source
-*/
-#if defined(_VL_H)
-
-PUBLIC GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX(Display *dpy,
-                                     int screen, VLServer server, VLPath path,
-                                     int nodeClass, VLNode drainNode)
-{
-   (void) dpy;
-   (void) screen;
-   (void) server;
-   (void) path;
-   (void) nodeClass;
-   (void) drainNode;
-   return 0;
-}
-
-PUBLIC void glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)
-{
-   (void) dpy;
-   (void) src;
-}
-
-#endif
-
-
 /*
 ** GLX_SGIX_fbconfig
 ** Many of these functions are aliased to GLX 1.3 entry points in the 
@@ -2080,100 +2046,11 @@ PUBLIC GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX(Display *dpy,
 }
 
 
-/*
-** GLX_SGI_cushion
-*/
-PUBLIC void glXCushionSGI(Display *dpy, Window win, float cushion)
-{
-   (void) dpy;
-   (void) win;
-   (void) cushion;
-}
-
-
-/*
-** GLX_SGIX_video_resize
-*/
-PUBLIC int glXBindChannelToWindowSGIX(Display *dpy, int screen,
-                                     int channel , Window window)
-{
-   (void) dpy;
-   (void) screen;
-   (void) channel;
-   (void) window;
-   return 0;
-}
-
-PUBLIC int glXChannelRectSGIX(Display *dpy, int screen, int channel,
-                             int x, int y, int w, int h)
-{
-   (void) dpy;
-   (void) screen;
-   (void) channel;
-   (void) x;
-   (void) y;
-   (void) w;
-   (void) h;
-   return 0;
-}
-
-PUBLIC int glXQueryChannelRectSGIX(Display *dpy, int screen, int channel,
-                                  int *x, int *y, int *w, int *h)
-{
-   (void) dpy;
-   (void) screen;
-   (void) channel;
-   (void) x;
-   (void) y;
-   (void) w;
-   (void) h;
-   return 0;
-}
-
-int glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel,
-                             int *dx, int *dy, int *dw, int *dh)
-{
-   (void) dpy;
-   (void) screen;
-   (void) channel;
-   (void) dx;
-   (void) dy;
-   (void) dw;
-   (void) dh;
-   return 0;
-}
-
-PUBLIC int glXChannelRectSyncSGIX(Display *dpy, int screen,
-                                 int channel, GLenum synctype)
-{
-   (void) dpy;
-   (void) screen;
-   (void) channel;
-   (void) synctype;
-   return 0;
-}
-
-
-#if defined(_DM_BUFFER_H_)
-
-PUBLIC Bool glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer,
-                                     DMparams *params, DMbuffer dmbuffer)
-{
-   (void) dpy;
-   (void) pbuffer;
-   (void) params;
-   (void) dmbuffer;
-   return False;
-}
-
-#endif
-
-
 /*
 ** GLX_SGIX_swap_group
 */
-PUBLIC void glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable,
-                                GLXDrawable member)
+static void __glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable,
+                                  GLXDrawable member)
 {
    (void) dpy;
    (void) drawable;
@@ -2184,15 +2061,15 @@ PUBLIC void glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable,
 /*
 ** GLX_SGIX_swap_barrier
 */
-PUBLIC void glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable,
-                                  int barrier)
+static void __glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable,
+                                    int barrier)
 {
    (void) dpy;
    (void) drawable;
    (void) barrier;
 }
 
-PUBLIC Bool glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
+static Bool __glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
 {
    (void) dpy;
    (void) screen;
@@ -2201,25 +2078,11 @@ PUBLIC Bool glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
 }
 
 
-/*
-** GLX_SUN_get_transparent_index
-*/
-PUBLIC Status glXGetTransparentIndexSUN(Display *dpy, Window overlay,
-                                       Window underlay, long *pTransparent)
-{
-   (void) dpy;
-   (void) overlay;
-   (void) underlay;
-   (void) pTransparent;
-   return 0;
-}
-
-
 /*
 ** GLX_OML_sync_control
 */
-PUBLIC Bool glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable,
-                               int64_t *ust, int64_t *msc, int64_t *sbc)
+static Bool __glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable,
+                                 int64_t *ust, int64_t *msc, int64_t *sbc)
 {
 #ifdef GLX_DIRECT_RENDERING
     __GLXdisplayPrivate * const priv = __glXInitialize(dpy);
@@ -2263,8 +2126,8 @@ PUBLIC Bool glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable,
  *       when GLX_OML_sync_control appears in the client extension string.
  */
 
-PUBLIC Bool glXGetMscRateOML(Display * dpy, GLXDrawable drawable,
-                            int32_t * numerator, int32_t * denominator)
+Bool __glXGetMscRateOML(Display * dpy, GLXDrawable drawable,
+                       int32_t * numerator, int32_t * denominator)
 {
 #if defined( GLX_DIRECT_RENDERING ) && defined( XF86VIDMODE )
    __GLXdisplayPrivate * const priv = __glXInitialize(dpy);
@@ -2337,9 +2200,9 @@ PUBLIC Bool glXGetMscRateOML(Display * dpy, GLXDrawable drawable,
 }
 
 
-PUBLIC int64_t glXSwapBuffersMscOML(Display *dpy, GLXDrawable drawable,
-                                   int64_t target_msc, int64_t divisor,
-                                   int64_t remainder)
+static int64_t __glXSwapBuffersMscOML(Display *dpy, GLXDrawable drawable,
+                                     int64_t target_msc, int64_t divisor,
+                                     int64_t remainder)
 {
 #ifdef GLX_DIRECT_RENDERING
    int screen;
@@ -2372,10 +2235,10 @@ PUBLIC int64_t glXSwapBuffersMscOML(Display *dpy, GLXDrawable drawable,
 }
 
 
-PUBLIC Bool glXWaitForMscOML(Display * dpy, GLXDrawable drawable,
-                            int64_t target_msc, int64_t divisor,
-                            int64_t remainder, int64_t *ust,
-                            int64_t *msc, int64_t *sbc)
+static Bool __glXWaitForMscOML(Display * dpy, GLXDrawable drawable,
+                              int64_t target_msc, int64_t divisor,
+                              int64_t remainder, int64_t *ust,
+                              int64_t *msc, int64_t *sbc)
 {
 #ifdef GLX_DIRECT_RENDERING
    int screen;
@@ -2415,9 +2278,9 @@ PUBLIC Bool glXWaitForMscOML(Display * dpy, GLXDrawable drawable,
 }
 
 
-PUBLIC Bool glXWaitForSbcOML(Display * dpy, GLXDrawable drawable,
-                            int64_t target_sbc, int64_t *ust,
-                            int64_t *msc, int64_t *sbc )
+static Bool __glXWaitForSbcOML(Display * dpy, GLXDrawable drawable,
+                              int64_t target_sbc, int64_t *ust,
+                              int64_t *msc, int64_t *sbc )
 {
 #ifdef GLX_DIRECT_RENDERING
    int screen;
@@ -2551,7 +2414,7 @@ PUBLIC GLuint glXGetMemoryOffsetMESA( Display *dpy, int scrn,
  *     glXDestroyPbuffer glXDestroyPixmap glXDestroyWindow
  *     glXDestroyGLXPbufferSGIX glXDestroyGLXVideoSourceSGIX
  */
-PUBLIC Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )
+static Bool __glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )
 {
    (void) dpy;
    (void) d;
@@ -2568,28 +2431,182 @@ PUBLIC GLXPixmap glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visual,
    (void) cmap;
    return 0;
 }
+/*@}*/
 
 
-PUBLIC void glXCopySubBufferMESA(Display *dpy, GLXDrawable drawable,
-                                int x, int y, int width, int height)
+/**
+ * GLX_MESA_copy_sub_buffer
+ */
+#define X_GLXvop_CopySubBufferMESA 5154 /* temporary */
+static void __glXCopySubBufferMESA(Display *dpy, GLXDrawable drawable,
+                                  int x, int y, int width, int height)
 {
-   (void) dpy;
-   (void) drawable;
-   (void) x;
-   (void) y;
-   (void) width;
-   (void) height;
+    xGLXVendorPrivateReq *req;
+    GLXContext gc;
+    GLXContextTag tag;
+    CARD32 *drawable_ptr;
+    INT32 *x_ptr, *y_ptr, *w_ptr, *h_ptr;
+    CARD8 opcode;
+
+#ifdef GLX_DIRECT_RENDERING
+    int screen;
+    __DRIdrawable *pdraw = GetDRIDrawable( dpy, drawable, & screen );
+    if ( pdraw != NULL ) {
+       __GLXscreenConfigs * const psc = GetGLXScreenConfigs( dpy, screen );
+       if ( __glXExtensionBitIsEnabled( psc, MESA_copy_sub_buffer_bit ) ) {
+           (*pdraw->copySubBuffer)(dpy, pdraw->private, x, y, width, height);
+       }
+
+       return;
+    }
+#endif
+
+    opcode = __glXSetupForCommand(dpy);
+    if (!opcode)
+       return;
+
+    /*
+    ** The calling thread may or may not have a current context.  If it
+    ** does, send the context tag so the server can do a flush.
+    */
+    gc = __glXGetCurrentContext();
+    if ((gc != NULL) && (dpy == gc->currentDpy) &&
+       ((drawable == gc->currentDrawable) ||
+        (drawable == gc->currentReadable)) ) {
+       tag = gc->currentContextTag;
+    } else {
+       tag = 0;
+    }
+
+    LockDisplay(dpy);
+    GetReqExtra(GLXVendorPrivate, sizeof(CARD32) + sizeof(INT32) * 4,req);
+    req->reqType = opcode;
+    req->glxCode = X_GLXVendorPrivate;
+    req->vendorCode = X_GLXvop_CopySubBufferMESA;
+    req->contextTag = tag;
+
+    drawable_ptr = (CARD32 *) (req + 1);
+    x_ptr = (INT32 *) (drawable_ptr + 1);
+    y_ptr = (INT32 *) (drawable_ptr + 2);
+    w_ptr = (INT32 *) (drawable_ptr + 3);
+    h_ptr = (INT32 *) (drawable_ptr + 4);
+
+    *drawable_ptr = drawable;
+    *x_ptr = x;
+    *y_ptr = y;
+    *w_ptr = width;
+    *h_ptr = height;
+
+    UnlockDisplay(dpy);
+    SyncHandle();
 }
 
 
-PUBLIC Bool glXSet3DfxModeMESA( int mode )
+/**
+ * GLX_EXT_texture_from_pixmap
+ */
+/*@{*/
+static void __glXBindTexImageEXT(Display *dpy,
+                                GLXDrawable drawable,
+                                int buffer,
+                                const int *attrib_list)
 {
-   (void) mode;
-   return GL_FALSE;
+    xGLXVendorPrivateReq *req;
+    GLXContext gc = __glXGetCurrentContext();
+    CARD32 *drawable_ptr;
+    INT32 *buffer_ptr;
+    CARD32 *num_attrib_ptr;
+    CARD32 *attrib_ptr;
+    CARD8 opcode;
+    unsigned int i;
+
+    if (gc == NULL)
+       return;
+
+    i = 0;
+    if (attrib_list) {
+       while (attrib_list[i * 2] != None)
+           i++;
+    }
+#ifdef GLX_DIRECT_RENDERING
+    if (gc->isDirect)
+       return;
+#endif
+
+    opcode = __glXSetupForCommand(dpy);
+    if (!opcode)
+       return;
+
+    LockDisplay(dpy);
+    GetReqExtra(GLXVendorPrivate, 12 + 8 * i,req);
+    req->reqType = opcode;
+    req->glxCode = X_GLXVendorPrivate;
+    req->vendorCode = X_GLXvop_BindTexImageEXT;
+    req->contextTag = gc->currentContextTag;
+
+    drawable_ptr = (CARD32 *) (req + 1);
+    buffer_ptr = (INT32 *) (drawable_ptr + 1);
+    num_attrib_ptr = (CARD32 *) (buffer_ptr + 1);
+    attrib_ptr = (CARD32 *) (num_attrib_ptr + 1);
+
+    *drawable_ptr = drawable;
+    *buffer_ptr = buffer;
+    *num_attrib_ptr = (CARD32) i;
+
+    i = 0;
+    if (attrib_list) {
+       while (attrib_list[i * 2] != None)
+       {
+           *attrib_ptr++ = (CARD32) attrib_list[i * 2 + 0];
+           *attrib_ptr++ = (CARD32) attrib_list[i * 2 + 1];
+           i++;
+       }
+    }
+
+    UnlockDisplay(dpy);
+    SyncHandle();
 }
-/*@}*/
 
+static void __glXReleaseTexImageEXT(Display *dpy,
+                                   GLXDrawable drawable,
+                                   int buffer)
+{
+    xGLXVendorPrivateReq *req;
+    GLXContext gc = __glXGetCurrentContext();
+    CARD32 *drawable_ptr;
+    INT32 *buffer_ptr;
+    CARD8 opcode;
+
+    if (gc == NULL)
+       return;
+
+#ifdef GLX_DIRECT_RENDERING
+    if (gc->isDirect)
+       return;
+#endif
+
+    opcode = __glXSetupForCommand(dpy);
+    if (!opcode)
+       return;
 
+    LockDisplay(dpy);
+    GetReqExtra(GLXVendorPrivate, sizeof(CARD32)+sizeof(INT32),req);
+    req->reqType = opcode;
+    req->glxCode = X_GLXVendorPrivate;
+    req->vendorCode = X_GLXvop_ReleaseTexImageEXT;
+    req->contextTag = gc->currentContextTag;
+
+    drawable_ptr = (CARD32 *) (req + 1);
+    buffer_ptr = (INT32 *) (drawable_ptr + 1);
+
+    *drawable_ptr = drawable;
+    *buffer_ptr = buffer;
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+}
+/*@}*/
 
 /**
  * \c strdup is actually not a standard ANSI C or POSIX routine.
@@ -2668,22 +2685,16 @@ static const struct name_address_pair GLX_functions[] = {
    GLX_FUNCTION( glXSelectEvent ),
 
    /*** GLX_SGI_swap_control ***/
-   GLX_FUNCTIONglXSwapIntervalSGI ),
+   GLX_FUNCTION2( glXSwapIntervalSGI, __glXSwapIntervalSGI ),
 
    /*** GLX_SGI_video_sync ***/
-   GLX_FUNCTIONglXGetVideoSyncSGI ),
-   GLX_FUNCTIONglXWaitVideoSyncSGI ),
+   GLX_FUNCTION2( glXGetVideoSyncSGI, __glXGetVideoSyncSGI ),
+   GLX_FUNCTION2( glXWaitVideoSyncSGI, __glXWaitVideoSyncSGI ),
 
    /*** GLX_SGI_make_current_read ***/
    GLX_FUNCTION2( glXMakeCurrentReadSGI, glXMakeContextCurrent ),
    GLX_FUNCTION2( glXGetCurrentReadDrawableSGI, glXGetCurrentReadDrawable ),
 
-   /*** GLX_SGIX_video_source ***/
-#if defined(_VL_H)
-   GLX_FUNCTION( glXCreateGLXVideoSourceSGIX ),
-   GLX_FUNCTION( glXDestroyGLXVideoSourceSGIX ),
-#endif
-
    /*** GLX_EXT_import_context ***/
    GLX_FUNCTION( glXFreeContextEXT ),
    GLX_FUNCTION( glXGetContextIDEXT ),
@@ -2706,30 +2717,12 @@ static const struct name_address_pair GLX_functions[] = {
    GLX_FUNCTION( glXSelectEventSGIX ),
    GLX_FUNCTION( glXGetSelectedEventSGIX ),
 
-   /*** GLX_SGI_cushion ***/
-   GLX_FUNCTION( glXCushionSGI ),
-
-   /*** GLX_SGIX_video_resize ***/
-   GLX_FUNCTION( glXBindChannelToWindowSGIX ),
-   GLX_FUNCTION( glXChannelRectSGIX ),
-   GLX_FUNCTION( glXQueryChannelRectSGIX ),
-   GLX_FUNCTION( glXQueryChannelDeltasSGIX ),
-   GLX_FUNCTION( glXChannelRectSyncSGIX ),
-
-   /*** GLX_SGIX_dmbuffer **/
-#if defined(_DM_BUFFER_H_)
-   GLX_FUNCTION( glXAssociateDMPbufferSGIX ),
-#endif
-
    /*** GLX_SGIX_swap_group ***/
-   GLX_FUNCTIONglXJoinSwapGroupSGIX ),
+   GLX_FUNCTION2( glXJoinSwapGroupSGIX, __glXJoinSwapGroupSGIX ),
 
    /*** GLX_SGIX_swap_barrier ***/
-   GLX_FUNCTION( glXBindSwapBarrierSGIX ),
-   GLX_FUNCTION( glXQueryMaxSwapBarriersSGIX ),
-
-   /*** GLX_SUN_get_transparent_index ***/
-   GLX_FUNCTION( glXGetTransparentIndexSUN ),
+   GLX_FUNCTION2( glXBindSwapBarrierSGIX, __glXBindSwapBarrierSGIX ),
+   GLX_FUNCTION2( glXQueryMaxSwapBarriersSGIX, __glXQueryMaxSwapBarriersSGIX ),
 
    /*** GLX_MESA_allocate_memory ***/
    GLX_FUNCTION( glXAllocateMemoryMESA ),
@@ -2737,26 +2730,23 @@ static const struct name_address_pair GLX_functions[] = {
    GLX_FUNCTION( glXGetMemoryOffsetMESA ),
 
    /*** GLX_MESA_copy_sub_buffer ***/
-   GLX_FUNCTIONglXCopySubBufferMESA ),
+   GLX_FUNCTION2( glXCopySubBufferMESA, __glXCopySubBufferMESA ),
 
    /*** GLX_MESA_pixmap_colormap ***/
    GLX_FUNCTION( glXCreateGLXPixmapMESA ),
 
    /*** GLX_MESA_release_buffers ***/
-   GLX_FUNCTION( glXReleaseBuffersMESA ),
-
-   /*** GLX_MESA_set_3dfx_mode ***/
-   GLX_FUNCTION( glXSet3DfxModeMESA ),
+   GLX_FUNCTION2( glXReleaseBuffersMESA, __glXReleaseBuffersMESA ),
 
    /*** GLX_MESA_swap_control ***/
-   GLX_FUNCTIONglXSwapIntervalMESA ),
-   GLX_FUNCTIONglXGetSwapIntervalMESA ),
+   GLX_FUNCTION2( glXSwapIntervalMESA, __glXSwapIntervalMESA ),
+   GLX_FUNCTION2( glXGetSwapIntervalMESA, __glXGetSwapIntervalMESA ),
 
    /*** GLX_MESA_swap_frame_usage ***/
-   GLX_FUNCTIONglXBeginFrameTrackingMESA ),
-   GLX_FUNCTIONglXEndFrameTrackingMESA ),
-   GLX_FUNCTIONglXGetFrameUsageMESA ),
-   GLX_FUNCTIONglXQueryFrameTrackingMESA ),
+   GLX_FUNCTION2( glXBeginFrameTrackingMESA, __glXBeginFrameTrackingMESA ),
+   GLX_FUNCTION2( glXEndFrameTrackingMESA, __glXEndFrameTrackingMESA ),
+   GLX_FUNCTION2( glXGetFrameUsageMESA, __glXGetFrameUsageMESA ),
+   GLX_FUNCTION2( glXQueryFrameTrackingMESA, __glXQueryFrameTrackingMESA ),
 
    /*** GLX_ARB_get_proc_address ***/
    GLX_FUNCTION( glXGetProcAddressARB ),
@@ -2765,11 +2755,15 @@ static const struct name_address_pair GLX_functions[] = {
    GLX_FUNCTION2( glXGetProcAddress, glXGetProcAddressARB ),
 
    /*** GLX_OML_sync_control ***/
-   GLX_FUNCTION( glXWaitForSbcOML ),
-   GLX_FUNCTION( glXWaitForMscOML ),
-   GLX_FUNCTION( glXSwapBuffersMscOML ),
-   GLX_FUNCTION( glXGetMscRateOML ),
-   GLX_FUNCTION( glXGetSyncValuesOML ),
+   GLX_FUNCTION2( glXWaitForSbcOML, __glXWaitForSbcOML ),
+   GLX_FUNCTION2( glXWaitForMscOML, __glXWaitForMscOML ),
+   GLX_FUNCTION2( glXSwapBuffersMscOML, __glXSwapBuffersMscOML ),
+   GLX_FUNCTION2( glXGetMscRateOML, __glXGetMscRateOML ),
+   GLX_FUNCTION2( glXGetSyncValuesOML, __glXGetSyncValuesOML ),
+
+   /*** GLX_EXT_texture_from_pixmap ***/
+   GLX_FUNCTION2( glXBindTexImageEXT, __glXBindTexImageEXT ),
+   GLX_FUNCTION2( glXReleaseTexImageEXT, __glXReleaseTexImageEXT ),
 
 #ifdef GLX_DIRECT_RENDERING
    /*** DRI configuration ***/
@@ -2888,8 +2882,9 @@ int __glXGetInternalVersion(void)
      *            months ago. :(
      * 20050727 - Gut all the old interfaces.  This breaks compatability with
      *            any DRI driver built to any previous version.
+     * 20060314 - Added support for GLX_MESA_copy_sub_buffer.
      */
-    return 20050727;
+    return 20060314;
 }