RandR version 1.4 additions

This adds the specification and protocol header definitions for the
RandR 1.4 protocol changes, including

 * Per crtc pixmaps and pixmap origins
 * Sprite position and image transforms
 * SetCrtcConfigs request

Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Keith Packard 2010-12-05 20:31:18 -08:00
parent 1325b01124
commit dd14a22755
4 changed files with 278 additions and 4 deletions

View file

@ -22,7 +22,7 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ([2.60])
AC_INIT([RandrProto], [1.3.2],
AC_INIT([RandrProto], [1.4.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE

14
randr.h
View file

@ -40,11 +40,11 @@ typedef unsigned long XRandrModeFlags;
#define RANDR_NAME "RANDR"
#define RANDR_MAJOR 1
#define RANDR_MINOR 3
#define RANDR_MINOR 4
#define RRNumberErrors 3
#define RRNumberEvents 2
#define RRNumberRequests 32
#define RRNumberRequests 37
#define X_RRQueryVersion 0
/* we skip 1 to make old clients fail pretty immediately */
@ -92,6 +92,13 @@ typedef unsigned long XRandrModeFlags;
#define RRTransformScaleDown (1L << 2)
#define RRTransformProjective (1L << 3)
/* V1.4 additions */
#define X_RRQueryScanoutPixmaps 32
#define X_RRCreateScanoutPixmap 33
#define X_RRSetCrtcSpriteTransform 34
#define X_RRGetCrtcSpriteTransform 35
#define X_RRSetCrtcConfigs 36
/* Event selection bits */
#define RRScreenChangeNotifyMask (1L << 0)
/* V1.2 additions */
@ -149,6 +156,9 @@ typedef unsigned long XRandrModeFlags;
#define BadRRCrtc 1
#define BadRRMode 2
/* new in 1.4 protocol */
#define RR_CurrentScanoutPixmap 1 /* current scanout pixmap in RRSetCrtcConfigs */
/* Conventional RandR output properties */
#define RR_PROPERTY_BACKLIGHT "Backlight"

View file

@ -49,6 +49,7 @@
#define RRMode CARD32
#define RRCrtc CARD32
#define RRModeFlags CARD32
#define PictFormat CARD32
#define Rotation CARD16
#define SizeID CARD16
@ -645,6 +646,124 @@ typedef struct {
} xRRGetOutputPrimaryReply;
#define sz_xRRGetOutputPrimaryReply 32
/*
* Additions for 1.4
*/
typedef struct {
PictFormat format B32;
CARD16 maxWidth B16, maxHeight B16;
Rotation rotations B16;
CARD16 pad0 B16;
CARD32 pad1 B32;
} xRRScanoutPixmapInfo;
#define sz_xRRScanoutPixmapInfo 16
typedef struct {
RRCrtc crtc B32;
INT16 x B16, y B16;
RRMode mode B32;
Rotation rotation B16;
CARD16 nOutput B16;
xRenderTransform spritePositionTransform;
xRenderTransform spriteImageTransform;
Pixmap pixmap B32;
INT16 xPixmap B16, yPixmap B16;
} xRRCrtcConfig;
#define sz_xRRCrtcConfig (2*sz_xRenderTransform + 24)
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
Drawable drawable B32;
} xRRQueryScanoutPixmapsReq;
#define sz_xRRQueryScanoutPixmapsReq 8
typedef struct {
BYTE type;
CARD8 pad;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD32 pad0 B32;
CARD32 pad1 B32;
CARD32 pad2 B32;
CARD32 pad3 B32;
CARD32 pad4 B32;
CARD32 pad5 B32;
} xRRQueryScanoutPixmapsReply;
#define sz_xRRQueryScanoutPixmapsReply 32
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
Pixmap pid B32;
Drawable drawable B32;
CARD16 width B16, height B16;
PictFormat format B32;
Rotation rotations B16;
CARD16 pad B16;
} xRRCreateScanoutPixmapReq;
#define sz_xRRCreateScanoutPixmapReq 24
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
RRCrtc crtc B32;
xRenderTransform positionTransform;
xRenderTransform imageTransform;
} xRRSetCrtcSpriteTransformReq;
#define sz_xRRSetCrtcSpriteTransformReq (2*sz_xRenderTransform + 8)
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
RRCrtc crtc B32;
} xRRGetCrtcSpriteTransformReq;
#define sz_xRRGetCrtcSpriteTransformReq 8
typedef struct {
BYTE type;
CARD8 pad;
CARD16 sequenceNumber B16;
CARD32 length B32;
xRenderTransform positionTransform;
xRenderTransform imageTransform;
} xRRGetCrtcSpriteTransformReply;
#define sz_xRRGetCrtcSpriteTransformReply (2*sz_xRenderTransform + 8)
typedef struct {
CARD8 reqType;
CARD8 randrReqType;
CARD16 length B16;
Drawable drawable B32;
CARD16 screenPixmapWidth B16, screenPixmapHeight B16;
CARD16 screenWidth B16, screenHeight B16;
CARD32 widthInMillimeters B32;
CARD32 heightInMillimeters B32;
CARD16 nConfigs B16;
CARD16 pad0 B16;
CARD32 pad1 B32;
} xRRSetCrtcConfigsReq;
#define sz_xRRSetCrtcConfigsReq 32
typedef struct {
BYTE type;
CARD8 status;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD32 pad0 B32;
CARD32 pad1 B32;
CARD32 pad2 B16;
CARD32 pad3 B32;
CARD32 pad4 B32;
CARD32 pad5 B32;
} xRRSetCrtcConfigsReply;
#define sz_xRRSetCrtcConfigsReply 32
/*
* event
*/

