Mesa (mesa_7_5_branch): glXChooseVisual: Only consider fbconfig if we can get the corresponding visual.

Michel Dänzer daenzer at kemper.freedesktop.org
Tue May 12 00:54:57 PDT 2009


Module: Mesa
Branch: mesa_7_5_branch
Commit: 46b81b0cc883df0ef7d998be36ae6cbf80257cd2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=46b81b0cc883df0ef7d998be36ae6cbf80257cd2

Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue May 12 08:01:22 2009 +0200

glXChooseVisual: Only consider fbconfig if we can get the corresponding visual.

This can fail, e.g. when XLIB_SKIP_ARGB_VISUALS=1 is set.

See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=524794 and
http://bugs.freedesktop.org/show_bug.cgi?id=21600 .

---

 src/glx/x11/glxcmds.c |   33 +++++++++++++++++----------------
 1 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c
index b9e0706..ec3e69e 100644
--- a/src/glx/x11/glxcmds.c
+++ b/src/glx/x11/glxcmds.c
@@ -1319,30 +1319,31 @@ PUBLIC XVisualInfo *glXChooseVisual(Display *dpy, int screen, int *attribList)
     ** Eliminate visuals that don't meet minimum requirements
     ** Compute a score for those that do
     ** Remember which visual, if any, got the highest score
+    ** If no visual is acceptable, return None
+    ** Otherwise, create an XVisualInfo list with just the selected X visual
+    ** and return this.
     */
     for ( modes = psc->visuals ; modes != NULL ; modes = modes->next ) {
 	if ( fbconfigs_compatible( & test_config, modes )
 	     && ((best_config == NULL)
 		 || (fbconfig_compare( (const __GLcontextModes * const * const)&modes, &best_config ) < 0)) ) {
-	    best_config = modes;
+	    XVisualInfo visualTemplate;
+	    XVisualInfo *newList;
+	    int  i;
+
+	    visualTemplate.screen = screen;
+	    visualTemplate.visualid = modes->visualID;
+	    newList = XGetVisualInfo( dpy, VisualScreenMask|VisualIDMask,
+				      &visualTemplate, &i );
+
+	    if (newList) {
+		Xfree(visualList);
+		visualList = newList;
+		best_config = modes;
+	    }
 	}
     }
 
-    /*
-    ** If no visual is acceptable, return None
-    ** Otherwise, create an XVisualInfo list with just the selected X visual
-    ** and return this.
-    */
-    if (best_config != NULL) {
-	XVisualInfo visualTemplate;
-	int  i;
-
-	visualTemplate.screen = screen;
-	visualTemplate.visualid = best_config->visualID;
-	visualList = XGetVisualInfo( dpy, VisualScreenMask|VisualIDMask,
-				     &visualTemplate, &i );
-    }
-
     return visualList;
 }
 



More information about the mesa-commit mailing list