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