View file

@ -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:
@ -302,6 +318,49 @@ 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-position-transform: TRANSFORM
sprite-image-transform: TRANSFORM
outputs: LISTofOUTPUT
pixmap: PIXMAP, None or CurrenScanoutPixmap
pixmap-x, pixmap-y: INT16 }
The sprite-position-transform and sprite-image-transform
values are used as in the RRSetCrtcSpriteTransform request
position-transform and image-transform parameters.
'pixmap' specifies the origin of the pixel data to be presented on
'crtc'. If 'pixmap' is None, then data will be presented from
the screen pixmap. If 'pixmap' is 'CurrentScanoutPixmap', then
whatever source is current in use will remain in use, whether
that is the screen pixmap or some other allocated scanout pixmap.
'pixmap-x' and 'pixmap-y' specify the origin of the scanout
data within the pixmap, the area from that location to
pixmap-x + width-of(mode), pixmap-y + height-of(mode) is what
will be seen on the connected outputs.
The pixmap value must specify a scanout pixmap as created by
RRCreateScanoutPixmap, or a Match error results.
The specified pixmap must be at least as large as the area to
be scanned out, or a Match error results.
The specified pixmap must have had the specified 'rotation'
included as a part of its creation paramaeters, or a Match
error results.
❧❧❧❧❧❧❧❧❧❧❧
6. Extension Initialization
The name of this extension is "RANDR".
@ -1238,6 +1297,92 @@ dynamic changes in the display environment.
❧❧❧❧❧❧❧❧❧❧❧
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
software emulation.
┌───
RRCreateScanoutPixmap
pixmap: PIXMAP
drawable: DRAWABLE
width, height: CARD16
format: PICTFORMAT
rotations: SETofROTATION
└───
Errors: Drawable, Match, Value
Creates a pixmap which can subsequently be used as a scanout
buffer for the screen associated with 'drawable'. 'rotations'
is the set of rotation values which may be used with the
resulting scanout buffer when it is associated with a CRTC.
'format' must be one of the supported scanout formats, or a
Match error results.
'width' and 'height' must be within the supported range for
the specified format or a Value error results.
'rotations' must be a subset of those supported for the
specified format or a Match error results.
┌───
RRSetCrtcSpriteTransform
crtc: CRTC
position-transform: TRANSFORM
image-transform: TRANSFORM
└───
Sets the sprite transforms for the specified crtc, any sprites
presented on this crtc will have their positions transformed
by the position-transform matrix. Sprite images displayed on the crtc
will be transformed by the image-transform matrix.
┌───
RRGetCrtcSpriteTransform
crtc: CRTC
position-transform: TRANSFORM
image-transform: TRANSFORM
└───
Gets the sprite transforms for the specified crtc.
┌───
RRSetCrtcConfigs
drawable: DRAWABLE
screen-pixmap-width: CARD16
screen-pixmap-height: CARD16
screen-width: CARD16
screen-height: CARD16
width-in-millimeters: CARD32
height-in-millimeters: CARD32
configs: LISTofCRTCCONFIG
status: RRCONFIGSTATUS
└───
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 addition to the pre-1.4 semantics, this request adds the
ability to specific a scanout pixmap for each crtc, and
integrates the 1.4 sprite transform request as well.
❧❧❧❧❧❧❧❧❧❧❧
8. Extension Events
Clients MAY select for ConfigureNotify on the root window to be