[PATCH xf86-video-amdgpu] Add support for ScreenPtr::SyncSharedPixmap
Mike Lothian
mike at fireburn.co.uk
Wed Sep 28 08:42:39 UTC 2016
Am I right in guessing this is only required for DRI2?
On Wed, 28 Sep 2016 at 09:00 Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> This allows deferring shared pixmap updates between different drivers.
>
> (Ported from radeon commit 53be26b00e83f871f0afd39caa5a7a1d6ec4aea1)
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
> 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
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20160928/8da2ffbd/attachment-0001.html>
More information about the amd-gfx
mailing list