From: Michel Dänzer <[email protected]> This allows deferring shared pixmap updates between different drivers.
(Ported from radeon commit 53be26b00e83f871f0afd39caa5a7a1d6ec4aea1) Signed-off-by: Michel Dänzer <[email protected]> --- src/amdgpu_kms.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c index a159c84..4ae7995 100644 --- a/src/amdgpu_kms.c +++ b/src/amdgpu_kms.c @@ -491,6 +491,35 @@ amdgpu_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) { @@ -507,6 +536,15 @@ slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) return slave_scrn->driverName == scrn->driverName; } +static void +call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) +{ + amdgpu_sync_shared_pixmap(dirty); +} + +#endif /* HAS_SYNC_SHARED_PIXMAPS */ + + static Bool amdgpu_prime_scanout_do_update(xf86CrtcPtr crtc, unsigned scanout_id) { @@ -524,7 +562,7 @@ amdgpu_prime_scanout_do_update(xf86CrtcPtr crtc, unsigned scanout_id) RegionPtr region; if (master_has_sync_shared_pixmap(scrn, dirty)) - amdgpu_sync_shared_pixmap(dirty); + call_sync_shared_pixmap(dirty); region = dirty_region(dirty); if (RegionNil(region)) @@ -1803,6 +1841,9 @@ Bool AMDGPUScreenInit_KMS(SCREEN_INIT_ARGS_DECL) #ifdef AMDGPU_PIXMAP_SHARING pScreen->StartPixmapTracking = PixmapStartDirtyTracking; pScreen->StopPixmapTracking = PixmapStopDirtyTracking; +#if HAS_SYNC_SHARED_PIXMAP + pScreen->SyncSharedPixmap = amdgpu_sync_shared_pixmap; +#endif #endif if (!xf86CrtcScreenInit(pScreen)) -- 2.9.3 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
