I have a Sharp Zaurus C3100, where X normally runs rotated 90 degrees,
using a shadow framebuffer. I've been hacking a bit on getting the
code that blits a rotated shadow onto the display a bit faster and
came up with the included patch.
Blitting in rotated mode is about 4x the previous speed. Non-rotated
copies are about the same speed; maybe up to 10% slower for small
rectangles (on the Zaurus).
The idea is to copy the area in blocks of 32x32 pixels, to reduce the
number of cache misses, which are unavoidable when walking either the
source or the destination bitmap across the scanlines. 16x16, 24x24,
andd 32x32 yields about the same result, so I chose 32x32 since it
seems best for the non-rotated modes.
My guess is that this patch helps other machines as well, and also other OSes.
Created attachment 3348 [details] [review]
Patch to increase rotated bitmap copy speed
Sorry about the phenomenal bug spam, guys. Adding xorg-team@ to the QA contact so bugs don't get lost in future.
Tagging to keep this patch from vanishing; will triage later.
We have rotated shadow updates already, they were brought across into Xorg during the kdrive merge:
Author: Keith Packard <firstname.lastname@example.org>
Date: Thu Feb 16 07:17:31 2006 +0000
Make more extensions optional in build (for kdrive). Fix kdrive build for
actual hardware. Fix kdrive pointer signed/unsigned types. Add
kdrive-required YX rotation functions. Replace rgb text file loading
with static rgb color table.
This should really go into pixman someday though.