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