[PATCH v3 1/9] xf86: Add PRIME flipping functions to Screen

Alex Goins agoins at nvidia.com
Wed Feb 3 04:22:42 UTC 2016

Adds typedefs for (*RRStartFlippingPixmapTrackingProcPtr),
and (*RRDisableSharedPixmapFlippingProcPtr) in randrstr.h.

Adds typedefs for (*PresentSharedPixmapProcPtr),
(*RequestSharedPixmapNotifyDamageProcPtr), and
(*StopFlippingPixmapTrackingProcPtr) in scrnintstr.h.

Adds RR(Enable/Disable)SharedPixmapFlipping, and
RRStartFlippingPixmapTracking to rrScrnPrivRec.

Adds StopFlippingPixmapTracking, PresentSharedPixmap,
SharedPixmapNotifyDamage, and RequestSharedPixmapNotifyDamage to ScreenRec.

rrScrnPrivRec used for functions that use RandR-private data types, and
ScreenRec used for the rest.

RREnableSharedPixmapFlipping will allow the sink driver to setup for
flipping between two shared pixmaps.

RRDisableSharedPixmapFlipping will allow the sink driver to do teardown
associated with flipping between two shared pixmaps.

(RRStart/Stop)FlippingPixmapTracking are merely the double-buffered
equivalents of (Start/Stop)PixmapTracking, allowing the source driver to do
whatever setup and teardown necessary for presenting on the two shared

PresentSharedPixmap is a function exposed by the source driver for the X
server or sink driver to call to request a present on a given shared
pixmap.  This way, presents can be driven by the sink's vblank instead of a
timer or similar mechanism.

SharedPixmapNotifyDamage and RequestSharedPixmapNotifyDamage are OPTIONAL
(even for double-buffered PRIME) functions exposed by the sink driver and
the source driver, respectively. By calling
master->RequestSharedPixmapNotifyDamage(ppix), the sink driver can request
for the source driver to call slave->SharedPixmapNotifyDamage(ppix) in
response to damage on the master screen pixmap tracked by ppix.

v1: Initial commit
v2: Rename PresentTrackedFlippingPixmap to PresentSharedPixmap
    Add SharedPixmapNotifyDamage / RequestSharedPixmapNotifyDamage
v3: Add RRCrtcPtr as a parameter to StartFlippingPixmapTracking
    Move functions that use RandR-private data types to rrScrnPrivRec.

Signed-off-by: Alex Goins <agoins at nvidia.com>
 include/scrnintstr.h | 14 ++++++++++++++
 randr/randrstr.h     | 15 +++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/include/scrnintstr.h b/include/scrnintstr.h
index 2e617c4..c74adff 100644
--- a/include/scrnintstr.h
+++ b/include/scrnintstr.h
@@ -349,8 +349,17 @@ typedef Bool (*StartPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr,
                                            int dst_x, int dst_y,
                                            Rotation rotation);
+typedef Bool (*PresentSharedPixmapProcPtr)(PixmapPtr);
+typedef Bool (*RequestSharedPixmapNotifyDamageProcPtr)(PixmapPtr);
 typedef Bool (*StopPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr);
+typedef Bool (*StopFlippingPixmapTrackingProcPtr)(PixmapPtr,
+                                                  PixmapPtr, PixmapPtr);
+typedef Bool (*SharedPixmapNotifyDamageProcPtr)(PixmapPtr);
 typedef Bool (*ReplaceScanoutPixmapProcPtr)(DrawablePtr, PixmapPtr, Bool);
 typedef WindowPtr (*XYToWindowProcPtr)(ScreenPtr pScreen,
@@ -604,6 +613,11 @@ typedef struct _Screen {
     StartPixmapTrackingProcPtr StartPixmapTracking;
     StopPixmapTrackingProcPtr StopPixmapTracking;
+    SharedPixmapNotifyDamageProcPtr SharedPixmapNotifyDamage;
+    RequestSharedPixmapNotifyDamageProcPtr RequestSharedPixmapNotifyDamage;
+    PresentSharedPixmapProcPtr PresentSharedPixmap;
+    StopFlippingPixmapTrackingProcPtr StopFlippingPixmapTracking;
     struct xorg_list pixmap_dirty_list;
     struct xorg_list offload_slave_list;
     struct xorg_list offload_head;
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 472721a..b8f5819 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -278,6 +278,17 @@ typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen,
 typedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap);
+typedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, PixmapPtr,
+                                                     PixmapPtr, PixmapPtr,
+                                                     int x, int y,
+                                                     int dst_x, int dst_y,
+                                                     Rotation rotation);
+typedef Bool (*RREnableSharedPixmapFlippingProcPtr)(RRCrtcPtr);
+typedef void (*RRDisableSharedPixmapFlippingProcPtr)(RRCrtcPtr);
 typedef struct _rrScrPriv {
      * 'public' part of the structure; DDXen fill this in
@@ -304,6 +315,10 @@ typedef struct _rrScrPriv {
     /* TODO #if RANDR_15_INTERFACE */
     RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap;
+    RRStartFlippingPixmapTrackingProcPtr rrStartFlippingPixmapTracking;
+    RREnableSharedPixmapFlippingProcPtr rrEnableSharedPixmapFlipping;
+    RRDisableSharedPixmapFlippingProcPtr rrDisableSharedPixmapFlipping;
     RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource;
     RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink;
     RRProviderGetPropertyProcPtr rrProviderGetProperty;

More information about the xorg-devel mailing list