Re: xaa vs. WriteImage()

Michael Lorenz <[email protected]> Thu, 6 Mar 2008 14:00:53 -0500
Newsgroups gmane.comp.xfree86.devel
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

On Mar 5, 2008, at 19:06, Alex Deucher wrote:

> On Tue, Mar 4, 2008 at 5:34 PM, Michael Lorenz  
> <[email protected]> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>>  Hash: SHA1
>>
>>  Hello,
>>
>>
>> On Mar 4, 2008, at 15:37, Marc Aurele La France wrote:
>>
>>> On Mon, 3 Mar 2008, Michael Lorenz wrote:
>>>
>>>> I noticed the following - XAACopyArea() only attempts to use
>>>> accelerated WriteImage() when writing to a DRAWABLE_WINDOW but not
>>>> on off-screen pixmaps. I used the following changes to make it  
>>>> work:
>>>
>>>> diff -u -w -r1.1.1.3 xaaCpyArea.c
>>>> - --- xaaCpyArea.c   9 Jun 2001 15:09:02 -0000       1.1.1.3
>>>> +++ xaaCpyArea.c     3 Mar 2008 20:51:05 -0000
>>>> @@ -64,9 +64,16 @@
>>>>            return (XAABitBlt( pSrcDrawable, pDstDrawable,
>>>>              pGC, srcx, srcy, width, height, dstx, dsty,
>>>>              XAADoBitBlt, 0L));
>>>> +    } else {
>>>> +        if(infoRec->ScreenToScreenBitBlt &&
>>>> +         CHECK_ROP(pGC,infoRec->ScreenToScreenBitBltFlags) &&
>>>> +         CHECK_ROPSRC(pGC,infoRec->ScreenToScreenBitBltFlags) &&
>>>> +         CHECK_PLANEMASK(pGC,infoRec->ScreenToScreenBitBltFlags))
>>>> +            return (XAABitBlt( pSrcDrawable, pDstDrawable,
>>>> +            pGC, srcx, srcy, width, height, dstx, dsty,
>>>> +            XAADoImageWrite, 0L));
>>>>      }
>>>>    }
>>>
>>> This does not look correct.  Shouldn't this be more in line with
>>> the case where the destination drawable is a window?  (i.e. test
>>> bitsPerPixel's and WritePixmap files instead of  
>>> ScreenToScreenBitBlt).
>>
>>  The whole logic looks a little bit fishy, I used the first if()'s
>>  source-in-memory branch first but wasn't quite sure if that's doing
>>  the right thing, where it;s now looked better to me but I won't  
>> claim
>>  I completely understand XAA's inner voodoo. All I want is the make
>>  XAA use ImageWrite()s for all RAM-to-VRAM transfers if the driver
>>  supports it.
>>  Otherwise, teaching the framebuffer layer to cope with a tiled
>>  framebuffer might be necessary in the long run, any pointers  
>> where to
>>  start?
>
> Several drivers (radeon, intel, savage) in the Xorg tree provide
> support for various tiling methods.  Generally the chip provides a
> surface control or aperture for exposing a tiled region to the CPU as
> a linear surface.  For acceleration, you have to keep track of what
> buffers are tiled in the driver and do the right thing with the
> blitter when using those surfaces.

Yeah, I'm dimly aware of these things - my problem is that the  
hardware in question doesn't give me a linear view on the framebuffer.
All I have is a small linear buffer I can use to DMA data in or out  
of the tiled framebuffer. The other problem is that the machine's  
native pixel format is RGBA, if I want 24bit colour that's the only  
one I can use. Fortunately the DMA engine can convert pixels on the  
fly so I can pretend it's ABGR. So pixels would have to be endian- 
flipped as well when the fb layer accesses VRAM - is there any prior  
art for that?
So far my driver supports image writes, screen-to-screen copies,  
rectangle fills, solid and dashed lines, colour expansion and alpha  
textures. ARGB textures should work as well but I couldn't find a  
user for those - nothing in xfce4 or windowmaker seems to do anything  
with that.
Another thing - I sprinkled xf86Msg()s all over XAA, sometimes  
XCopyArea() calls seem to end up writing to the framebuffer but not  
through xaaCopyArea() - any ideas?

have fun
Michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)

iQEVAwUBR89I6cpnzkX8Yg2nAQIkHAgAribd+WTw/t5Xv5nunNUZn6hrwluv+e7J
ox9Hg9V/Yp2CVZVPgSc+3aJOjLPUTPg6L/4tVuNBQLSVnbMO2j7MdGLkhxGznGzl
iv5NNqqToXDO2MM9ctBo8dNB1o3RU76dnbs4QomHYqi/HpNmG+JLJLu3L1+uNjoC
cKjTsUEKWM/UgK+A2UMkjV9vpdEEYoYz2zRu6Njy3bfP7Jyoyh7mwl/c/kamWvU6
k8KnHcRalgsXjmhNRGSV4VOmpc3c/JubHROYTrG5T61aNVge1GAi2jLl27I99vhR
0Bv8iA6juJ5KxZpUajbHSL5vXAZk/QaXss1g7AuVSGCphqE3IC/kHA==
=wynV
-----END PGP SIGNATURE-----