summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/radeon_dri.c49
-rw-r--r--src/radeon_driver.c10
2 files changed, 27 insertions, 32 deletions
diff --git a/src/radeon_dri.c b/src/radeon_dri.c
index 4f39e5c7..be8e74f1 100644
--- a/src/radeon_dri.c
+++ b/src/radeon_dri.c
@@ -402,7 +402,24 @@ static void RADEONEnterServer(ScreenPtr pScreen)
if (info->ChipFamily>=CHIP_FAMILY_R300)
drmCommandNone(info->drmFD, DRM_RADEON_CP_IDLE);
+#ifdef DAMAGE
+ if (!info->pDamage && info->allowPageFlip) {
+ PixmapPtr pPix = pScreen->GetScreenPixmap(pScreen);
+ info->pDamage = DamageCreate(NULL, NULL, DamageReportNone, TRUE,
+ pScreen, pPix);
+
+ if (info->pDamage == NULL) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "No screen damage record, page flipping disabled\n");
+ info->allowPageFlip = 0;
+ } else {
+ DamageRegister(&pPix->drawable, info->pDamage);
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Damage tracking initialized for page flipping\n");
+ }
+ }
+#endif
}
/* Called when the X server goes to sleep to allow the X server's
@@ -1890,30 +1907,9 @@ static void RADEONEnablePageFlip(ScreenPtr pScreen)
RADEONInfoPtr info = RADEONPTR(pScrn);
if (info->allowPageFlip) {
- BoxRec box = { .x1 = 0, .y1 = 0, .x2 = pScrn->virtualX - 1,
- .y2 = pScrn->virtualY - 1 };
RADEONSAREAPrivPtr pSAREAPriv = DRIGetSAREAPrivate(pScreen);
- if (!info->pDamage) {
- PixmapPtr pPix = pScreen->GetScreenPixmap(pScreen);
-
- /* Have damage run only while there is 3d active.
- */
- info->pDamage = DamageCreate(NULL, NULL, DamageReportNone, TRUE,
- pScreen, pPix);
-
- if (info->pDamage == NULL) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "No screen damage record, page flipping disabled\n");
- info->allowPageFlip = 0;
- return;
- }
-
- DamageRegister(&pPix->drawable, info->pDamage);
- }
-
pSAREAPriv->pfAllowPageFlip = 1;
- RADEONDRIRefreshArea(pScrn, 1, &box);
}
#endif
}
@@ -1925,17 +1921,6 @@ static void RADEONDisablePageFlip(ScreenPtr pScreen)
* -- DRM needs to cope with Front-to-Back swapbuffers.
*/
RADEONSAREAPrivPtr pSAREAPriv = DRIGetSAREAPrivate(pScreen);
-#ifdef DAMAGE
- RADEONInfoPtr info = RADEONPTR(xf86Screens[pScreen->myNum]);
-
- if (info->pDamage) {
- PixmapPtr pPix = pScreen->GetScreenPixmap(pScreen);
-
- DamageUnregister(&pPix->drawable, info->pDamage);
- DamageDestroy(info->pDamage);
- info->pDamage = NULL;
- }
-#endif
pSAREAPriv->pfAllowPageFlip = 0;
}
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 07a93496..0a0d382a 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -7563,6 +7563,16 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
info->accelOn = FALSE;
#ifdef XF86DRI
+#ifdef DAMAGE
+ if (info->pDamage) {
+ PixmapPtr pPix = pScreen->GetScreenPixmap(pScreen);
+
+ DamageUnregister(&pPix->drawable, info->pDamage);
+ DamageDestroy(info->pDamage);
+ info->pDamage = NULL;
+ }
+#endif
+
RADEONDRIStop(pScreen);
#endif