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