exa_priv.h revision 52397711
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, 34652397711Smrg unsigned int fillStyle, unsigned char alu, 34752397711Smrg unsigned int clientClipType) 3484642e01fSmrg{ 34952397711Smrg return ((alu != GXcopy && alu != GXclear && alu != GXset && 3504642e01fSmrg alu != GXcopyInverted) || fillStyle == FillStippled || 35152397711Smrg clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask)); 3524642e01fSmrg} 35305b261ecSmrg 35405b261ecSmrgvoid 35505b261ecSmrgexaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); 35605b261ecSmrg 35705b261ecSmrgBool 35805b261ecSmrgexaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, 35952397711Smrg DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, 36052397711Smrg unsigned int clientClipType); 36105b261ecSmrg 36205b261ecSmrgvoid 36305b261ecSmrgexaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h, 36405b261ecSmrg unsigned int format, unsigned long planeMask, char *d); 36505b261ecSmrg 36605b261ecSmrgextern const GCOps exaOps; 36705b261ecSmrg 36805b261ecSmrg#ifdef RENDER 36905b261ecSmrgvoid 37005b261ecSmrgExaCheckComposite (CARD8 op, 37105b261ecSmrg PicturePtr pSrc, 37205b261ecSmrg PicturePtr pMask, 37305b261ecSmrg PicturePtr pDst, 37405b261ecSmrg INT16 xSrc, 37505b261ecSmrg INT16 ySrc, 37605b261ecSmrg INT16 xMask, 37705b261ecSmrg INT16 yMask, 37805b261ecSmrg INT16 xDst, 37905b261ecSmrg INT16 yDst, 38005b261ecSmrg CARD16 width, 38105b261ecSmrg CARD16 height); 38205b261ecSmrg#endif 38305b261ecSmrg 38405b261ecSmrg/* exa_offscreen.c */ 38505b261ecSmrgvoid 38605b261ecSmrgExaOffscreenSwapOut (ScreenPtr pScreen); 38705b261ecSmrg 38805b261ecSmrgvoid 38905b261ecSmrgExaOffscreenSwapIn (ScreenPtr pScreen); 39005b261ecSmrg 39105b261ecSmrgBool 39205b261ecSmrgexaOffscreenInit(ScreenPtr pScreen); 39305b261ecSmrg 39405b261ecSmrgvoid 39505b261ecSmrgExaOffscreenFini (ScreenPtr pScreen); 39605b261ecSmrg 39705b261ecSmrg/* exa.c */ 3984642e01fSmrgvoid 3994642e01fSmrgExaDoPrepareAccess(DrawablePtr pDrawable, int index); 4004642e01fSmrg 4014642e01fSmrgvoid 4024642e01fSmrgexaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg); 4034642e01fSmrg 40405b261ecSmrgvoid 40505b261ecSmrgexaPrepareAccess(DrawablePtr pDrawable, int index); 40605b261ecSmrg 40705b261ecSmrgvoid 40805b261ecSmrgexaFinishAccess(DrawablePtr pDrawable, int index); 40905b261ecSmrg 41005b261ecSmrgvoid 41105b261ecSmrgexaPixmapDirty(PixmapPtr pPix, int x1, int y1, int x2, int y2); 41205b261ecSmrg 41305b261ecSmrgvoid 41405b261ecSmrgexaGetDrawableDeltas (DrawablePtr pDrawable, PixmapPtr pPixmap, 41505b261ecSmrg int *xp, int *yp); 41605b261ecSmrg 41705b261ecSmrgBool 41805b261ecSmrgexaPixmapIsOffscreen(PixmapPtr p); 41905b261ecSmrg 42005b261ecSmrgPixmapPtr 42105b261ecSmrgexaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp); 42205b261ecSmrg 42305b261ecSmrgPixmapPtr 42405b261ecSmrgexaGetDrawablePixmap(DrawablePtr pDrawable); 42505b261ecSmrg 42605b261ecSmrgRegionPtr 42705b261ecSmrgexaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, 42805b261ecSmrg int srcx, int srcy, int width, int height, int dstx, int dsty); 42905b261ecSmrg 43005b261ecSmrgvoid 43105b261ecSmrgexaCopyNtoN (DrawablePtr pSrcDrawable, 43205b261ecSmrg DrawablePtr pDstDrawable, 43305b261ecSmrg GCPtr pGC, 43405b261ecSmrg BoxPtr pbox, 43505b261ecSmrg int nbox, 43605b261ecSmrg int dx, 43705b261ecSmrg int dy, 43805b261ecSmrg Bool reverse, 43905b261ecSmrg Bool upsidedown, 44005b261ecSmrg Pixel bitplane, 44105b261ecSmrg void *closure); 44205b261ecSmrg 44305b261ecSmrg/* exa_render.c */ 4444642e01fSmrgBool 4454642e01fSmrgexaOpReadsDestination (CARD8 op); 4464642e01fSmrg 44705b261ecSmrgvoid 44805b261ecSmrgexaComposite(CARD8 op, 44905b261ecSmrg PicturePtr pSrc, 45005b261ecSmrg PicturePtr pMask, 45105b261ecSmrg PicturePtr pDst, 45205b261ecSmrg INT16 xSrc, 45305b261ecSmrg INT16 ySrc, 45405b261ecSmrg INT16 xMask, 45505b261ecSmrg INT16 yMask, 45605b261ecSmrg INT16 xDst, 45705b261ecSmrg INT16 yDst, 45805b261ecSmrg CARD16 width, 45905b261ecSmrg CARD16 height); 46005b261ecSmrg 4614642e01fSmrgvoid 4624642e01fSmrgexaCompositeRects(CARD8 op, 4634642e01fSmrg PicturePtr Src, 4644642e01fSmrg PicturePtr pDst, 4654642e01fSmrg int nrect, 4664642e01fSmrg ExaCompositeRectPtr rects); 4674642e01fSmrg 46805b261ecSmrgvoid 46905b261ecSmrgexaTrapezoids (CARD8 op, PicturePtr pSrc, PicturePtr pDst, 47005b261ecSmrg PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, 47105b261ecSmrg int ntrap, xTrapezoid *traps); 47205b261ecSmrg 47305b261ecSmrgvoid 4744642e01fSmrgexaTriangles (CARD8 op, PicturePtr pSrc, PicturePtr pDst, 4754642e01fSmrg PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, 4764642e01fSmrg int ntri, xTriangle *tris); 4774642e01fSmrg 4784642e01fSmrg/* exa_glyph.c */ 4794642e01fSmrgvoid 4804642e01fSmrgexaGlyphsInit(ScreenPtr pScreen); 48105b261ecSmrg 48205b261ecSmrgvoid 4834642e01fSmrgexaGlyphsFini (ScreenPtr pScreen); 48405b261ecSmrg 48505b261ecSmrgvoid 48605b261ecSmrgexaGlyphs (CARD8 op, 48705b261ecSmrg PicturePtr pSrc, 48805b261ecSmrg PicturePtr pDst, 48905b261ecSmrg PictFormatPtr maskFormat, 49005b261ecSmrg INT16 xSrc, 49105b261ecSmrg INT16 ySrc, 49205b261ecSmrg int nlist, 49305b261ecSmrg GlyphListPtr list, 49405b261ecSmrg GlyphPtr *glyphs); 49505b261ecSmrg 49605b261ecSmrg/* exa_migration.c */ 49705b261ecSmrgvoid 49805b261ecSmrgexaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel); 49905b261ecSmrg 50005b261ecSmrgvoid 50105b261ecSmrgexaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area); 50205b261ecSmrg 50305b261ecSmrg#endif /* EXAPRIV_H */ 504