--- compiz/src/screen.c.orig	2006-07-09 12:02:34.410633500 +0200
+++ compiz/src/screen.c	2006-07-09 12:02:26.110114750 +0200
@@ -897,7 +897,7 @@
     Window		 *children;
     unsigned int	 nchildren;
     int			 defaultDepth, nvisinfo, nElements, value, i;
-    const char		 *glxExtensions, *glExtensions;
+    const char		 *glxExtensions, *glxServerExtensions, *glExtensions;
     GLint	         stencilBits;
     XSetWindowAttributes attrib;
     GLfloat		 globalAmbient[]  = { 0.1f, 0.1f,  0.1f, 0.1f };
@@ -1107,6 +1107,25 @@
     if (display->screens)
 	shareList = display->screens->ctx;
 
+    glxExtensions = glXQueryExtensionsString (s->display->display, screenNum);
+    glxServerExtensions = glXQueryServerString(s->display->display,
+                                               screenNum, GLX_EXTENSIONS );
+
+    if (!strstr (glxExtensions, "GLX_EXT_texture_from_pixmap"))
+    {
+        if (!strstr (glxServerExtensions, "GLX_EXT_texture_from_pixmap"))
+        {
+            fprintf (stderr, "%s: GLX_EXT_texture_from_pixmap is missing\n",
+                     programName);
+            return FALSE;
+        }
+        else
+        {
+            indirectRendering = 1;
+            strictBinding = 1;
+        }
+    }
+
     s->ctx = glXCreateContext (dpy, visinfo, shareList, !indirectRendering);
     if (!s->ctx)
     {
@@ -1116,14 +1135,6 @@
 
     XFree (visinfo);
 
-    glxExtensions = glXQueryExtensionsString (s->display->display, screenNum);
-    if (!strstr (glxExtensions, "GLX_EXT_texture_from_pixmap"))
-    {
-	fprintf (stderr, "%s: GLX_EXT_texture_from_pixmap is missing\n",
-		 programName);
-	return FALSE;
-    }
-
     if (!strstr (glxExtensions, "GLX_SGIX_fbconfig"))
     {
 	fprintf (stderr, "%s: GLX_SGIX_fbconfig is missing\n",
