randr: Factor out shared pixmap destruction
Shared pixmap destruction is done by unrefing the master pixmap twice: once for the original reference, and once for the reference implicitly added by PixmapShareToSlave. Then, unrefing the slave pixmap once. When I add PRIME double buffering and synchronization, I will need to do this in multiple places. To avoid duplication of code and comments explaining it everywhere, factor it out into its own function and use that in place of where it was before. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Alex Goins <agoins@nvidia.com>
This commit is contained in:
parent
ab9837cc6a
commit
cf5d6414e0
|
@ -361,6 +361,20 @@ RRComputeContiguity(ScreenPtr pScreen)
|
|||
pScrPriv->discontiguous = discontiguous;
|
||||
}
|
||||
|
||||
static void
|
||||
rrDestroySharedPixmap(RRCrtcPtr crtc, PixmapPtr pPixmap) {
|
||||
if (crtc->pScreen->current_master && pPixmap->master_pixmap) {
|
||||
/*
|
||||
* Unref the pixmap twice: once for the original reference, and once
|
||||
* for the reference implicitly added by PixmapShareToSlave.
|
||||
*/
|
||||
crtc->pScreen->current_master->DestroyPixmap(pPixmap->master_pixmap);
|
||||
crtc->pScreen->current_master->DestroyPixmap(pPixmap->master_pixmap);
|
||||
}
|
||||
|
||||
crtc->pScreen->DestroyPixmap(pPixmap);
|
||||
}
|
||||
|
||||
void
|
||||
RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc)
|
||||
{
|
||||
|
@ -372,14 +386,7 @@ RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc)
|
|||
|
||||
pScrPriv->rrCrtcSetScanoutPixmap(crtc, NULL);
|
||||
if (crtc->scanout_pixmap) {
|
||||
master->StopPixmapTracking(mscreenpix, crtc->scanout_pixmap);
|
||||
/*
|
||||
* Unref the pixmap twice: once for the original reference, and once
|
||||
* for the reference implicitly added by PixmapShareToSlave.
|
||||
*/
|
||||
master->DestroyPixmap(crtc->scanout_pixmap->master_pixmap);
|
||||
master->DestroyPixmap(crtc->scanout_pixmap->master_pixmap);
|
||||
crtc->pScreen->DestroyPixmap(crtc->scanout_pixmap);
|
||||
rrDestroySharedPixmap(crtc, crtc->scanout_pixmap);
|
||||
}
|
||||
crtc->scanout_pixmap = NULL;
|
||||
RRCrtcChanged(crtc, TRUE);
|
||||
|
|
Loading…
Reference in New Issue
Block a user