61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Copyright (C) 2000 Keith Packard, member of The XFree86 Project, Inc.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 2005 Zack Rusin, Trolltech
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Permission to use, copy, modify, distribute, and sell this software and its
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * documentation for any purpose is hereby granted without fee, provided that
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * the above copyright notice appear in all copies and that both that
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * copyright notice and this permission notice appear in supporting
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * documentation, and that the name of Keith Packard not be used in
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * advertising or publicity pertaining to distribution of the software without
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * specific, written prior permission. Keith Packard makes no
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * representations about the suitability of this software for any purpose. It
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * is provided "as is" without express or implied warranty.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * SOFTWARE.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define EXA_FatalErrorDebugWithRet(x, ret) FatalError x
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * This is the list of migration heuristics supported by EXA. See
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * exaDoMigration() for what their implementations do.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* The identity of the cache, statically configured at initialization */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int size; /* Size of cache; eventually this should be dynamically determined */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Hash table mapping from glyph sha1 to position in the glyph; we use
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * open addressing with a hash table size determined based on size and large
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * enough so that we always have a good amount of free space, so we can
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * use linear probing. (Linear probing is preferrable to double hashing
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * here because it allows us to easily remove entries.)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync PicturePtr picture; /* Where the glyphs of the cache are stored */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int yOffset; /* y location within the picture where the cache starts */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int columns; /* Number of columns the glyphs are layed out in */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int evictionPosition; /* Next random position to evict a glyph */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef void (*EnableDisableFBAccessProcPtr) (ScreenPtr, Bool);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ChangeWindowAttributesProcPtr SavedChangeWindowAttributes;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CreateScreenResourcesProcPtr SavedCreateScreenResources;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync SetSharedPixmapBackingProcPtr SavedSetSharedPixmapBacking;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void (*do_migration) (ExaMigrationPtr pixmaps, int npixmaps,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void (*prepare_access_reg) (PixmapPtr pPixmap, int index, RegionPtr pReg);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Reference counting for accessed pixmaps */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Holds information on fallbacks that cannot be relayed otherwise. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ExaGlyphCacheRec glyphCaches[EXA_NUM_GLYPH_CACHES];
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Regions affected by fallback composite source / mask operations.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * This is the only completely portable way to
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * compute this info.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ((1 << PixmapWidthPaddingInfo[d].padBytesLog2) * 8 / \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define exaScreenPrivateKey (&exaScreenPrivateKeyRec)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)dixGetPrivate(&(s)->devPrivates, exaScreenPrivateKey))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define ExaScreenPriv(s) ExaScreenPrivPtr pExaScr = ExaGetScreenPriv(s)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define ExaGetGCPriv(gc) ((ExaGCPrivPtr)dixGetPrivateAddr(&(gc)->devPrivates, &ExaGetScreenPriv(gc->pScreen)->gcPrivateKeyRec))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define ExaGCPriv(gc) ExaGCPrivPtr pExaGC = ExaGetGCPriv(gc)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Some macros to deal with function wrapping.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** Align an offset to an arbitrary alignment */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define EXA_ALIGN(offset, align) (((offset) + (align) - 1) - \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** Align an offset to a power-of-two alignment */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define EXA_ALIGN2(offset, align) (((offset) + (align) - 1) & ~((align) - 1))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)dixGetPrivateAddr(&(p)->devPrivates, &ExaGetScreenPriv((p)->drawable.pScreen)->pixmapPrivateKeyRec))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define ExaPixmapPriv(p) ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv(p)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int score; /**< score for the move-in vs move-out heuristic */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 *sys_ptr; /**< pointer to pixmap data in system memory */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int sys_pitch; /**< pitch of pixmap in system memory */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CARD8 *fb_ptr; /**< pointer to pixmap data in framebuffer memory */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int fb_pitch; /**< pitch of pixmap in framebuffer memory */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int fb_size; /**< size of pixmap in framebuffer memory */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Holds information about whether this pixmap can be used for
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * acceleration (== 0) or not (> 0).
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Contains a OR'ed combination of the following values:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * EXA_RANGE_PITCH - set if the pixmap's pitch is out of range
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * EXA_RANGE_WIDTH - set if the pixmap's width is out of range
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * EXA_RANGE_HEIGHT - set if the pixmap's height is out of range
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The damage record contains the areas of the pixmap's current location
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * (framebuffer or system) that have been damaged compared to the other
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * location.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The valid regions mark the valid bits (at least, as they're derived from
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * damage, which may be overreported) of a pixmap's system and FB copies.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Driver private storage per EXA pixmap
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* GC values from the layer below. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * exaDDXDriverInit must be implemented by the DDX using EXA, and is the place
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * to set EXA options or hook in screen functions to handle using EXA as the AA.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nspans,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *psrc,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int x, int y, int w, int h, int leftPad, int format,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckCopyNtoN(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync BoxPtr pbox, int nbox, int dx, int dy, Bool reverse,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int srcx, int srcy, int w, int h, int dstx, int dsty);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int srcx, int srcy, int w, int h, int dstx, int dsty,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned long bitPlane);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckPolySegment(DrawablePtr pDrawable, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ExaCheckPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * pArcs);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckPolyFillRect(DrawablePtr pDrawable, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int x, int y, unsigned int nglyph,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int x, int y, unsigned int nglyph,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DrawablePtr pDrawable, int w, int h, int x, int y);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ExaCheckCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaCheckGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int format, unsigned long planeMask, char *d);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync INT16 x_off, INT16 y_off, int ntrap, xTrap * traps);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync return ((alu != GXcopy && alu != GXclear && alu != GXset &&
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync alu != GXcopyInverted) || fillStyle == FillStippled ||
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaFillRegionTiled(DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int clientClipType);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int format, unsigned long planeMask, char *d);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int srcx, int srcy, int width, int height, int dstx, int dsty);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int nbox, int dx, int dy, Bool reverse, Bool upsidedown);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExaOffscreenArea *ExaOffscreenDefragment(ScreenPtr pScreen);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaPrepareAccess(DrawablePtr pDrawable, int index);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaPixmapDirty(PixmapPtr pPix, int x1, int y1, int x2, int y2);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaGetDrawableDeltas(DrawablePtr pDrawable, PixmapPtr pPixmap,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaGetOffscreenPixmap(DrawablePtr pDrawable, int *xp, int *yp);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int w, int h, int bpp);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int w, int h, int bpp);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaDoMigration(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaModifyPixmapHeader_classic(PixmapPtr pPixmap, int width, int height,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaModifyPixmapHeader_driver(PixmapPtr pPixmap, int width, int height,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaSetSharedPixmapBacking_mixed(PixmapPtr pPixmap, void *handle);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaSharePixmapBacking_mixed(PixmapPtr pPixmap, ScreenPtr slave, void **handle_p);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync PicturePtr pDst, int nrect, ExaCompositeRectPtr rects);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncexaTriangles(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaDoMigration_classic(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaPixmapSave(ScreenPtr pScreen, ExaOffscreenArea * area);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync exaPrepareAccessReg_classic(PixmapPtr pPixmap, int index, RegionPtr pReg);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif /* EXAPRIV_H */