proto/randrproto: Branch 'master' - 2 commits

Dave Airlie airlied at kemper.freedesktop.org
Sun Mar 29 22:16:24 PDT 2015


 configure.ac   |    2 
 randr.h        |   10 ++
 randrproto.h   |   59 +++++++++++++++
 randrproto.txt |  211 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 277 insertions(+), 5 deletions(-)

New commits:
commit 98da0d6e48b7d124d6788ea568e9f9e3dc204322
Author: Dave Airlie <airlied at redhat.com>
Date:   Mon Feb 2 16:17:56 2015 +1000

    randrproto: add tile property info for randr 1.5
    
    expose this as an array of 8 32-bit values.
    
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/randr.h b/randr.h
index 43f5ad9..6fcda87 100644
--- a/randr.h
+++ b/randr.h
@@ -186,6 +186,7 @@ typedef unsigned long	XRandrModeFlags;
 #define RR_PROPERTY_BORDER		"Border"
 #define RR_PROPERTY_BORDER_DIMENSIONS	"BorderDimensions"
 #define RR_PROPERTY_GUID		"GUID"
+#define RR_PROPERTY_RANDR_TILE		"TILE"
 
 /* roles this device can carry out */
 #define RR_Capability_None 0
diff --git a/randrproto.txt b/randrproto.txt
index d0481c0..74b7c36 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -151,6 +151,12 @@ be dynamically configured to provide support for:
 
 1.5. Introduction to version 1.5 of the extension
 
+Version 1.5 adds an optional TILE property to outputs.
+
+   • An optional TILE property.
+     This property is used to denote individual tiles in a tiled monitor
+     configuration, as exposed via DisplayID v1.3.
+
 Version 1.5 adds monitors
 
  • A 'Monitor' is a rectangular subset of the screen which represents
@@ -2089,6 +2095,26 @@ doesn't handle a mandatory property correctly.
 	unique identifiers.  When such an identifier is available, this property
 	contains its raw bytes.
 
+    "TILE"			aka RR_PROPERTY_RANDR_TILE
+	Type:			INTEGER
+	Format:			32
+	Num items:		8
+	Flags:			Immutable
+	Range/List:		-
+
+        Tile monitors have an array of values describing the tiling,
+        based on DisplayID v1.3
+
+	The 8 elements are:
+        0: group id - The tile group identifier
+        1: flags - flags for tile group
+		0x1 = single monitor enclosure
+        2: number of horizontal tiles in tile group
+        3: number of vertical tiles in tile group
+        4: horizontal tile location for this tile
+        5: vertical tile location for this tile
+        6: horizontal tile size for this tile
+        7: vertical tile size for this tile
 
 9.2 Properties introduced with version 1.2 of the RandR extension
 
@@ -2129,6 +2155,11 @@ Property			Immutable	Mandatory since
 ────────			─────────	───────────────
 GUID				yes		not mandatory
 
+9.7 Properties introduced with version 1.5 of the RandR extension
+
+Property			Immutable	Mandatory since
+────────			─────────	───────────────
+TILE				yes		not mandatory
 			      ❧❧❧❧❧❧❧❧❧❧❧
 
 10. Extension Versioning
