proto/randrproto: Branch 'master' - 8 commits
Keith Packard
keithp at kemper.freedesktop.org
Wed Nov 26 09:23:38 PST 2008
randr.h | 15 +++
randrproto.h | 74 +++++++++++++++++++
randrproto.txt | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
3 files changed, 277 insertions(+), 27 deletions(-)
New commits:
commit 6c17940a7960885695aa6033de58c3cd2bb6fb79
Merge: c998b46... 8793429...
Author: Keith Packard <keithp at keithp.com>
Date: Mon Nov 24 16:22:11 2008 -0800
Merge branch 'transform-proposal'
Conflicts:
randr.h
randrproto.h
randrproto.txt
diff --cc randr.h
index 74a780c,7b35e86..87cd4a8
--- a/randr.h
+++ b/randr.h
@@@ -44,7 -43,7 +44,7 @@@ typedef unsigned long XRandrModeFlags
#define RRNumberErrors 3
#define RRNumberEvents 2
- #define RRNumberRequests 26
-#define RRNumberRequests 27
++#define RRNumberRequests 28
#define X_RRQueryVersion 0
/* we skip 1 to make old clients fail pretty immediately */
@@@ -79,7 -78,13 +79,14 @@@
#define X_RRSetCrtcGamma 24
/* V1.3 additions */
-#define X_RRSetCrtcTransform 25
-#define X_RRGetCrtcTransform 26
+#define X_RRGetScreenResourcesCurrent 25
++#define X_RRSetCrtcTransform 26
++#define X_RRGetCrtcTransform 27
+
+ #define RRTransformUnit (1L << 0)
+ #define RRTransformScaleUp (1L << 1)
+ #define RRTransformScaleDown (1L << 2)
+ #define RRTransformProjective (1L << 3)
/* Event selection bits */
#define RRScreenChangeNotifyMask (1L << 0)
diff --cc randrproto.h
index 6d3303a,6c52eea..f8aac94
--- a/randrproto.h
+++ b/randrproto.h
@@@ -567,29 -563,45 +568,69 @@@ typedef struct
*/
typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ Window window B32;
+} xRRGetScreenResourcesCurrentReq;
+#define sz_xRRGetScreenResourcesCurrentReq 8
+
+typedef struct {
+ BYTE type;
+ CARD8 pad;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ Time timestamp B32;
+ Time configTimestamp B32;
+ CARD16 nCrtcs B16;
+ CARD16 nOutputs B16;
+ CARD16 nModes B16;
+ CARD16 nbytesNames B16;
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+} xRRGetScreenResourcesCurrentReply;
+#define sz_xRRGetScreenResourcesCurrentReply 32
+
++typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRCrtc crtc B32;
+ xRenderTransform transform;
+ CARD16 nbytesFilter; /* number of bytes in filter name */
+ CARD16 pad B16;
+ } xRRSetCrtcTransformReq;
+
+ #define sz_xRRSetCrtcTransformReq 48
+
+ typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRCrtc crtc B32;
+ } xRRGetCrtcTransformReq;
+
+ #define sz_xRRGetCrtcTransformReq 8
+
+ typedef struct {
+ BYTE type;
+ CARD8 status;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ xRenderTransform pendingTransform;
+ BYTE hasTransforms;
+ CARD8 pad0;
+ CARD16 pad1 B16;
+ xRenderTransform currentTransform;
+ CARD32 pad2 B32;
+ CARD16 pendingNbytesFilter B16; /* number of bytes in filter name */
+ CARD16 pendingNparamsFilter B16; /* number of filter params */
+ CARD16 currentNbytesFilter B16; /* number of bytes in filter name */
+ CARD16 currentNparamsFilter B16; /* number of filter params */
+ } xRRGetCrtcTransformReply;
+
+ #define sz_xRRGetCrtcTransformReply 96
+
/*
* event
*/
diff --cc randrproto.txt
index b3bd8b2,b77753a..58c9e40
--- a/randrproto.txt
+++ b/randrproto.txt
@@@ -971,37 -984,49 +984,81 @@@ dynamic changes in the display environm
7.2. Extension Requests added in version 1.3 of the extension
ââââ
+ RRGetScreenResourcesCurrent
+ window: WINDOW
+ â¶
+ timestamp: TIMESTAMP
+ config-timestamp: TIMESTAMP
+ crtcs: LISTofCRTC
+ outputs: LISTofOUTPUT
+ modes: LISTofMODEINFO
+ââââ
+ Errors: Window
+
+ RRGetScreenResourcesCurrent returns the list of outputs and crtcs
+ connected to the screen associated with 'window'.
+
+ 'timestamp' indicates when the configuration was last set.
+
+ 'config-timestamp' indicates when the configuration information last
+ changed. Requests to configure the output will fail unless the
+ timestamp indicates that the information the client is using is up
+ to date, to ensure clients can be well behaved in the face of race
+ conditions.
+
+ 'crtcs' contains the list of CRTCs associated with the screen.
+
+ 'outputs' contains the list of outputs associated with the screen.
+
+ 'modes' contains the list of modes associated with the screen
+
+ Unlike RRGetScreenResources, this merely returns the current
+ configuration, and does not poll for hardware changes.
+
++ââââ
+ RRSetCrtcTransform
+ crtc: CRTC
+ transform: TRANSFORM
+ filter: STRING8
+ values: LISTofFIXED
+ ââââ
+ Errors: Crtc, Match
+
+ This request provides a mechanism that is more general than the existing
+ rotation and reflection values for describing the transformation from frame
+ buffer image to crtc presentation. 'transform' is a full 2D projective
+ transformations from screen coordinate space to crtc coordinate space. This
+ transformation is applied before the rotation and reflection values to
+ compute the complete transform.
+
+ 'filter' and 'values' specify a Render filter that may be used by the server
+ when transforming data from frame buffer to crtc.
+
+ This request sets the transform to be used at the next RRSetCrtcConfig
+ request execution; it does not cause any change to occur in the current
+ configuration.
+
+ When a non-identity transformation is in use, the rectangle returned by
+ RRGetCrtcInfo defines the bounding rectangle of the screen that is projected
+ to the crtc. It is this projected rectangle which must be within the area of
+ the screen when the mode is set.
+
+ ââââ
+ RRGetCrtcTransform
+ crtc: CRTC
+ â¶
+ pending-transform: TRANSFORM
+ pending-filter: STRING8
+ pending-values: LISTofFIXED
+ current-transform: TRANSFORM
+ current-filter: STRING8
+ current-values: LISTofFIXED
+ ââââ
+
+ This request returns the pending and current transforms for the specified
+ CRTC. The pending transform will be the same as the current transform if no
+ new pending transform has been set since the last call to RRSetCrtcConfig.
+
â§â§â§â§â§â§â§â§â§â§â§
8. Extension Events
@@@ -1718,33 -1745,6 +1781,75 @@@ A.2.1 Protocol Requests added with vers
p unused, p=pad(6n)
ââââ
+A.2.2 Protocol Requests added with version 1.3
+
+ââââ
+ RRGetScreenResourcesCurrent
+ 1 CARD8 major opcode
- 1 8 RandR opcode
++ 1 25 RandR opcode
+ 2 2 length
+ 4 WINDOW window
+ â¶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 c+o+8m+(b+p)/4 reply length
+ 4 TIMESTAMP timestamp
+ 4 TIMESTAMP config-timestamp
+ 2 c number of CRTCs
+ 2 o number of outputs
+ 2 m number of modeinfos
+ 2 b total bytes in mode names
+ 8 unused
+ 4c LISTofCRTC crtcs
+ 4o LISTofOUTPUT outputs
+ 32m LISTofMODEINFO modeinfos
+ b STRING8 mode names
+ p unused, p=pad(b)
+ââââ
+
++ââââ
++ RRSetCrtcTransform
++ 1 CARD8 major opcode
++ 1 26 RandR opcode
++ 2 12+(n+p)/4+v length
++ 4 CRTC crtc
++ 36 TRANSFORM transform
++ 2 CARD16 filter length
++ 2 unused
++ n STRING8 filter name
++ p unused, p=pad(n)
++ 4v FIXED filter params
++ââââ
++
++ââââ
++ RRGetCrtcTransform
++ 1 CARD8 major opcode
++ 1 27 RandR opcode
++ 2 2 length
++ 4 CRTC crtc
++ â¶
++ 1 1 Reply
++ 1 unused
++ 2 CARD16 sequence number
++ 4 16+(pn+pnp)/4+(cn+cnp)/4+pf+cf reply length
++ 36 TRANSFORM pending transform
++ 1 BOOL has transforms
++ 3 unused
++ 36 TRANSFORM current transform
++ 4 unused
++ 2 pn pending filter name length
++ 2 pf pending filter num params
++ 2 cn current filter name length
++ 2 cf current filter num params
++ pn STRING8 pending filter name
++ pnp unused, pnp=pad(pn)
++ 4*pf FIXED pending filter params
++ cn STRING8 current filter name
++ cnp unused, cnp=pad(cn)
++ 4*cf FIXED current filter params
++ââââ
++
A.3 Protocol Events
ââââ
commit 8793429f3d9d7cdf16be118ce05a68af6531568e
Author: Keith Packard <keithp at keithp.com>
Date: Mon Nov 24 16:01:55 2008 -0800
Describe projective transform additions in Introduction
Signed-off-by: Keith Packard <keithp at keithp.com>
diff --git a/randrproto.txt b/randrproto.txt
index eac79c7..b77753a 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -113,10 +113,14 @@ resolution screen on the first.
1.3 Introduction to version 1.3 of the extension
Version 1.3 builds on the changes made with version 1.2 and adds some new
-capabilities without fundmentally changing the extension again. This version
-adds 'panning regions' and projective transforms, plus defines some standard
-output properties to help clients describe the systme more accurately.
-
+capabilities without fundmentally changing the extension again. The
+following features are added in this version:
+
+ ⢠Projective Transforms. The implementation work for general rotation
+ support made it trivial to add full projective transformations. These
+ can be used to scale the screen up/down as well as perform projector
+ keystone correct or other effects.
+
1.1 Acknowledgements
Our thanks to the contributors to the design found on the xpert mailing
commit c998b4658d735e5b2d7aa6983d732d40cc802823
Author: Adam Jackson <ajax at redhat.com>
Date: Mon Nov 24 16:29:58 2008 -0500
GSRC added in 1.3, not 1.2
diff --git a/randrproto.txt b/randrproto.txt
index fa3b1e2..b3bd8b2 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1718,7 +1718,7 @@ A.2.1 Protocol Requests added with version 1.2
p unused, p=pad(6n)
ââââ
-A.2.2 Protocol Requests added with version 1.2
+A.2.2 Protocol Requests added with version 1.3
ââââ
RRGetScreenResourcesCurrent
commit 0d334c880396b9ef67ed899ad228cc693aad6a28
Author: Adam Jackson <ajax at redhat.com>
Date: Mon Nov 24 16:19:43 2008 -0500
Fix RRNumberRequests
diff --git a/randr.h b/randr.h
index c7794fc..74a780c 100644
--- a/randr.h
+++ b/randr.h
@@ -44,7 +44,7 @@ typedef unsigned long XRandrModeFlags;
#define RRNumberErrors 3
#define RRNumberEvents 2
-#define RRNumberRequests 25
+#define RRNumberRequests 26
#define X_RRQueryVersion 0
/* we skip 1 to make old clients fail pretty immediately */
commit 2c0635eed5ae418ca278d99e044f583d54273097
Author: Adam Jackson <ajax at redhat.com>
Date: Mon Nov 24 15:54:09 2008 -0500
Add GetScreenResourcesCurrent
diff --git a/randr.h b/randr.h
index 17e6ef9..c7794fc 100644
--- a/randr.h
+++ b/randr.h
@@ -2,6 +2,7 @@
* Copyright © 2000 Compaq Computer Corporation
* Copyright © 2002 Hewlett Packard Company
* Copyright © 2006 Intel Corporation
+ * Copyright © 2008 Red Hat, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -77,6 +78,9 @@ typedef unsigned long XRandrModeFlags;
#define X_RRGetCrtcGamma 23
#define X_RRSetCrtcGamma 24
+/* V1.3 additions */
+#define X_RRGetScreenResourcesCurrent 25
+
/* Event selection bits */
#define RRScreenChangeNotifyMask (1L << 0)
/* V1.2 additions */
diff --git a/randrproto.h b/randrproto.h
index 3fb2e45..6d3303a 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -2,6 +2,7 @@
* Copyright © 2000 Compaq Computer Corporation
* Copyright © 2002 Hewlett-Packard Company
* Copyright © 2006 Intel Corporation
+ * Copyright © 2008 Red Hat, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -562,6 +563,34 @@ typedef struct {
#define sz_xRRSetCrtcGammaReq 12
/*
+ * Additions for V1.3
+ */
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ Window window B32;
+} xRRGetScreenResourcesCurrentReq;
+#define sz_xRRGetScreenResourcesCurrentReq 8
+
+typedef struct {
+ BYTE type;
+ CARD8 pad;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ Time timestamp B32;
+ Time configTimestamp B32;
+ CARD16 nCrtcs B16;
+ CARD16 nOutputs B16;
+ CARD16 nModes B16;
+ CARD16 nbytesNames B16;
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+} xRRGetScreenResourcesCurrentReply;
+#define sz_xRRGetScreenResourcesCurrentReply 32
+
+/*
* event
*/
typedef struct {
diff --git a/randrproto.txt b/randrproto.txt
index 626da56..fa3b1e2 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -528,10 +528,10 @@ dynamic changes in the display environment.
This request explicitly asks the server to ensure that the
configuration data is up-to-date wrt the hardware. If that requires
- polling, this is when such polling would take place. Requests for
- further information should not poll, but rather return the data
- collected at this point.
-
+ polling, this is when such polling would take place. If the
+ current configuration is all that's required, use
+ RRGetScreenResourcesCurrent instead.
+
ââââ
RRGetOutputInfo
output: OUTPUT
@@ -968,6 +968,40 @@ dynamic changes in the display environment.
must be the size returned by RRGetCrtcGammaSize else a Value error
results.
+7.2. Extension Requests added in version 1.3 of the extension
+
+ââââ
+ RRGetScreenResourcesCurrent
+ window: WINDOW
+ â¶
+ timestamp: TIMESTAMP
+ config-timestamp: TIMESTAMP
+ crtcs: LISTofCRTC
+ outputs: LISTofOUTPUT
+ modes: LISTofMODEINFO
+ââââ
+ Errors: Window
+
+ RRGetScreenResourcesCurrent returns the list of outputs and crtcs
+ connected to the screen associated with 'window'.
+
+ 'timestamp' indicates when the configuration was last set.
+
+ 'config-timestamp' indicates when the configuration information last
+ changed. Requests to configure the output will fail unless the
+ timestamp indicates that the information the client is using is up
+ to date, to ensure clients can be well behaved in the face of race
+ conditions.
+
+ 'crtcs' contains the list of CRTCs associated with the screen.
+
+ 'outputs' contains the list of outputs associated with the screen.
+
+ 'modes' contains the list of modes associated with the screen
+
+ Unlike RRGetScreenResources, this merely returns the current
+ configuration, and does not poll for hardware changes.
+
â§â§â§â§â§â§â§â§â§â§â§
8. Extension Events
@@ -1128,6 +1162,8 @@ list of what each version provided:
1.2: Separate screens from CRTCs and outputs, switch to full VESA
modes
+ 1.3: Added cheap version of RRGetScreenResources.
+
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
@@ -1135,7 +1171,8 @@ graceful way. Version 1.1 servers and clients are cross compatible with
1.0. Version 1.1 is considered to be stable and we intend upward
compatibility from this point. Version 1.2 offers an extended model of the
system with multiple output support. It offers backward compatibility with
-version 1.1.
+version 1.1. Version 1.3 adds a cheap version of GetScreenResources to
+avoid expensive DDC operations.
â§â§â§â§â§â§â§â§â§â§â§
@@ -1681,6 +1718,33 @@ A.2.1 Protocol Requests added with version 1.2
p unused, p=pad(6n)
ââââ
+A.2.2 Protocol Requests added with version 1.2
+
+ââââ
+ RRGetScreenResourcesCurrent
+ 1 CARD8 major opcode
+ 1 8 RandR opcode
+ 2 2 length
+ 4 WINDOW window
+ â¶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 c+o+8m+(b+p)/4 reply length
+ 4 TIMESTAMP timestamp
+ 4 TIMESTAMP config-timestamp
+ 2 c number of CRTCs
+ 2 o number of outputs
+ 2 m number of modeinfos
+ 2 b total bytes in mode names
+ 8 unused
+ 4c LISTofCRTC crtcs
+ 4o LISTofOUTPUT outputs
+ 32m LISTofMODEINFO modeinfos
+ b STRING8 mode names
+ p unused, p=pad(b)
+ââââ
+
A.3 Protocol Events
ââââ
commit 2d09f9cac379c74f492b528a8aa2ac3b5997d617
Author: Keith Packard <keithp at keithp.com>
Date: Tue Mar 18 16:01:10 2008 -0700
Eliminate inverse matrix from randr transform protocol
It is easier, and potentially more precise, to compute the inverse in the
server where everything can eventually be kept in floating point form.
diff --git a/randrproto.h b/randrproto.h
index e6bab25..6c52eea 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -568,13 +568,11 @@ typedef struct {
CARD16 length B16;
RRCrtc crtc B32;
xRenderTransform transform;
- CARD32 pad0 B32;
- xRenderTransform inverse;
CARD16 nbytesFilter; /* number of bytes in filter name */
CARD16 pad B16;
} xRRSetCrtcTransformReq;
-#define sz_xRRSetCrtcTransformReq 88
+#define sz_xRRSetCrtcTransformReq 48
typedef struct {
CARD8 reqType;
@@ -592,19 +590,17 @@ typedef struct {
CARD32 length B32;
xRenderTransform pendingTransform;
BYTE hasTransforms;
- CARD8 pad0a;
- CARD16 pad0 B16;
- xRenderTransform pendingInverse;
- CARD16 pendingNbytesFilter B16; /* number of bytes in filter name */
- CARD16 pendingNparamsFilter B16; /* number of filter params */
+ CARD8 pad0;
+ CARD16 pad1 B16;
xRenderTransform currentTransform;
CARD32 pad2 B32;
- xRenderTransform currentInverse;
+ CARD16 pendingNbytesFilter B16; /* number of bytes in filter name */
+ CARD16 pendingNparamsFilter B16; /* number of filter params */
CARD16 currentNbytesFilter B16; /* number of bytes in filter name */
CARD16 currentNparamsFilter B16; /* number of filter params */
} xRRGetCrtcTransformReply;
-#define sz_xRRGetCrtcTransformReply 168
+#define sz_xRRGetCrtcTransformReply 96
/*
* event
diff --git a/randrproto.txt b/randrproto.txt
index ac40f93..eac79c7 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -983,7 +983,6 @@ dynamic changes in the display environment.
RRSetCrtcTransform
crtc: CRTC
transform: TRANSFORM
- inverse: TRANSFORM
filter: STRING8
values: LISTofFIXED
ââââ
@@ -994,8 +993,7 @@ rotation and reflection values for describing the transformation from frame
buffer image to crtc presentation. 'transform' is a full 2D projective
transformations from screen coordinate space to crtc coordinate space. This
transformation is applied before the rotation and reflection values to
-compute the complete transform. 'inverse' must be the
-multiplicative inverse of 'transform' or a Match error results.
+compute the complete transform.
'filter' and 'values' specify a Render filter that may be used by the server
when transforming data from frame buffer to crtc.
@@ -1014,11 +1012,9 @@ the screen when the mode is set.
crtc: CRTC
â¶
pending-transform: TRANSFORM
- pending-inverse: TRANSFORM
pending-filter: STRING8
pending-values: LISTofFIXED
current-transform: TRANSFORM
- current-inverse: TRANSFORM
current-filter: STRING8
current-values: LISTofFIXED
ââââ
commit aa5cd18a9f84aa075ffa7f70e6591b70b093119f
Author: Keith Packard <keithp at keithp.com>
Date: Sat Mar 15 00:32:35 2008 -0700
Add filters to CRTC transforms.
This allows scaling transforms to use bilinear filtering if desired.
diff --git a/randrproto.h b/randrproto.h
index d2d0963..e6bab25 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -570,7 +570,8 @@ typedef struct {
xRenderTransform transform;
CARD32 pad0 B32;
xRenderTransform inverse;
- CARD32 pad1 B32;
+ CARD16 nbytesFilter; /* number of bytes in filter name */
+ CARD16 pad B16;
} xRRSetCrtcTransformReq;
#define sz_xRRSetCrtcTransformReq 88
@@ -592,13 +593,15 @@ typedef struct {
xRenderTransform pendingTransform;
BYTE hasTransforms;
CARD8 pad0a;
- CARD16 pad0b B16;
+ CARD16 pad0 B16;
xRenderTransform pendingInverse;
- CARD32 pad1 B32;
+ CARD16 pendingNbytesFilter B16; /* number of bytes in filter name */
+ CARD16 pendingNparamsFilter B16; /* number of filter params */
xRenderTransform currentTransform;
CARD32 pad2 B32;
xRenderTransform currentInverse;
- CARD32 pad3 B32;
+ CARD16 currentNbytesFilter B16; /* number of bytes in filter name */
+ CARD16 currentNparamsFilter B16; /* number of filter params */
} xRRGetCrtcTransformReply;
#define sz_xRRGetCrtcTransformReply 168
diff --git a/randrproto.txt b/randrproto.txt
index 8d21160..ac40f93 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -984,6 +984,8 @@ dynamic changes in the display environment.
crtc: CRTC
transform: TRANSFORM
inverse: TRANSFORM
+ filter: STRING8
+ values: LISTofFIXED
ââââ
Errors: Crtc, Match
@@ -995,6 +997,9 @@ transformation is applied before the rotation and reflection values to
compute the complete transform. 'inverse' must be the
multiplicative inverse of 'transform' or a Match error results.
+'filter' and 'values' specify a Render filter that may be used by the server
+when transforming data from frame buffer to crtc.
+
This request sets the transform to be used at the next RRSetCrtcConfig
request execution; it does not cause any change to occur in the current
configuration.
@@ -1010,8 +1015,12 @@ the screen when the mode is set.
â¶
pending-transform: TRANSFORM
pending-inverse: TRANSFORM
+ pending-filter: STRING8
+ pending-values: LISTofFIXED
current-transform: TRANSFORM
current-inverse: TRANSFORM
+ current-filter: STRING8
+ current-values: LISTofFIXED
ââââ
This request returns the pending and current transforms for the specified
commit 329b2068c1505dbc2eef7cc245b02c3bbf9c67ff
Author: Keith Packard <keithp at keithp.com>
Date: Fri Feb 15 15:49:35 2008 -0800
Add Transform request proposal for 1.3
diff --git a/randr.h b/randr.h
index 17e6ef9..7b35e86 100644
--- a/randr.h
+++ b/randr.h
@@ -39,11 +39,11 @@ typedef unsigned long XRandrModeFlags;
#define RANDR_NAME "RANDR"
#define RANDR_MAJOR 1
-#define RANDR_MINOR 2
+#define RANDR_MINOR 3
#define RRNumberErrors 3
#define RRNumberEvents 2
-#define RRNumberRequests 25
+#define RRNumberRequests 27
#define X_RRQueryVersion 0
/* we skip 1 to make old clients fail pretty immediately */
@@ -77,6 +77,15 @@ typedef unsigned long XRandrModeFlags;
#define X_RRGetCrtcGamma 23
#define X_RRSetCrtcGamma 24
+/* V1.3 additions */
+#define X_RRSetCrtcTransform 25
+#define X_RRGetCrtcTransform 26
+
+#define RRTransformUnit (1L << 0)
+#define RRTransformScaleUp (1L << 1)
+#define RRTransformScaleDown (1L << 2)
+#define RRTransformProjective (1L << 3)
+
/* Event selection bits */
#define RRScreenChangeNotifyMask (1L << 0)
/* V1.2 additions */
diff --git a/randrproto.h b/randrproto.h
index cf7a022..d2d0963 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -31,6 +31,7 @@
#define _XRANDRP_H_
#include <X11/extensions/randr.h>
+#include <X11/extensions/renderproto.h>
#define Window CARD32
#define Drawable CARD32
@@ -558,6 +559,51 @@ typedef struct {
#define sz_xRRSetCrtcGammaReq 12
/*
+ * Additions for RandR 1.3
+ */
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRCrtc crtc B32;
+ xRenderTransform transform;
+ CARD32 pad0 B32;
+ xRenderTransform inverse;
+ CARD32 pad1 B32;
+} xRRSetCrtcTransformReq;
+
+#define sz_xRRSetCrtcTransformReq 88
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 randrReqType;
+ CARD16 length B16;
+ RRCrtc crtc B32;
+} xRRGetCrtcTransformReq;
+
+#define sz_xRRGetCrtcTransformReq 8
+
+typedef struct {
+ BYTE type;
+ CARD8 status;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ xRenderTransform pendingTransform;
+ BYTE hasTransforms;
+ CARD8 pad0a;
+ CARD16 pad0b B16;
+ xRenderTransform pendingInverse;
+ CARD32 pad1 B32;
+ xRenderTransform currentTransform;
+ CARD32 pad2 B32;
+ xRenderTransform currentInverse;
+ CARD32 pad3 B32;
+} xRRGetCrtcTransformReply;
+
+#define sz_xRRGetCrtcTransformReply 168
+
+/*
* event
*/
typedef struct {
@@ -598,8 +644,8 @@ typedef struct {
CARD8 type; /* always evBase + RRNotify */
CARD8 subCode; /* RRNotify_OutputChange */
CARD16 sequenceNumber B16;
- Time timestamp B32; /* time crtc was changed */
- Time configTimestamp B32; /* time crtc was changed */
+ Time timestamp B32; /* time output was changed */
+ Time configTimestamp B32; /* time config was changed */
Window window B32; /* window requesting notification */
RROutput output B32; /* affected output */
RRCrtc crtc B32; /* current crtc */
diff --git a/randrproto.txt b/randrproto.txt
index 6719cf8..8d21160 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1,6 +1,6 @@
The X Resize, Rotate and Reflect Extension
- Version 1.2
- 2006-4-13
+ Version 1.3
+ 2006-20-7
Jim Gettys
Jim.Gettys at hp.com
@@ -110,6 +110,13 @@ bandwidth for large resolution screens. This is exposed in RandR by
requiring that nothing be connected to the second CRTC when driving a high
resolution screen on the first.
+1.3 Introduction to version 1.3 of the extension
+
+Version 1.3 builds on the changes made with version 1.2 and adds some new
+capabilities without fundmentally changing the extension again. This version
+adds 'panning regions' and projective transforms, plus defines some standard
+output properties to help clients describe the systme more accurately.
+
1.1 Acknowledgements
Our thanks to the contributors to the design found on the xpert mailing
@@ -846,8 +853,10 @@ dynamic changes in the display environment.
'x' and 'y' indicate the position of this CRTC within the screen
region. They will be set to 0 when the CRTC is disabled.
- 'width' and 'height' indicate the size of the area presented by this
- CRTC.
+ 'width' and 'height' indicate the size of the area within the screen
+ presented by this CRTC. This may be different than the size of the
+ mode due to rotation. They will be set to 0 when the CRTC is
+ disabled.
'mode' indicates which mode is active, or None indicating that the
CRTC has been disabled and is not displaying the screen contents.
@@ -968,6 +977,47 @@ dynamic changes in the display environment.
must be the size returned by RRGetCrtcGammaSize else a Value error
results.
+7.2. Extension Requests added in version 1.3 of the extension
+
+ââââ
+ RRSetCrtcTransform
+ crtc: CRTC
+ transform: TRANSFORM
+ inverse: TRANSFORM
+ââââ
+ Errors: Crtc, Match
+
+This request provides a mechanism that is more general than the existing
+rotation and reflection values for describing the transformation from frame
+buffer image to crtc presentation. 'transform' is a full 2D projective
+transformations from screen coordinate space to crtc coordinate space. This
+transformation is applied before the rotation and reflection values to
+compute the complete transform. 'inverse' must be the
+multiplicative inverse of 'transform' or a Match error results.
+
+This request sets the transform to be used at the next RRSetCrtcConfig
+request execution; it does not cause any change to occur in the current
+configuration.
+
+When a non-identity transformation is in use, the rectangle returned by
+RRGetCrtcInfo defines the bounding rectangle of the screen that is projected
+to the crtc. It is this projected rectangle which must be within the area of
+the screen when the mode is set.
+
+ââââ
+ RRGetCrtcTransform
+ crtc: CRTC
+ â¶
+ pending-transform: TRANSFORM
+ pending-inverse: TRANSFORM
+ current-transform: TRANSFORM
+ current-inverse: TRANSFORM
+ââââ
+
+This request returns the pending and current transforms for the specified
+CRTC. The pending transform will be the same as the current transform if no
+new pending transform has been set since the last call to RRSetCrtcConfig.
+
â§â§â§â§â§â§â§â§â§â§â§
8. Extension Events
@@ -990,12 +1040,12 @@ factors, such as re-cabling a monitor, etc.
configTimestamp: TIMESTAMP time config data was changed
root: WINDOW root window of screen
window: WINDOW window requesting notification
- size-id: SIZEID index of new size
+ size-id: SIZEID index of new SCREENSIZE
subpixelOrder: SUBPIXELORDER order of subpixels
- widthInPixels: CARD16
- heightInPixels: CARD16
- widthInMillimeters: CARD16
- heightInMillimeters: CARD16
+ widthInPixels: CARD16 width in pixels of the new SCREENSIZE
+ heightInPixels: CARD16 height in pixels of the new SCREENSIZE
+ widthInMillimeters: CARD16 width in mm of the new SCREENSIZE
+ heightInMillimeters: CARD16 height in mm of the new SCREENSIZE
ââââ
This event is generated whenever the screen configuration is changed
and sent to requesting clients. 'timestamp' indicates when the
@@ -1021,6 +1071,13 @@ factors, such as re-cabling a monitor, etc.
just at the time when a display manager or log in script might
be changing the screen size or configuration.
+ Note that the sizes in this event reflect the new SCREENSIZE and
+ thus will appear rotated by the 'rotation' parameter from the sizes
+ of the screen itself. In other words, when rotation is 90 or 270,
+ widthInPixels in this event will be the same as the height value
+ from a ConfigureNotify that reflects the same size change. This
+ will probably confuse developers.
+
8.1 Events added in version 1.2 of the RandR extension
ââââ
@@ -1065,27 +1122,26 @@ factors, such as re-cabling a monitor, etc.
ââââ
RRCrtcChangeNotify
timestamp: TIMESTAMP time monitor was changed
- config-timestamp: TIMESTAMP time config data was changed
- root: WINDOW root window of screen
window: WINDOW window requesting notification
crtc: CRTC CRTC which changed
mode: MODE new mode
rotation: ROTATION; new rotation
x: INT16 x position of CRTC within screen
y: INT16 y position of CRTC within screen
+ width: CARD16 width of new mode
+ height: CARD16 height of new mode
ââââ
This event is generated whenever the CRTC configuration is changed
and sent to requesting clients. 'timestamp' indicates when the
- CRTC configuration was changed. 'config-timestamp' says when the
- last time the configuration was changed. 'root' is the root of the
- screen the change occurred on, 'window' is window selecting for this
- event.
+ CRTC configuration was changed. 'window' is window selecting for this
+ event. 'mode' is the new mode, or None if the crtc is disabled.
+ 'x' and 'y' mark the location in the screen where this CRTC
+ is reading data. 'width' and 'height' indicate the size of the
+ mode. 'x', 'y, 'width' and 'height' are all zero when 'mode' is None.
This event is sent whenever the monitor's configuration changes
or if a new monitor configuration becomes available that was
- not available in the past. In this case (config-timestamp in
- the event not being equal to the config-timestamp returned in
- the last call to RRGetCrtcModes), the client MUST call
+ not available in the past. In this case, the client MUST call
RRGetCrtcModes to update its view of possible monitor
configurations to have a correct view of possible monitor
organizations.
More information about the xorg-commit
mailing list