glcompmgr 0.3

Felix Bellaby felix at
Thu Jul 13 13:27:39 PDT 2006

Hi Tomasz:

>   Hi, it's me, guy with ancient mga card. Still no success. With ATI 0,
> DEBUG 1, version 0.3, screen goes black when running you program, console shows:

I have seen this black screen effect on an ATI platform since we last
made contact. In that case it came from BadMatch errors when the GLX
code decided to use a pair of incompatible visuals together. As a
result, I have made the GLX code much more complex and I am paying more
attention to the visuals that are coming out of it.

On your card, it would appear that GLX is _correctly_ choosing to use a
visual with a depth buffer to draw the screen and a visual without a
depth buffer to hold the individual application windows:

> % ./a.out
> visroot Visual ID 26
> vismirror Visual ID 24

> 0x24 24 tc  0 24  0 r  .  .  8  8  8  0  0  0  0  0  0  0  0  0 0 None
> 0x26 24 tc  0 24  0 r  .  .  8  8  8  0  0 24  8  0  0  0  0  0 0 None

Unfortunately, while my nvidia hardware would quite happily use these
kinds of visuals together as part of the same GLX context, this might
not be the case with the Matrox. Therefore, I am going to recode the
compositor  to use separate contexts for each visual/fbconfig and see
how that helps on the various platforms. Of course, I could have done
this in the first place. :{

We can gauge whether this new diagnosis has a hope of being right by
seeing what happens when we force the Matrox to use the same visual both
times. So, try commenting out line 1303 and see what happens when both
of the fbconfigs have identical specs:

// fbc_attr [5] = 0;

My one worry is that rather than getting BadMatch errors like the ATI
hardware, you are continuing to get the bizarre BadLength error that I
hoped I might have sorted out earlier:

> BadLength (poly request too large or internal Xli  request #   551 ( 31, 0)
> Unrecognised X ID 3800067
> GLXBadDrawable                                     request #   553 (143, 5)
> Win 2800024 Dam 3800065 Pix 0000000 (546 x 128) Map 0:  Xerror

Could you do a quick check on where the BadLength error is occuring by
putting the following 3 lines in at line 189 before the CreateGC call
and sending me the start of the debug output:

if (!copy_buffer->gc) 
	printf ("XCreateGC Request = # %05d, depth = %d\n", 
        NextRequest (display), copy_buffer->depth);

Thanks. Your ancient hardware is proving to be a good testbed for my
overly optimistic code.


More information about the xorg mailing list