summaryrefslogtreecommitdiff
path: root/src/gx_rotate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gx_rotate.c')
-rw-r--r--src/gx_rotate.c154
1 files changed, 80 insertions, 74 deletions
diff --git a/src/gx_rotate.c b/src/gx_rotate.c
index e473a34..3f7c911 100644
--- a/src/gx_rotate.c
+++ b/src/gx_rotate.c
@@ -33,56 +33,56 @@
static void *
GXWindowLinear(ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode,
- CARD32 * size, void *closure)
+ CARD32 *size, void *closure)
{
- ScrnInfoPtr pScrni = xf86Screens[pScreen->myNum];
+ ScrnInfoPtr pScrni = xf86ScreenToScrn(pScreen);
GeodeRec *pGeode = GEODEPTR(pScrni);
*size = pGeode->displayPitch;
return (pGeode->FBBase + pGeode->displayOffset) +
- row * pGeode->displayPitch + offset;
+ row * pGeode->displayPitch + offset;
}
static void
GXUpdate(ScreenPtr pScreen, shadowBufPtr pBuf)
{
- ScrnInfoPtr pScrni = xf86Screens[pScreen->myNum];
+ ScrnInfoPtr pScrni = xf86ScreenToScrn(pScreen);
GeodeRec *pGeode = GEODEPTR(pScrni);
int rotate = pGeode->rotation;
switch (rotate) {
case RR_Rotate_90:
- if (pScrni->bitsPerPixel == 8)
- shadowUpdateRotate8_90(pScreen, pBuf);
- else if (pScrni->bitsPerPixel == 16)
- shadowUpdateRotate16_90(pScreen, pBuf);
- else
- shadowUpdateRotate32_90(pScreen, pBuf);
+ if (pScrni->bitsPerPixel == 8)
+ shadowUpdateRotate8_90(pScreen, pBuf);
+ else if (pScrni->bitsPerPixel == 16)
+ shadowUpdateRotate16_90(pScreen, pBuf);
+ else
+ shadowUpdateRotate32_90(pScreen, pBuf);
- break;
+ break;
case RR_Rotate_180:
- if (pScrni->bitsPerPixel == 8)
- shadowUpdateRotate8_180(pScreen, pBuf);
- else if (pScrni->bitsPerPixel == 16)
- shadowUpdateRotate16_180(pScreen, pBuf);
- else
- shadowUpdateRotate32_180(pScreen, pBuf);
+ if (pScrni->bitsPerPixel == 8)
+ shadowUpdateRotate8_180(pScreen, pBuf);
+ else if (pScrni->bitsPerPixel == 16)
+ shadowUpdateRotate16_180(pScreen, pBuf);
+ else
+ shadowUpdateRotate32_180(pScreen, pBuf);
- break;
+ break;
case RR_Rotate_270:
- if (pScrni->bitsPerPixel == 8)
- shadowUpdateRotate8_270(pScreen, pBuf);
- else if (pScrni->bitsPerPixel == 16)
- shadowUpdateRotate16_270(pScreen, pBuf);
- else
- shadowUpdateRotate32_270(pScreen, pBuf);
-
- break;
+ if (pScrni->bitsPerPixel == 8)
+ shadowUpdateRotate8_270(pScreen, pBuf);
+ else if (pScrni->bitsPerPixel == 16)
+ shadowUpdateRotate16_270(pScreen, pBuf);
+ else
+ shadowUpdateRotate32_270(pScreen, pBuf);
+
+ break;
}
}
@@ -101,88 +101,94 @@ GXRotate(ScrnInfoPtr pScrni, DisplayModePtr mode)
/* Leave if we have nothing to do */
if (pGeode->rotation == curr && pGeode->curMode == mode) {
- return TRUE;
+ return TRUE;
}
shadowRemove(pScrni->pScreen, NULL);
switch (pGeode->rotation) {
case RR_Rotate_0:
- ErrorF("Rotate to 0 degrees\n");
- pScrni->displayWidth = pGeode->displayWidth;
- pGeode->Pitch = pGeode->displayPitch;
- break;
+ ErrorF("Rotate to 0 degrees\n");
+ pScrni->displayWidth = pGeode->displayWidth;
+ pGeode->Pitch = pGeode->displayPitch;
+ break;
case RR_Rotate_90:
- ErrorF("Rotate to 90 degrees\n");
- pScrni->displayWidth = pScrni->pScreen->width;
- break;
+ ErrorF("Rotate to 90 degrees\n");
+ pScrni->displayWidth = pScrni->pScreen->width;
+ break;
case RR_Rotate_180:
- ErrorF("Rotate to 180 degrees\n");
- pScrni->displayWidth = pGeode->displayWidth;
- break;
+ ErrorF("Rotate to 180 degrees\n");
+ pScrni->displayWidth = pGeode->displayWidth;
+ break;
case RR_Rotate_270:
- ErrorF("Rotate to 270 degrees\n");
- pScrni->displayWidth = pScrni->pScreen->width;
- break;
+ ErrorF("Rotate to 270 degrees\n");
+ pScrni->displayWidth = pScrni->pScreen->width;
+ break;
}
if (pGeode->rotation != RR_Rotate_0) {
- ret =
- shadowAdd(pScrni->pScreen, pPixmap, GXUpdate, GXWindowLinear,
- pGeode->rotation, NULL);
+ ret =
+ shadowAdd(pScrni->pScreen, pPixmap, GXUpdate, GXWindowLinear,
+ pGeode->rotation, NULL);
- if (!ret) {
- ErrorF("shadowAdd failed\n");
- goto error;
- }
+ if (!ret) {
+ ErrorF("shadowAdd failed\n");
+ goto error;
+ }
}
if (pGeode->rotation == RR_Rotate_0)
- pScrni->fbOffset = pGeode->displayOffset;
+ pScrni->fbOffset = pGeode->displayOffset;
else
- pScrni->fbOffset = pGeode->shadowOffset;
+ pScrni->fbOffset = pGeode->shadowOffset;
pScrni->pScreen->ModifyPixmapHeader(pPixmap,
- pScrni->pScreen->width,
- pScrni->pScreen->height,
- pScrni->pScreen->rootDepth,
- pScrni->bitsPerPixel,
- PixmapBytePad(pScrni->displayWidth, pScrni->pScreen->rootDepth),
- (pointer) (pGeode->FBBase + pScrni->fbOffset));
+ pScrni->pScreen->width,
+ pScrni->pScreen->height,
+ pScrni->pScreen->rootDepth,
+ pScrni->bitsPerPixel,
+ PixmapBytePad(pScrni->displayWidth,
+ pScrni->pScreen->
+ rootDepth),
+ (pointer) (pGeode->FBBase +
+ pScrni->fbOffset));
/* Don't use XAA pixmap cache or offscreen pixmaps when rotated */
-
+#if XF86XAA
if (pGeode->AccelInfoRec) {
- if (pGeode->rotation == RR_Rotate_0) {
- pGeode->AccelInfoRec->Flags =
- LINEAR_FRAMEBUFFER | OFFSCREEN_PIXMAPS | PIXMAP_CACHE;
- pGeode->AccelInfoRec->UsingPixmapCache = TRUE;
- pGeode->AccelInfoRec->maxOffPixWidth = 0;
- pGeode->AccelInfoRec->maxOffPixHeight = 0;
- } else {
- pGeode->AccelInfoRec->Flags = LINEAR_FRAMEBUFFER;
- pGeode->AccelInfoRec->UsingPixmapCache = FALSE;
- pGeode->AccelInfoRec->maxOffPixWidth = 1;
- pGeode->AccelInfoRec->maxOffPixHeight = 1;
- }
+ if (pGeode->rotation == RR_Rotate_0) {
+ pGeode->AccelInfoRec->Flags =
+ LINEAR_FRAMEBUFFER | OFFSCREEN_PIXMAPS | PIXMAP_CACHE;
+ pGeode->AccelInfoRec->UsingPixmapCache = TRUE;
+ pGeode->AccelInfoRec->maxOffPixWidth = 0;
+ pGeode->AccelInfoRec->maxOffPixHeight = 0;
+ }
+ else {
+ pGeode->AccelInfoRec->Flags = LINEAR_FRAMEBUFFER;
+ pGeode->AccelInfoRec->UsingPixmapCache = FALSE;
+ pGeode->AccelInfoRec->maxOffPixWidth = 1;
+ pGeode->AccelInfoRec->maxOffPixHeight = 1;
+ }
}
+#endif
return TRUE;
- error:
+ error:
/* Restore the old rotation */
pScrni->displayWidth = curdw;
if (curr & (RR_Rotate_0 | RR_Rotate_180)) {
- pScrni->pScreen->width = pScrni->virtualX;
- pScrni->pScreen->height = pScrni->virtualY;
- } else {
- pScrni->pScreen->width = pScrni->virtualY;
- pScrni->pScreen->height = pScrni->virtualX;
+ pScrni->pScreen->width = pScrni->virtualX;
+ pScrni->pScreen->height = pScrni->virtualY;
+ }
+ else {
+ pScrni->pScreen->width = pScrni->virtualY;
+ pScrni->pScreen->height = pScrni->virtualX;
}
pGeode->rotation = curr;