Select optimized
16bpp shadow copy functions if screen is 16bpp. Select -YX versions for 90 and 270 rotations if architecture is ARM.
This commit is contained in:
parent
7971144140
commit
07e6011106
|
@ -391,13 +391,44 @@ fbdevSetShadow (ScreenPtr pScreen)
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
KdScreenInfo *screen = pScreenPriv->screen;
|
KdScreenInfo *screen = pScreenPriv->screen;
|
||||||
FbdevScrPriv *scrpriv = screen->driver;
|
FbdevScrPriv *scrpriv = screen->driver;
|
||||||
|
FbdevPriv *priv = screen->card->driver;
|
||||||
ShadowUpdateProc update;
|
ShadowUpdateProc update;
|
||||||
ShadowWindowProc window;
|
ShadowWindowProc window;
|
||||||
|
int useYX = 0;
|
||||||
|
|
||||||
|
#ifdef __arm__
|
||||||
|
/* Use variant copy routines that always read left to right in the
|
||||||
|
shadow framebuffer. Reading vertical strips is exceptionally
|
||||||
|
slow on XScale due to cache effects. */
|
||||||
|
useYX = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
window = fbdevWindowLinear;
|
window = fbdevWindowLinear;
|
||||||
update = 0;
|
update = 0;
|
||||||
if (scrpriv->randr)
|
if (scrpriv->randr)
|
||||||
update = shadowUpdateRotatePacked;
|
if (priv->var.bits_per_pixel == 16) {
|
||||||
|
switch (scrpriv->randr) {
|
||||||
|
case RR_Rotate_90:
|
||||||
|
if (useYX)
|
||||||
|
update = shadowUpdateRotate16_90YX;
|
||||||
|
else
|
||||||
|
update = shadowUpdateRotate16_90;
|
||||||
|
break;
|
||||||
|
case RR_Rotate_180:
|
||||||
|
update = shadowUpdateRotate16_180;
|
||||||
|
break;
|
||||||
|
case RR_Rotate_270:
|
||||||
|
if (useYX)
|
||||||
|
update = shadowUpdateRotate16_270YX;
|
||||||
|
else
|
||||||
|
update = shadowUpdateRotate16_270;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
update = shadowUpdateRotate16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
update = shadowUpdateRotatePacked;
|
||||||
else
|
else
|
||||||
update = shadowUpdatePacked;
|
update = shadowUpdatePacked;
|
||||||
return KdShadowSet (pScreen, scrpriv->randr, update, window);
|
return KdShadowSet (pScreen, scrpriv->randr, update, window);
|
||||||
|
|
Loading…
Reference in New Issue