[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