diff options
-rw-r--r-- | src/radeon_dri.c | 49 | ||||
-rw-r--r-- | src/radeon_driver.c | 10 |
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 |