Michel Dänzer
2017-Apr-18 10:07 UTC
[Nouveau] [PATCH xserver] Make PixmapDirtyUpdateRec::src a DrawablePtr
From: Michel Dänzer <michel.daenzer at amd.com> This allows making the master screen's pixmap_dirty_list entries explicitly reflect that we're now tracking the root window instead of the screen pixmap, in order to allow Present page flipping on master outputs while there are active slave outputs. Define HAS_DIRTYTRACKING_DRAWABLE_SRC for drivers to check, but leave HAS_DIRTYTRACKING_ROTATION defined as well to make things slightly easier for drivers. Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> --- The Start/StopFlippingPixmapTracking related changes are only compile tested. The rest is smoke tested with the modesetting, amdgpu and radeon drivers. dix/pixmap.c | 24 +++++++++++------------- hw/xfree86/drivers/modesetting/driver.c | 10 +++++----- hw/xfree86/drivers/modesetting/drmmode_display.c | 5 +++-- hw/xfree86/drivers/modesetting/drmmode_display.h | 2 +- include/pixmap.h | 5 +++-- include/pixmapstr.h | 3 ++- include/scrnintstr.h | 6 +++--- randr/randrstr.h | 2 +- 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 d7030e5c2..8ce51a502 100644 --- a/hw/xfree86/drivers/modesetting/driver.c +++ b/hw/xfree86/drivers/modesetting/driver.c @@ -1219,12 +1219,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), @@ -1264,7 +1264,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; @@ -1274,10 +1274,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 516eb7691..f00fc3194 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -857,7 +857,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; @@ -897,7 +897,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 d1a51f0aa..cdf96df23 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; } -- 2.11.0
Michel Dänzer
2017-Apr-18 10:07 UTC
[Nouveau] [PATCH xf86-video-amdgpu] Adapt to PixmapDirtyUpdateRec::src being a DrawablePtr
From: Michel Dänzer <michel.daenzer at amd.com> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> --- Chris / Ilia / Ben, this should be manageable for the intel/nouveau drivers, right? src/amdgpu_drv.h | 26 ++++++++++++++++++++++++++ src/amdgpu_kms.c | 18 +++++++++--------- src/drmmode_display.c | 8 ++++++-- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/amdgpu_drv.h b/src/amdgpu_drv.h index e5c44dc36..9e088e71a 100644 --- a/src/amdgpu_drv.h +++ b/src/amdgpu_drv.h @@ -170,6 +170,32 @@ typedef enum { #define AMDGPU_PIXMAP_SHARING 1 #define amdgpu_is_gpu_screen(screen) (screen)->isGPU #define amdgpu_is_gpu_scrn(scrn) (scrn)->is_gpu + +static inline ScreenPtr +amdgpu_dirty_master(PixmapDirtyUpdatePtr dirty) +{ +#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC + ScreenPtr screen = dirty->src->pScreen; +#else + ScreenPtr screen = dirty->src->drawable.pScreen; +#endif + + if (screen->current_master) + return screen->current_master; + + return screen; +} + +static inline Bool +amdgpu_dirty_src_equals(PixmapDirtyUpdatePtr dirty, PixmapPtr pixmap) +{ +#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC + return dirty->src == &pixmap->drawable; +#else + return dirty->src == pixmap; +#endif +} + #else #define amdgpu_is_gpu_screen(screen) 0 #define amdgpu_is_gpu_scrn(scrn) 0 diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c index 0182cbe0a..29d3d076f 100644 --- a/src/amdgpu_kms.c +++ b/src/amdgpu_kms.c @@ -448,7 +448,7 @@ dirty_region(PixmapDirtyUpdatePtr dirty) static void redisplay_dirty(PixmapDirtyUpdatePtr dirty, RegionPtr region) { - ScrnInfoPtr scrn = xf86ScreenToScrn(dirty->src->drawable.pScreen); + ScrnInfoPtr scrn = xf86ScreenToScrn(dirty->slave_dst->drawable.pScreen); if (RegionNil(region)) goto out; @@ -481,12 +481,12 @@ amdgpu_prime_scanout_update_abort(xf86CrtcPtr crtc, void *event_data) void amdgpu_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) { - ScreenPtr master_screen = dirty->src->master_pixmap->drawable.pScreen; + ScreenPtr master_screen = amdgpu_dirty_master(dirty); PixmapDirtyUpdatePtr ent; RegionPtr region; xorg_list_for_each_entry(ent, &master_screen->pixmap_dirty_list, ent) { - if (ent->slave_dst != dirty->src) + if (!amdgpu_dirty_src_equals(dirty, ent->slave_dst)) continue; region = dirty_region(ent); @@ -501,7 +501,7 @@ amdgpu_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) static Bool master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) { - ScreenPtr master_screen = dirty->src->master_pixmap->drawable.pScreen; + ScreenPtr master_screen = amdgpu_dirty_master(dirty); return master_screen->SyncSharedPixmap != NULL; } @@ -517,7 +517,7 @@ slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) static void call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) { - ScreenPtr master_screen = dirty->src->master_pixmap->drawable.pScreen; + ScreenPtr master_screen = amdgpu_dirty_master(dirty); master_screen->SyncSharedPixmap(dirty); } @@ -527,7 +527,7 @@ call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) static Bool master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) { - ScrnInfoPtr master_scrn = xf86ScreenToScrn(dirty->src->master_pixmap->drawable.pScreen); + ScrnInfoPtr master_scrn = xf86ScreenToScrn(amdgpu_dirty_master(dirty)); return master_scrn->driverName == scrn->driverName; } @@ -581,7 +581,7 @@ amdgpu_prime_scanout_do_update(xf86CrtcPtr crtc, unsigned scanout_id) Bool ret = FALSE; xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) { - if (dirty->src == scanoutpix && dirty->slave_dst =+ if (amdgpu_dirty_src_equals(dirty, scanoutpix) && dirty->slave_dst = drmmode_crtc->scanout[scanout_id ^ drmmode_crtc->tear_free].pixmap) { RegionPtr region; @@ -738,10 +738,10 @@ amdgpu_dirty_update(ScrnInfoPtr scrn) PixmapDirtyUpdatePtr region_ent = ent; if (master_has_sync_shared_pixmap(scrn, ent)) { - ScreenPtr master_screen = ent->src->master_pixmap->drawable.pScreen; + ScreenPtr master_screen = amdgpu_dirty_master(ent); xorg_list_for_each_entry(region_ent, &master_screen->pixmap_dirty_list, ent) { - if (region_ent->slave_dst == ent->src) + if (amdgpu_dirty_src_equals(ent, region_ent->slave_dst)) break; } } diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 5e0c4133b..06103ed56 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -681,7 +681,7 @@ drmmode_crtc_prime_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode, xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) { - if (dirty->src == crtc->randr_crtc->scanout_pixmap && + if (amdgpu_dirty_src_equals(dirty, crtc->randr_crtc->scanout_pixmap) && dirty->slave_dst = drmmode_crtc->scanout[drmmode_crtc->scanout_id].pixmap) { dirty->slave_dst @@ -1216,7 +1216,11 @@ static Bool drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix) return FALSE; } -#ifdef HAS_DIRTYTRACKING_ROTATION +#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC + PixmapStartDirtyTracking(&ppix->drawable, + drmmode_crtc->scanout[scanout_id].pixmap, + 0, 0, 0, 0, RR_Rotate_0); +#elif defined(HAS_DIRTYTRACKING_ROTATION) PixmapStartDirtyTracking(ppix, drmmode_crtc->scanout[scanout_id].pixmap, 0, 0, 0, 0, RR_Rotate_0); #elif defined(HAS_DIRTYTRACKING2) -- 2.11.0
Michel Dänzer
2017-Jul-13 08:27 UTC
[Nouveau] [PATCH xf86-video-amdgpu] Adapt to PixmapDirtyUpdateRec::src being a DrawablePtr
On 18/04/17 07:07 PM, Michel Dänzer wrote:> From: Michel Dänzer <michel.daenzer at amd.com> > > Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> > --- > > Chris / Ilia / Ben, this should be manageable for the intel/nouveau > drivers, right?Any feedback, guys? I want to push the xserver change soon-ish. I could probably come up with a corresponding patch for nouveau in the worst case, but I'm afraid not for intel. -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer
Adam Jackson
2017-Aug-14 16:04 UTC
[Nouveau] [PATCH xserver] Make PixmapDirtyUpdateRec::src a DrawablePtr
On Tue, 2017-04-18 at 19:07 +0900, Michel Dänzer wrote:> From: Michel Dänzer <michel.daenzer at amd.com> > > This allows making the master screen's pixmap_dirty_list entries > explicitly reflect that we're now tracking the root window instead of > the screen pixmap, in order to allow Present page flipping on master > outputs while there are active slave outputs. > > Define HAS_DIRTYTRACKING_DRAWABLE_SRC for drivers to check, but leave > HAS_DIRTYTRACKING_ROTATION defined as well to make things slightly > easier for drivers. > > Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>Reviewed-by: Adam Jackson <ajax at redhat.com> - ajax
Reasonably Related Threads
- [PATCH xf86-video-amdgpu] Adapt to PixmapDirtyUpdateRec::src being a DrawablePtr
- [PATCH] present: rotated crtc's work fine
- [PATCH xf86-video-nouveau] dri2, present: move in pixmap before getting addresses
- [DDX PATCH] Consider CRTCs disabled when DPMS is off
- [PATCH] adapt to HAS_DIRTYTRACKING_DRAWABLE_SRC changes