diff options
-rw-r--r-- | dix/pixmap.c | 24 | ||||
-rw-r--r-- | hw/xfree86/drivers/modesetting/driver.c | 10 | ||||
-rw-r--r-- | hw/xfree86/drivers/modesetting/drmmode_display.c | 5 | ||||
-rw-r--r-- | hw/xfree86/drivers/modesetting/drmmode_display.h | 2 | ||||
-rw-r--r-- | include/pixmap.h | 5 | ||||
-rw-r--r-- | include/pixmapstr.h | 3 | ||||
-rw-r--r-- | include/scrnintstr.h | 6 | ||||
-rw-r--r-- | randr/randrstr.h | 2 | ||||
-rw-r--r-- | randr/rrcrtc.c | 20 |
9 files changed, 38 insertions, 39 deletions
diff --git a/dix/pixmap.c b/dix/pixmap.c index b67a2e8a6..81ac5e2d8 100644 --- a/dix/pixmap.c +++ b/dix/pixmap.c @@ -181,12 +181,12 @@ PixmapDirtyDamageDestroy(DamagePtr damage, void *closure) } Bool -PixmapStartDirtyTracking(PixmapPtr src, +PixmapStartDirtyTracking(DrawablePtr src, PixmapPtr slave_dst, int x, int y, int dst_x, int dst_y, Rotation rotation) { - ScreenPtr screen = src->drawable.pScreen; + ScreenPtr screen = src->pScreen; PixmapDirtyUpdatePtr dirty_update; RegionPtr damageregion; RegionRec dstregion; @@ -204,8 +204,7 @@ PixmapStartDirtyTracking(PixmapPtr src, dirty_update->dst_y = dst_y; dirty_update->rotation = rotation; dirty_update->damage = DamageCreate(NULL, PixmapDirtyDamageDestroy, - DamageReportNone, - TRUE, src->drawable.pScreen, + DamageReportNone, TRUE, screen, dirty_update); if (rotation != RR_Rotate_0) { @@ -241,16 +240,15 @@ PixmapStartDirtyTracking(PixmapPtr src, RegionUnion(damageregion, damageregion, &dstregion); RegionUninit(&dstregion); - DamageRegister(screen->root ? &screen->root->drawable : &src->drawable, - dirty_update->damage); + DamageRegister(src, dirty_update->damage); xorg_list_add(&dirty_update->ent, &screen->pixmap_dirty_list); return TRUE; } Bool -PixmapStopDirtyTracking(PixmapPtr src, PixmapPtr slave_dst) +PixmapStopDirtyTracking(DrawablePtr src, PixmapPtr slave_dst) { - ScreenPtr screen = src->drawable.pScreen; + ScreenPtr screen = src->pScreen; PixmapDirtyUpdatePtr ent, safe; xorg_list_for_each_entry_safe(ent, safe, &screen->pixmap_dirty_list, ent) { @@ -269,8 +267,8 @@ PixmapDirtyCopyArea(PixmapPtr dst, PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region) { - ScreenPtr pScreen = dirty->src->drawable.pScreen; - DrawablePtr src = pScreen->root ? &pScreen->root->drawable : &dirty->src->drawable; + DrawablePtr src = dirty->src; + ScreenPtr pScreen = src->pScreen; int n; BoxPtr b; GCPtr pGC; @@ -309,7 +307,7 @@ PixmapDirtyCompositeRotate(PixmapPtr dst_pixmap, PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region) { - ScreenPtr pScreen = dirty->src->drawable.pScreen; + ScreenPtr pScreen = dirty->src->pScreen; PictFormatPtr format = PictureWindowFormat(pScreen->root); PicturePtr src, dst; XID include_inferiors = IncludeInferiors; @@ -318,7 +316,7 @@ PixmapDirtyCompositeRotate(PixmapPtr dst_pixmap, int error; src = CreatePicture(None, - &pScreen->root->drawable, + dirty->src, format, CPSubwindowMode, &include_inferiors, serverClient, &error); @@ -367,7 +365,7 @@ PixmapDirtyCompositeRotate(PixmapPtr dst_pixmap, */ Bool PixmapSyncDirtyHelper(PixmapDirtyUpdatePtr dirty) { - ScreenPtr pScreen = dirty->src->drawable.pScreen; + ScreenPtr pScreen = dirty->src->pScreen; RegionPtr region = DamageRegion(dirty->damage); PixmapPtr dst; SourceValidateProcPtr SourceValidate; diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c index 21e75c762..32619edab 100644 --- a/hw/xfree86/drivers/modesetting/driver.c +++ b/hw/xfree86/drivers/modesetting/driver.c @@ -1217,12 +1217,12 @@ msDisableSharedPixmapFlipping(RRCrtcPtr crtc) } static Bool -msStartFlippingPixmapTracking(RRCrtcPtr crtc, PixmapPtr src, +msStartFlippingPixmapTracking(RRCrtcPtr crtc, DrawablePtr src, PixmapPtr slave_dst1, PixmapPtr slave_dst2, int x, int y, int dst_x, int dst_y, Rotation rotation) { - ScreenPtr pScreen = src->drawable.pScreen; + ScreenPtr pScreen = src->pScreen; modesettingPtr ms = modesettingPTR(xf86ScreenToScrn(pScreen)); msPixmapPrivPtr ppriv1 = msGetPixmapPriv(&ms->drmmode, slave_dst1), @@ -1262,7 +1262,7 @@ msPresentSharedPixmap(PixmapPtr slave_dst) RegionPtr region = DamageRegion(ppriv->dirty->damage); if (RegionNotEmpty(region)) { - redisplay_dirty(ppriv->slave_src->drawable.pScreen, ppriv->dirty, NULL); + redisplay_dirty(ppriv->slave_src->pScreen, ppriv->dirty, NULL); DamageEmpty(ppriv->dirty->damage); return TRUE; @@ -1272,10 +1272,10 @@ msPresentSharedPixmap(PixmapPtr slave_dst) } static Bool -msStopFlippingPixmapTracking(PixmapPtr src, +msStopFlippingPixmapTracking(DrawablePtr src, PixmapPtr slave_dst1, PixmapPtr slave_dst2) { - ScreenPtr pScreen = src->drawable.pScreen; + ScreenPtr pScreen = src->pScreen; modesettingPtr ms = modesettingPTR(xf86ScreenToScrn(pScreen)); msPixmapPrivPtr ppriv1 = msGetPixmapPriv(&ms->drmmode, slave_dst1), diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c index b5a03256e..fec7ac276 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -860,7 +860,7 @@ drmmode_set_target_scanout_pixmap_gpu(xf86CrtcPtr crtc, PixmapPtr ppix, int c, total_width = 0, max_height = 0, this_x = 0; if (*target) { - PixmapStopDirtyTracking(*target, screenpix); + PixmapStopDirtyTracking(&(*target)->drawable, screenpix); if (drmmode->fb_id) { drmModeRmFB(drmmode->fd, drmmode->fb_id); drmmode->fb_id = 0; @@ -900,7 +900,8 @@ drmmode_set_target_scanout_pixmap_gpu(xf86CrtcPtr crtc, PixmapPtr ppix, screen->height = screenpix->drawable.height = max_height; } drmmode_crtc->prime_pixmap_x = this_x; - PixmapStartDirtyTracking(ppix, screenpix, 0, 0, this_x, 0, RR_Rotate_0); + PixmapStartDirtyTracking(&ppix->drawable, screenpix, 0, 0, this_x, 0, + RR_Rotate_0); *target = ppix; return TRUE; } diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h index f774250ef..c86e13f56 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.h +++ b/hw/xfree86/drivers/modesetting/drmmode_display.h @@ -153,7 +153,7 @@ typedef struct _msPixmapPriv { /** Source fields for flipping shared pixmaps */ Bool defer_dirty_update; /* if we want to manually update */ PixmapDirtyUpdatePtr dirty; /* cached dirty ent to avoid searching list */ - PixmapPtr slave_src; /* if we exported shared pixmap, dirty tracking src */ + DrawablePtr slave_src; /* if we exported shared pixmap, dirty tracking src */ Bool notify_on_damage; /* if sink has requested damage notification */ } msPixmapPrivRec, *msPixmapPrivPtr; diff --git a/include/pixmap.h b/include/pixmap.h index 86b513d47..b7fb25723 100644 --- a/include/pixmap.h +++ b/include/pixmap.h @@ -119,14 +119,15 @@ extern _X_EXPORT void PixmapUnshareSlavePixmap(PixmapPtr slave_pixmap); #define HAS_DIRTYTRACKING_ROTATION 1 +#define HAS_DIRTYTRACKING_DRAWABLE_SRC 1 extern _X_EXPORT Bool -PixmapStartDirtyTracking(PixmapPtr src, +PixmapStartDirtyTracking(DrawablePtr src, PixmapPtr slave_dst, int x, int y, int dst_x, int dst_y, Rotation rotation); extern _X_EXPORT Bool -PixmapStopDirtyTracking(PixmapPtr src, PixmapPtr slave_dst); +PixmapStopDirtyTracking(DrawablePtr src, PixmapPtr slave_dst); /* helper function, drivers can do this themselves if they can do it more efficently */ diff --git a/include/pixmapstr.h b/include/pixmapstr.h index 4bd246562..de501013a 100644 --- a/include/pixmapstr.h +++ b/include/pixmapstr.h @@ -88,7 +88,8 @@ typedef struct _Pixmap { } PixmapRec; typedef struct _PixmapDirtyUpdate { - PixmapPtr src, slave_dst; + DrawablePtr src; /* Root window / shared pixmap */ + PixmapPtr slave_dst; /* Shared / scanout pixmap */ int x, y; DamagePtr damage; struct xorg_list ent; diff --git a/include/scrnintstr.h b/include/scrnintstr.h index 207289a91..9b663fa44 100644 --- a/include/scrnintstr.h +++ b/include/scrnintstr.h @@ -377,7 +377,7 @@ typedef Bool (*SetSharedPixmapBackingProcPtr)(PixmapPtr, void *); */ typedef void (*SyncSharedPixmapProcPtr)(PixmapDirtyUpdatePtr); -typedef Bool (*StartPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr, +typedef Bool (*StartPixmapTrackingProcPtr)(DrawablePtr, PixmapPtr, int x, int y, int dst_x, int dst_y, Rotation rotation); @@ -386,9 +386,9 @@ typedef Bool (*PresentSharedPixmapProcPtr)(PixmapPtr); typedef Bool (*RequestSharedPixmapNotifyDamageProcPtr)(PixmapPtr); -typedef Bool (*StopPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr); +typedef Bool (*StopPixmapTrackingProcPtr)(DrawablePtr, PixmapPtr); -typedef Bool (*StopFlippingPixmapTrackingProcPtr)(PixmapPtr, +typedef Bool (*StopFlippingPixmapTrackingProcPtr)(DrawablePtr, PixmapPtr, PixmapPtr); typedef Bool (*SharedPixmapNotifyDamageProcPtr)(PixmapPtr); diff --git a/randr/randrstr.h b/randr/randrstr.h index 706e9a7b0..95979a8c6 100644 --- a/randr/randrstr.h +++ b/randr/randrstr.h @@ -279,7 +279,7 @@ typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen, typedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap); -typedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, PixmapPtr, +typedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, DrawablePtr, PixmapPtr, PixmapPtr, int x, int y, int dst_x, int dst_y, diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 401a1c178..2eb9fbdc8 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -388,12 +388,12 @@ RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc) if (crtc->scanout_pixmap) { ScreenPtr master = crtc->pScreen->current_master; - PixmapPtr mscreenpix = master->GetScreenPixmap(master); + DrawablePtr mrootdraw = &master->root->drawable; if (crtc->scanout_pixmap_back) { pScrPriv->rrDisableSharedPixmapFlipping(crtc); - master->StopFlippingPixmapTracking(mscreenpix, + master->StopFlippingPixmapTracking(mrootdraw, crtc->scanout_pixmap, crtc->scanout_pixmap_back); @@ -402,7 +402,8 @@ RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc) } else { pScrPriv->rrCrtcSetScanoutPixmap(crtc, NULL); - master->StopPixmapTracking(mscreenpix, crtc->scanout_pixmap); + master->StopPixmapTracking(mrootdraw, + crtc->scanout_pixmap); } rrDestroySharedPixmap(crtc, crtc->scanout_pixmap); @@ -491,9 +492,8 @@ rrSetupPixmapSharing(RRCrtcPtr crtc, int width, int height, ScreenPtr master = crtc->pScreen->current_master; rrScrPrivPtr pMasterScrPriv = rrGetScrPriv(master); rrScrPrivPtr pSlaveScrPriv = rrGetScrPriv(crtc->pScreen); - - int depth; - PixmapPtr mscreenpix; + DrawablePtr mrootdraw = &master->root->drawable; + int depth = mrootdraw->depth; PixmapPtr spix_front; /* Create a pixmap on the master screen, then get a shared handle for it. @@ -515,9 +515,6 @@ rrSetupPixmapSharing(RRCrtcPtr crtc, int width, int height, defer to the slave. */ - mscreenpix = master->GetScreenPixmap(master); - depth = mscreenpix->drawable.depth; - if (crtc->scanout_pixmap) RRCrtcDetachScanoutPixmap(crtc); @@ -553,7 +550,8 @@ rrSetupPixmapSharing(RRCrtcPtr crtc, int width, int height, crtc->scanout_pixmap = spix_front; crtc->scanout_pixmap_back = spix_back; - if (!pMasterScrPriv->rrStartFlippingPixmapTracking(crtc, mscreenpix, + if (!pMasterScrPriv->rrStartFlippingPixmapTracking(crtc, + mrootdraw, spix_front, spix_back, x, y, 0, 0, @@ -588,7 +586,7 @@ fail: /* If flipping funcs fail, just fall back to unsynchronized */ } crtc->scanout_pixmap = spix_front; - master->StartPixmapTracking(mscreenpix, spix_front, x, y, 0, 0, rotation); + master->StartPixmapTracking(mrootdraw, spix_front, x, y, 0, 0, rotation); return TRUE; } |