Proposal for per-CRTC pixmaps in RandR

Keith Packard keithp at keithp.com
Thu May 6 15:12:56 PDT 2010


Here's a patch to randrproto.txt that specifies the protocol level
semantics for the proposed changes:

From 1265b555ebc49e7e5bc23de7441e7686748e97e1 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp at keithp.com>
Date: Thu, 6 May 2010 15:11:52 -0700
Subject: [PATCH] Proposed RandR changes for per-crtc pixmaps.

Signed-off-by: Keith Packard <keithp at keithp.com>
---
 randrproto/randrproto.txt |  114 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 113 insertions(+), 1 deletions(-)

diff --git a/randrproto/randrproto.txt b/randrproto/randrproto.txt
index 016532c..182280c 100644
--- a/randrproto/randrproto.txt
+++ b/randrproto/randrproto.txt
@@ -124,7 +124,23 @@ following features are added in this version:
    • Panning. It was removed with RandR 1.2 because the old semantics didn't
      fit any longer. With RandR 1.3 panning can be specified per crtc.
 
-1.1 Acknowledgements
+1.4 Introduction to version 1.4 of the extension
+
+Version 1.4 adds a couple more capabilities to further expose the
+underlying hardware to clients
+
+   • Per-crtc pixmaps. This provides for multiple scan-out buffers
+     which applications can create and assign to arbitrary collections
+     of crtcs. These pixmaps can be associated with a window for use
+     with OpenGL or drawn to directly.
+
+   • RRSetCrtcConfigs request. This supplies a set of
+     crtc configurations to the server that must be applied together
+     or not at all. This can reduce screen flicker while also
+     providing the server a complete configuration for appropriate
+     resource management.
+
+1.99 Acknowledgements
 
 Our thanks to the contributors to the design found on the xpert mailing
 list, in particular:
@@ -300,6 +316,20 @@ MODEINFO { id: MODE
 
 REFRESH { rates: LISTofCARD16 }
 
+5.4. Protocol Types added in version 1.4 of the extension
+
+SCANOUTPIXMAPINFO { format: PICTFORMAT
+		    maxWidth, maxHeight: CARD16
+		    rotations: SETofROTATION }
+		  
+CRTCCONFIG { crtc: CRTC
+	     x, y: INT16
+	     mode: MODE
+	     rotation: ROTATION
+	     sprite_transform: TRANSFORM
+	     outputs: LISTofOUTPUT
+	     pixmap: PIXMAP }
+
                               ❧❧❧❧❧❧❧❧❧❧❧
 
 6. Extension Initialization
@@ -1236,6 +1266,88 @@ dynamic changes in the display environment.
 
 	RRGetOutputPrimary returns the primary output for the screen.
 
+7.3. Extension Requests added in version 1.4 of the extension.
+
+┌───
+    RRQueryScanoutPixmaps
+	window: WINDOW
+      ▶
+        infos: LISTofSCANOUTPIXMAPINFO
+└───
+	Errors: Window
+
+	This request returns information about the server support for
+	alternate scanout pixmaps. For each pictformat, there is a set
+	of rotations and a maximum supported size. The rotations here
+	are those provided by the scanout hardware itself, not by a
+	software emulation.
+
+┌───
+    RRCreateScanoutPixmap
+	pixmap: PIXMAP
+	window: WINDOW
+	width, height: CARD16
+	format: PICTFORMAT
+	rotations: SETofROTATION
+└───
+	Errors: Window, Match, Value
+
+	Creates a pixmap which can subsequently be used as a scanout
+	buffer for the screen associated with 'window'. 'rotations' is
+	the set of rotation values which may be used with the
+	resulting scanout buffer. 'rotations' must be a subset of the
+	supported rotations or a Match error results. width and height
+	must be within the supported range or a Value error
+	results. 'format' must be one of the supported formats or
+	Match error results.
+
+┌───
+    RRSetWindowPixmap
+	window: WINDOW
+	pixmap: PIXMAP
+└───
+	Errors: Window, Pixmap, Match
+
+	Mirroring the Composite extension NameWindowPixmap request,
+	this sets the pixmap used for off-screen storage of window
+	contents. Pixmap and Window must be the same depth and screen
+	or a Match error results. Rendering is clipped to the
+	intersection of the window size and pixmap size. The window 
+	origin is set at the pixmap origin.
+
+┌───
+    RRSetCrtcSpriteTransform
+	crtc: CRTC
+	transform: TRANSFORM
+└───
+	Sets the sprite transform for the specified crtc, any sprites
+    	presented on this crtc will have their positions transformed
+    	by the specified matrix.
+
+┌───
+    RRSetCrtcConfigs
+	window: WINDOW
+	width: CARD16
+	height: CARD16
+	width-in-millimeters: CARD32
+	height-in-millimeters: CARD32
+        configs: LISTofCRTCCONFIG
+	timestamp: TIMESTAMP
+      ▶
+	status: RRCONFIGSTATUS
+	new-timestamp: TIMESTAMP
+└───
+	Errors: Value, Match
+
+	This works much like RRSetScreenSize followed by a sequence of
+	RRSetCrtcConfig, except that the entire configuration is set
+	in a single operation, either succeeding or failing without
+	any partial execution. In particular, the requested screen
+	size need only be large enough to hold the final
+	configuration, not the starting or any intermediate
+	configuration. Note that the sprite_transform is also included
+	in this request making for truely one-stop shopping.
+
                               ❧❧❧❧❧❧❧❧❧❧❧
 
 8. Extension Events
-- 
1.7.0.4



-- 
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20100506/a008a6f8/attachment.pgp>


More information about the xorg-devel mailing list