From: Dave Airlie <[email protected]> A provider object represents a GPU or virtual device that provides rendering or output services to the X server.
This is the first rev of a protocol to enumerate providers devices, set their roles, and provide generic properties based on output properties for them v1.1: fix typo add missing define v2: rename nProperties back to nAtoms, makes server simpler to c-n-p, add missing Get request/reply v3: bring back configure property, no point in diverging from the output property code without good reason. also fix typo pointed out on irc by rei4dan. v3.1: drop cut-n-paste, increase RRNumberRequests v4: reviewed by Aaron, address comments: Fix provider error code add missing notify, remove dri2 references, fix c-n-p issues. v5: add provider change notify event with current role. v5.1: fix cut-n-paste v6: document flags, fix whitespace, add better errors for SetProviderRoles, add new events, fix pending language. v6.1: add missing change notify event struct + missing padding v7: fix a bunch more tab/spaces, add appendix sections for requests, events and errors, remove multimaster flag in favour of max master counter, move some members around to follow other events. Signed-off-by: Dave Airlie <[email protected]> --- randr.h | 36 +++- randrproto.h | 221 +++++++++++++++++++++++ randrproto.txt | 535 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 787 insertions(+), 5 deletions(-) diff --git a/randr.h b/randr.h index 04604aa..b15ba0d 100644 --- a/randr.h +++ b/randr.h @@ -42,9 +42,9 @@ typedef unsigned long XRandrModeFlags; #define RANDR_MAJOR 1 #define RANDR_MINOR 3 -#define RRNumberErrors 3 +#define RRNumberErrors 4 #define RRNumberEvents 2 -#define RRNumberRequests 32 +#define RRNumberRequests 41 #define X_RRQueryVersion 0 /* we skip 1 to make old clients fail pretty immediately */ @@ -92,12 +92,27 @@ typedef unsigned long XRandrModeFlags; #define RRTransformScaleDown (1L << 2) #define RRTransformProjective (1L << 3) +/* v1.5 */ +#define X_RRGetProviders 32 +#define X_RRGetProviderInfo 33 +#define X_RRSetProviderRoles 34 +#define X_RRListProviderProperties 35 +#define X_RRQueryProviderProperty 36 +#define X_RRConfigureProviderProperty 37 +#define X_RRChangeProviderProperty 38 +#define X_RRDeleteProviderProperty 39 +#define X_RRGetProviderProperty 40 + /* Event selection bits */ #define RRScreenChangeNotifyMask (1L << 0) /* V1.2 additions */ #define RRCrtcChangeNotifyMask (1L << 1) #define RROutputChangeNotifyMask (1L << 2) #define RROutputPropertyNotifyMask (1L << 3) +/* V1.5 additions */ +#define RRProviderChangeNotifyMask (1L << 4) +#define RRProviderPropertyNotifyMask (1L << 5) +#define RRResourceChangeNotifyMask (1L << 6) /* Event codes */ #define RRScreenChangeNotify 0 @@ -107,7 +122,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 +165,7 @@ typedef unsigned long XRandrModeFlags; #define BadRROutput 0 #define BadRRCrtc 1 #define BadRRMode 2 +#define BadRRProvider 3 /* Conventional RandR output properties */ @@ -162,4 +180,16 @@ typedef unsigned long XRandrModeFlags; #define RR_PROPERTY_BORDER "Border" #define RR_PROPERTY_BORDER_DIMENSIONS "BorderDimensions" +#define RR_Provider_Flag_Dynamic 1 + +#define RR_Role_Undefined 0 +#define RR_Role_Master 1 +#define RR_Role_Slave_Offload 2 +#define RR_Role_Slave_Output 4 + +/* abilities for the provider */ +#define RR_Ability_None 0 +#define RR_Ability_Offload_Slaves 1 +#define RR_Ability_Output_Slaves 2 + #endif /* _RANDR_H_ */ diff --git a/randrproto.h b/randrproto.h index 3b98a9f..9a422a6 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 @@ -645,6 +646,181 @@ typedef struct { } xRRGetOutputPrimaryReply; #define sz_xRRGetOutputPrimaryReply 32 +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 max_master; + CARD32 flags B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 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 current_role B32; + CARD32 allowed_roles B32; + CARD32 abilities B32; + CARD16 nCrtcs B16; + CARD16 nOutputs B16; + CARD16 nameLength B16; + CARD16 pad1 B16; +} xRRGetProviderInfoReply; +#define sz_xRRGetProviderInfoReply 32 + +typedef struct { + CARD8 reqType; + CARD8 randrReqType; + CARD16 length B16; + CARD16 numProviders B16; + CARD16 pad1 B16; + Time configTimestamp B32; +} xRRSetProviderRolesReq; +#define sz_xRRSetProviderRolesReq 12 + +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 */ @@ -715,6 +891,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 crtc was changed */ + Window window B32; /* window requesting notification */ + RRProvider provider B32; /* affected provider */ + CARD32 current_role B32; /* current role */ + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 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 +1004,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..f69628b 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.5.0 + 2012-05-31 Jim Gettys [email protected] @@ -129,6 +129,28 @@ Version 1.4 adds an optional Border property. for compensating for the overscan behavior of certain televisions. +1.5 Introduction to version 1.5 of the extension + +Version 1.5 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 +229,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 +331,34 @@ REFRESH { rates: LISTofCARD16 } ❧❧❧❧❧❧❧❧❧❧❧ +5.4. Protocol Types added in version 1.4 of the extension + + ❧❧❧❧❧❧❧❧❧❧❧ +5.5. Protocol Types added in version 1.5 of the extension + +PROVIDER { XID } + +MAXMASTER { CARD16 } + Maximum number of master GPUs server can support. + 1 unless dynamic xinerama is enabled. + +FLAGS { Dynamic } + Informational flags about acceptable configurations. + Dynamic: The server can accept changes to the device roles. + +ABILITYMASK { Offload, Output } + Abilities that this device can work with. + Offload: This device as a master can work with offload slaves. + Output: This device as a master can work with output slaves. + +ROLEMASK { Master, Offload, Output } + List of roles a device can have. + Master: A primary display and primary renderer. + Offload: A rendering offload device. + Output: An output slave device. + + ❧❧❧❧❧❧❧❧❧❧❧ + 6. Extension Initialization The name of this extension is "RANDR". @@ -1243,6 +1295,234 @@ dynamic changes in the display environment. ❧❧❧❧❧❧❧❧❧❧❧ +7.3. Extension Requests added in version 1.4 of the extension. + + ❧❧❧❧❧❧❧❧❧❧❧ + +7.4 Extension Requests added in version 1.5 of the extension. + +┌─── + RRGetProviders + window : WINDOW + ▶ + timestamp: TIMESTAMP + providers: LISTofPROVIDER + maxmaster: MAXMASTER + flags: FLAGS +└─── + 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. + + 'flags' contains the set of provider related flags for the screen. + Currently this is used to define if providers are dynamic or static. + + 'maxmaster' is the maximum number of master rendering devices the + server can support. (Dynamic Xinerama > 1, else 1). + +┌─── + RRGetProviderInfo + provider: PROVIDER + ▶ + abilities: ABILITYMASK + roles: ROLEMASK + current_role: ROLEMASK + name: STRING + crtcs: LISTofCRTC + outputs: LISTofOUTPUT +└─── + Errors: Provider + + RRGetProviderInfo return information about the specified provider. + The abilities the provider can support for other providers, and the + roles it can perform. The current_role the provider is operating + in. 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. + +┌─── + RRSetProviderRoles + providers: LISTofPROVIDER + role: LISTofROLEMASK + ▶ +└─── + Errors: Provider, Match, Value + + RRSetProviderRoles allows the roles of the multiple specified providers + to be changed. If the number of providers and number of roles doesn't + match a Match error will be generated. If a provider doesn't exist a + Provider error will be generated. If the role isn't available for that + provider a value error will be generated. + +┌─── + 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 +1659,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.5 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 +2718,171 @@ A.2.2 Protocol Requests added with version 1.3 4 CARD32 pad4 └─── +A.2.3 Protocol Requests added with version 1.5 + +┌─── + 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+(n+p)/4 reply length + 4 TIMESTATMP timestamp + 4 CARD32 current role + 4 CARD32 allowed roles + 4 CARD32 abilities + 2 c number of crtcs + 2 o number of outputs + 2 n length of name + 4c LISTofCRTC crtcs + 4o LISTofOUTPUT outputs + n STRING8 name + p unused, p=pad(n) + +┌─── + RRSetProviderRoles + 1 CARD8 major opcode + 1 34 RandR opcode + 2 2 length + 2 p number of providers + 2 unusued + 4 TIMESTAMP timestamp + 4p LISTofPROVIDER list of providers + 4p LISTofROLEMASK list of role masks + +┌─── + RRListProviderProperties + 1 CARD8 major opcode + 1 35 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 36 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 37 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 38 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 39 RandR opcode + 2 3 request length + 4 PROVIDER provider + 4 ATOM property +└─── +┌─── + RRGetProviderProperty + 1 CARD8 major opcode + 1 40 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 +2950,41 @@ A.3.1 Protocol Events added with version 1.2 11 unused └─── +A.3.2 Protocol Events added with version 1.5 +┌─── + RRProviderChangeNotify + 1 Base + 1 code + 1 1 sub-code + 2 CARD16 sequence number + 4 TIMESTAMP timestamp + 4 WINDOW request window + 4 PROVIDER provider affected + 4 ROLE new role + 12 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 +2992,7 @@ A.4 Protocol Errors Base + 0 Output Base + 1 Crtc Base + 2 Mode + Base + 3 Provider └─── Bibliography -- 1.7.10.2 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
