summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--randr.h34
-rw-r--r--randrproto.h235
-rw-r--r--randrproto.txt520
3 files changed, 783 insertions, 6 deletions
diff --git a/randr.h b/randr.h
index 04604aa..33d22fb 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 3
+#define RANDR_MINOR 4
-#define RRNumberErrors 3
+#define RRNumberErrors 4
#define RRNumberEvents 2
-#define RRNumberRequests 32
+#define RRNumberRequests 42
#define X_RRQueryVersion 0
/* we skip 1 to make old clients fail pretty immediately */
@@ -92,12 +92,28 @@ typedef unsigned long XRandrModeFlags;
#define RRTransformScaleDown (1L << 2)
#define RRTransformProjective (1L << 3)
+/* v1.4 */
+#define X_RRGetProviders 32
+#define X_RRGetProviderInfo 33
+#define X_RRSetProviderOffloadSink 34
+#define X_RRSetProviderOutputSource 35
+#define X_RRListProviderProperties 36
+#define X_RRQueryProviderProperty 37
+#define X_RRConfigureProviderProperty 38
+#define X_RRChangeProviderProperty 39
+#define X_RRDeleteProviderProperty 40
+#define X_RRGetProviderProperty 41
+
/* Event selection bits */
#define RRScreenChangeNotifyMask (1L << 0)
/* V1.2 additions */
#define RRCrtcChangeNotifyMask (1L << 1)
#define RROutputChangeNotifyMask (1L << 2)
#define RROutputPropertyNotifyMask (1L << 3)
+/* V1.4 additions */
+#define RRProviderChangeNotifyMask (1L << 4)
+#define RRProviderPropertyNotifyMask (1L << 5)
+#define RRResourceChangeNotifyMask (1L << 6)
/* Event codes */
#define RRScreenChangeNotify 0
@@ -107,7 +123,9 @@ typedef unsigned long XRandrModeFlags;
#define RRNotify_CrtcChange 0
#define RRNotify_OutputChange 1
#define RRNotify_OutputProperty 2
-
+#define RRNotify_ProviderChange 3
+#define RRNotify_ProviderProperty 4
+#define RRNotify_ResourceChange 5
/* used in the rotation field; rotation and reflection in 0.1 proto. */
#define RR_Rotate_0 1
#define RR_Rotate_90 2
@@ -148,6 +166,7 @@ typedef unsigned long XRandrModeFlags;
#define BadRROutput 0
#define BadRRCrtc 1
#define BadRRMode 2
+#define BadRRProvider 3
/* Conventional RandR output properties */
@@ -162,4 +181,11 @@ typedef unsigned long XRandrModeFlags;
#define RR_PROPERTY_BORDER "Border"
#define RR_PROPERTY_BORDER_DIMENSIONS "BorderDimensions"
+/* roles this device can carry out */
+#define RR_Capability_None 0
+#define RR_Capability_SourceOutput 1
+#define RR_Capability_SinkOutput 2
+#define RR_Capability_SourceOffload 4
+#define RR_Capability_SinkOffload 8
+
#endif /* _RANDR_H_ */
diff --git a/randrproto.h b/randrproto.h
index 3b98a9f..30691e7 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -48,6 +48,7 @@
#define RROutput CARD32
#define RRMode CARD32
#define RRCrtc CARD32
+#define RRProvider CARD32
#define RRModeFlags CARD32
#define Rotation CARD16
@@ -646,6 +647,195 @@ typedef struct {
#define sz_xRRGetOutputPrimaryReply 32
/*
+ * Additions for V1.4
+ */
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ Window window B32;
+} xRRGetProvidersReq;
+#define sz_xRRGetProvidersReq 8
+
+typedef struct {
+ BYTE type;
+ CARD8 pad;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ Time timestamp B32;
+ CARD16 nProviders;
+ CARD16 pad1 B16;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+} xRRGetProvidersReply;
+#define sz_xRRGetProvidersReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ Time configTimestamp B32;
+} xRRGetProviderInfoReq;
+#define sz_xRRGetProviderInfoReq 12
+
+typedef struct {
+ BYTE type;
+ CARD8 status;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ Time timestamp B32;
+ CARD32 capabilities B32;
+ CARD16 nCrtcs B16;
+ CARD16 nOutputs B16;
+ CARD16 nAssociatedProviders B16;
+ CARD16 nameLength B16;
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+} xRRGetProviderInfoReply;
+#define sz_xRRGetProviderInfoReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ RRProvider source_provider B32;
+ Time configTimestamp B32;
+} xRRSetProviderOutputSourceReq;
+#define sz_xRRSetProviderOutputSourceReq 16
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ RRProvider sink_provider B32;
+ Time configTimestamp B32;
+} xRRSetProviderOffloadSinkReq;
+#define sz_xRRSetProviderOffloadSinkReq 16
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+} xRRListProviderPropertiesReq;
+#define sz_xRRListProviderPropertiesReq 8
+
+typedef struct {
+ BYTE type;
+ CARD8 pad0;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nAtoms B16;
+ CARD16 pad1 B16;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+} xRRListProviderPropertiesReply;
+#define sz_xRRListProviderPropertiesReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ Atom property B32;
+} xRRQueryProviderPropertyReq;
+#define sz_xRRQueryProviderPropertyReq 12
+
+typedef struct {
+ BYTE type;
+ BYTE pad0;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ BOOL pending;
+ BOOL range;
+ BOOL immutable;
+ BYTE pad1;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+} xRRQueryProviderPropertyReply;
+#define sz_xRRQueryProviderPropertyReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ Atom property B32;
+ BOOL pending;
+ BOOL range;
+ CARD16 pad B16;
+} xRRConfigureProviderPropertyReq;
+#define sz_xRRConfigureProviderPropertyReq 16
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ Atom property B32;
+ Atom type B32;
+ CARD8 format;
+ CARD8 mode;
+ CARD16 pad;
+ CARD32 nUnits B32;
+} xRRChangeProviderPropertyReq;
+#define sz_xRRChangeProviderPropertyReq 24
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ Atom property B32;
+} xRRDeleteProviderPropertyReq;
+#define sz_xRRDeleteProviderPropertyReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRProvider provider B32;
+ Atom property B32;
+ Atom type B32;
+ CARD32 longOffset B32;
+ CARD32 longLength B32;
+#ifdef __cplusplus
+ BOOL _delete;
+#else
+ BOOL delete;
+#endif
+ BOOL pending;
+ CARD16 pad1 B16;
+} xRRGetProviderPropertyReq;
+#define sz_xRRGetProviderPropertyReq 28
+
+typedef struct {
+ BYTE type;
+ CARD8 format;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ Atom propertyType B32;
+ CARD32 bytesAfter B32;
+ CARD32 nItems B32;
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+} xRRGetProviderPropertyReply;
+#define sz_xRRGetProviderPropertyReply 32
+
+/*
* event
*/
typedef struct {
@@ -715,6 +905,50 @@ typedef struct {
#define sz_xRROutputPropertyNotifyEvent 32
typedef struct {
+ CARD8 type; /* always evBase + RRNotify */
+ CARD8 subCode; /* RRNotify_ProviderChange */
+ CARD16 sequenceNumber B16;
+ Time timestamp B32; /* time provider was changed */
+ Window window B32; /* window requesting notification */
+ RRProvider provider B32; /* affected provider */
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+} xRRProviderChangeNotifyEvent;
+#define sz_xRRProviderChangeNotifyEvent 32
+
+typedef struct {
+ CARD8 type; /* always evBase + RRNotify */
+ CARD8 subCode; /* RRNotify_ProviderProperty */
+ CARD16 sequenceNumber B16;
+ Window window B32; /* window requesting notification */
+ RRProvider provider B32; /* affected provider */
+ Atom atom B32; /* property name */
+ Time timestamp B32; /* time provider was changed */
+ CARD8 state; /* NewValue or Deleted */
+ CARD8 pad1;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+} xRRProviderPropertyNotifyEvent;
+#define sz_xRRProviderPropertyNotifyEvent 32
+
+typedef struct {
+ CARD8 type; /* always evBase + RRNotify */
+ CARD8 subCode; /* RRNotify_ResourceChange */
+ CARD16 sequenceNumber B16;
+ Time timestamp B32; /* time resource was changed */
+ Window window B32; /* window requesting notification */
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+} xRRResourceChangeNotifyEvent;
+#define sz_xRRResourceChangeNotifyEvent 32
+
+typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
@@ -784,6 +1018,7 @@ typedef struct {
#undef RROutput
#undef RRMode
#undef RRCrtc
+#undef RRProvider
#undef Drawable
#undef Window
#undef Font
diff --git a/randrproto.txt b/randrproto.txt
index 7c297e2..6526b97 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1,6 +1,6 @@
The X Resize, Rotate and Reflect Extension
- Version 1.3.1
- 2009-10-5
+ Version 1.4.0
+ 2012-07-03
Jim Gettys
Jim.Gettys@hp.com
@@ -129,6 +129,26 @@ Version 1.4 adds an optional Border property.
for compensating for the overscan behavior of certain
televisions.
+Version 1.4 adds a new object called a provider object. A provider object
+represents a GPU or virtual device providing services to the X server.
+Providers have a set of abilities and a set of possible roles.
+
+Provider objects are used to control multi-GPU systems. Provider roles can
+be dynamically configured to provide support for:
+
+ 1) Output slaving: plug in a USB device, but have its output rendered
+ using the main GPU. On some dual-GPU laptops, the second GPU isn't
+ connected to the LVDS panel, so we need to use the first GPU as an output
+ slave for the second GPU.
+
+ 2) offload - For dual-GPU laptops, allow direct rendered applications to be run
+ on the second GPU and display on the first GPU.
+
+ 3) GPU switching - Allow switching between two GPUs as the main screen
+ renderer.
+
+ 4) multiple GPU rendering - This replaces Xinerama.
+
1.99 Acknowledgements
Our thanks to the contributors to the design found on the xpert mailing
@@ -207,6 +227,8 @@ CRTC
A value for a CRTC argument does not name a defined CRTC.
Mode
A value for a MODE argument does not name a defined MODE.
+Provider
+ A value for a PROVIDER argument does not name a defined PROVIDER.
❧❧❧❧❧❧❧❧❧❧❧
@@ -307,6 +329,19 @@ REFRESH { rates: LISTofCARD16 }
❧❧❧❧❧❧❧❧❧❧❧
+5.5. Protocol Types added in version 1.4 of the extension
+
+PROVIDER { XID }
+
+PROVIDER_CAPS { SourceOutput, SinkOutput, SourceOffload, SinkOffload }
+ Capabilties for this provider:
+ SourceOutput: This device can source output buffers.
+ SinkOutput: This device can sink output buffers.
+ SourceOffload: This device can source offload buffers.
+ SinkOffload: This device can sink offload buffers.
+
+ ❧❧❧❧❧❧❧❧❧❧❧
+
6. Extension Initialization
The name of this extension is "RANDR".
@@ -1243,6 +1278,230 @@ dynamic changes in the display environment.
❧❧❧❧❧❧❧❧❧❧❧
+7.4 Extension Requests added in version 1.4 of the extension.
+
+┌───
+ RRGetProviders
+ window : WINDOW
+ ▶
+ timestamp: TIMESTAMP
+ providers: LISTofPROVIDER
+└───
+ Errors: Window
+
+ RRGetPRoviders returns the list of providers connected to the screen
+ associated with 'window'.
+
+ 'timestamp' indicates when the configuration was last set.
+
+ 'providers' contains the list of PROVIDERs associated with the
+ screen.
+
+┌───
+ RRGetProviderInfo
+ provider: PROVIDER
+ ▶
+ capabilities: PROVIDER_CAPS
+ name: STRING
+ crtcs: LISTofCRTC
+ outputs: LISTofOUTPUT
+ associated_providers: LISTofPROVIDERS
+ associated_provider_capability: LISTofPROVIDER_CAPS
+└───
+ Errors: Provider
+
+ RRGetProviderInfo return information about the specified provider.
+ The capabilites of the current provider are returned, along with
+ the list of providers currently associated with this provider and
+ the capability they are associated with. It also provides the list
+ of crtcs and outputs that this provider is responsible for.
+
+ 'name' is a UTF-8 encoded string to be presented to the user to
+ indicate the device or driver supplied name.
+
+┌───
+ RRSetProviderOffloadSink
+ provider: PROVIDER
+ sink_provider: PROVIDER
+ ▶
+└───
+ Errors: Provider
+
+ RRSetOffloadSink sets the offload sink for this provider to the
+ specified provider.
+
+┌───
+ RRSetProviderOutputSource
+ provider: PROVIDER
+ source_provider: PROVIDER
+ ▶
+└───
+ Errors: Provider
+
+ RRSetOutputSource sets the output source for this provider to the
+ specified provider.
+
+┌───
+ RRListProviderProperties
+ provider:PROVIDERS
+ ▶
+ atoms: LISTof ATOM
+└───
+ Errors: Provider
+
+ This request returns the atoms of properties currently defined on
+ the provider.
+
+┌───
+ RRQueryProviderProperty
+ provider: PROVIDER
+ property: ATOM
+ ▶
+ pending: BOOL
+ range: BOOL
+ immutable: BOOL
+ valid-values: LISTofINT32
+└───
+ Errors: Name, Atom, Provider
+
+ If the specified property does not exist for the specified provider,
+ then a Name error is returned.
+
+ If 'pending' is TRUE, changes made to property values with
+ RRChangeProviderProperty will be saved in the pending property value
+ and be automatically copied to the current value on the next
+ RRSetCrtcConfig request on a crtc attached to that provider.
+ If 'pending' is FALSE, changes are copied immediately.
+
+ If 'range' is TRUE, then the valid-values list will contain
+ precisely two values indicating the minimum and maximum allowed
+ values. If 'range' is FALSE, then the valid-values list will contain
+ the list of possible values; attempts to set other values will
+ result in a Value error.
+
+ If 'immutable' is TRUE, then the property configuration cannot be
+ changed by clients. Immutable properties are interpreted by the X
+ server.
+
+┌───
+ RRConfigureProviderProperty
+ provider: PROVIDER
+ property: ATOM
+ pending: BOOL
+ range: BOOL
+ valid-values: LISTofINT32
+└───
+ Errors: Access, Name, Atom, Provider
+
+ If the specified property is 'immutable', an Access error is
+ returned.
+
+ Otherwise, the configuration of the specified property is changed to
+ the values provided in this request.
+
+ If the specified property does not exist for the specified provider,
+ it is created with an empty value and None type.
+
+┌───
+ RRChangeProviderProperty
+ provider: PROVIDER
+ property, type: ATOM
+ format: {8, 16, 32}
+ mode: { Replace, Prepend, Append }
+ data: LISTofINT8 or LISTofINT16 or LISTofINT32
+└───
+ Errors: Alloc, Atom, Match, Value, Provider
+
+ This request alters the value of the property for the specified
+ provider. If the property is marked as a 'pending' property, only the
+ pending value of the property is changed. Otherwise, changes are
+ reflected in both the pending and current values of the property.
+ The type is uninterpreted by the server. The format specifies
+ whether the data should be viewed as a list of 8-bit, 16-bit, or
+ 32-bit quantities so that the server can correctly byte-swap as
+ necessary.
+
+ If the mode is Replace, the previous property value is discarded.
+ If the mode is Prepend or Append, then the type and format must
+ match the existing property value (or a Match error results). If
+ the property is undefined, it is treated as defined with the correct
+ type and format with zero-length data.
+
+ For Prepend, the data is tacked on to the beginning of the existing
+ data, and for Append, it is tacked on to the end of the existing data.
+
+ This request generates a ProviderPropertyNotify
+
+ The lifetime of a property is not tied to the storing client.
+ Properties remain until explicitly deleted, until the provider is
+ destroyed, or until server reset (see section 10).
+
+ The maximum size of a property is server-dependent and may vary
+ dynamically.
+┌───
+ RRDeleteProviderProperty
+ provider: Provider
+ property: ATOM
+└───
+ Errors: Atom, Provider
+
+ This request deletes the property from the specified provider if the
+ property exists and generates a ProviderPropertyNotify event unless
+ the property does not exist.
+
+┌───
+ RRGetProviderProperty
+ provider: PROVIDER
+ property: ATOM
+ type: ATOM or AnyPropertyType
+ long-offset, long-length: CARD32
+ delete: BOOL
+ pending: BOOL
+ ▶
+ type: ATOM or None
+ format: {0, 8, 16, 32}
+ bytes-after: CARD32
+ value: LISTofINT8 or LISTofINT16 or LISTofINT32
+└───
+ Errors: Atom, Value, Provider
+
+ If the specified property does not exist for the specified provider,
+ then the return type is None, the format and bytes-after are zero,
+ and the value is empty. The delete argument is ignored in this
+ case.
+
+ If the specified property exists but its type does not match the
+ specified type, then the return type is the actual type of the
+ property, the format is the actual format of the property (never
+ zero), the bytes-after is the length of the property in bytes (even
+ if the format is 16 or 32), and the value is empty. The delete
+ argument is ignored in this case.
+
+ If the specified property exists and either AnyPropertyType is
+ specified or the specified type matches the actual type of the
+ property, then the return type is the actual type of the property,
+ the format is the actual format of the property (never zero), and
+ the bytes-after and value are as follows, given:
+
+ N = actual length of the stored property in bytes
+ (even if the format is 16 or 32)
+ I = 4 × offset
+ T = N - I
+ L = MINIMUM(T, 4 × long-length)
+ A = N - (I + L)
+
+ If 'pending' is true, and if the property holds a pending value,
+ then the value returned will be the pending value of the property
+ rather than the current value. The returned value starts at byte
+ index I in the property (indexing from 0), and its length in bytes
+ is L. However, it is a Value error if long-offset is given such
+ that L is negative. The value of bytes-after is A, giving the
+ number of trailing unread bytes in the stored property. If delete
+ is True and the bytes-after is zero, the property is also deleted
+ from the provider, and a RRProviderPropertyNotify event is generated.
+
+
+ ❧❧❧❧❧❧❧❧❧❧❧
8. Extension Events
Clients MAY select for ConfigureNotify on the root window to be
@@ -1379,6 +1638,56 @@ factors, such as re-cabling a monitor, etc.
just at the time when a display manager or log in script might
be changing the monitor size or configuration.
+8.2 Events added in version 1.4 of the RandR extension
+
+┌───
+ RRProviderChangeNotify:
+ timestamp: TIMESTAMP time screen was reconfigured
+ config-timestamp: TIMESTAMP time available config data was changed
+ window: WINDOW window requesting notification
+ provider: PROVIDER provider affected by change
+ role: CRTC new role for provider
+└───
+
+ This event is generated whenever the role for a provider has changed
+ and is sent to requesting clients. 'timestamp' indicates when the
+ provider configuration was changed by a client.
+ 'config-timestamp' says when the last time the available
+ configurations changed. 'root' is the root of the screen the change
+ occurred on, 'window' is window selecting for this event. The
+ precise change can be detected by examining the new state of the
+ system.
+
+┌───
+ RRProviderPropertyNotify:
+ window: WINDOW window requesting notification
+ provider: PROVIDER providre affected by change
+ atom: ATOM affected property
+ time: TIMESTAMP time property was changed
+ state: { NewValue, Deleted } new property state
+└───
+
+ This event is reported to clients selecting RRProviderPropertyChange
+ on the window and is generated with state NewValue when a property
+ of the window is changed using RRChangeProviderProperty even when
+ adding zero-length data and when replacing all or part of a property
+ with identical data. It is generated with state Deleted when a
+ property of the window is deleted using either
+ RRDeleteProviderProperty or RRGetProviderProperty. The timestamp
+ indicates the server time when the property was changed.
+
+┌───
+ RRResourceChangeNotify:
+ window: WINDOW window requesting notification
+ time: TIMESTAMP time property was changed
+└───
+
+ This event is reported to clients selecting RRResourceChange
+ on the window and is generated whenever the set of available
+ RandR resources associated with the screen has changed, either
+ created or destroyed. Querying the list of available resources
+ with RRGetScreenResources and RRGetProviders will return the new set.
+
❧❧❧❧❧❧❧❧❧❧❧
9. Properties
@@ -2388,6 +2697,178 @@ A.2.2 Protocol Requests added with version 1.3
4 CARD32 pad4
└───
+A.2.3 Protocol Requests added with version 1.4
+
+┌───
+ RRGetProviders
+ 1 CARD8 major opcode
+ 1 32 RandR opcode
+ 2 2 length
+ 4 WINDOW window
+ ▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 CARD32 length
+ 4 TIMESTAMP timestamp
+ 2 p number of Providers
+ 2 CARD16 maximum masters
+ 4 CARD32 flags
+ 4p LISTofPROVIDERS providers
+
+┌───
+ RRGetProviderInfo
+ 1 CARD8 major opcode
+ 1 33 RandR opcode
+ 2 3 length
+ 4 PROVIDER provider
+ 4 TIMESTAMP config-timestamp
+ ▶
+ 1 1 Reply
+ 1 RRCONFIGSTATUS status
+ 2 CARD16 sequence number
+ 4 1+c+o+(a*2)+(n+p)/4 reply length
+ 4 TIMESTATMP timestamp
+ 4 CARD32 capabilites
+ 2 c number of crtcs
+ 2 o number of outputs
+ 2 a number of associated providers
+ 2 n length of name
+ 4c LISTofCRTC crtcs
+ 4o LISTofOUTPUT outputs
+ 4a LISTofPROVIDER associated providers
+ 4a CARD32 associated provider capability
+ n STRING8 name
+ p unused, p=pad(n)
+
+┌───
+ RRSetProviderOffloadSink
+ 1 CARD8 major opcode
+ 1 34 RandR opcode
+ 2 2 length
+ 4 PROVIDER provider
+ 4 PROVIDER offload sink provider
+ 4 TIMESTAMP timestamp
+┌───
+ RRSetProviderOutputSource
+ 1 CARD8 major opcode
+ 1 35 RandR opcode
+ 2 2 length
+ 4 PROVIDER provider
+ 4 PROVIDER output source provider
+ 4 TIMESTAMP timestamp
+
+┌───
+ RRListProviderProperties
+ 1 CARD8 major opcode
+ 1 36 RandR opcode
+ 2 2 length
+ 4 PROVIDER provider
+ ▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n reply length
+ 2 n number of ATOMs in atoms
+ 22 unused
+ 4n LISTofATOM atoms
+└───
+┌───
+ RRQueryProviderProperty
+ 1 CARD8 major opcode
+ 1 37 RandR opcode
+ 2 3 request length
+ 4 PROVIDER provider
+ 4 ATOM property
+ ▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n reply length
+ 1 BOOL pending
+ 1 BOOL range
+ 1 BOOL immutable
+ 21 unused
+ 4n LISTofINT32 valid values
+└───
+┌───
+ RRConfigureProviderProperty
+ 1 CARD8 major opcode
+ 1 38 RandR opcode
+ 2 4+n request length
+ 4 PROVIDER provider
+ 4 ATOM property
+ 1 BOOL pending
+ 1 BOOL range
+ 2 unused
+ 4n LISTofINT32 valid values
+└───
+┌───
+ RRChangeProviderProperty
+ 1 CARD8 major opcode
+ 1 39 RandR opcode
+ 2 6+(n+p)/4 request length
+ 4 PROVIDER provider
+ 4 ATOM property
+ 4 ATOM type
+ 1 CARD8 format
+ 1 mode
+ 0 Replace
+ 1 Prepend
+ 2 Append
+ 2 unused
+ 4 CARD32 length of data in format units
+ (= n for format = 8)
+ (= n/2 for format = 16)
+ (= n/4 for format = 32)
+ n LISTofBYTE data
+ (n is a multiple of 2 for format = 16)
+ (n is a multiple of 4 for format = 32)
+ p unused, p=pad(n)
+└───
+┌───
+ RRDeleteProviderProperty
+ 1 CARD8 major opcode
+ 1 40 RandR opcode
+ 2 3 request length
+ 4 PROVIDER provider
+ 4 ATOM property
+└───
+┌───
+ RRGetProviderProperty
+ 1 CARD8 major opcode
+ 1 41 RandR opcode
+ 2 7 request length
+ 4 PROVIDER provider
+ 4 ATOM property
+ 4 ATOM type
+ 0 AnyPropertyType
+ 4 CARD32 long-offset
+ 4 CARD32 long-length
+ 1 BOOL delete
+ 1 BOOL pending
+ 2 unused
+ ▶
+ 1 1 Reply
+ 1 CARD8 format
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 4 ATOM type
+ 0 None
+ 4 CARD32 bytes-after
+ 4 CARD32 length of value in format units
+ (= 0 for format = 0)
+ (= n for format = 8)
+ (= n/2 for format = 16)
+ (= n/4 for format = 32)
+ 12 unused
+ n LISTofBYTE value
+ (n is zero for format = 0)
+ (n is a multiple of 2 for format = 16)
+ (n is a multiple of 4 for format = 32)
+ p unused, p=pad(n)
+└───
+
A.3 Protocol Events
┌───
@@ -2455,6 +2936,40 @@ A.3.1 Protocol Events added with version 1.2
11 unused
└───
+A.3.2 Protocol Events added with version 1.4
+┌───
+ RRProviderChangeNotify
+ 1 Base + 1 code
+ 1 1 sub-code
+ 2 CARD16 sequence number
+ 4 TIMESTAMP timestamp
+ 4 WINDOW request window
+ 4 PROVIDER provider affected
+ 16 unused
+└───
+┌───
+ RRProviderPropertyNotify
+ 1 Base + 1 code
+ 1 2 sub-code
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 4 PROVIDER provider
+ 4 ATOM atom
+ 4 TIMESTAMP time
+ 1 state
+ 0 NewValue
+ 1 Deleted
+ 11 unused
+└───
+┌───
+ RRResourceChangeNotify
+ 1 Base + 1 code
+ 1 2 sub-code
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW window
+ 20 unused
+└───
A.4 Protocol Errors
┌───
@@ -2462,6 +2977,7 @@ A.4 Protocol Errors
Base + 0 Output
Base + 1 Crtc
Base + 2 Mode
+ Base + 3 Provider
└───
Bibliography