commit 4109f29861a7066970a2afd079d0fc2c12828bcb
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Dec 12 15:57:57 2014 -0800

    Add Monitors, update version to 1.5 (v2)
    
    v2: [airlied] add get_active to monitor get
    interface, to allow normal vs configuration
    clients to see active vs all monitors. (r-b by keithp)
    
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 38dabfc..18197e3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ([2.60])
-AC_INIT([RandrProto], [1.4.1],
+AC_INIT([RandrProto], [1.5.0],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
diff --git a/randr.h b/randr.h
index 3c6721b..43f5ad9 100644
--- a/randr.h
+++ b/randr.h
@@ -40,11 +40,11 @@ typedef unsigned long	XRandrModeFlags;
 
 #define RANDR_NAME		"RANDR"
 #define RANDR_MAJOR		1
-#define RANDR_MINOR		4
+#define RANDR_MINOR		5
 
 #define RRNumberErrors		4
 #define RRNumberEvents		2
-#define RRNumberRequests	42
+#define RRNumberRequests	45
 
 #define X_RRQueryVersion	0
 /* we skip 1 to make old clients fail pretty immediately */
@@ -104,6 +104,11 @@ typedef unsigned long	XRandrModeFlags;
 #define X_RRDeleteProviderProperty    40
 #define X_RRGetProviderProperty	      41
 
+/* v1.5 */
+#define X_RRGetMonitors		      42
+#define X_RRSetMonitor		      43
+#define X_RRDeleteMonitor	      44
+
 /* Event selection bits */
 #define RRScreenChangeNotifyMask  (1L << 0)
 /* V1.2 additions */
diff --git a/randrproto.h b/randrproto.h
index 30691e7..114a624 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -50,6 +50,7 @@
 #define RRCrtc CARD32
 #define RRProvider CARD32
 #define RRModeFlags CARD32
+#define Atom CARD32
 
 #define Rotation CARD16
 #define SizeID CARD16
@@ -1012,6 +1013,63 @@ typedef struct {
 } xRRSetPanningReply;
 #define sz_xRRSetPanningReply	32
 
+typedef struct {
+    Atom	name B32;
+    BOOL	primary;
+    BOOL	automatic;
+    CARD16	noutput B16;
+    INT16	x B16;
+    INT16	y B16;
+    CARD16	width B16;
+    CARD16	height B16;
+    CARD32	widthInMillimeters B32;
+    CARD32	heightInMillimeters B32;
+} xRRMonitorInfo;
+#define sz_xRRMonitorInfo	24
+
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    Window	window B32;
+    BOOL	get_active;
+    CARD8	pad;
+    CARD16	pad2;
+} xRRGetMonitorsReq;
+#define sz_xRRGetMonitorsReq	12
+
+typedef struct {
+    BYTE	type;
+    CARD8	status;
+    CARD16	sequenceNumber B16;
+    CARD32	length B32;
+    Time	timestamp B32;
+    CARD32	nmonitors B32;
+    CARD32	noutputs B32;
+    CARD32      pad1 B32;
+    CARD32      pad2 B32;
+    CARD32      pad3 B32;
+} xRRGetMonitorsReply;
+#define sz_xRRGetMonitorsReply	32
+
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    Window	window B32;
+    xRRMonitorInfo	monitor;
+} xRRSetMonitorReq;
+#define sz_xRRSetMonitorReq	32
+
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    Window	window B32;
+    Atom	name B32;
+} xRRDeleteMonitorReq;
+#define sz_xRRDeleteMonitorReq	12
+
 #undef RRModeFlags
 #undef RRCrtc
 #undef RRMode
@@ -1033,5 +1091,6 @@ typedef struct {
 #undef Rotation
 #undef SizeID
 #undef SubpixelOrder
+#undef Atom
 
 #endif /* _XRANDRP_H_ */
diff --git a/randrproto.txt b/randrproto.txt
index df2c712..d0481c0 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1,5 +1,5 @@
 	       The X Resize, Rotate and Reflect Extension
-			     Version 1.4.1
+			     Version 1.5.0
 			       2015-03-14
 
 			      Jim Gettys
@@ -149,6 +149,37 @@ be dynamically configured to provide support for:
 
  4) multiple GPU rendering - This replaces Xinerama.
 
+1.5. Introduction to version 1.5 of the extension
+
+Version 1.5 adds monitors
+
+ • A 'Monitor' is a rectangular subset of the screen which represents
+   a coherent collection of pixels presented to the user.
+
+ • Each Monitor is be associated with a list of outputs (which may be
+   empty).
+
+ • When clients define monitors, the associated outputs are removed from
+   existing Monitors. If removing the output causes the list for that
+   monitor to become empty, that monitor will be deleted.
+
+ • For active CRTCs that have no output associated with any
+   client-defined Monitor, one server-defined monitor will
+   automatically be defined of the first Output associated with them.
+
+ • When defining a monitor, setting the geometry to all zeros will
+   cause that monitor to dynamically track the bounding box of the
+   active outputs associated with them
+
+This new object separates the physical configuration of the hardware
+from the logical subsets  the screen that applications should
+consider as single viewable areas.
+
+1.5.1. Relationship between Monitors and Xinerama
+
+Xinerama's information now comes from the Monitors instead of directly
+from the CRTCs. The Monitor marked as Primary will be listed first.
+
 1.99 Acknowledgments
 
 Our thanks to the contributors to the design found on the xpert mailing
@@ -162,7 +193,9 @@ David Dawes for XFree86 DDX integration work
 Thomas Winischhofer for the hardware-accelerated SiS rotation implementation
 Matthew Tippett and Kevin Martin for splitting outputs and CRTCs to more
 fully expose what video hardware can do
-Dave Airlie for the 1.4.0 protocol changes.
+Dave Airlie for the 1.4.0 protocol changes and for working through the
+implications of MST monitors and encouraging the introduction of the
+'Monitor' concept.
 
 			      ❧❧❧❧❧❧❧❧❧❧❧
 
@@ -365,6 +398,21 @@ PROVIDER_CAPS { SourceOutput, SinkOutput, SourceOffload, SinkOffload }
 
 			      ❧❧❧❧❧❧❧❧❧❧❧
 
+5.6. Protocol Types added in version 1.5 of the extension
+
+MONITORINFO { name: ATOM
+              primary: BOOL
+	      automatic: BOOL
+	      x: INT16
+	      y: INT16
+	      width: CARD16
+	      height: CARD16
+	      width-in-millimeters: CARD32
+	      height-in-millimeters: CARD32
+	      outputs: LISTofOUTPUT }
+
+			      ❧❧❧❧❧❧❧❧❧❧❧
+
 6. Extension Initialization
 
 The name of this extension is "RANDR".
