exa_priv.h revision 4642e01f
105b261ecSmrg/*
205b261ecSmrg *
305b261ecSmrg * Copyright (C) 2000 Keith Packard, member of The XFree86 Project, Inc.
405b261ecSmrg *               2005 Zack Rusin, Trolltech
505b261ecSmrg *
605b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
705b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
805b261ecSmrg * the above copyright notice appear in all copies and that both that
905b261ecSmrg * copyright notice and this permission notice appear in supporting
1005b261ecSmrg * documentation, and that the name of Keith Packard not be used in
1105b261ecSmrg * advertising or publicity pertaining to distribution of the software without
1205b261ecSmrg * specific, written prior permission.  Keith Packard makes no
1305b261ecSmrg * representations about the suitability of this software for any purpose.  It
1405b261ecSmrg * is provided "as is" without express or implied warranty.
1505b261ecSmrg *
1605b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
1705b261ecSmrg * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
1805b261ecSmrg * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
1905b261ecSmrg * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2005b261ecSmrg * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
2105b261ecSmrg * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
2205b261ecSmrg * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
2305b261ecSmrg * SOFTWARE.
2405b261ecSmrg */
2505b261ecSmrg
2605b261ecSmrg#ifndef EXAPRIV_H
2705b261ecSmrg#define EXAPRIV_H
2805b261ecSmrg
2905b261ecSmrg#ifdef HAVE_DIX_CONFIG_H
3005b261ecSmrg#include <dix-config.h>
3105b261ecSmrg#endif
3205b261ecSmrg
3305b261ecSmrg#include "exa.h"
3405b261ecSmrg
3505b261ecSmrg#include <X11/X.h>
3605b261ecSmrg#define NEED_EVENTS
3705b261ecSmrg#include <X11/Xproto.h>
384642e01fSmrg#ifdef MITSHM
394642e01fSmrg#include "shmint.h"
404642e01fSmrg#endif
4105b261ecSmrg#include "scrnintstr.h"
4205b261ecSmrg#include "pixmapstr.h"
4305b261ecSmrg#include "windowstr.h"
4405b261ecSmrg#include "servermd.h"
4505b261ecSmrg#include "mibstore.h"
4605b261ecSmrg#include "colormapst.h"
4705b261ecSmrg#include "gcstruct.h"
4805b261ecSmrg#include "input.h"
4905b261ecSmrg#include "mipointer.h"
5005b261ecSmrg#include "mi.h"
5105b261ecSmrg#include "dix.h"
5205b261ecSmrg#include "fb.h"
5305b261ecSmrg#include "fboverlay.h"
5405b261ecSmrg#ifdef RENDER
5505b261ecSmrg#include "fbpict.h"
564642e01fSmrg#include "glyphstr.h"
5705b261ecSmrg#endif
5805b261ecSmrg#include "damage.h"
5905b261ecSmrg
6005b261ecSmrg#define DEBUG_TRACE_FALL	0
6105b261ecSmrg#define DEBUG_MIGRATE		0
6205b261ecSmrg#define DEBUG_PIXMAP		0
6305b261ecSmrg#define DEBUG_OFFSCREEN		0
644642e01fSmrg#define DEBUG_GLYPH_CACHE	0
6505b261ecSmrg
6605b261ecSmrg#if DEBUG_TRACE_FALL
6705b261ecSmrg#define EXA_FALLBACK(x)     					\
6805b261ecSmrgdo {								\
6905b261ecSmrg	ErrorF("EXA fallback at %s: ", __FUNCTION__);		\
7005b261ecSmrg	ErrorF x;						\
7105b261ecSmrg} while (0)
7205b261ecSmrg
7305b261ecSmrgchar
7405b261ecSmrgexaDrawableLocation(DrawablePtr pDrawable);
7505b261ecSmrg#else
7605b261ecSmrg#define EXA_FALLBACK(x)
7705b261ecSmrg#endif
7805b261ecSmrg
7905b261ecSmrg#if DEBUG_PIXMAP
8005b261ecSmrg#define DBG_PIXMAP(a) ErrorF a
8105b261ecSmrg#else
8205b261ecSmrg#define DBG_PIXMAP(a)
8305b261ecSmrg#endif
8405b261ecSmrg
8505b261ecSmrg#ifndef EXA_MAX_FB
8605b261ecSmrg#define EXA_MAX_FB   FB_OVERLAY_MAX
8705b261ecSmrg#endif
8805b261ecSmrg
8905b261ecSmrg/**
9005b261ecSmrg * This is the list of migration heuristics supported by EXA.  See
9105b261ecSmrg * exaDoMigration() for what their implementations do.
9205b261ecSmrg */
9305b261ecSmrgenum ExaMigrationHeuristic {
9405b261ecSmrg    ExaMigrationGreedy,
9505b261ecSmrg    ExaMigrationAlways,
9605b261ecSmrg    ExaMigrationSmart
9705b261ecSmrg};
9805b261ecSmrg
994642e01fSmrgtypedef struct {
1004642e01fSmrg    unsigned char sha1[20];
1014642e01fSmrg} ExaCachedGlyphRec, *ExaCachedGlyphPtr;
1024642e01fSmrg
1034642e01fSmrgtypedef struct {
1044642e01fSmrg    /* The identity of the cache, statically configured at initialization */
1054642e01fSmrg    unsigned int format;
1064642e01fSmrg    int glyphWidth;
1074642e01fSmrg    int glyphHeight;
1084642e01fSmrg
1094642e01fSmrg    int size; /* Size of cache; eventually this should be dynamically determined */
1104642e01fSmrg
1114642e01fSmrg    /* Hash table mapping from glyph sha1 to position in the glyph; we use
1124642e01fSmrg     * open addressing with a hash table size determined based on size and large
1134642e01fSmrg     * enough so that we always have a good amount of free space, so we can
1144642e01fSmrg     * use linear probing. (Linear probing is preferrable to double hashing
1154642e01fSmrg     * here because it allows us to easily remove entries.)
1164642e01fSmrg     */
1174642e01fSmrg    int *hashEntries;
1184642e01fSmrg    int hashSize;
1194642e01fSmrg
1204642e01fSmrg    ExaCachedGlyphPtr glyphs;
1214642e01fSmrg    int glyphCount; /* Current number of glyphs */
1224642e01fSmrg
1234642e01fSmrg    PicturePtr picture;   /* Where the glyphs of the cache are stored */
1244642e01fSmrg    int yOffset;          /* y location within the picture where the cache starts */
1254642e01fSmrg    int columns;          /* Number of columns the glyphs are layed out in */
1264642e01fSmrg    int evictionPosition; /* Next random position to evict a glyph */
1274642e01fSmrg} ExaGlyphCacheRec, *ExaGlyphCachePtr;
1284642e01fSmrg
1294642e01fSmrg#define EXA_NUM_GLYPH_CACHES 4
1304642e01fSmrg
13105b261ecSmrgtypedef void (*EnableDisableFBAccessProcPtr)(int, Bool);
13205b261ecSmrgtypedef struct {
13305b261ecSmrg    ExaDriverPtr info;
13405b261ecSmrg    CreateGCProcPtr 		 SavedCreateGC;
13505b261ecSmrg    CloseScreenProcPtr 		 SavedCloseScreen;
13605b261ecSmrg    GetImageProcPtr 		 SavedGetImage;
13705b261ecSmrg    GetSpansProcPtr 		 SavedGetSpans;
13805b261ecSmrg    CreatePixmapProcPtr 	 SavedCreatePixmap;
13905b261ecSmrg    DestroyPixmapProcPtr 	 SavedDestroyPixmap;
14005b261ecSmrg    CopyWindowProcPtr 		 SavedCopyWindow;
1414642e01fSmrg    ChangeWindowAttributesProcPtr SavedChangeWindowAttributes;
1424642e01fSmrg    BitmapToRegionProcPtr        SavedBitmapToRegion;
1434642e01fSmrg    CreateScreenResourcesProcPtr SavedCreateScreenResources;
1444642e01fSmrg    ModifyPixmapHeaderProcPtr    SavedModifyPixmapHeader;
14505b261ecSmrg#ifdef RENDER
14605b261ecSmrg    CompositeProcPtr             SavedComposite;
1474642e01fSmrg    TrianglesProcPtr		 SavedTriangles;
14805b261ecSmrg    GlyphsProcPtr                SavedGlyphs;
14905b261ecSmrg    TrapezoidsProcPtr            SavedTrapezoids;
1504642e01fSmrg    AddTrapsProcPtr		 SavedAddTraps;
15105b261ecSmrg#endif
1524642e01fSmrg
15305b261ecSmrg    Bool			 swappedOut;
15405b261ecSmrg    enum ExaMigrationHeuristic	 migration;
15505b261ecSmrg    Bool			 checkDirtyCorrectness;
15605b261ecSmrg    unsigned			 disableFbCount;
1574642e01fSmrg    Bool			 optimize_migration;
1584642e01fSmrg    unsigned			 offScreenCounter;
1594642e01fSmrg
1604642e01fSmrg    ExaGlyphCacheRec             glyphCaches[EXA_NUM_GLYPH_CACHES];
16105b261ecSmrg} ExaScreenPrivRec, *ExaScreenPrivPtr;
16205b261ecSmrg
16305b261ecSmrg/*
16405b261ecSmrg * This is the only completely portable way to
16505b261ecSmrg * compute this info.
16605b261ecSmrg */
16705b261ecSmrg#ifndef BitsPerPixel
16805b261ecSmrg#define BitsPerPixel(d) (\
16905b261ecSmrg    PixmapWidthPaddingInfo[d].notPower2 ? \
17005b261ecSmrg    (PixmapWidthPaddingInfo[d].bytesPerPixel * 8) : \
17105b261ecSmrg    ((1 << PixmapWidthPaddingInfo[d].padBytesLog2) * 8 / \
17205b261ecSmrg    (PixmapWidthPaddingInfo[d].padRoundUp+1)))
17305b261ecSmrg#endif
17405b261ecSmrg
1754642e01fSmrgextern DevPrivateKey exaScreenPrivateKey;
1764642e01fSmrgextern DevPrivateKey exaPixmapPrivateKey;
1774642e01fSmrg#define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)dixLookupPrivate(&(s)->devPrivates, exaScreenPrivateKey))
17805b261ecSmrg#define ExaScreenPriv(s)	ExaScreenPrivPtr    pExaScr = ExaGetScreenPriv(s)
17905b261ecSmrg
18005b261ecSmrg/** Align an offset to an arbitrary alignment */
18105b261ecSmrg#define EXA_ALIGN(offset, align) (((offset) + (align) - 1) - \
18205b261ecSmrg	(((offset) + (align) - 1) % (align)))
18305b261ecSmrg/** Align an offset to a power-of-two alignment */
18405b261ecSmrg#define EXA_ALIGN2(offset, align) (((offset) + (align) - 1) & ~((align) - 1))
18505b261ecSmrg
18605b261ecSmrg#define EXA_PIXMAP_SCORE_MOVE_IN    10
18705b261ecSmrg#define EXA_PIXMAP_SCORE_MAX	    20
18805b261ecSmrg#define EXA_PIXMAP_SCORE_MOVE_OUT   -10
18905b261ecSmrg#define EXA_PIXMAP_SCORE_MIN	    -20
19005b261ecSmrg#define EXA_PIXMAP_SCORE_PINNED	    1000
19105b261ecSmrg#define EXA_PIXMAP_SCORE_INIT	    1001
19205b261ecSmrg
1934642e01fSmrg#define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)dixLookupPrivate(&(p)->devPrivates, exaPixmapPrivateKey))
1944642e01fSmrg#define ExaSetPixmapPriv(p,a) dixSetPrivate(&(p)->devPrivates, exaPixmapPrivateKey, a)
19505b261ecSmrg#define ExaPixmapPriv(p)	ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv(p)
19605b261ecSmrg
1974642e01fSmrg#define EXA_RANGE_PITCH (1 << 0)
1984642e01fSmrg#define EXA_RANGE_WIDTH (1 << 1)
1994642e01fSmrg#define EXA_RANGE_HEIGHT (1 << 2)
2004642e01fSmrg
20105b261ecSmrgtypedef struct {
20205b261ecSmrg    ExaOffscreenArea *area;
20305b261ecSmrg    int		    score;	/**< score for the move-in vs move-out heuristic */
2044642e01fSmrg    Bool	    offscreen;
20505b261ecSmrg
20605b261ecSmrg    CARD8	    *sys_ptr;	/**< pointer to pixmap data in system memory */
20705b261ecSmrg    int		    sys_pitch;	/**< pitch of pixmap in system memory */
20805b261ecSmrg
20905b261ecSmrg    CARD8	    *fb_ptr;	/**< pointer to pixmap data in framebuffer memory */
21005b261ecSmrg    int		    fb_pitch;	/**< pitch of pixmap in framebuffer memory */
21105b261ecSmrg    unsigned int    fb_size;	/**< size of pixmap in framebuffer memory */
21205b261ecSmrg
2134642e01fSmrg    /**
2144642e01fSmrg     * Holds information about whether this pixmap can be used for
2154642e01fSmrg     * acceleration (== 0) or not (> 0).
2164642e01fSmrg     *
2174642e01fSmrg     * Contains a OR'ed combination of the following values:
2184642e01fSmrg     * EXA_RANGE_PITCH - set if the pixmap's pitch is out of range
2194642e01fSmrg     * EXA_RANGE_WIDTH - set if the pixmap's width is out of range
2204642e01fSmrg     * EXA_RANGE_HEIGHT - set if the pixmap's height is out of range
2214642e01fSmrg     */
2224642e01fSmrg    unsigned int    accel_blocked;
2234642e01fSmrg
22405b261ecSmrg    /**
22505b261ecSmrg     * The damage record contains the areas of the pixmap's current location
22605b261ecSmrg     * (framebuffer or system) that have been damaged compared to the other
22705b261ecSmrg     * location.
22805b261ecSmrg     */
22905b261ecSmrg    DamagePtr	    pDamage;
23005b261ecSmrg    /**
2314642e01fSmrg     * The valid regions mark the valid bits (at least, as they're derived from
2324642e01fSmrg     * damage, which may be overreported) of a pixmap's system and FB copies.
2334642e01fSmrg     */
2344642e01fSmrg    RegionRec	    validSys, validFB;
2354642e01fSmrg    /**
2364642e01fSmrg     * Driver private storage per EXA pixmap
23705b261ecSmrg     */
2384642e01fSmrg    void *driverPriv;
23905b261ecSmrg} ExaPixmapPrivRec, *ExaPixmapPrivPtr;
24005b261ecSmrg
24105b261ecSmrgtypedef struct _ExaMigrationRec {
24205b261ecSmrg    Bool as_dst;
24305b261ecSmrg    Bool as_src;
24405b261ecSmrg    PixmapPtr pPix;
2454642e01fSmrg    RegionPtr pReg;
24605b261ecSmrg} ExaMigrationRec, *ExaMigrationPtr;
24705b261ecSmrg
2484642e01fSmrgtypedef struct {
2494642e01fSmrg    INT16 xSrc;
2504642e01fSmrg    INT16 ySrc;
2514642e01fSmrg    INT16 xDst;
2524642e01fSmrg    INT16 yDst;
2534642e01fSmrg    INT16 width;
2544642e01fSmrg    INT16 height;
2554642e01fSmrg} ExaCompositeRectRec, *ExaCompositeRectPtr;
2564642e01fSmrg
25705b261ecSmrg/**
25805b261ecSmrg * exaDDXDriverInit must be implemented by the DDX using EXA, and is the place
25905b261ecSmrg * to set EXA options or hook in screen functions to handle using EXA as the AA.
26005b261ecSmrg  */
26105b261ecSmrgvoid exaDDXDriverInit (ScreenPtr pScreen);
26205b261ecSmrg
26305b261ecSmrg/* exa_unaccel.c */
26405b261ecSmrgvoid
26505b261ecSmrgexaPrepareAccessGC(GCPtr pGC);
26605b261ecSmrg
26705b261ecSmrgvoid
26805b261ecSmrgexaFinishAccessGC(GCPtr pGC);
26905b261ecSmrg
27005b261ecSmrgvoid
27105b261ecSmrgExaCheckFillSpans  (DrawablePtr pDrawable, GCPtr pGC, int nspans,
27205b261ecSmrg		   DDXPointPtr ppt, int *pwidth, int fSorted);
27305b261ecSmrg
27405b261ecSmrgvoid
27505b261ecSmrgExaCheckSetSpans (DrawablePtr pDrawable, GCPtr pGC, char *psrc,
27605b261ecSmrg		 DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
27705b261ecSmrg
27805b261ecSmrgvoid
27905b261ecSmrgExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
28005b261ecSmrg		 int x, int y, int w, int h, int leftPad, int format,
28105b261ecSmrg		 char *bits);
28205b261ecSmrg
28305b261ecSmrgRegionPtr
28405b261ecSmrgExaCheckCopyArea (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
28505b261ecSmrg		 int srcx, int srcy, int w, int h, int dstx, int dsty);
28605b261ecSmrg
28705b261ecSmrgRegionPtr
28805b261ecSmrgExaCheckCopyPlane (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
28905b261ecSmrg		  int srcx, int srcy, int w, int h, int dstx, int dsty,
29005b261ecSmrg		  unsigned long bitPlane);
29105b261ecSmrg
29205b261ecSmrgvoid
29305b261ecSmrgExaCheckPolyPoint (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
29405b261ecSmrg		  DDXPointPtr pptInit);
29505b261ecSmrg
29605b261ecSmrgvoid
29705b261ecSmrgExaCheckPolylines (DrawablePtr pDrawable, GCPtr pGC,
29805b261ecSmrg		  int mode, int npt, DDXPointPtr ppt);
29905b261ecSmrg
30005b261ecSmrgvoid
30105b261ecSmrgExaCheckPolySegment (DrawablePtr pDrawable, GCPtr pGC,
30205b261ecSmrg		    int nsegInit, xSegment *pSegInit);
30305b261ecSmrg
30405b261ecSmrgvoid
30505b261ecSmrgExaCheckPolyArc (DrawablePtr pDrawable, GCPtr pGC,
30605b261ecSmrg		int narcs, xArc *pArcs);
30705b261ecSmrg
30805b261ecSmrgvoid
30905b261ecSmrgExaCheckPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
31005b261ecSmrg		     int nrect, xRectangle *prect);
31105b261ecSmrg
31205b261ecSmrgvoid
31305b261ecSmrgExaCheckImageGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
31405b261ecSmrg		      int x, int y, unsigned int nglyph,
31505b261ecSmrg		      CharInfoPtr *ppci, pointer pglyphBase);
31605b261ecSmrg
31705b261ecSmrgvoid
31805b261ecSmrgExaCheckPolyGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
31905b261ecSmrg		     int x, int y, unsigned int nglyph,
32005b261ecSmrg		     CharInfoPtr *ppci, pointer pglyphBase);
32105b261ecSmrg
32205b261ecSmrgvoid
32305b261ecSmrgExaCheckPushPixels (GCPtr pGC, PixmapPtr pBitmap,
32405b261ecSmrg		   DrawablePtr pDrawable,
32505b261ecSmrg		   int w, int h, int x, int y);
32605b261ecSmrg
32705b261ecSmrgvoid
32805b261ecSmrgExaCheckGetSpans (DrawablePtr pDrawable,
32905b261ecSmrg		 int wMax,
33005b261ecSmrg		 DDXPointPtr ppt,
33105b261ecSmrg		 int *pwidth,
33205b261ecSmrg		 int nspans,
33305b261ecSmrg		 char *pdstStart);
33405b261ecSmrg
33505b261ecSmrgvoid
3364642e01fSmrgExaCheckAddTraps (PicturePtr	pPicture,
3374642e01fSmrg		  INT16		x_off,
3384642e01fSmrg		  INT16		y_off,
3394642e01fSmrg		  int		ntrap,
3404642e01fSmrg		  xTrap		*traps);
34105b261ecSmrg
3424642e01fSmrg/* exa_accel.c */
34305b261ecSmrg
3444642e01fSmrgstatic _X_INLINE Bool
3454642e01fSmrgexaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask,
3464642e01fSmrg		      unsigned int fillStyle, unsigned char alu)
3474642e01fSmrg{
3484642e01fSmrg    return ((alu != GXcopy && alu != GXclear &&alu != GXset &&
3494642e01fSmrg	     alu != GXcopyInverted) || fillStyle == FillStippled ||
3504642e01fSmrg	    !EXA_PM_IS_SOLID(pDrawable, planemask));
3514642e01fSmrg}
35205b261ecSmrg
35305b261ecSmrgvoid
35405b261ecSmrgexaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
35505b261ecSmrg
35605b261ecSmrgBool
35705b261ecSmrgexaFillRegionTiled (DrawablePtr	pDrawable, RegionPtr pRegion, PixmapPtr pTile,
35805b261ecSmrg		    DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu);
35905b261ecSmrg
36005b261ecSmrgvoid
36105b261ecSmrgexaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
36205b261ecSmrg	     unsigned int format, unsigned long planeMask, char *d);
36305b261ecSmrg
36405b261ecSmrgextern const GCOps exaOps;
36505b261ecSmrg
36605b261ecSmrg#ifdef RENDER
36705b261ecSmrgvoid
36805b261ecSmrgExaCheckComposite (CARD8      op,
36905b261ecSmrg		  PicturePtr pSrc,
37005b261ecSmrg		  PicturePtr pMask,
37105b261ecSmrg		  PicturePtr pDst,
37205b261ecSmrg		  INT16      xSrc,
37305b261ecSmrg		  INT16      ySrc,
37405b261ecSmrg		  INT16      xMask,
37505b261ecSmrg		  INT16      yMask,
37605b261ecSmrg		  INT16      xDst,
37705b261ecSmrg		  INT16      yDst,
37805b261ecSmrg		  CARD16     width,
37905b261ecSmrg		  CARD16     height);
38005b261ecSmrg#endif
38105b261ecSmrg
38205b261ecSmrg/* exa_offscreen.c */
38305b261ecSmrgvoid
38405b261ecSmrgExaOffscreenSwapOut (ScreenPtr pScreen);
38505b261ecSmrg
38605b261ecSmrgvoid
38705b261ecSmrgExaOffscreenSwapIn (ScreenPtr pScreen);
38805b261ecSmrg
38905b261ecSmrgBool
39005b261ecSmrgexaOffscreenInit(ScreenPtr pScreen);
39105b261ecSmrg
39205b261ecSmrgvoid
39305b261ecSmrgExaOffscreenFini (ScreenPtr pScreen);
39405b261ecSmrg
39505b261ecSmrg/* exa.c */
3964642e01fSmrgvoid
3974642e01fSmrgExaDoPrepareAccess(DrawablePtr pDrawable, int index);
3984642e01fSmrg
3994642e01fSmrgvoid
4004642e01fSmrgexaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg);
4014642e01fSmrg
40205b261ecSmrgvoid
40305b261ecSmrgexaPrepareAccess(DrawablePtr pDrawable, int index);
40405b261ecSmrg
40505b261ecSmrgvoid
40605b261ecSmrgexaFinishAccess(DrawablePtr pDrawable, int index);
40705b261ecSmrg
40805b261ecSmrgvoid
40905b261ecSmrgexaPixmapDirty(PixmapPtr pPix, int x1, int y1, int x2, int y2);
41005b261ecSmrg
41105b261ecSmrgvoid
41205b261ecSmrgexaGetDrawableDeltas (DrawablePtr pDrawable, PixmapPtr pPixmap,
41305b261ecSmrg		      int *xp, int *yp);
41405b261ecSmrg
41505b261ecSmrgBool
41605b261ecSmrgexaPixmapIsOffscreen(PixmapPtr p);
41705b261ecSmrg
41805b261ecSmrgPixmapPtr
41905b261ecSmrgexaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp);
42005b261ecSmrg
42105b261ecSmrgPixmapPtr
42205b261ecSmrgexaGetDrawablePixmap(DrawablePtr pDrawable);
42305b261ecSmrg
42405b261ecSmrgRegionPtr
42505b261ecSmrgexaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
42605b261ecSmrg	    int srcx, int srcy, int width, int height, int dstx, int dsty);
42705b261ecSmrg
42805b261ecSmrgvoid
42905b261ecSmrgexaCopyNtoN (DrawablePtr    pSrcDrawable,
43005b261ecSmrg	     DrawablePtr    pDstDrawable,
43105b261ecSmrg	     GCPtr	    pGC,
43205b261ecSmrg	     BoxPtr	    pbox,
43305b261ecSmrg	     int	    nbox,
43405b261ecSmrg	     int	    dx,
43505b261ecSmrg	     int	    dy,
43605b261ecSmrg	     Bool	    reverse,
43705b261ecSmrg	     Bool	    upsidedown,
43805b261ecSmrg	     Pixel	    bitplane,
43905b261ecSmrg	     void	    *closure);
44005b261ecSmrg
44105b261ecSmrg/* exa_render.c */
4424642e01fSmrgBool
4434642e01fSmrgexaOpReadsDestination (CARD8 op);
4444642e01fSmrg
44505b261ecSmrgvoid
44605b261ecSmrgexaComposite(CARD8	op,
44705b261ecSmrg	     PicturePtr pSrc,
44805b261ecSmrg	     PicturePtr pMask,
44905b261ecSmrg	     PicturePtr pDst,
45005b261ecSmrg	     INT16	xSrc,
45105b261ecSmrg	     INT16	ySrc,
45205b261ecSmrg	     INT16	xMask,
45305b261ecSmrg	     INT16	yMask,
45405b261ecSmrg	     INT16	xDst,
45505b261ecSmrg	     INT16	yDst,
45605b261ecSmrg	     CARD16	width,
45705b261ecSmrg	     CARD16	height);
45805b261ecSmrg
4594642e01fSmrgvoid
4604642e01fSmrgexaCompositeRects(CARD8	              op,
4614642e01fSmrg		  PicturePtr	      Src,
4624642e01fSmrg		  PicturePtr	      pDst,
4634642e01fSmrg		  int                 nrect,
4644642e01fSmrg		  ExaCompositeRectPtr rects);
4654642e01fSmrg
46605b261ecSmrgvoid
46705b261ecSmrgexaTrapezoids (CARD8 op, PicturePtr pSrc, PicturePtr pDst,
46805b261ecSmrg               PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
46905b261ecSmrg               int ntrap, xTrapezoid *traps);
47005b261ecSmrg
47105b261ecSmrgvoid
4724642e01fSmrgexaTriangles (CARD8 op, PicturePtr pSrc, PicturePtr pDst,
4734642e01fSmrg	      PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
4744642e01fSmrg	      int ntri, xTriangle *tris);
4754642e01fSmrg
4764642e01fSmrg/* exa_glyph.c */
4774642e01fSmrgvoid
4784642e01fSmrgexaGlyphsInit(ScreenPtr pScreen);
47905b261ecSmrg
48005b261ecSmrgvoid
4814642e01fSmrgexaGlyphsFini (ScreenPtr pScreen);
48205b261ecSmrg
48305b261ecSmrgvoid
48405b261ecSmrgexaGlyphs (CARD8	op,
48505b261ecSmrg	  PicturePtr	pSrc,
48605b261ecSmrg	  PicturePtr	pDst,
48705b261ecSmrg	  PictFormatPtr	maskFormat,
48805b261ecSmrg	  INT16		xSrc,
48905b261ecSmrg	  INT16		ySrc,
49005b261ecSmrg	  int		nlist,
49105b261ecSmrg	  GlyphListPtr	list,
49205b261ecSmrg	  GlyphPtr	*glyphs);
49305b261ecSmrg
49405b261ecSmrg/* exa_migration.c */
49505b261ecSmrgvoid
49605b261ecSmrgexaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
49705b261ecSmrg
49805b261ecSmrgvoid
49905b261ecSmrgexaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area);
50005b261ecSmrg
50105b261ecSmrg#endif /* EXAPRIV_H */
502