xref: /OK3568_Linux_fs/external/xserver/exa/exa_priv.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright (C) 2000 Keith Packard, member of The XFree86 Project, Inc.
4*4882a593Smuzhiyun  *               2005 Zack Rusin, Trolltech
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Permission to use, copy, modify, distribute, and sell this software and its
7*4882a593Smuzhiyun  * documentation for any purpose is hereby granted without fee, provided that
8*4882a593Smuzhiyun  * the above copyright notice appear in all copies and that both that
9*4882a593Smuzhiyun  * copyright notice and this permission notice appear in supporting
10*4882a593Smuzhiyun  * documentation, and that the name of Keith Packard not be used in
11*4882a593Smuzhiyun  * advertising or publicity pertaining to distribution of the software without
12*4882a593Smuzhiyun  * specific, written prior permission.  Keith Packard makes no
13*4882a593Smuzhiyun  * representations about the suitability of this software for any purpose.  It
14*4882a593Smuzhiyun  * is provided "as is" without express or implied warranty.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
17*4882a593Smuzhiyun  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
18*4882a593Smuzhiyun  * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
19*4882a593Smuzhiyun  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20*4882a593Smuzhiyun  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
21*4882a593Smuzhiyun  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
22*4882a593Smuzhiyun  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
23*4882a593Smuzhiyun  * SOFTWARE.
24*4882a593Smuzhiyun  */
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #ifndef EXAPRIV_H
27*4882a593Smuzhiyun #define EXAPRIV_H
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #ifdef HAVE_DIX_CONFIG_H
30*4882a593Smuzhiyun #include <dix-config.h>
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #include "exa.h"
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #include <X11/X.h>
36*4882a593Smuzhiyun #include <X11/Xproto.h>
37*4882a593Smuzhiyun #ifdef MITSHM
38*4882a593Smuzhiyun #include "shmint.h"
39*4882a593Smuzhiyun #endif
40*4882a593Smuzhiyun #include "scrnintstr.h"
41*4882a593Smuzhiyun #include "pixmapstr.h"
42*4882a593Smuzhiyun #include "windowstr.h"
43*4882a593Smuzhiyun #include "servermd.h"
44*4882a593Smuzhiyun #include "colormapst.h"
45*4882a593Smuzhiyun #include "gcstruct.h"
46*4882a593Smuzhiyun #include "input.h"
47*4882a593Smuzhiyun #include "mipointer.h"
48*4882a593Smuzhiyun #include "mi.h"
49*4882a593Smuzhiyun #include "dix.h"
50*4882a593Smuzhiyun #include "fb.h"
51*4882a593Smuzhiyun #include "fboverlay.h"
52*4882a593Smuzhiyun #include "fbpict.h"
53*4882a593Smuzhiyun #include "glyphstr.h"
54*4882a593Smuzhiyun #include "damage.h"
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun #define DEBUG_TRACE_FALL	0
57*4882a593Smuzhiyun #define DEBUG_MIGRATE		0
58*4882a593Smuzhiyun #define DEBUG_PIXMAP		0
59*4882a593Smuzhiyun #define DEBUG_OFFSCREEN		0
60*4882a593Smuzhiyun #define DEBUG_GLYPH_CACHE	0
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #if DEBUG_TRACE_FALL
63*4882a593Smuzhiyun #define EXA_FALLBACK(x)     					\
64*4882a593Smuzhiyun do {								\
65*4882a593Smuzhiyun 	ErrorF("EXA fallback at %s: ", __FUNCTION__);		\
66*4882a593Smuzhiyun 	ErrorF x;						\
67*4882a593Smuzhiyun } while (0)
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun char
70*4882a593Smuzhiyun  exaDrawableLocation(DrawablePtr pDrawable);
71*4882a593Smuzhiyun #else
72*4882a593Smuzhiyun #define EXA_FALLBACK(x)
73*4882a593Smuzhiyun #endif
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun #if DEBUG_PIXMAP
76*4882a593Smuzhiyun #define DBG_PIXMAP(a) ErrorF a
77*4882a593Smuzhiyun #else
78*4882a593Smuzhiyun #define DBG_PIXMAP(a)
79*4882a593Smuzhiyun #endif
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #ifndef EXA_MAX_FB
82*4882a593Smuzhiyun #define EXA_MAX_FB   FB_OVERLAY_MAX
83*4882a593Smuzhiyun #endif
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #ifdef DEBUG
86*4882a593Smuzhiyun #define EXA_FatalErrorDebug(x) FatalError x
87*4882a593Smuzhiyun #define EXA_FatalErrorDebugWithRet(x, ret) FatalError x
88*4882a593Smuzhiyun #else
89*4882a593Smuzhiyun #define EXA_FatalErrorDebug(x) ErrorF x
90*4882a593Smuzhiyun #define EXA_FatalErrorDebugWithRet(x, ret) \
91*4882a593Smuzhiyun do { \
92*4882a593Smuzhiyun     ErrorF x; \
93*4882a593Smuzhiyun     return ret; \
94*4882a593Smuzhiyun } while (0)
95*4882a593Smuzhiyun #endif
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /**
98*4882a593Smuzhiyun  * This is the list of migration heuristics supported by EXA.  See
99*4882a593Smuzhiyun  * exaDoMigration() for what their implementations do.
100*4882a593Smuzhiyun  */
101*4882a593Smuzhiyun enum ExaMigrationHeuristic {
102*4882a593Smuzhiyun     ExaMigrationGreedy,
103*4882a593Smuzhiyun     ExaMigrationAlways,
104*4882a593Smuzhiyun     ExaMigrationSmart
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun typedef struct {
108*4882a593Smuzhiyun     unsigned char sha1[20];
109*4882a593Smuzhiyun } ExaCachedGlyphRec, *ExaCachedGlyphPtr;
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun typedef struct {
112*4882a593Smuzhiyun     /* The identity of the cache, statically configured at initialization */
113*4882a593Smuzhiyun     unsigned int format;
114*4882a593Smuzhiyun     int glyphWidth;
115*4882a593Smuzhiyun     int glyphHeight;
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun     int size;                   /* Size of cache; eventually this should be dynamically determined */
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun     /* Hash table mapping from glyph sha1 to position in the glyph; we use
120*4882a593Smuzhiyun      * open addressing with a hash table size determined based on size and large
121*4882a593Smuzhiyun      * enough so that we always have a good amount of free space, so we can
122*4882a593Smuzhiyun      * use linear probing. (Linear probing is preferrable to double hashing
123*4882a593Smuzhiyun      * here because it allows us to easily remove entries.)
124*4882a593Smuzhiyun      */
125*4882a593Smuzhiyun     int *hashEntries;
126*4882a593Smuzhiyun     int hashSize;
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun     ExaCachedGlyphPtr glyphs;
129*4882a593Smuzhiyun     int glyphCount;             /* Current number of glyphs */
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun     PicturePtr picture;         /* Where the glyphs of the cache are stored */
132*4882a593Smuzhiyun     int yOffset;                /* y location within the picture where the cache starts */
133*4882a593Smuzhiyun     int columns;                /* Number of columns the glyphs are layed out in */
134*4882a593Smuzhiyun     int evictionPosition;       /* Next random position to evict a glyph */
135*4882a593Smuzhiyun } ExaGlyphCacheRec, *ExaGlyphCachePtr;
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #define EXA_NUM_GLYPH_CACHES 4
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun #define EXA_FALLBACK_COPYWINDOW (1 << 0)
140*4882a593Smuzhiyun #define EXA_ACCEL_COPYWINDOW (1 << 1)
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun typedef struct _ExaMigrationRec {
143*4882a593Smuzhiyun     Bool as_dst;
144*4882a593Smuzhiyun     Bool as_src;
145*4882a593Smuzhiyun     PixmapPtr pPix;
146*4882a593Smuzhiyun     RegionPtr pReg;
147*4882a593Smuzhiyun } ExaMigrationRec, *ExaMigrationPtr;
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun typedef void (*EnableDisableFBAccessProcPtr) (ScreenPtr, Bool);
150*4882a593Smuzhiyun typedef struct {
151*4882a593Smuzhiyun     ExaDriverPtr info;
152*4882a593Smuzhiyun     ScreenBlockHandlerProcPtr SavedBlockHandler;
153*4882a593Smuzhiyun     ScreenWakeupHandlerProcPtr SavedWakeupHandler;
154*4882a593Smuzhiyun     CreateGCProcPtr SavedCreateGC;
155*4882a593Smuzhiyun     CloseScreenProcPtr SavedCloseScreen;
156*4882a593Smuzhiyun     GetImageProcPtr SavedGetImage;
157*4882a593Smuzhiyun     GetSpansProcPtr SavedGetSpans;
158*4882a593Smuzhiyun     CreatePixmapProcPtr SavedCreatePixmap;
159*4882a593Smuzhiyun     DestroyPixmapProcPtr SavedDestroyPixmap;
160*4882a593Smuzhiyun     CopyWindowProcPtr SavedCopyWindow;
161*4882a593Smuzhiyun     ChangeWindowAttributesProcPtr SavedChangeWindowAttributes;
162*4882a593Smuzhiyun     BitmapToRegionProcPtr SavedBitmapToRegion;
163*4882a593Smuzhiyun     CreateScreenResourcesProcPtr SavedCreateScreenResources;
164*4882a593Smuzhiyun     ModifyPixmapHeaderProcPtr SavedModifyPixmapHeader;
165*4882a593Smuzhiyun     SharePixmapBackingProcPtr SavedSharePixmapBacking;
166*4882a593Smuzhiyun     SetSharedPixmapBackingProcPtr SavedSetSharedPixmapBacking;
167*4882a593Smuzhiyun     SourceValidateProcPtr SavedSourceValidate;
168*4882a593Smuzhiyun     CompositeProcPtr SavedComposite;
169*4882a593Smuzhiyun     TrianglesProcPtr SavedTriangles;
170*4882a593Smuzhiyun     GlyphsProcPtr SavedGlyphs;
171*4882a593Smuzhiyun     TrapezoidsProcPtr SavedTrapezoids;
172*4882a593Smuzhiyun     AddTrapsProcPtr SavedAddTraps;
173*4882a593Smuzhiyun     void (*do_migration) (ExaMigrationPtr pixmaps, int npixmaps,
174*4882a593Smuzhiyun                           Bool can_accel);
175*4882a593Smuzhiyun     Bool (*pixmap_has_gpu_copy) (PixmapPtr pPixmap);
176*4882a593Smuzhiyun     void (*do_move_in_pixmap) (PixmapPtr pPixmap);
177*4882a593Smuzhiyun     void (*do_move_out_pixmap) (PixmapPtr pPixmap);
178*4882a593Smuzhiyun     void (*prepare_access_reg) (PixmapPtr pPixmap, int index, RegionPtr pReg);
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun     Bool swappedOut;
181*4882a593Smuzhiyun     enum ExaMigrationHeuristic migration;
182*4882a593Smuzhiyun     Bool checkDirtyCorrectness;
183*4882a593Smuzhiyun     unsigned disableFbCount;
184*4882a593Smuzhiyun     Bool optimize_migration;
185*4882a593Smuzhiyun     unsigned offScreenCounter;
186*4882a593Smuzhiyun     unsigned numOffscreenAvailable;
187*4882a593Smuzhiyun     CARD32 lastDefragment;
188*4882a593Smuzhiyun     CARD32 nextDefragment;
189*4882a593Smuzhiyun     PixmapPtr deferred_mixed_pixmap;
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun     /* Reference counting for accessed pixmaps */
192*4882a593Smuzhiyun     struct {
193*4882a593Smuzhiyun         PixmapPtr pixmap;
194*4882a593Smuzhiyun         int count;
195*4882a593Smuzhiyun         Bool retval;
196*4882a593Smuzhiyun     } access[EXA_NUM_PREPARE_INDICES];
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun     /* Holds information on fallbacks that cannot be relayed otherwise. */
199*4882a593Smuzhiyun     unsigned int fallback_flags;
200*4882a593Smuzhiyun     unsigned int fallback_counter;
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun     ExaGlyphCacheRec glyphCaches[EXA_NUM_GLYPH_CACHES];
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun     /**
205*4882a593Smuzhiyun      * Regions affected by fallback composite source / mask operations.
206*4882a593Smuzhiyun      */
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun     RegionRec srcReg;
209*4882a593Smuzhiyun     RegionRec maskReg;
210*4882a593Smuzhiyun     PixmapPtr srcPix;
211*4882a593Smuzhiyun     PixmapPtr maskPix;
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun     DevPrivateKeyRec pixmapPrivateKeyRec;
214*4882a593Smuzhiyun     DevPrivateKeyRec gcPrivateKeyRec;
215*4882a593Smuzhiyun } ExaScreenPrivRec, *ExaScreenPrivPtr;
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun extern DevPrivateKeyRec exaScreenPrivateKeyRec;
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun #define exaScreenPrivateKey (&exaScreenPrivateKeyRec)
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun #define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)dixGetPrivateAddr(&(s)->devPrivates, exaScreenPrivateKey))
222*4882a593Smuzhiyun #define ExaScreenPriv(s)	ExaScreenPrivPtr    pExaScr = ExaGetScreenPriv(s)
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun #define ExaGetGCPriv(gc) ((ExaGCPrivPtr)dixGetPrivateAddr(&(gc)->devPrivates, &ExaGetScreenPriv(gc->pScreen)->gcPrivateKeyRec))
225*4882a593Smuzhiyun #define ExaGCPriv(gc) ExaGCPrivPtr pExaGC = ExaGetGCPriv(gc)
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun /*
228*4882a593Smuzhiyun  * Some macros to deal with function wrapping.
229*4882a593Smuzhiyun  */
230*4882a593Smuzhiyun #define wrap(priv, real, mem, func) {\
231*4882a593Smuzhiyun     priv->Saved##mem = real->mem; \
232*4882a593Smuzhiyun     real->mem = func; \
233*4882a593Smuzhiyun }
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun #define unwrap(priv, real, mem) {\
236*4882a593Smuzhiyun     real->mem = priv->Saved##mem; \
237*4882a593Smuzhiyun }
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun #ifdef HAVE_TYPEOF
240*4882a593Smuzhiyun #define swap(priv, real, mem) {\
241*4882a593Smuzhiyun     typeof(real->mem) tmp = priv->Saved##mem; \
242*4882a593Smuzhiyun     priv->Saved##mem = real->mem; \
243*4882a593Smuzhiyun     real->mem = tmp; \
244*4882a593Smuzhiyun }
245*4882a593Smuzhiyun #else
246*4882a593Smuzhiyun #define swap(priv, real, mem) {\
247*4882a593Smuzhiyun     const void *tmp = priv->Saved##mem; \
248*4882a593Smuzhiyun     priv->Saved##mem = real->mem; \
249*4882a593Smuzhiyun     real->mem = tmp; \
250*4882a593Smuzhiyun }
251*4882a593Smuzhiyun #endif
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun #define EXA_PRE_FALLBACK(_screen_) \
254*4882a593Smuzhiyun     ExaScreenPriv(_screen_); \
255*4882a593Smuzhiyun     pExaScr->fallback_counter++;
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun #define EXA_POST_FALLBACK(_screen_) \
258*4882a593Smuzhiyun     pExaScr->fallback_counter--;
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun #define EXA_PRE_FALLBACK_GC(_gc_) \
261*4882a593Smuzhiyun     ExaScreenPriv(_gc_->pScreen); \
262*4882a593Smuzhiyun     ExaGCPriv(_gc_); \
263*4882a593Smuzhiyun     pExaScr->fallback_counter++; \
264*4882a593Smuzhiyun     swap(pExaGC, _gc_, ops);
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define EXA_POST_FALLBACK_GC(_gc_) \
267*4882a593Smuzhiyun     pExaScr->fallback_counter--; \
268*4882a593Smuzhiyun     swap(pExaGC, _gc_, ops);
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun /** Align an offset to an arbitrary alignment */
271*4882a593Smuzhiyun #define EXA_ALIGN(offset, align) (((offset) + (align) - 1) - \
272*4882a593Smuzhiyun 	(((offset) + (align) - 1) % (align)))
273*4882a593Smuzhiyun /** Align an offset to a power-of-two alignment */
274*4882a593Smuzhiyun #define EXA_ALIGN2(offset, align) (((offset) + (align) - 1) & ~((align) - 1))
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun #define EXA_PIXMAP_SCORE_MOVE_IN    10
277*4882a593Smuzhiyun #define EXA_PIXMAP_SCORE_MAX	    20
278*4882a593Smuzhiyun #define EXA_PIXMAP_SCORE_MOVE_OUT   -10
279*4882a593Smuzhiyun #define EXA_PIXMAP_SCORE_MIN	    -20
280*4882a593Smuzhiyun #define EXA_PIXMAP_SCORE_PINNED	    1000
281*4882a593Smuzhiyun #define EXA_PIXMAP_SCORE_INIT	    1001
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun #define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)dixGetPrivateAddr(&(p)->devPrivates, &ExaGetScreenPriv((p)->drawable.pScreen)->pixmapPrivateKeyRec))
284*4882a593Smuzhiyun #define ExaPixmapPriv(p)	ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv(p)
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun #define EXA_RANGE_PITCH (1 << 0)
287*4882a593Smuzhiyun #define EXA_RANGE_WIDTH (1 << 1)
288*4882a593Smuzhiyun #define EXA_RANGE_HEIGHT (1 << 2)
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun typedef struct {
291*4882a593Smuzhiyun     ExaOffscreenArea *area;
292*4882a593Smuzhiyun     int score;                  /**< score for the move-in vs move-out heuristic */
293*4882a593Smuzhiyun     Bool use_gpu_copy;
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun     CARD8 *sys_ptr;             /**< pointer to pixmap data in system memory */
296*4882a593Smuzhiyun     int sys_pitch;              /**< pitch of pixmap in system memory */
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun     CARD8 *fb_ptr;              /**< pointer to pixmap data in framebuffer memory */
299*4882a593Smuzhiyun     int fb_pitch;               /**< pitch of pixmap in framebuffer memory */
300*4882a593Smuzhiyun     unsigned int fb_size;       /**< size of pixmap in framebuffer memory */
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun     /**
303*4882a593Smuzhiyun      * Holds information about whether this pixmap can be used for
304*4882a593Smuzhiyun      * acceleration (== 0) or not (> 0).
305*4882a593Smuzhiyun      *
306*4882a593Smuzhiyun      * Contains a OR'ed combination of the following values:
307*4882a593Smuzhiyun      * EXA_RANGE_PITCH - set if the pixmap's pitch is out of range
308*4882a593Smuzhiyun      * EXA_RANGE_WIDTH - set if the pixmap's width is out of range
309*4882a593Smuzhiyun      * EXA_RANGE_HEIGHT - set if the pixmap's height is out of range
310*4882a593Smuzhiyun      */
311*4882a593Smuzhiyun     unsigned int accel_blocked;
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun     /**
314*4882a593Smuzhiyun      * The damage record contains the areas of the pixmap's current location
315*4882a593Smuzhiyun      * (framebuffer or system) that have been damaged compared to the other
316*4882a593Smuzhiyun      * location.
317*4882a593Smuzhiyun      */
318*4882a593Smuzhiyun     DamagePtr pDamage;
319*4882a593Smuzhiyun     /**
320*4882a593Smuzhiyun      * The valid regions mark the valid bits (at least, as they're derived from
321*4882a593Smuzhiyun      * damage, which may be overreported) of a pixmap's system and FB copies.
322*4882a593Smuzhiyun      */
323*4882a593Smuzhiyun     RegionRec validSys, validFB;
324*4882a593Smuzhiyun     /**
325*4882a593Smuzhiyun      * Driver private storage per EXA pixmap
326*4882a593Smuzhiyun      */
327*4882a593Smuzhiyun     void *driverPriv;
328*4882a593Smuzhiyun } ExaPixmapPrivRec, *ExaPixmapPrivPtr;
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun typedef struct {
331*4882a593Smuzhiyun     /* GC values from the layer below. */
332*4882a593Smuzhiyun     const GCOps *Savedops;
333*4882a593Smuzhiyun     const GCFuncs *Savedfuncs;
334*4882a593Smuzhiyun } ExaGCPrivRec, *ExaGCPrivPtr;
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun typedef struct {
337*4882a593Smuzhiyun     PicturePtr pDst;
338*4882a593Smuzhiyun     INT16 xSrc;
339*4882a593Smuzhiyun     INT16 ySrc;
340*4882a593Smuzhiyun     INT16 xMask;
341*4882a593Smuzhiyun     INT16 yMask;
342*4882a593Smuzhiyun     INT16 xDst;
343*4882a593Smuzhiyun     INT16 yDst;
344*4882a593Smuzhiyun     INT16 width;
345*4882a593Smuzhiyun     INT16 height;
346*4882a593Smuzhiyun } ExaCompositeRectRec, *ExaCompositeRectPtr;
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun /**
349*4882a593Smuzhiyun  * exaDDXDriverInit must be implemented by the DDX using EXA, and is the place
350*4882a593Smuzhiyun  * to set EXA options or hook in screen functions to handle using EXA as the AA.
351*4882a593Smuzhiyun   */
352*4882a593Smuzhiyun void exaDDXDriverInit(ScreenPtr pScreen);
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun /* exa_unaccel.c */
355*4882a593Smuzhiyun void
356*4882a593Smuzhiyun  exaPrepareAccessGC(GCPtr pGC);
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun void
359*4882a593Smuzhiyun  exaFinishAccessGC(GCPtr pGC);
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun void
362*4882a593Smuzhiyun 
363*4882a593Smuzhiyun ExaCheckFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nspans,
364*4882a593Smuzhiyun                   DDXPointPtr ppt, int *pwidth, int fSorted);
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun void
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun ExaCheckSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *psrc,
369*4882a593Smuzhiyun                  DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun void
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun ExaCheckPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
374*4882a593Smuzhiyun                  int x, int y, int w, int h, int leftPad, int format,
375*4882a593Smuzhiyun                  char *bits);
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun void
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun ExaCheckCopyNtoN(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
380*4882a593Smuzhiyun                  BoxPtr pbox, int nbox, int dx, int dy, Bool reverse,
381*4882a593Smuzhiyun                  Bool upsidedown, Pixel bitplane, void *closure);
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun RegionPtr
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun ExaCheckCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
386*4882a593Smuzhiyun                  int srcx, int srcy, int w, int h, int dstx, int dsty);
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun RegionPtr
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun ExaCheckCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
391*4882a593Smuzhiyun                   int srcx, int srcy, int w, int h, int dstx, int dsty,
392*4882a593Smuzhiyun                   unsigned long bitPlane);
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun void
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun ExaCheckPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
397*4882a593Smuzhiyun                   DDXPointPtr pptInit);
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun void
400*4882a593Smuzhiyun 
401*4882a593Smuzhiyun ExaCheckPolylines(DrawablePtr pDrawable, GCPtr pGC,
402*4882a593Smuzhiyun                   int mode, int npt, DDXPointPtr ppt);
403*4882a593Smuzhiyun 
404*4882a593Smuzhiyun void
405*4882a593Smuzhiyun 
406*4882a593Smuzhiyun ExaCheckPolySegment(DrawablePtr pDrawable, GCPtr pGC,
407*4882a593Smuzhiyun                     int nsegInit, xSegment * pSegInit);
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun void
410*4882a593Smuzhiyun  ExaCheckPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * pArcs);
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun void
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun ExaCheckPolyFillRect(DrawablePtr pDrawable, GCPtr pGC,
415*4882a593Smuzhiyun                      int nrect, xRectangle *prect);
416*4882a593Smuzhiyun 
417*4882a593Smuzhiyun void
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun ExaCheckImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
420*4882a593Smuzhiyun                       int x, int y, unsigned int nglyph,
421*4882a593Smuzhiyun                       CharInfoPtr * ppci, void *pglyphBase);
422*4882a593Smuzhiyun 
423*4882a593Smuzhiyun void
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun ExaCheckPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
426*4882a593Smuzhiyun                      int x, int y, unsigned int nglyph,
427*4882a593Smuzhiyun                      CharInfoPtr * ppci, void *pglyphBase);
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun void
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun ExaCheckPushPixels(GCPtr pGC, PixmapPtr pBitmap,
432*4882a593Smuzhiyun                    DrawablePtr pDrawable, int w, int h, int x, int y);
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun void
435*4882a593Smuzhiyun  ExaCheckCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun void
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun ExaCheckGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
440*4882a593Smuzhiyun                  unsigned int format, unsigned long planeMask, char *d);
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun void
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun ExaCheckGetSpans(DrawablePtr pDrawable,
445*4882a593Smuzhiyun                  int wMax,
446*4882a593Smuzhiyun                  DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart);
447*4882a593Smuzhiyun 
448*4882a593Smuzhiyun void
449*4882a593Smuzhiyun 
450*4882a593Smuzhiyun ExaCheckAddTraps(PicturePtr pPicture,
451*4882a593Smuzhiyun                  INT16 x_off, INT16 y_off, int ntrap, xTrap * traps);
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun /* exa_accel.c */
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun static _X_INLINE Bool
exaGCReadsDestination(DrawablePtr pDrawable,unsigned long planemask,unsigned int fillStyle,unsigned char alu,Bool clientClip)456*4882a593Smuzhiyun exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask,
457*4882a593Smuzhiyun                       unsigned int fillStyle, unsigned char alu,
458*4882a593Smuzhiyun                       Bool clientClip)
459*4882a593Smuzhiyun {
460*4882a593Smuzhiyun     return ((alu != GXcopy && alu != GXclear && alu != GXset &&
461*4882a593Smuzhiyun              alu != GXcopyInverted) || fillStyle == FillStippled ||
462*4882a593Smuzhiyun             clientClip != FALSE || !EXA_PM_IS_SOLID(pDrawable, planemask));
463*4882a593Smuzhiyun }
464*4882a593Smuzhiyun 
465*4882a593Smuzhiyun void
466*4882a593Smuzhiyun  exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun Bool
469*4882a593Smuzhiyun 
470*4882a593Smuzhiyun exaFillRegionTiled(DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
471*4882a593Smuzhiyun                    DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
472*4882a593Smuzhiyun                    Bool clientClip);
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun void
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun exaGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
477*4882a593Smuzhiyun             unsigned int format, unsigned long planeMask, char *d);
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun RegionPtr
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun exaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
482*4882a593Smuzhiyun             int srcx, int srcy, int width, int height, int dstx, int dsty);
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun Bool
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun exaHWCopyNtoN(DrawablePtr pSrcDrawable,
487*4882a593Smuzhiyun               DrawablePtr pDstDrawable,
488*4882a593Smuzhiyun               GCPtr pGC,
489*4882a593Smuzhiyun               BoxPtr pbox,
490*4882a593Smuzhiyun               int nbox, int dx, int dy, Bool reverse, Bool upsidedown);
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun void
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun exaCopyNtoN(DrawablePtr pSrcDrawable,
495*4882a593Smuzhiyun             DrawablePtr pDstDrawable,
496*4882a593Smuzhiyun             GCPtr pGC,
497*4882a593Smuzhiyun             BoxPtr pbox,
498*4882a593Smuzhiyun             int nbox,
499*4882a593Smuzhiyun             int dx,
500*4882a593Smuzhiyun             int dy,
501*4882a593Smuzhiyun             Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun extern const GCOps exaOps;
504*4882a593Smuzhiyun 
505*4882a593Smuzhiyun void
506*4882a593Smuzhiyun 
507*4882a593Smuzhiyun ExaCheckComposite(CARD8 op,
508*4882a593Smuzhiyun                   PicturePtr pSrc,
509*4882a593Smuzhiyun                   PicturePtr pMask,
510*4882a593Smuzhiyun                   PicturePtr pDst,
511*4882a593Smuzhiyun                   INT16 xSrc,
512*4882a593Smuzhiyun                   INT16 ySrc,
513*4882a593Smuzhiyun                   INT16 xMask,
514*4882a593Smuzhiyun                   INT16 yMask,
515*4882a593Smuzhiyun                   INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun void
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun ExaCheckGlyphs(CARD8 op,
520*4882a593Smuzhiyun                PicturePtr pSrc,
521*4882a593Smuzhiyun                PicturePtr pDst,
522*4882a593Smuzhiyun                PictFormatPtr maskFormat,
523*4882a593Smuzhiyun                INT16 xSrc,
524*4882a593Smuzhiyun                INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs);
525*4882a593Smuzhiyun 
526*4882a593Smuzhiyun /* exa_offscreen.c */
527*4882a593Smuzhiyun void
528*4882a593Smuzhiyun  ExaOffscreenSwapOut(ScreenPtr pScreen);
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun void
531*4882a593Smuzhiyun  ExaOffscreenSwapIn(ScreenPtr pScreen);
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun ExaOffscreenArea *ExaOffscreenDefragment(ScreenPtr pScreen);
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun Bool
536*4882a593Smuzhiyun  exaOffscreenInit(ScreenPtr pScreen);
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun void
539*4882a593Smuzhiyun  ExaOffscreenFini(ScreenPtr pScreen);
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun /* exa.c */
542*4882a593Smuzhiyun Bool
543*4882a593Smuzhiyun  ExaDoPrepareAccess(PixmapPtr pPixmap, int index);
544*4882a593Smuzhiyun 
545*4882a593Smuzhiyun void
546*4882a593Smuzhiyun  exaPrepareAccess(DrawablePtr pDrawable, int index);
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun void
549*4882a593Smuzhiyun  exaFinishAccess(DrawablePtr pDrawable, int index);
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun void
552*4882a593Smuzhiyun  exaDestroyPixmap(PixmapPtr pPixmap);
553*4882a593Smuzhiyun 
554*4882a593Smuzhiyun void
555*4882a593Smuzhiyun  exaPixmapDirty(PixmapPtr pPix, int x1, int y1, int x2, int y2);
556*4882a593Smuzhiyun 
557*4882a593Smuzhiyun void
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun exaGetDrawableDeltas(DrawablePtr pDrawable, PixmapPtr pPixmap,
560*4882a593Smuzhiyun                      int *xp, int *yp);
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun Bool
563*4882a593Smuzhiyun  exaPixmapHasGpuCopy(PixmapPtr p);
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun PixmapPtr
566*4882a593Smuzhiyun  exaGetOffscreenPixmap(DrawablePtr pDrawable, int *xp, int *yp);
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun PixmapPtr
569*4882a593Smuzhiyun  exaGetDrawablePixmap(DrawablePtr pDrawable);
570*4882a593Smuzhiyun 
571*4882a593Smuzhiyun void
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun exaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
574*4882a593Smuzhiyun               int w, int h, int bpp);
575*4882a593Smuzhiyun 
576*4882a593Smuzhiyun void
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
579*4882a593Smuzhiyun                  int w, int h, int bpp);
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun void
582*4882a593Smuzhiyun  exaDoMigration(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun Bool
585*4882a593Smuzhiyun  exaPixmapIsPinned(PixmapPtr pPix);
586*4882a593Smuzhiyun 
587*4882a593Smuzhiyun extern const GCFuncs exaGCFuncs;
588*4882a593Smuzhiyun 
589*4882a593Smuzhiyun /* exa_classic.c */
590*4882a593Smuzhiyun PixmapPtr
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth,
593*4882a593Smuzhiyun                         unsigned usage_hint);
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun Bool
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun exaModifyPixmapHeader_classic(PixmapPtr pPixmap, int width, int height,
598*4882a593Smuzhiyun                               int depth, int bitsPerPixel, int devKind,
599*4882a593Smuzhiyun                               void *pPixData);
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun Bool
602*4882a593Smuzhiyun  exaDestroyPixmap_classic(PixmapPtr pPixmap);
603*4882a593Smuzhiyun 
604*4882a593Smuzhiyun Bool
605*4882a593Smuzhiyun  exaPixmapHasGpuCopy_classic(PixmapPtr pPixmap);
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun /* exa_driver.c */
608*4882a593Smuzhiyun PixmapPtr
609*4882a593Smuzhiyun 
610*4882a593Smuzhiyun exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
611*4882a593Smuzhiyun                        unsigned usage_hint);
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun Bool
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun exaModifyPixmapHeader_driver(PixmapPtr pPixmap, int width, int height,
616*4882a593Smuzhiyun                              int depth, int bitsPerPixel, int devKind,
617*4882a593Smuzhiyun                              void *pPixData);
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun Bool
620*4882a593Smuzhiyun  exaDestroyPixmap_driver(PixmapPtr pPixmap);
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun Bool
623*4882a593Smuzhiyun  exaPixmapHasGpuCopy_driver(PixmapPtr pPixmap);
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun /* exa_mixed.c */
626*4882a593Smuzhiyun PixmapPtr
627*4882a593Smuzhiyun 
628*4882a593Smuzhiyun exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
629*4882a593Smuzhiyun                       unsigned usage_hint);
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun Bool
632*4882a593Smuzhiyun 
633*4882a593Smuzhiyun exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
634*4882a593Smuzhiyun                             int bitsPerPixel, int devKind, void *pPixData);
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun Bool
637*4882a593Smuzhiyun  exaDestroyPixmap_mixed(PixmapPtr pPixmap);
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun Bool
640*4882a593Smuzhiyun  exaPixmapHasGpuCopy_mixed(PixmapPtr pPixmap);
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun /* exa_migration_mixed.c */
643*4882a593Smuzhiyun void
644*4882a593Smuzhiyun  exaCreateDriverPixmap_mixed(PixmapPtr pPixmap);
645*4882a593Smuzhiyun 
646*4882a593Smuzhiyun void
647*4882a593Smuzhiyun  exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
648*4882a593Smuzhiyun 
649*4882a593Smuzhiyun void
650*4882a593Smuzhiyun  exaMoveInPixmap_mixed(PixmapPtr pPixmap);
651*4882a593Smuzhiyun 
652*4882a593Smuzhiyun void
653*4882a593Smuzhiyun  exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure);
654*4882a593Smuzhiyun 
655*4882a593Smuzhiyun void
656*4882a593Smuzhiyun  exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg);
657*4882a593Smuzhiyun 
658*4882a593Smuzhiyun Bool
659*4882a593Smuzhiyun exaSetSharedPixmapBacking_mixed(PixmapPtr pPixmap, void *handle);
660*4882a593Smuzhiyun Bool
661*4882a593Smuzhiyun exaSharePixmapBacking_mixed(PixmapPtr pPixmap, ScreenPtr slave, void **handle_p);
662*4882a593Smuzhiyun 
663*4882a593Smuzhiyun /* exa_render.c */
664*4882a593Smuzhiyun Bool
665*4882a593Smuzhiyun  exaOpReadsDestination(CARD8 op);
666*4882a593Smuzhiyun 
667*4882a593Smuzhiyun void
668*4882a593Smuzhiyun 
669*4882a593Smuzhiyun exaComposite(CARD8 op,
670*4882a593Smuzhiyun              PicturePtr pSrc,
671*4882a593Smuzhiyun              PicturePtr pMask,
672*4882a593Smuzhiyun              PicturePtr pDst,
673*4882a593Smuzhiyun              INT16 xSrc,
674*4882a593Smuzhiyun              INT16 ySrc,
675*4882a593Smuzhiyun              INT16 xMask,
676*4882a593Smuzhiyun              INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
677*4882a593Smuzhiyun 
678*4882a593Smuzhiyun void
679*4882a593Smuzhiyun 
680*4882a593Smuzhiyun exaCompositeRects(CARD8 op,
681*4882a593Smuzhiyun                   PicturePtr Src,
682*4882a593Smuzhiyun                   PicturePtr pMask,
683*4882a593Smuzhiyun                   PicturePtr pDst, int nrect, ExaCompositeRectPtr rects);
684*4882a593Smuzhiyun 
685*4882a593Smuzhiyun void
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun exaTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
688*4882a593Smuzhiyun               PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
689*4882a593Smuzhiyun               int ntrap, xTrapezoid * traps);
690*4882a593Smuzhiyun 
691*4882a593Smuzhiyun void
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun exaTriangles(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
694*4882a593Smuzhiyun              PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
695*4882a593Smuzhiyun              int ntri, xTriangle * tris);
696*4882a593Smuzhiyun 
697*4882a593Smuzhiyun /* exa_glyph.c */
698*4882a593Smuzhiyun void
699*4882a593Smuzhiyun  exaGlyphsInit(ScreenPtr pScreen);
700*4882a593Smuzhiyun 
701*4882a593Smuzhiyun void
702*4882a593Smuzhiyun  exaGlyphsFini(ScreenPtr pScreen);
703*4882a593Smuzhiyun 
704*4882a593Smuzhiyun void
705*4882a593Smuzhiyun 
706*4882a593Smuzhiyun exaGlyphs(CARD8 op,
707*4882a593Smuzhiyun           PicturePtr pSrc,
708*4882a593Smuzhiyun           PicturePtr pDst,
709*4882a593Smuzhiyun           PictFormatPtr maskFormat,
710*4882a593Smuzhiyun           INT16 xSrc,
711*4882a593Smuzhiyun           INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr * glyphs);
712*4882a593Smuzhiyun 
713*4882a593Smuzhiyun /* exa_migration_classic.c */
714*4882a593Smuzhiyun void
715*4882a593Smuzhiyun  exaCopyDirtyToSys(ExaMigrationPtr migrate);
716*4882a593Smuzhiyun 
717*4882a593Smuzhiyun void
718*4882a593Smuzhiyun  exaCopyDirtyToFb(ExaMigrationPtr migrate);
719*4882a593Smuzhiyun 
720*4882a593Smuzhiyun void
721*4882a593Smuzhiyun  exaDoMigration_classic(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
722*4882a593Smuzhiyun 
723*4882a593Smuzhiyun void
724*4882a593Smuzhiyun  exaPixmapSave(ScreenPtr pScreen, ExaOffscreenArea * area);
725*4882a593Smuzhiyun 
726*4882a593Smuzhiyun void
727*4882a593Smuzhiyun  exaMoveOutPixmap_classic(PixmapPtr pPixmap);
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun void
730*4882a593Smuzhiyun  exaMoveInPixmap_classic(PixmapPtr pPixmap);
731*4882a593Smuzhiyun 
732*4882a593Smuzhiyun void
733*4882a593Smuzhiyun  exaPrepareAccessReg_classic(PixmapPtr pPixmap, int index, RegionPtr pReg);
734*4882a593Smuzhiyun 
735*4882a593Smuzhiyun #endif                          /* EXAPRIV_H */
736