Initial working version -- added DamageDestroy and damage objects

This commit is contained in:
Keith Packard 2003-10-24 06:16:46 +00:00
parent 1b3ffaa1a6
commit a4b3510536
13 changed files with 385 additions and 31 deletions

0
AUTHORS Normal file
View file

22
COPYING Normal file
View file

@ -0,0 +1,22 @@
$Id: COPYING,v 1.1 2003-10-24 06:16:46 keithp Exp $
Copyright © 2001,2003 Keith Packard
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of Keith Packard not be used in
advertising or publicity pertaining to distribution of the software without
specific, written prior permission. Keith Packard makes no
representations about the suitability of this software for any purpose. It
is provided "as is" without express or implied warranty.
KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

View file

@ -1,3 +1,17 @@
2003-10-23 Keith Packard <keithp@keithp.com>
* COPYING:
* INSTALL:
* Makefile.am:
* README:
* autogen.sh:
* configure.ac:
* damageext.pc.in:
* damageproto.h:
* damagewire.h:
* protocol:
Initial working version -- added DamageDestroy and damage objects
2003-10-18 Keith Packard <keithp@keithp.com
Initial protocol description added

8
INSTALL Normal file
View file

@ -0,0 +1,8 @@
Render is built with the traditional configure script:
$ ./configure --prefix=/usr/X11R6
This should generate valid Makefiles, then:
$ make
$ make install

37
Makefile.am Normal file
View file

@ -0,0 +1,37 @@
#
# $Id: Makefile.am,v 1.1 2003-10-24 06:16:46 keithp Exp $
#
# Copyright © 2003 Keith Packard, Noah Levitt
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of Keith Packard not be used in
# advertising or publicity pertaining to distribution of the software without
# specific, written prior permission. Keith Packard makes no
# representations about the suitability of this software for any purpose. It
# is provided "as is" without express or implied warranty.
#
# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
damageextincludedir = $(includedir)/X11/extensions
damageextinclude_HEADERS = \
damageproto.h \
damagewire.h
damageextdocdir = $(datadir)/doc/damageext
damageextdoc_DATA = protocol
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = damageext.pc
EXTRA_DIST = autogen.sh damageext.pc.in $(damageextdoc_DATA)

0
NEWS Normal file
View file

10
README Normal file
View file

@ -0,0 +1,10 @@
RandR
X RandR Extension
Version 1.0
2002-10-4
This package contains header files and documentation for the X RandR
extension. Library and server implementations are separate.
Keith Packard
keithp@keithp.com

3
autogen.sh Executable file
View file

@ -0,0 +1,3 @@
#! /bin/sh
autoreconf -v --install || exit 1
./configure --enable-maintainer-mode "$@"

35
configure.ac Normal file
View file

@ -0,0 +1,35 @@
dnl
dnl $Id: configure.ac,v 1.1 2003-10-24 06:16:46 keithp Exp $
dnl
dnl Copyright © 2003 Keith Packard, Noah Levitt
dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its
dnl documentation for any purpose is hereby granted without fee, provided that
dnl the above copyright notice appear in all copies and that both that
dnl copyright notice and this permission notice appear in supporting
dnl documentation, and that the name of Keith Packard not be used in
dnl advertising or publicity pertaining to distribution of the software without
dnl specific, written prior permission. Keith Packard makes no
dnl representations about the suitability of this software for any purpose. It
dnl is provided "as is" without express or implied warranty.
dnl
dnl KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
dnl EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
dnl PERFORMANCE OF THIS SOFTWARE.
dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ([2.57])
AC_INIT([damageext], [1.0], [keithp@keithp.com], damageext)
AM_INIT_AUTOMAKE([dist-bzip2])
AM_MAINTAINER_MODE
PKG_CHECK_MODULES(FIXESEXT, fixesext)
AC_OUTPUT([Makefile
damageext.pc])

9
damageext.pc.in Normal file
View file

@ -0,0 +1,9 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: DamageExt
Description: X Damage extension headers
Version: @PACKAGE_VERSION@
Cflags: -I${includedir} @FIXESEXT_CFLAGS@

149
damageproto.h Normal file
View file

