> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Michel Dänzer > Sent: Wednesday, August 31, 2016 4:56 AM > To: amd-gfx at lists.freedesktop.org > Subject: [PATCH xf86-video-ati 2/2] Add support for > ScreenPtr::SyncSharedPixmap > > From: Michel Dänzer <michel.daenzer at amd.com> > > This allows deferring shared pixmap updates between different drivers. > > Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> For the series: Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > > This change requires a corresponding xserver change adding the > SyncSharedPixmap field. I'll only push it once the xserver change has > landed. > > src/radeon_kms.c | 43 > ++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 42 insertions(+), 1 deletion(-) > > diff --git a/src/radeon_kms.c b/src/radeon_kms.c > index 0c8996d..f43c30f 100644 > --- a/src/radeon_kms.c > +++ b/src/radeon_kms.c > @@ -485,6 +485,35 @@ > radeon_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) > } > } > > + > +#if HAS_SYNC_SHARED_PIXMAP > + > +static Bool > +master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr > dirty) > +{ > + ScreenPtr master_screen = dirty->src->master_pixmap- > >drawable.pScreen; > + > + return master_screen->SyncSharedPixmap != NULL; > +} > + > +static Bool > +slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr > dirty) > +{ > + ScreenPtr slave_screen = dirty->slave_dst->drawable.pScreen; > + > + return slave_screen->SyncSharedPixmap != NULL; > +} > + > +static void > +call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) > +{ > + ScreenPtr master_screen = dirty->src->master_pixmap- > >drawable.pScreen; > + > + master_screen->SyncSharedPixmap(dirty); > +} > + > +#else /* !HAS_SYNC_SHARED_PIXMAP */ > + > static Bool > master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr > dirty) > { > @@ -501,6 +530,15 @@ slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, > PixmapDirtyUpdatePtr dirty) > return slave_scrn->driverName == scrn->driverName; > } > > +static void > +call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) > +{ > + radeon_sync_shared_pixmap(dirty); > +} > + > +#endif /* HAS_SYNC_SHARED_PIXMAPS */ > + > + > void > radeon_prime_scanout_update_handler(xf86CrtcPtr crtc, uint32_t frame, > uint64_t usec, > void *event_data) > @@ -518,7 +556,7 @@ radeon_prime_scanout_update_handler(xf86CrtcPtr > crtc, uint32_t frame, uint64_t u > continue; > > if (master_has_sync_shared_pixmap(scrn, dirty)) > - radeon_sync_shared_pixmap(dirty); > + call_sync_shared_pixmap(dirty); > > region = dirty_region(dirty); > redisplay_dirty(dirty, region); > @@ -2128,6 +2166,9 @@ Bool > RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL) > #ifdef RADEON_PIXMAP_SHARING > pScreen->StartPixmapTracking = PixmapStartDirtyTracking; > pScreen->StopPixmapTracking = PixmapStopDirtyTracking; > +#if HAS_SYNC_SHARED_PIXMAP > + pScreen->SyncSharedPixmap = radeon_sync_shared_pixmap; > +#endif > #endif > > if (!xf86CrtcScreenInit (pScreen)) > -- > 2.9.3 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx