xserver-multidpi/hw/xfree86/xaa/xaaWrapper.c
2004-07-30 21:46:38 +00:00

925 lines
26 KiB
C

#include "X.h"
#include "Xproto.h"
#include "scrnintstr.h"
#include "gcstruct.h"
#include "glyphstr.h"
#include "window.h"
#include "windowstr.h"
#include "picture.h"
#include "picturestr.h"
#include "colormapst.h"
#include "xaa.h"
#include "xaalocal.h"
#include "xaaWrapper.h"
void XAASync(ScreenPtr pScreen);
/* #include "render.h" */
#if 0
#define COND(pDraw) \
((pDraw)->depth \
!= (xaaWrapperGetScrPriv(((DrawablePtr)(pDraw))->pScreen))->depth)
#endif
#define COND(pDraw) 1
#if 0
static Bool xaaWrapperPreCreateGC(GCPtr pGC);
#endif
static Bool xaaWrapperCreateGC(GCPtr pGC);
static void xaaWrapperValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
static void xaaWrapperDestroyGC(GCPtr pGC);
static void xaaWrapperChangeGC (GCPtr pGC, unsigned long mask);
static void xaaWrapperCopyGC (GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
static void xaaWrapperChangeClip (GCPtr pGC, int type, pointer pvalue, int nrects);
static void xaaWrapperCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
static void xaaWrapperDestroyClip(GCPtr pGC);
#if 0
static void xaaWrapperFillSpans(DrawablePtr pDraw, GC *pGC, int nInit,
DDXPointPtr pptInit, int *pwidthInit, int fSorted);
static void xaaWrapperSetSpans(DrawablePtr pDraw, GCPtr pGC, char *pcharsrc,
DDXPointPtr pptInit, int *pwidthInit, int nspans,
int fSorted);
static void xaaWrapperPutImage(DrawablePtr pDraw, GCPtr pGC, int depth, int x, int y,
int w, int h,int leftPad, int format, char *pImage);
static RegionPtr xaaWrapperCopyPlane(DrawablePtr pSrc,
DrawablePtr pDst, GCPtr pGC,int srcx, int srcy,
int width, int height, int dstx, int dsty,
unsigned long bitPlane);
static void xaaWrapperPolyPoint(DrawablePtr pDraw, GCPtr pGC, int mode, int npt,
xPoint *pptInit);
static void xaaWrapperPolylines(DrawablePtr pDraw, GCPtr pGC, int mode,
int npt, DDXPointPtr pptInit);
static void xaaWrapperPolySegment(DrawablePtr pDraw, GCPtr pGC, int nseg,
xSegment *pSeg);
static void xaaWrapperPolyRectangle(DrawablePtr pDraw, GCPtr pGC, int nRects,
xRectangle *pRects);
static void xaaWrapperPolyArc( DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs);
static void xaaWrapperFillPolygon(DrawablePtr pDraw, GCPtr pGC, int shape,
int mode, int count, DDXPointPtr pptInit);
static void xaaWrapperPolyFillRect(DrawablePtr pDraw, GCPtr pGC, int nRectsInit,
xRectangle *pRectsInit);
static RegionPtr xaaWrapperCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GC *pGC,
int srcx, int srcy, int width, int height,
int dstx, int dsty);
static void xaaWrapperPolyFillArc(DrawablePtr pDraw, GCPtr pGC, int narcs,
xArc *parcs);
static int xaaWrapperPolyText8(DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
char *chars);
static int xaaWrapperPolyText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
int count, unsigned short *chars);
static void xaaWrapperImageText8(DrawablePtr pDraw, GCPtr pGC, int x,
int y, int count, char *chars);
static void xaaWrapperImageText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
int count, unsigned short *chars);
static void xaaWrapperImageGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int x, int y,
unsigned int nglyph, CharInfoPtr *ppci,
pointer pglyphBase);
static void xaaWrapperPolyGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int x, int y,
unsigned int nglyph, CharInfoPtr *ppci,
pointer pglyphBase);
static void xaaWrapperPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDraw,
int dx, int dy, int xOrg, int yOrg);
#endif
static void
xaaWrapperComposite (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
static void
xaaWrapperGlyphs (CARD8 op, PicturePtr pSrc, PicturePtr pDst,
PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
GlyphListPtr list, GlyphPtr *glyphs);
typedef struct {
CloseScreenProcPtr CloseScreen;
CreateScreenResourcesProcPtr CreateScreenResources;
CreateWindowProcPtr CreateWindow;
CopyWindowProcPtr CopyWindow;
PaintWindowProcPtr PaintWindowBackground;
PaintWindowProcPtr PaintWindowBorder;
WindowExposuresProcPtr WindowExposures;
CreateGCProcPtr CreateGC;
CreateColormapProcPtr CreateColormap;
DestroyColormapProcPtr DestroyColormap;
InstallColormapProcPtr InstallColormap;
UninstallColormapProcPtr UninstallColormap;
ListInstalledColormapsProcPtr ListInstalledColormaps;
StoreColorsProcPtr StoreColors;
#ifdef RENDER
CompositeProcPtr Composite;
GlyphsProcPtr Glyphs;
#endif
CloseScreenProcPtr wrapCloseScreen;
CreateScreenResourcesProcPtr wrapCreateScreenResources;
CreateWindowProcPtr wrapCreateWindow;
CopyWindowProcPtr wrapCopyWindow;
PaintWindowProcPtr wrapPaintWindowBackground;
PaintWindowProcPtr wrapPaintWindowBorder;
WindowExposuresProcPtr wrapWindowExposures;
CreateGCProcPtr wrapCreateGC;
CreateColormapProcPtr wrapCreateColormap;
DestroyColormapProcPtr wrapDestroyColormap;
InstallColormapProcPtr wrapInstallColormap;
UninstallColormapProcPtr wrapUninstallColormap;
ListInstalledColormapsProcPtr wrapListInstalledColormaps;
StoreColorsProcPtr wrapStoreColors;
#ifdef RENDER
CompositeProcPtr wrapComposite;
GlyphsProcPtr wrapGlyphs;
#endif
int depth;
} xaaWrapperScrPrivRec, *xaaWrapperScrPrivPtr;
#define xaaWrapperGetScrPriv(s) ((xaaWrapperScrPrivPtr)( \
(xaaWrapperScrPrivateIndex != -1) \
? (s)->devPrivates[xaaWrapperScrPrivateIndex].ptr\
: NULL))
#define xaaWrapperScrPriv(s) xaaWrapperScrPrivPtr pScrPriv = xaaWrapperGetScrPriv(s)
#define wrap(priv,real,mem,func) {\
priv->mem = real->mem; \
real->mem = func; \
}
#if 0
#define wrap_pre(priv,real,real_func,mem,func) {\
priv->mem = real->real_func; \
real->real_func = func; \
}
#endif
#define get(priv,real,func,wrap) \
priv->wrap = real->func;
#define unwrap(priv,real,mem) {\
real->mem = priv->mem; \
}
#if 0
#define unwrap_pre(priv,real,real_func,mem) {\
real->real_func = priv->mem; \
}
#endif
typedef struct _xaaWrapperGCPriv {
GCOps *ops;
Bool wrap;
GCFuncs *funcs;
GCOps *wrapops;
} xaaWrapperGCPrivRec, *xaaWrapperGCPrivPtr;
#define xaaWrapperGetGCPriv(pGC) ((xaaWrapperGCPrivPtr) \
(pGC)->devPrivates[xaaWrapperGCPrivateIndex].ptr)
#define xaaWrapperGCPriv(pGC) xaaWrapperGCPrivPtr pGCPriv = xaaWrapperGetGCPriv(pGC)
static int xaaWrapperScrPrivateIndex = -1;
static int xaaWrapperGCPrivateIndex = -1;
static int xaaWrapperGeneration = -1;
static Bool
xaaWrapperCreateScreenResources(ScreenPtr pScreen)
{
xaaWrapperScrPriv(pScreen);
Bool ret;
unwrap (pScrPriv,pScreen, CreateScreenResources);
ret = pScreen->CreateScreenResources(pScreen);
wrap(pScrPriv,pScreen,CreateScreenResources,xaaWrapperCreateScreenResources);
return ret;
}
static Bool
xaaWrapperCloseScreen (int iScreen, ScreenPtr pScreen)
{
xaaWrapperScrPriv(pScreen);
Bool ret;
unwrap (pScrPriv,pScreen, CloseScreen);
ret = pScreen->CloseScreen(iScreen,pScreen);
return TRUE;
}
static Bool
xaaWrapperCreateWindow(WindowPtr pWin)
{
xaaWrapperScrPriv(pWin->drawable.pScreen);
Bool ret;
unwrap (pScrPriv, pWin->drawable.pScreen, CreateWindow);
if (COND(&pWin->drawable))
pWin->drawable.pScreen->CreateWindow
= pScrPriv->wrapCreateWindow;
ret = pWin->drawable.pScreen->CreateWindow(pWin);
wrap(pScrPriv, pWin->drawable.pScreen, CreateWindow, xaaWrapperCreateWindow);
return ret;
}
static void
xaaWrapperCopyWindow(WindowPtr pWin,
DDXPointRec ptOldOrg,
RegionPtr prgnSrc)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
xaaWrapperScrPriv(pScreen);
unwrap (pScrPriv, pScreen, CopyWindow);
#if 0
if (COND(&pWin->drawable))
pWin->drawable.pScreen->CopyWindow = pScrPriv->wrapCopyWindow;
#endif
pScreen->CopyWindow(pWin, ptOldOrg, prgnSrc);
wrap(pScrPriv, pScreen, CopyWindow, xaaWrapperCopyWindow);
}
static void
xaaWrapperWindowExposures (WindowPtr pWin,
RegionPtr prgn,
RegionPtr other_exposed)
{
xaaWrapperScrPriv(pWin->drawable.pScreen);
unwrap (pScrPriv, pWin->drawable.pScreen, WindowExposures);
if (COND(&pWin->drawable))
pWin->drawable.pScreen->WindowExposures = pScrPriv->wrapWindowExposures;
pWin->drawable.pScreen->WindowExposures(pWin, prgn, other_exposed);
wrap(pScrPriv, pWin->drawable.pScreen, WindowExposures, xaaWrapperWindowExposures);
}
static void
xaaWrapperPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{
xaaWrapperScrPriv(pWin->drawable.pScreen);
switch (what) {
case PW_BORDER:
unwrap (pScrPriv, pWin->drawable.pScreen, PaintWindowBorder);
if (COND(&pWin->drawable)) {
pWin->drawable.pScreen->PaintWindowBorder
= pScrPriv->wrapPaintWindowBorder;
XAASync(pWin->drawable.pScreen);
}
pWin->drawable.pScreen->PaintWindowBorder (pWin, pRegion, what);
wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBorder,
xaaWrapperPaintWindow);
break;
case PW_BACKGROUND:
unwrap (pScrPriv, pWin->drawable.pScreen, PaintWindowBackground);
if (COND(&pWin->drawable)) {
pWin->drawable.pScreen->PaintWindowBackground
= pScrPriv->wrapPaintWindowBackground;
XAASync(pWin->drawable.pScreen);
}
pWin->drawable.pScreen->PaintWindowBackground (pWin, pRegion, what);
wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBackground,
xaaWrapperPaintWindow);
break;
}
}
static Bool
xaaWrapperCreateColormap(ColormapPtr pmap)
{
xaaWrapperScrPriv(pmap->pScreen);
Bool ret;
unwrap(pScrPriv,pmap->pScreen, CreateColormap);
ret = pmap->pScreen->CreateColormap(pmap);
wrap(pScrPriv,pmap->pScreen,CreateColormap,xaaWrapperCreateColormap);
return ret;
}
static void
xaaWrapperDestroyColormap(ColormapPtr pmap)
{
xaaWrapperScrPriv(pmap->pScreen);
unwrap(pScrPriv,pmap->pScreen, DestroyColormap);
pmap->pScreen->DestroyColormap(pmap);
wrap(pScrPriv,pmap->pScreen,DestroyColormap,xaaWrapperDestroyColormap);
}
static void
xaaWrapperStoreColors(ColormapPtr pmap, int nColors, xColorItem *pColors)
{
xaaWrapperScrPriv(pmap->pScreen);
unwrap(pScrPriv,pmap->pScreen, StoreColors);
pmap->pScreen->StoreColors(pmap,nColors,pColors);
wrap(pScrPriv,pmap->pScreen,StoreColors,xaaWrapperStoreColors);
}
static void
xaaWrapperInstallColormap(ColormapPtr pmap)
{
xaaWrapperScrPriv(pmap->pScreen);
unwrap(pScrPriv,pmap->pScreen, InstallColormap);
pmap->pScreen->InstallColormap(pmap);
wrap(pScrPriv,pmap->pScreen,InstallColormap,xaaWrapperInstallColormap);
}
static void
xaaWrapperUninstallColormap(ColormapPtr pmap)
{
xaaWrapperScrPriv(pmap->pScreen);
unwrap(pScrPriv,pmap->pScreen, UninstallColormap);
pmap->pScreen->UninstallColormap(pmap);
wrap(pScrPriv,pmap->pScreen,UninstallColormap,xaaWrapperUninstallColormap);
}
static int
xaaWrapperListInstalledColormaps(ScreenPtr pScreen, Colormap *pCmapIds)
{
int n;
xaaWrapperScrPriv(pScreen);
unwrap(pScrPriv,pScreen, ListInstalledColormaps);
n = pScreen->ListInstalledColormaps(pScreen, pCmapIds);
wrap (pScrPriv,pScreen,ListInstalledColormaps,xaaWrapperListInstalledColormaps);
return n;
}
Bool
xaaSetupWrapper(ScreenPtr pScreen, XAAInfoRecPtr infoPtr, int depth, SyncFunc *func)
{
Bool ret;
xaaWrapperScrPrivPtr pScrPriv;
#ifdef RENDER
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
#endif
if (xaaWrapperGeneration != serverGeneration) {
xaaWrapperScrPrivateIndex = AllocateScreenPrivateIndex ();
if (xaaWrapperScrPrivateIndex == -1)
return FALSE;
xaaWrapperGCPrivateIndex = AllocateGCPrivateIndex ();
if (xaaWrapperGCPrivateIndex == -1)
return FALSE;
xaaWrapperGeneration = serverGeneration;
}
if (!AllocateGCPrivate (pScreen, xaaWrapperGCPrivateIndex,
sizeof (xaaWrapperGCPrivRec)))
return FALSE;
pScrPriv = (xaaWrapperScrPrivPtr) xalloc (sizeof (xaaWrapperScrPrivRec));
if (!pScrPriv)
return FALSE;
get (pScrPriv, pScreen, CloseScreen, wrapCloseScreen);
get (pScrPriv, pScreen, CreateScreenResources, wrapCreateScreenResources);
get (pScrPriv, pScreen, CreateWindow, wrapCreateWindow);
get (pScrPriv, pScreen, CopyWindow, wrapCopyWindow);
get (pScrPriv, pScreen, PaintWindowBorder, wrapPaintWindowBorder);
get (pScrPriv, pScreen, PaintWindowBackground, wrapPaintWindowBackground);
get (pScrPriv, pScreen, WindowExposures, wrapWindowExposures);
#if 0
wrap_pre (pScrPriv, pScreen, CreateGC, wrapCreateGC, xaaWrapperPreCreateGC);
#else
get (pScrPriv, pScreen, CreateGC, wrapCreateGC);
#endif
get (pScrPriv, pScreen, CreateColormap, wrapCreateColormap);
get (pScrPriv, pScreen, DestroyColormap, wrapDestroyColormap);
get (pScrPriv, pScreen, InstallColormap, wrapInstallColormap);
get (pScrPriv, pScreen, UninstallColormap, wrapUninstallColormap);
get (pScrPriv, pScreen, ListInstalledColormaps, wrapListInstalledColormaps);
get (pScrPriv, pScreen, StoreColors, wrapStoreColors);
#ifdef RENDER
if (ps) {
get (pScrPriv, ps, Glyphs, wrapGlyphs);
get (pScrPriv, ps, Composite, wrapComposite);
}
#endif
if (!(ret = XAAInit(pScreen,infoPtr)))
return FALSE;
wrap (pScrPriv, pScreen, CloseScreen, xaaWrapperCloseScreen);
wrap (pScrPriv, pScreen, CreateScreenResources,
xaaWrapperCreateScreenResources);
wrap (pScrPriv, pScreen, CreateWindow, xaaWrapperCreateWindow);
wrap (pScrPriv, pScreen, CopyWindow, xaaWrapperCopyWindow);
wrap (pScrPriv, pScreen, PaintWindowBorder, xaaWrapperPaintWindow);
wrap (pScrPriv, pScreen, PaintWindowBackground, xaaWrapperPaintWindow);
wrap (pScrPriv, pScreen, WindowExposures, xaaWrapperWindowExposures);
wrap (pScrPriv, pScreen, CreateGC, xaaWrapperCreateGC);
wrap (pScrPriv, pScreen, CreateColormap, xaaWrapperCreateColormap);
wrap (pScrPriv, pScreen, DestroyColormap, xaaWrapperDestroyColormap);
wrap (pScrPriv, pScreen, InstallColormap, xaaWrapperInstallColormap);
wrap (pScrPriv, pScreen, UninstallColormap, xaaWrapperUninstallColormap);
wrap (pScrPriv, pScreen, ListInstalledColormaps,
xaaWrapperListInstalledColormaps);
wrap (pScrPriv, pScreen, StoreColors, xaaWrapperStoreColors);
#ifdef RENDER
if (ps) {
wrap (pScrPriv, ps, Glyphs, xaaWrapperGlyphs);
wrap (pScrPriv, ps, Composite, xaaWrapperComposite);
}
#endif
pScrPriv->depth = depth;
pScreen->devPrivates[xaaWrapperScrPrivateIndex].ptr = (pointer) pScrPriv;
*func = XAASync;
return ret;
}
GCFuncs xaaWrapperGCFuncs = {
xaaWrapperValidateGC, xaaWrapperChangeGC, xaaWrapperCopyGC,
xaaWrapperDestroyGC, xaaWrapperChangeClip, xaaWrapperDestroyClip,
xaaWrapperCopyClip
};
#if 0
GCOps xaaWrapperGCOps = {
xaaWrapperFillSpans, xaaWrapperSetSpans,
xaaWrapperPutImage, xaaWrapperCopyArea,
xaaWrapperCopyPlane, xaaWrapperPolyPoint,
xaaWrapperPolylines, xaaWrapperPolySegment,
xaaWrapperPolyRectangle, xaaWrapperPolyArc,
xaaWrapperFillPolygon, xaaWrapperPolyFillRect,
xaaWrapperPolyFillArc, xaaWrapperPolyText8,
xaaWrapperPolyText16, xaaWrapperImageText8,
xaaWrapperImageText16, xaaWrapperImageGlyphBlt,
xaaWrapperPolyGlyphBlt, xaaWrapperPushPixels,
#ifdef NEED_LINEHELPER
NULL,
#endif
{NULL} /* devPrivate */
};
#endif
#define XAAWRAPPER_GC_FUNC_PROLOGUE(pGC) \
xaaWrapperGCPriv(pGC); \
unwrap(pGCPriv, pGC, funcs); \
if (pGCPriv->wrap) unwrap(pGCPriv, pGC, ops)
#define XAAWRAPPER_GC_FUNC_EPILOGUE(pGC) \
wrap(pGCPriv, pGC, funcs, &xaaWrapperGCFuncs); \
if (pGCPriv->wrap) wrap(pGCPriv, pGC, ops, pGCPriv->wrapops)
#if 0
static Bool
xaaWrapperPreCreateGC(GCPtr pGC)
{
ScreenPtr pScreen = pGC->pScreen;
xaaWrapperScrPriv(pScreen);
xaaWrapperGCPriv(pGC);
Bool ret;
unwrap_pre (pScrPriv, pScreen, CreateGC, wrapCreateGC);
ret = (*pScreen->CreateGC) (pGC);
wrap_pre (pScrPriv, pScreen, CreateGC, wrapCreateGC, xaaWrapperPreCreateGC);
return ret;
}
#endif
static Bool
xaaWrapperCreateGC(GCPtr pGC)
{
ScreenPtr pScreen = pGC->pScreen;
xaaWrapperScrPriv(pScreen);
xaaWrapperGCPriv(pGC);
Bool ret;
unwrap (pScrPriv, pScreen, CreateGC);
if((ret = (*pScreen->CreateGC) (pGC))) {
pGCPriv->wrap = FALSE;
pGCPriv->funcs = pGC->funcs;
pGCPriv->wrapops = pGC->ops;
pGC->funcs = &xaaWrapperGCFuncs;
}
wrap (pScrPriv, pScreen, CreateGC, xaaWrapperCreateGC);
return ret;
}
static void
xaaWrapperValidateGC(
GCPtr pGC,
unsigned long changes,
DrawablePtr pDraw
){
XAAWRAPPER_GC_FUNC_PROLOGUE (pGC);
(*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
if(COND(pDraw))
pGCPriv->wrap = TRUE;
XAAWRAPPER_GC_FUNC_EPILOGUE (pGC);
}
static void
xaaWrapperDestroyGC(GCPtr pGC)
{
XAAWRAPPER_GC_FUNC_PROLOGUE (pGC);
(*pGC->funcs->DestroyGC)(pGC);
XAAWRAPPER_GC_FUNC_EPILOGUE (pGC);
}
static void
xaaWrapperChangeGC (
GCPtr pGC,
unsigned long mask
){
XAAWRAPPER_GC_FUNC_PROLOGUE (pGC);
(*pGC->funcs->ChangeGC) (pGC, mask);
XAAWRAPPER_GC_FUNC_EPILOGUE (pGC);
}
static void
xaaWrapperCopyGC (
GCPtr pGCSrc,
unsigned long mask,
GCPtr pGCDst
){
XAAWRAPPER_GC_FUNC_PROLOGUE (pGCDst);
(*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
XAAWRAPPER_GC_FUNC_EPILOGUE (pGCDst);
}
static void
xaaWrapperChangeClip (
GCPtr pGC,
int type,
pointer pvalue,
int nrects
){
XAAWRAPPER_GC_FUNC_PROLOGUE (pGC);
(*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
XAAWRAPPER_GC_FUNC_EPILOGUE (pGC);
}
static void
xaaWrapperCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
{
XAAWRAPPER_GC_FUNC_PROLOGUE (pgcDst);
(* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
XAAWRAPPER_GC_FUNC_EPILOGUE (pgcDst);
}
static void
xaaWrapperDestroyClip(GCPtr pGC)
{
XAAWRAPPER_GC_FUNC_PROLOGUE (pGC);
(* pGC->funcs->DestroyClip)(pGC);
XAAWRAPPER_GC_FUNC_EPILOGUE (pGC);
}
#if 0
#define XAAWRAPPER_GC_OP_PROLOGUE(pGC,pDraw) \
/* xaaWrapperScrPriv(pDraw->pScreen); */\
xaaWrapperGCPriv(pGC); \
GCFuncs *oldFuncs = pGC->funcs; \
unwrap(pGCPriv, pGC, funcs); \
unwrap(pGCPriv, pGC, ops); \
#define XAAWRAPPER_GC_OP_EPILOGUE(pGC,pDraw) \
wrap(pGCPriv, pGC, funcs, oldFuncs); \
wrap(pGCPriv, pGC, ops, &xaaWrapperGCOps)
static void
xaaWrapperFillSpans(
DrawablePtr pDraw,
GC *pGC,
int nInit,
DDXPointPtr pptInit,
int *pwidthInit,
int fSorted
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperSetSpans(
DrawablePtr pDraw,
GCPtr pGC,
char *pcharsrc,
DDXPointPtr pptInit,
int *pwidthInit,
int nspans,
int fSorted
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, pptInit,
pwidthInit, nspans, fSorted);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPutImage(
DrawablePtr pDraw,
GCPtr pGC,
int depth,
int x, int y, int w, int h,
int leftPad,
int format,
char *pImage
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
leftPad, format, pImage);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static RegionPtr
xaaWrapperCopyArea(
DrawablePtr pSrc,
DrawablePtr pDst,
GC *pGC,
int srcx, int srcy,
int width, int height,
int dstx, int dsty
){
RegionPtr ret;
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDst);
ret = (*pGC->ops->CopyArea)(pSrc, pDst,
pGC, srcx, srcy, width, height, dstx, dsty);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDst);
return ret;
}
static RegionPtr
xaaWrapperCopyPlane(
DrawablePtr pSrc,
DrawablePtr pDst,
GCPtr pGC,
int srcx, int srcy,
int width, int height,
int dstx, int dsty,
unsigned long bitPlane
){
RegionPtr ret;
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDst);
ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDst);
return ret;
}
static void
xaaWrapperPolyPoint(
DrawablePtr pDraw,
GCPtr pGC,
int mode,
int npt,
xPoint *pptInit
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolylines(
DrawablePtr pDraw,
GCPtr pGC,
int mode,
int npt,
DDXPointPtr pptInit
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolySegment(
DrawablePtr pDraw,
GCPtr pGC,
int nseg,
xSegment *pSeg
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolyRectangle(
DrawablePtr pDraw,
GCPtr pGC,
int nRects,
xRectangle *pRects
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolyRectangle)(pDraw, pGC, nRects, pRects);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolyArc(
DrawablePtr pDraw,
GCPtr pGC,
int narcs,
xArc *parcs
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperFillPolygon(
DrawablePtr pDraw,
GCPtr pGC,
int shape,
int mode,
int count,
DDXPointPtr pptInit
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, pptInit);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolyFillRect(
DrawablePtr pDraw,
GCPtr pGC,
int nRectsInit,
xRectangle *pRectsInit
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolyFillRect)(pDraw, pGC, nRectsInit, pRectsInit);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolyFillArc(
DrawablePtr pDraw,
GCPtr pGC,
int narcs,
xArc *parcs
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static int
xaaWrapperPolyText8(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
char *chars
){
int width;
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
width = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
return width;
}
static int
xaaWrapperPolyText16(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
unsigned short *chars
){
int width;
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
width = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
return width;
}
static void
xaaWrapperImageText8(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
char *chars
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperImageText16(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
unsigned short *chars
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperImageGlyphBlt(
DrawablePtr pDraw,
GCPtr pGC,
int x, int y,
unsigned int nglyph,
CharInfoPtr *ppci,
pointer pglyphBase
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->ImageGlyphBlt)(pDraw, pGC, x, y, nglyph,
ppci, pglyphBase);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPolyGlyphBlt(
DrawablePtr pDraw,
GCPtr pGC,
int x, int y,
unsigned int nglyph,
CharInfoPtr *ppci,
pointer pglyphBase
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PolyGlyphBlt)(pDraw, pGC, x, y, nglyph,
ppci, pglyphBase);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
static void
xaaWrapperPushPixels(
GCPtr pGC,
PixmapPtr pBitMap,
DrawablePtr pDraw,
int dx, int dy, int xOrg, int yOrg
){
XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
(*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
}
#endif
#ifdef RENDER
static void
xaaWrapperComposite (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
{
ScreenPtr pScreen = pDst->pDrawable->pScreen;
PictureScreenPtr ps = GetPictureScreen(pScreen);
xaaWrapperScrPriv(pScreen);
unwrap (pScrPriv, ps, Composite);
(*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask,
xDst, yDst, width, height);
wrap (pScrPriv, ps, Composite, xaaWrapperComposite);
}
static void
xaaWrapperGlyphs (CARD8 op, PicturePtr pSrc, PicturePtr pDst,
PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
GlyphListPtr list, GlyphPtr *glyphs)
{
ScreenPtr pScreen = pDst->pDrawable->pScreen;
PictureScreenPtr ps = GetPictureScreen(pScreen);
xaaWrapperScrPriv(pScreen);
unwrap (pScrPriv, ps, Glyphs);
(*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc,
nlist, list, glyphs);
wrap (pScrPriv, ps, Glyphs, xaaWrapperGlyphs);
}
#endif
void
XAASync(ScreenPtr pScreen)
{
XAAScreenPtr pScreenPriv =
(XAAScreenPtr) pScreen->devPrivates[XAAScreenIndex].ptr;
XAAInfoRecPtr infoRec = pScreenPriv->AccelInfoRec;
if(infoRec->NeedToSync) {
(*infoRec->Sync)(infoRec->pScrn);
infoRec->NeedToSync = FALSE;
}
}