@ -0,0 +1,149 @@
/*
* $Id: damageproto.h,v 1.1 2003-10-24 06:16:46 keithp Exp $
*
* Copyright © 2003 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Keith Packard not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Keith Packard makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _DAMAGEPROTO_H_
#define _DAMAGEPROTO_H_
#include <X11/Xmd.h>
#include <X11/extensions/xfixesproto.h>
#include <X11/extensions/damagewire.h>
#define Window CARD32
#define Drawable CARD32
#define Font CARD32
#define Pixmap CARD32
#define Cursor CARD32
#define Colormap CARD32
#define GContext CARD32
#define Atom CARD32
#define VisualID CARD32
#define Time CARD32
#define KeyCode CARD8
#define KeySym CARD32
#define Picture CARD32
#define Region CARD32
#define Damage CARD32
/************** Version 0 ******************/
typedef struct {
CARD8 reqType;
CARD8 damageReqType;
CARD16 length B16;
} xDamageReq;
/*
* requests and replies
*/
typedef struct {
CARD8 reqType;
CARD8 damageReqType;
CARD16 length B16;
CARD32 majorVersion B32;
CARD32 minorVersion B32;
} xDamageQueryVersionReq;
#define sz_xDamageQueryVersionReq 12
typedef struct {
BYTE type; /* X_Reply */
BYTE pad1;
CARD16 sequenceNumber B16;
CARD32 length B32;
CARD32 majorVersion B32;
CARD32 minorVersion B32;
CARD32 pad2 B32;
CARD32 pad3 B32;
CARD32 pad4 B32;
CARD32 pad5 B32;
} xDamageQueryVersionReply;
#define sz_xDamageQueryVersionReply 32
typedef struct {
CARD8 reqType;
CARD8 damageReqType;
CARD16 length B16;
Damage damage B32;
Drawable drawable B32;
CARD8 level;
CARD8 pad1;
CARD16 pad2 B16;
} xDamageCreateReq;
#define sz_xDamageCreateReq 16
typedef struct {
CARD8 reqType;
CARD8 damageReqType;
CARD16 length B16;
Damage damage B32;
} xDamageDestroyReq;
#define sz_xDamageDestroyReq 8
typedef struct {
CARD8 reqType;
CARD8 damageReqType;
CARD16 length B16;
Damage damage B32;
Region repair B32;
Region parts B32;
} xDamageSubtractReq;
#define sz_xDamageSubtractReq 16
/* Events */
#define DamageNotifyMore 0x80
typedef struct {
CARD8 type;
CARD8 level;
CARD16 sequenceNumber B16;
Drawable drawable B32;
Damage damage B32;
Time timestamp B32;
xRectangle area;
xRectangle geometry;
} xDamageNotifyEvent;
#undef Damage
#undef Region
#undef Picture
#undef Window
#undef Drawable
#undef Font
#undef Pixmap
#undef Cursor
#undef Colormap
#undef GContext
#undef Atom
#undef VisualID
#undef Time
#undef KeyCode
#undef KeySym
#endif /* _DAMAGEPROTO_H_ */

57
damagewire.h Normal file
View file

@ -0,0 +1,57 @@
/*
* $Id: damagewire.h,v 1.1 2003-10-24 06:16:46 keithp Exp $
*
* Copyright © 2003 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Keith Packard not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Keith Packard makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _DAMAGEWIRE_H_
#define _DAMAGEWIRE_H_
#define DAMAGE_NAME "DAMAGE"
#define DAMAGE_MAJOR 1
#define DAMAGE_MINOR 0
/************* Version 1 ****************/
/* Constants */
#define XDamageReportRawRectangles 0
#define XDamageReportDeltaRectangles 1
#define XDamageReportBoundingBox 2
#define XDamageReportNonEmpty 3
/* Requests */
#define X_DamageQueryVersion 0
#define X_DamageCreate 1
#define X_DamageDestroy 2
#define X_DamageSubtract 3
#define XDamageNumberRequests (X_DamageSubtract + 1)
/* Events */
#define XDamageNotify 0
#define XDamageNumberEvents (XDamageNotify + 1)
/* Errors */
#define BadDamage 0
#define XDamageNumberErrors (BadDamage + 1)
#endif /* _DAMAGEWIRE_H_ */

View file

