From 105a161a3f5fb67f5fe7e4119629d424672804aa Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 16 Feb 2011 22:44:30 -0800 Subject: Make SetCrtcConfigs take flags bits to allow partial configuration changes Instead of requiring a complete new configuration to be computed, allow the client to send a partial configuration with only the changed values included. This simplifies clients so that they need not change things they don't understand. This also removes the 'CurrentScanoutPixmap' hack as that is no longer necessary. Signed-off-by: Keith Packard --- randrproto.txt | 100 +++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 27 deletions(-) (limited to 'randrproto.txt') diff --git a/randrproto.txt b/randrproto.txt index ee513e7..20cac75 100644 --- a/randrproto.txt +++ b/randrproto.txt @@ -1,5 +1,5 @@ The X Resize, Rotate and Reflect Extension - Version 1.3.1 + Version 1.4.0 2009-10-5 Jim Gettys @@ -371,46 +371,77 @@ SCANOUTPIXMAPINFO { format: PICTFORMAT compositing process in conjunction with the sprite transforms described in this extension. +SCREENFLAG { SetScreenPixmapSize + SetScreenSize + SetScreenSizeInMillimeters + SetScreenCrtcs } + +CRTCFLAG { SetCrtcPosition + SetCrtcMode + SetCrtcRotation + SetCrtcOutputs + SetCrtcSpritePositionTransform + SetCrtcSpriteImageTransform + SetCrtcPixmap + SetCrtcPixmapPosition } + CRTCCONFIG { crtc: CRTC + set: SETofCRTCFLAG x, y: INT16 mode: MODE rotation: ROTATION sprite-position-transform: TRANSFORM sprite-image-transform: TRANSFORM outputs: LISTofOUTPUT - pixmap: PIXMAP, None or CurrentScanoutPixmap + pixmap: PIXMAP or None 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. + If 'set' includes SetCrtcSpritePositionTransform, then + sprite-position-transform is used as in the + RRSetCrtcSpriteTransform request position-transform parameter. - '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 currently in use will remain in use, whether - that is the screen pixmap or some other allocated scanout pixmap. + If 'set' includes SetCrtcSpriteImageTransform, then + sprite-image-transform is used as in the + RRSetCrtcSpriteTransform request image-transform parameter. - '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. + If 'set' includes SetCrtcPixmap, then '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. - The pixmap value must specify a scanout pixmap as created by - RRCreateScanoutPixmap, or a Match error results. + If 'set' includes SetCrtcPixmapPosition, then '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 specified pixmap must be at least as large as the area to - be scanned out, or a Match error results. + If 'set' includes SetCrtcPixmap, then 'pixmap' must specify a + scanout pixmap as created by RRCreateScanoutPixmap or + None. Otherwise a Match error results. Furthermore: - The specified pixmap must have had the specified 'rotation' - included as a part of its creation paramaeters, or a Match - error results. + * 'pixmap' must be at least as large as the area to be + scanned out, or a Match error results. + + * If 'pixmap' is destroyed while still being used as a + scanout pixmap, then the associated CRTC will have its + scanout pixmap set back to None, the CRTC origin set back + to 0,0 (to make sure it fits) and the screen pixmap width + and height increased to be at least as big as the current + CRTC mode. + + * Future crtc changes that do not change the scanout pixmap + will cause an existing scanout pixmap to be resized to be + large enough to hold the new mode at the then-current + pixmap-x/pixmap-y location. + + If 'set' includes SetCrtcRotation then: - If 'pixmap' is destroyed while still being used as a scanout - pixmap, then the associated CRTC will have its scanout pixmap - set back to None, the CRTC origin set back to 0,0 (to make - sure it fits) and the screen pixmap width and height increased - to be at least as big as the current CRTC mode. + * Any new or existing scanout pixmap must have had the + specified 'rotation' included as a part of its creation + parameters, or a Match error results. + + * If no scanout pixmap is in use, then the crtc must support + 'rotation' else a Value error results. ❧❧❧❧❧❧❧❧❧❧❧ @@ -1413,6 +1444,7 @@ dynamic changes in the display environment. ┌─── RRSetCrtcConfigs drawable: DRAWABLE + set: SETofSCREENFLAG screen-pixmap-width: CARD16 screen-pixmap-height: CARD16 screen-width: CARD16 @@ -1426,10 +1458,24 @@ dynamic changes in the display environment. Errors: Value, Match This works much like RRSetScreenSize followed by a sequence of - RRSetCrtcConfig, except that the entire configuration is set + RRSetCrtcConfig, except that the entire configuration can be set in a single operation, either succeeding or failing without any partial execution. + If 'set' includes 'SetScreenPixmapSize', then + 'screen-pixmap-width' and 'screen-pixmap-height' specify the + new screen pixmap size. + + If 'set' includes 'SetScreenSize', then 'screen-width' and + 'screen-height' specify the new screen size. + + If 'set' includes 'SetScreenSizeInMillimeters', then + 'width-in-millimeters' and 'height-in-millimeters' specify + the new screen physical size. + + If 'set' includes 'SetScreenCrtcs', then 'configs' includes + the list of new CRTC configurations. + 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. -- cgit v1.2.1