--- glxclient.h.~1.28.2.1.~	2003-05-23 15:52:50.000000000 +0200
+++ glxclient.h	2003-08-02 00:44:19.000000000 +0200
@@ -592,6 +592,11 @@
 
 #ifdef GLX_DIRECT_RENDERING
     /*
+    ** Per screen dynamic client GLX extensions
+    */
+    unsigned char direct_support[8];
+    GLboolean ext_list_first_time; /* = GL_TRUE */
+    /*
     ** Per screen direct rendering interface functions and data.
     */
     __DRIscreen driScreen;
@@ -641,6 +646,8 @@
 #endif
 };
 
+extern __GLXscreenConfigs *__glXFindScreenConfigs(Display *dpy, int scrn);
+
 void __glXFreeContext(__GLXcontext*);
 
 extern GLubyte *__glXFlushRenderBuffer(__GLXcontext*, GLubyte*);
@@ -656,7 +663,7 @@
 
 /* Functions for extending the GLX API: */
 extern void *__glXRegisterGLXFunction(const char *funcName, void *funcAddr);
-extern void __glXRegisterGLXExtensionString(const char *extName);
+extern void __glXRegisterGLXExtensionString(Display *dpy, int screen, const char *extName);
 typedef void * (* PFNGLXREGISTERGLXFUNCTIONPROC) ( const char * funcName,
 						   void * funcAdd );
 
--- glxcmds.c.~1.41.2.1.~	2003-05-23 15:55:37.000000000 +0200
+++ glxcmds.c	2003-08-02 00:12:04.000000000 +0200
@@ -1330,7 +1330,7 @@
 					  	   screen, GLX_EXTENSIONS);
 	}
 
-	psc->effectiveGLXexts = (char *) __glXGetUsableExtensions(psc->serverGLXexts);
+	psc->effectiveGLXexts = (char *) __glXGetUsableExtensions(psc, psc->serverGLXexts);
     }
 
     return psc->effectiveGLXexts;
@@ -2960,9 +2960,9 @@
  * This is a companion to __glXRegisterGLXFunction().
  */
 void
-__glXRegisterGLXExtensionString(const char *extName)
+__glXRegisterGLXExtensionString(Display *dpy, int screen, const char *extName)
 {
-   __glXEnableExtension( extName, GL_TRUE );
+   __glXEnableExtension( dpy, screen, extName, GL_TRUE );
 }
 
 
--- glxext.c.~1.28.~	2003-05-23 12:18:31.000000000 +0200
+++ glxext.c	2003-08-02 00:59:00.000000000 +0200
@@ -771,6 +771,9 @@
 	UnlockDisplay(dpy);
 
 #ifdef GLX_DIRECT_RENDERING
+        /* Initialize per screen dynamic client GLX extension data */
+	psc->ext_list_first_time = GL_TRUE;
+
 	/* Initialize the direct rendering per screen data and functions */
 	if (priv->driDisplay.private &&
 		priv->driDisplay.createScreen &&
@@ -1064,11 +1067,10 @@
 
 /************************************************************************/
 
-#ifdef GLX_DIRECT_RENDERING
-/* Return the DRI per screen structure */
-__DRIscreen *__glXFindDRIScreen(Display *dpy, int scrn)
+/* Return the GLX per screen structure */
+__GLXscreenConfigs *__glXFindScreenConfigs(Display *dpy, int scrn)
 {
-    __DRIscreen *pDRIScreen = NULL;
+    __GLXscreenConfigs *pGLXscreenConfigs = NULL;
     XExtDisplayInfo *info = __glXFindDisplay(dpy);
     XExtData **privList, *found;
     __GLXdisplayPrivate *dpyPriv;
@@ -1082,10 +1084,18 @@
 
     if (found) {
 	dpyPriv = (__GLXdisplayPrivate *)found->private_data;
-	pDRIScreen = &dpyPriv->screenConfigs[scrn].driScreen;
+	pGLXscreenConfigs = &dpyPriv->screenConfigs[scrn];
     }
 
-    return pDRIScreen;
+    return pGLXscreenConfigs;
+}
+
+#ifdef GLX_DIRECT_RENDERING
+/* Return the DRI per screen structure */
+__DRIscreen *__glXFindDRIScreen(Display *dpy, int scrn)
+{
+    __GLXscreenConfigs *pGLXscreenConfigs = __glXFindScreenConfigs(dpy, scrn);
+    return pGLXscreenConfigs ? &pGLXscreenConfigs->driScreen : NULL;
 }
 #endif
 
--- glxextensions.c.~1.3.~	2003-05-03 07:19:30.000000000 +0200
+++ glxextensions.c	2003-08-02 00:54:32.000000000 +0200
@@ -116,18 +116,23 @@
    { NULL }
 };
 
+/* global list of available extensions */
 static struct glx_extension  ext_list;
 static GLboolean ext_list_first_time = GL_TRUE;
 static GLuint next_bit = 0;
 
+/* global bit-fields of available extensions and their characteristics */
 static unsigned char client_support[8];
-static unsigned char direct_support[8];
 static unsigned char client_only[8];
 static unsigned char direct_only[8];
