So, I narrowed it down with gdb. The problem is, glxinfo loops through all 3 screens of my display - but it crashes if the screen is not the default screen (the .N in $DISPLAY). I don't yet know _why_ it crashes. I'm attaching a patch that works around it, by _not_ looping through all screens, but just getting info on the screen in $DISPLAY. It's good enough for my use, but it's really just a workaround, so I'm not adding a 'patch' tag.
> > :0.0 xserver-xorg-video-nouveau 1:0.0.16+git20101210+8bb8231-2+exp2 > > :0.1 xserver-xorg-video-radeon 1:6.14.0-1+exp2 > > :0.2 xserver-xorg-video-nouveau 1:0.0.16+git20101210+8bb8231-2+exp2 > > (Out of curiosity, how did you configure that setup?) Nothing very interesting. 3 simple "Device" and "Screen" sections, then: Section "ServerLayout" Identifier "Default Layout" Screen "S-nv0" Screen "S-r0" RightOf "S-nv0" Screen "S-nv1" RightOf "S-r0" EndSection Anyway, workaround patch attached. I might try to do more at some point (build mesa from git, find the real bug, report upstream), though I'm too busy at the moment. Peter
--- mesa-demos-8.0.1/src/xdemos/glxinfo.c +++ mesa-demos-8.0.1/src/xdemos/glxinfo.c @@ -1197,7 +1197,6 @@ { char *displayName = NULL; Display *dpy; - int numScreens, scrnum; InfoMode mode = Normal; GLboolean findBest = GL_FALSE; GLboolean limits = GL_FALSE; @@ -1248,9 +1247,8 @@ printf("%d\n", b); } else { - numScreens = ScreenCount(dpy); + int scrnum = DefaultScreen(dpy); print_display_info(dpy); - for (scrnum = 0; scrnum < numScreens; scrnum++) { mesa_hack(dpy, scrnum); print_screen_info(dpy, scrnum, allowDirect, limits); printf("\n"); @@ -1258,9 +1256,6 @@ #ifdef GLX_VERSION_1_3 print_fbconfig_info(dpy, scrnum, mode); #endif - if (scrnum + 1 < numScreens) - printf("\n\n"); - } } XCloseDisplay(dpy);