summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Goins <agoins@nvidia.com>2016-06-16 20:06:46 -0700
committerAdam Jackson <ajax@redhat.com>2016-06-28 12:55:56 -0400
commitb601f96a5915a2c486b389483b291797e6fdf617 (patch)
treeb6349f284b987d9c06eaa595e2e9363c6f58c385
parentef1578e736887aadf209172f48daa9eaec25b3db (diff)
xf86: Add PRIME flipping functions to Screen
Adds typedefs for (*RRStartFlippingPixmapTrackingProcPtr), (*RREnableSharedPixmapFlippingProcPtr), and (*RRDisableSharedPixmapFlippingProcPtr) in randrstr.h. Adds typedefs for (*PresentSharedPixmapProcPtr), (*SharedPixmapNotifyDamageProcPtr), (*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 pixmaps. 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. v4: Unchanged v5: Add front and back parameters to RREnableSharedPixmapFlippingProcPtr v6: Rebase onto ToT v7: Unchanged Reviewed-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Alex Goins <agoins@nvidia.com>
-rw-r--r--include/scrnintstr.h14
-rw-r--r--randr/randrstr.h17
2 files changed, 31 insertions, 0 deletions
diff --git a/include/scrnintstr.h b/include/scrnintstr.h
index 63ef55c10..c5dadc7a6 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,
@@ -605,6 +614,11 @@ typedef struct _Screen {
StartPixmapTrackingProcPtr StartPixmapTracking;
StopPixmapTrackingProcPtr StopPixmapTracking;
+ SharedPixmapNotifyDamageProcPtr SharedPixmapNotifyDamage;
+ RequestSharedPixmapNotifyDamageProcPtr RequestSharedPixmapNotifyDamage;
+ PresentSharedPixmapProcPtr PresentSharedPixmap;
+ StopFlippingPixmapTrackingProcPtr StopFlippingPixmapTracking;
+
struct xorg_list pixmap_dirty_list;
ReplaceScanoutPixmapProcPtr ReplaceScanoutPixmap;
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 472721a5a..3e37df7d7 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -278,6 +278,19 @@ 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,
+ PixmapPtr front,
+ PixmapPtr back);
+
+typedef void (*RRDisableSharedPixmapFlippingProcPtr)(RRCrtcPtr);
+
+
typedef struct _rrScrPriv {
/*
* 'public' part of the structure; DDXen fill this in
@@ -304,6 +317,10 @@ typedef struct _rrScrPriv {
/* TODO #if RANDR_15_INTERFACE */
RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap;
+ RRStartFlippingPixmapTrackingProcPtr rrStartFlippingPixmapTracking;
+ RREnableSharedPixmapFlippingProcPtr rrEnableSharedPixmapFlipping;
+ RRDisableSharedPixmapFlippingProcPtr rrDisableSharedPixmapFlipping;
+
RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource;
RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink;
RRProviderGetPropertyProcPtr rrProviderGetProperty;