03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Copyright © 2003 Keith Packard
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * documentation for any purpose is hereby granted without fee, provided that
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * the above copyright notice appear in all copies and that both that
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * copyright notice and this permission notice appear in supporting
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * documentation, and that the name of Keith Packard not be used in
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * advertising or publicity pertaining to distribution of the software without
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * specific, written prior permission. Keith Packard makes no
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * representations about the suitability of this software for any purpose. It
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * is provided "as is" without express or implied warranty.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * PERFORMANCE OF THIS SOFTWARE.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#ifdef HAVE_DIX_CONFIG_H
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include <dix-config.h>
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#endif
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#ifndef _DAMAGESTR_H_
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define _DAMAGESTR_H_
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include "damage.h"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include "gcstruct.h"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include "privates.h"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include "picturestr.h"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct _damage {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamagePtr pNext;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamagePtr pNextWin;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync RegionRec damage;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageReportLevel damageLevel;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool isInternal;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync void *closure;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool isWindow;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DrawablePtr pDrawable;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageReportFunc damageReport;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageReportFunc damageReportPostRendering;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageDestroyFunc damageDestroy;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageMarkerFunc damageMarker;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool reportAfter;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync RegionRec pendingDamage; /* will be flushed post submission at the latest */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync RegionRec backupDamage; /* for use with damageMarker */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync ScreenPtr pScreen;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync PrivateRec *devPrivates;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync} DamageRec;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct _damageScrPriv {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int internalLevel;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * For DDXen which don't provide GetScreenPixmap, this provides
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * a place to hook damage for windows on the screen
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamagePtr pScreenDamage;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CopyWindowProcPtr CopyWindow;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CloseScreenProcPtr CloseScreen;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CreateGCProcPtr CreateGC;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DestroyPixmapProcPtr DestroyPixmap;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetWindowPixmapProcPtr SetWindowPixmap;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DestroyWindowProcPtr DestroyWindow;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CompositeProcPtr Composite;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GlyphsProcPtr Glyphs;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync AddTrapsProcPtr AddTraps;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* Table of wrappable function pointers */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageScreenFuncsRec funcs;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync} DamageScrPrivRec, *DamageScrPrivPtr;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct _damageGCPriv {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GCOps *ops;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GCFuncs *funcs;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync} DamageGCPrivRec, *DamageGCPrivPtr;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* XXX should move these into damage.c, damageScrPrivateIndex is static */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageScrPriv(pScr) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageScrPrivPtr pScrPriv = damageGetScrPriv(pScr)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageGetPixPriv(pPix) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damgeSetPixPriv(pPix,v) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damagePixPriv(pPix) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamagePtr pDamage = damageGetPixPriv(pPix)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageGetGCPriv(pGC) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageGCPriv(pGC) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DamageGCPrivPtr pGCPriv = damageGetGCPriv(pGC)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageGetWinPriv(pWin) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync ((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define damageSetWinPriv(pWin,d) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#endif /* _DAMAGESTR_H_ */