From 6b08ef7a3ad062a185550ea02b105f99e3068605 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 12 Dec 2014 15:57:57 -0800 Subject: Add Monitors, update version to 1.5 Signed-off-by: Keith Packard --- configure.ac | 2 +- randr.h | 9 ++- randrproto.h | 56 ++++++++++++++++++ randrproto.txt | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 240 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 5bbd517..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.0], +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..4145f08 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,60 @@ 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; +} xRRGetMonitorsReq; +#define sz_xRRGetMonitorsReq 8 + +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 +1088,6 @@ typedef struct { #undef Rotation #undef SizeID #undef SubpixelOrder +#undef Atom #endif /* _XRANDRP_H_ */ diff --git a/randrproto.txt b/randrproto.txt index 8858a7b..1591f11 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@hp.com @@ -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". @@ -1538,6 +1586,76 @@ dynamic changes in the display environment. from the provider, and a RRProviderPropertyNotify event is generated. + ❧❧❧❧❧❧❧❧❧❧❧ + +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 + 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 @@ -2044,6 +2162,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 +2314,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 +3069,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 ┌─── -- cgit v1.2.3