+/* extensions enabled by default on all screens */
+static unsigned char direct_support[8];
 
+/* client extensions string */
 static const char * __glXGLXClientExtensions = NULL;
 
 static void __glXExtensionsCtr( void );
+static void __glXExtensionsCtrScreen( __GLXscreenConfigs *screen );
 static void __glXProcessServerString( const char * server_string,
     unsigned char * server_support );
 
@@ -218,11 +223,13 @@
  * \sa __glXRegisterGLXFunction, __glXDisableExtension
  */
 void
-__glXEnableExtension( const char * name, GLboolean force_client )
+__glXEnableExtension( Display *dpy, int screen, const char * name, GLboolean force_client )
 {
    if ( __glXGLXClientExtensions == NULL ) {
+      __GLXscreenConfigs *psc = __glXFindScreenConfigs (dpy, screen);
       __glXExtensionsCtr();
-      set_glx_extension( name, strlen( name ), GL_TRUE, direct_support );
+      __glXExtensionsCtrScreen(psc);
+      set_glx_extension( name, strlen( name ), GL_TRUE, psc->direct_support );
       if ( force_client ) {
 	 set_glx_extension( name, strlen( name ), GL_TRUE, client_support );
       }
@@ -237,11 +244,13 @@
  * \sa __glXEnableExtension
  */
 void
-__glXDisableExtension( const char * name )
+__glXDisableExtension( Display *dpy, int screen, const char * name )
 {
    if ( __glXGLXClientExtensions == NULL ) {
+      __GLXscreenConfigs *psc = __glXFindScreenConfigs (dpy, screen);
       __glXExtensionsCtr();
-      set_glx_extension( name, strlen( name ), GL_FALSE, direct_support );
+      __glXExtensionsCtrScreen(psc);
+      set_glx_extension( name, strlen( name ), GL_FALSE, psc->direct_support );
    }
 }
 
@@ -337,7 +346,13 @@
 	 next_bit++;
       }
 
-      add_extension( name, 0, 0, bit, enabled, enabled,
+      /* Never enable direct support by default, otherwise the extension
+       * would be enabled on all screens with all drivers, even those that
+       * don't support the extension. The driver has to enable the
+       * extension manually for its own screen using __glXEnableExtension.
+       *
+       * Does the enabled parameter still make sense at all then? */
+      add_extension( name, 0, 0, bit, enabled, GL_FALSE,
 		     client_only, GL_TRUE );
    }
 }
@@ -378,6 +393,15 @@
 }
 
 
+static void
+__glXExtensionsCtrScreen( __GLXscreenConfigs *psc )
+{
+    if (psc->ext_list_first_time) {
+	psc->ext_list_first_time = GL_FALSE;
+	(void) memcpy( psc->direct_support, direct_support, sizeof( direct_support ) );
+    }
+}
+
 
 
 GLboolean
@@ -451,13 +475,14 @@
  * \returns A pointer to the string.
  */
 char *
-__glXGetUsableExtensions( const char * server_string )
+__glXGetUsableExtensions( __GLXscreenConfigs *psc, const char * server_string )
 {
    unsigned char server_support[8];
    unsigned char usable[8];
    unsigned      i;
 
    __glXExtensionsCtr();
+   __glXExtensionsCtrScreen(psc);
    __glXProcessServerString( server_string, server_support );
 
    /* An extension is supported if the client-side (i.e., libGL) supports
@@ -466,9 +491,8 @@
     * the direct rendering driver supports it.
     */
    for ( i = 0 ; i < 8 ; i++ ) {
-      usable[i] = (client_support[i] & client_only[i])
-	  | (client_support[i] & (direct_support[i] & server_support[i]))
-	  | (client_support[i] & (direct_support[i] & direct_only[i]));
+      usable[i] = client_support[i] & psc->direct_support[i] & (
+	  server_support[i] | client_only[i] | direct_only[i]);
    }
 
    return __glXGetStringFromTable( usable );
--- glxextensions.h.~1.2.~	2003-04-30 03:50:35.000000000 +0200
+++ glxextensions.h	2003-08-02 00:08:55.000000000 +0200
@@ -71,11 +71,11 @@
 
 extern GLboolean __glXExtensionBitIsEnabled( unsigned bit );
 extern const char * __glXGetClientExtensions( void );
-extern char * __glXGetUsableExtensions( const char * server_string );
+extern char * __glXGetUsableExtensions( __GLXscreenConfigs *psc, const char * server_string );
 extern void __glXAddExtension( GLboolean enabled, const char * name,
     GLboolean client_side );
-extern void __glXEnableExtension( const char * name, GLboolean force_client );
-extern void __glXDisableExtension( const char * name );
+extern void __glXEnableExtension( Display *dpy, int screen, const char * name, GLboolean force_client );
+extern void __glXDisableExtension( Display *dpy, int screen, const char * name );
 
 typedef void (* PFNGLXADDEXTENSIONPROC) ( GLboolean enabled, const char * name );
 typedef void (* PFNGLXENABLEEXTENSIONPROC) ( const char * name,