@ -1,4 +1,4 @@
The XDAMAGE Extension
The DAMAGE Extension
Version 0.0
2003-10-18
Keith Packard
@ -8,7 +8,7 @@
Monitoring the regions affected by rendering has wide-spread use, from
VNC-like systems scraping the screen to screen magnifying applications
designed to aid users with limited visual acuity. The XDAMAGE extension is
designed to aid users with limited visual acuity. The DAMAGE extension is
designed to make such applications reasonably efficient in the face of
server-client latency.
@ -44,7 +44,7 @@ object drawn (line, string, rectangle) to be represented as a single
rectangle and for the damage area of the operation to be the union of these
rectangles.
The XDAMAGE extension allows applications to either receive the raw
The DAMAGE extension allows applications to either receive the raw
rectangles as a stream of events, or to have them partially processed within
the X server to reduce the amount of data transmitted as well as reduce the
processing latency once the repaint operation has started.
@ -52,7 +52,7 @@ processing latency once the repaint operation has started.
Damage to a window reflects both drawing within the window itself as well as
drawing within any inferior window that affects pixels seen by
IncludeInferiors rendering operations. To reduce the computational
complexity of this, the XDAMAGE extension allows the server to monitor all
complexity of this, the DAMAGE extension allows the server to monitor all
rendering operations within the physical target pixel storage that fall
within the bounds of the window. In a system with a single frame buffer
holding all windows, this means that damage will accumulate for all
@ -64,42 +64,46 @@ contents.
4. Data types
The XDAMAGE extension creates no new datatypes itself, but does lean heavily
on the XFIXES extension region datatypes.
The "Damage" object holds any accumulated damage region and reflects the
relationship between the drawable selected for damage notification and the
drawable for which damage is tracked.
5. Errors
No new errors are included in the XDAMAGE extension.
Damage
A value for a DAMAGE argument does not name a defined DAMAGE.
6. Types
DAMAGE 32-bit value (top three bits guaranteed to be zero)
DamageReportLevel { DamageReportRawRectangles,
DamageReportDeltaRectangles,
DamageReportBoundingBox,
DamageReportNonEmpty }
DamageReportRawRectangles
DamageReportRawRectangles
Delivers DamageNotify events each time the screen
is modified with rectangular bounds that circumscribe
the damaged area. No attempt to compress out overlapping
rectangles is made.
DamageReportDeltaRectangles
DamageReportDeltaRectangles
Delivers DamageNotify events each time damage occurs
which is not included in the damage region. The
reported rectangles include only the changes to that
area, not the raw damage data.
DamageReportBoundingBox
DamageReportBoundingBox
Delivers DamageNotify events each time the bounding
box enclosing the damage region increases in size.
The reported rectangle encloses the entire damage region,
not just the changes to that size.
DamageReportNonEmpty
DamageReportNonEmpty
Delivers a single DamageNotify event each time the
damage rectangle changes from empty to non-empty, and
@ -111,9 +115,15 @@ No new errors are included in the XDAMAGE extension.
DamageNotify
level: DamageReportLevel
window: Window
drawable: Drawable
damage: DAMAGE
more: Bool
timestamp: Timestamp
damage: Rectangle
area: Rectangle
drawable-geometry: Rectangle
'more' indicates whether there are subsequent damage events
being delivered immediately as part of a larger damage region
8. Extension Initialization
@ -142,34 +152,34 @@ QueryVersion
9. Enable Monitoring
DamageMonitor
DamageCreate
window: Window
damage: DAMAGE
drawable: Drawable
level: DamageReportLevel
damage_region: Region
Creates a damage object to monitor changes to Drawable
The server establishes a damage monitor for window. 'region'
is used to hold the damage region when level is not
DamageReportRawRectangles, in which case it is ignored
and may be None.
DamageDestroy
damage: DAMAGE
Destroys damage.
DamageSubtract
window: window
damage_region: Region
repair_region: Region or None
parts_region: Region
damage: DAMAGE
repair: Region or None
parts: Region
Synchronously modifies the regions in the following manner:
If repair_region is None:
If repair is None:
1) parts_region = damage_region
2) damage_region = <empty>
1) parts = damage
2) damage = <empty>
Otherwise:
1) parts_region = damage_region INTERSECT repair_region
2) damage_region = damage_region - parts_region
1) parts = damage INTERSECT repair
2) damage = damage - parts
3) Generate DamageNotify for remaining damage areas