[PATCH: randrproto] Add Monitors to spec, start version 1.5 specification.

Keith Packard keithp at keithp.com
Fri Dec 12 15:59:27 PST 2014


Signed-off-by: Keith Packard <keithp at keithp.com>
---
 randrproto.txt | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 171 insertions(+), 3 deletions(-)

diff --git a/randrproto.txt b/randrproto.txt
index 7981392..79472b4 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1,6 +1,6 @@
 	       The X Resize, Rotate and Reflect Extension
-			     Version 1.4.0
-			       2012-07-03
+			     Version 1.5.0
+			       2014-12-12
 
 			      Jim Gettys
 			   Jim.Gettys at hp.com
@@ -149,7 +149,42 @@ be dynamically configured to provide support for:
 
  4) multiple GPU rendering - This replaces Xinerama.
 
-1.99 Acknowledgements
+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 available to the
+      user. Most commonly, a Monitor is mapped to a single CRTC. A
+      video wall, MST display or other multi-monitor environment can
+      be presented as a single viewing area, rather than separate
+      areas. Areas not mapped to a CRTC may also be used, allowing the
+      creation of virtual areas presented by VNC or other means.
+
+This new object separates the physical configuration of the hardware
+from the logical subsets  the screen that applications should
+consider as single viewable areas.
+
+Each Monitor may be associated with a list of CRTCs. When that list is
+non-empty, and when the geometry provided by the client in the
+creation of the Monitor specifies all of x,y,width,height as zero,
+then the geometry of the Monitor is defined to be the bounding box of
+the list of CRTCs. When the CRTC list for a Monitor is empty, the
+geometry of the Monitor is defined by the client.
+
+Each enabled CRTC is associated with precisely one Monitor. Enabling a
+CRTC will create a new Monitor with the name of the first output
+connected to the CRTC. When defining a new Monitor, any CRTC in the
+list provided in the definition will be removed from its existing
+Monitor. If that Monitor has no more CRTCs, then that Monitor will be
+deleted.
+
+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
 list, in particular:
@@ -162,6 +197,8 @@ 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
+David Airlie for working through the implications of MST monitors and
+encouraging the introduction of the 'Monitor' concept.
 
 			      ❧❧❧❧❧❧❧❧❧❧❧
 
@@ -342,6 +379,17 @@ PROVIDER_CAPS { SourceOutput, SinkOutput, SourceOffload, SinkOffload }
 
 			      ❧❧❧❧❧❧❧❧❧❧❧
 
+5.6. Protocol Types added in version 1.5 of the extension
+
+MONITORINFO { name: STRING
+              primary: BOOL
+	      x: INT16
+	      y: INT16
+	      width: CARD16
+	      height: CARD16 }
+
+			      ❧❧❧❧❧❧❧❧❧❧❧
+
 6. Extension Initialization
 
 The name of this extension is "RANDR".
@@ -1502,6 +1550,67 @@ dynamic changes in the display environment.
 
 
 			      ❧❧❧❧❧❧❧❧❧❧❧
+
+7.5. Extension Requests added in version 1.5 of the extension.
+
+┌───
+    RRGetMonitors
+	window : WINDOW
+     ▶
+	timestamp: TIMESTAMP
+	monitors: LISTofMONITORINFO
+└───
+	Errors: Window
+
+	Returns the list of Monitors for the screen containing
+	'window'.
+
+	'timestamp' indicates the server time when the list of
+	monitors last changed.
+
+┌───
+    RRSetMonitor
+	window : WINDOW
+	crtcs: LISTofCRTC
+	info: MONITORINFO
+└───
+	Errors: Window, CRTC, Name
+
+	Create a new monitor associated with the provided list of
+	CRTCs.
+
+	The name of the Monitor must not match the name of any Output
+	on the screen, or a Name error results.
+
+	If the 'crtcs' 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 CRTCs.
+
+	For each CRTC in 'crtcs', each one is removed from all
+	pre-existing Monitors. If removing the CRTC causes the list of
+	CRTCs for that Monitor to become empty, then that Monitor will
+	be deleted as if RRDeleteMonitor were called.
+
+	RRSetMonitor generates a ConfigureNotify event on the root
+	window of the screen.
+
+┌───
+    RRDeleteMonitor
+	window : WINDOW
+	name: STRING
+└───
+	Errors: Window
+
+	Deletes the named Monitor.
+
+	For each CRTC associated with the Monitor which is enabled, a
+	new Monitor will be created using the name of the first output
+	connected to the CRTC.
+
+	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
@@ -1993,6 +2102,10 @@ list of what each version provided:
 	     transformations.  Added panning.  Added primary outputs.
 	     Added standard properties.
 
+        1.4: Added Border Properties and providers.
+
+	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
@@ -2131,6 +2244,20 @@ A.1 Common Types
 	2		UnknownConnection
 └───
 
+A.1.1 Common Types added in version 1.5 of the protocol
+
+┌───
+    MONITORINFO (12 + n + p)
+	1	n		name length
+	1	BOOL		primary
+	2			unused
+	2	INT16		x
+	2	INT16		y
+	2	CARD16		width
+	2	CARD16		height
+	n	STRING8		name
+	p			unused, p=pad(b)
+└───
 
 A.2 Protocol Requests
 
@@ -2869,6 +2996,47 @@ 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				reply length
+	4	n			number of Monitors
+	4	TIMESTAMP		timestamp
+	16				unused
+	n*12+x	LISTofMONITORINFO	monitors
+					(x is the space used by names)	d
+└───
+┌───
+    RRSetMonitor
+	1	CARD8			major opcode
+	1	43			RandR opcode
+	2	6 + n + (l+p)/4		request length
+	4	WINDOW			window
+	4	n			number of crtcs
+	12+l+p	MONITORINFO		monitorinfo + name + pad
+	4*n	CRTC			crtcs
+└───
+┌───
+    RRDeleteMonitor
+	1	CARD8			major opcode
+	1	44			RandR opcode
+	2	2			request length
+	4	WINDOW			window
+	1	l			name length
+	3				unused
+	l	STRING8			name
+	p				unused, p=pad(n)
+└───
+
 A.3 Protocol Events
 
 ┌───
-- 
2.1.3



More information about the xorg-devel mailing list