xserver: Branch 'master'

Eric Anholt anholt at kemper.freedesktop.org
Mon Feb 2 11:07:10 PST 2009


 glx/glxscreens.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

New commits:
commit 5100d829a4d71ce4a9fbc2b81694a1fb90066ccf
Author: Eric Anholt <eric at anholt.net>
Date:   Mon Feb 2 10:13:46 2009 -0800

    glx: Don't match fbconfigs to visuals with mismatched channel masks.
    
    This fixes at least one known bug, where the depth 32 visual would end up
    with a depth 24 fbconfig attached, angering compiz.

diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index 988a59d..2c8432e 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -394,14 +394,20 @@ typedef struct {
 } FBConfigTemplateRec, *FBConfigTemplatePtr;
 
 static __GLXconfig *
-pickFBConfig(__GLXscreen *pGlxScreen, FBConfigTemplatePtr template, int class)
+pickFBConfig(__GLXscreen *pGlxScreen, FBConfigTemplatePtr template,
+	     VisualPtr visual)
 {
     __GLXconfig *config;
 
     for (config = pGlxScreen->fbconfigs; config != NULL; config = config->next) {
+	if (config->redMask != visual->redMask ||
+	    config->greenMask != visual->greenMask ||
+	    config->blueMask != visual->blueMask ||
+	    config->rgbBits != visual->nplanes)
+	    continue;
 	if (config->visualRating != GLX_NONE)
 	    continue;
-	if (glxConvertToXVisualType(config->visualType) != class)
+	if (glxConvertToXVisualType(config->visualType) != visual->class)
 	    continue;
 	if ((config->doubleBufferMode > 0) != template->doubleBuffer)
 	    continue;
@@ -436,11 +442,11 @@ addMinimalSet(__GLXscreen *pGlxScreen)
     visuals = pGlxScreen->pScreen->visuals;
     for (i = 0, j = 0; i < pGlxScreen->pScreen->numVisuals; i++) {
 	if (visuals[i].nplanes == 32)
-	    config = pickFBConfig(pGlxScreen, &minimal, visuals[i].class);
+	    config = pickFBConfig(pGlxScreen, &minimal, &visuals[i]);
 	else {
-	    config = pickFBConfig(pGlxScreen, &best, visuals[i].class);
+	    config = pickFBConfig(pGlxScreen, &best, &visuals[i]);
 	    if (config == NULL)
-		config = pickFBConfig(pGlxScreen, &good, visuals[i].class);
+		config = pickFBConfig(pGlxScreen, &good, &visuals[i]);
         }
 	if (config == NULL)
 	    config = pGlxScreen->fbconfigs;


More information about the xorg-commit mailing list