[2/2] Add support for ScreenPtr::SyncSharedPixmap

Submitted by Michel Dänzer on Aug. 31, 2016, 8:55 a.m.

Details

Message ID 20160831085543.5286-2-michel@daenzer.net
State Accepted
Headers show
Series "Series without cover letter" ( rev: 2 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Michel Dänzer Aug. 31, 2016, 8:55 a.m.
From: Michel Dänzer <michel.daenzer@amd.com>

This allows deferring shared pixmap updates between different drivers.

Signed-off-by: Michel Dänzer <michel.daenzer@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(-)

Patch hide | download patch | download mbox

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))

Comments

> -----Original Message-----

> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf

> Of Michel Dänzer

> Sent: Wednesday, August 31, 2016 4:56 AM

> To: amd-gfx@lists.freedesktop.org

> Subject: [PATCH xf86-video-ati 2/2] Add support for

> ScreenPtr::SyncSharedPixmap

> 

> From: Michel Dänzer <michel.daenzer@amd.com>

> 

> This allows deferring shared pixmap updates between different drivers.

> 

> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>


For the series:
Reviewed-by: Alex Deucher <alexander.deucher@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@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/amd-gfx