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 <[email protected]>
Date: Thu, 6 May 2010 15:11:52 -0700
Subject: [PATCH] Proposed RandR changes for per-crtc pixmaps.

Signed-off-by: Keith Packard <[email protected]>
---
 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



-- 
[email protected]

Attachment: pgpOaM681KzMZ.pgp
Description: PGP signature

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to