[PATCH] Add support for RENDER BGRA formats.

Michel Dänzer michel at daenzer.net
Fri Oct 9 02:09:03 PDT 2009


On Thu, 2009-10-08 at 19:11 -0700, Aaron Plattner wrote: 
> On Sun, Aug 02, 2009 at 08:00:01AM -0700,  wrote:
> > 
> > diff --git a/composite/compinit.c b/composite/compinit.c
> > index dfc3929..6159e4e 100644
> > --- a/composite/compinit.c
> > +++ b/composite/compinit.c
> > @@ -238,6 +238,7 @@ static CompAlternateVisual  altVisuals[] = {
> >      {	24,	PICT_r8g8b8 },
> >  #endif
> >      {	32,	PICT_a8r8g8b8 },
> > +    {	32,	PICT_b8g8r8a8 },
> >  };
> >  
> >  static const int NUM_COMP_ALTERNATE_VISUALS = sizeof(altVisuals) /
> > @@ -272,7 +273,8 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
> >  	return TRUE;
> >  
> >      pPictFormat = PictureMatchFormat (pScreen, alt->depth, alt->format);
> > -    if (!pPictFormat)
> > +    if (!pPictFormat ||
> > +	pPictFormat->direct.red != pScreen->visuals[0].offsetRed)
> >  	return FALSE;
> >  
> >      vid = xalloc(sizeof(VisualID));
> 
> This breaks Composite at depth 16:
> 
> [formatted for clarity]
> 
> (gdb) p pPictFormat->direct
> $7 = {red = 16, redMask = 255, green = 8, greenMask = 255, blue = 0,
>       blueMask = 255, alpha = 24, alphaMask = 255}
> (gdb) p *pPictFormat
> $8 = {id = 180, format = 166024, type = 1 '\001', depth = 32 ' ',
>       direct = {red = 16, redMask = 255, green = 8, greenMask = 255,
>                 blue = 0, blueMask = 255, alpha = 24,
>                 alphaMask = 255},
>       index = {vid = 0, pColormap = 0x0, nvalues = 0, pValues = 0x0,
>                devPrivate = 0x0}}
> (gdb) p pScreen->visuals[0]
> $9 = {vid = 33, class = 4, bitsPerRGBValue = 8, ColormapEntries = 64,
>       nplanes = 16, redMask = 63488, greenMask = 2016, blueMask = 31,
>       offsetRed = 11, offsetGreen = 5, offsetBlue = 0}
> 
> Since pPictFormat->direct.red is 16 and pScreen->visuals[0].offsetRed is 11, it
> returns FALSE and compScreenInit bails out.

Hmm, right. The two hunks above were aimed towards my first approach for
fixing radeon KMS on big endian machines, by making the root window
visual BGRA. I've since abandoned that approach for a different one, so
those hunks are not needed anymore and obviously even harmful. I'll
submit a patch to revert them.



-- 
Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer


More information about the xorg-devel mailing list