@@ -1539,6 +1587,79 @@ dynamic changes in the display environment.
 
 
 			      ❧❧❧❧❧❧❧❧❧❧❧
+
+7.5. Extension Requests added in version 1.5 of the extension.
+
+┌───
+    RRGetMonitors
+	window : WINDOW
+	get_active : BOOL
+     ▶
+	timestamp: TIMESTAMP
+	monitors: LISTofMONITORINFO
+└───
+	Errors: Window
+
+	Returns the list of Monitors for the screen containing
+	'window'. If 'get_active' is set it returns only active
+	monitors (non-0x0 monitors).  'get_active' should always
+	be set by toolkits, and not by configuration clients.
+
+	'timestamp' indicates the server time when the list of
+	monitors last changed.
+
+┌───
+    RRSetMonitor
+	window : WINDOW
+	info: MONITORINFO
+└───
+	Errors: Window, Output, Atom, Value
+
+	Create a new monitor. Any existing Monitor of the same name is deleted.
+
+	'name' must be a valid atom or an Atom error results.
+
+	'name' must not match the name of any Output on the screen, or
+	a Value error results.
+
+	If 'info.outputs' is non-empty, and if x, y, width, height are all
+	zero, then the Monitor geometry will be dynamically defined to
+	be the bounding box of the geometry of the active CRTCs
+	associated with them.
+
+	If 'name' matches an existing Monitor on the screen, the
+	existing one will be deleted as if RRDeleteMonitor were called.
+
+	For each output in 'info.outputs, each one is removed from all
+	pre-existing Monitors. If removing the output causes the list of
+	outputs for that Monitor to become empty, then that Monitor will
+	be deleted as if RRDeleteMonitor were called.
+
+	Only one monitor per screen may be primary. If 'info.primary'
+	is true, then the primary value will be set to false on all
+	other monitors on the screen.
+
+	RRSetMonitor generates a ConfigureNotify event on the root
+	window of the screen.
+
+┌───
+    RRDeleteMonitor
+	window : WINDOW
+	name: ATOM
+└───
+	Errors: Window, Atom, Value
+
+	Deletes the named Monitor.
+
+	'name' must be a valid atom or an Atom error results.
+
+	'name' must match the name of a Monitor on the screen, or a
+	Value error results.
+
+	RRDeleteMonitor generates a ConfigureNotify event on the root
+	window of the screen.
+
+			      ❧❧❧❧❧❧❧❧❧❧❧
 8. Extension Events
 
 Clients MAY select for ConfigureNotify on the root window to be
@@ -2044,6 +2165,8 @@ list of what each version provided:
 
         1.4: Added provider objects for handling multi-GPU systems.
 
+	1.5: Added Monitors
+
 Compatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients
 will fail against 1.0 servers. The wire encoding op-codes were
 changed for GetScreenInfo to ensure this failure in a relatively
@@ -2194,6 +2317,23 @@ A.1 Common Types
 	0x00000008	SinkOffload
 └───
 
+A.1.1 Common Types added in version 1.5 of the protocol
+
+┌───
+    MONITORINFO (16 + 4*n)
+	4	ATOM		name
+	1	BOOL		primary
+	1	BOOL		automatic
+	2	CARD16		ncrtcs
+	2	INT16		x
+	2	INT16		y
+	2	CARD16		width in pixels
+	2	CARD16		height in pixels
+	4	CARD32		width in millimeters
+	4	CARD32		height in millimeters
+	4*n	CRTC		crtcs
+└───
+
 A.2 Protocol Requests
 
 Opcodes 1 and 3 were used in the 0.0 protocols, and will return
@@ -2932,6 +3072,42 @@ A.2.3 Protocol Requests added with version 1.4
 	p				unused, p=pad(n)
 └───
 
+A.2.4 Protocol Requests added with version 1.5
+
+┌───
+    RRGetMonitors
+	1	CARD8			major opcode
+	1	42			RandR opcode
+	2	2			request length
+	4	WINDOW			window
+     ▶
+	1	1			Reply
+	1				unused
+	2	CARD16			sequence number
+	4	6*n + o			reply length
+	4	TIMESTAMP		timestamp
+	4	n			nmonitors
+	4	o			noutputs
+	12				unused
+	n*24+o*4 LISTofMONITORINFO	monitors
+└───
+┌───
+    RRSetMonitor
+	1	CARD8			major opcode
+	1	43			RandR opcode
+	2	6 + o			request length
+	4	WINDOW			window
+	24+o	MONITORINFO		monitorinfo
+└───
+┌───
+    RRDeleteMonitor
+	1	CARD8			major opcode
+	1	44			RandR opcode
+	2	3			request length
+	4	WINDOW			window
+	4	ATOM			name
+└───
+
 A.3 Protocol Events
 
 ┌───


More information about the xorg-commit mailing list