1706f2543Smrg
2706f2543Smrg#define XAA_SCREEN_PROLOGUE(pScreen, field)\
3706f2543Smrg  ((pScreen)->field = \
4706f2543Smrg   ((XAAScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAGetScreenKey()))->field)
5706f2543Smrg
6706f2543Smrg#define XAA_SCREEN_EPILOGUE(pScreen, field, wrapper)\
7706f2543Smrg    ((pScreen)->field = wrapper)
8706f2543Smrg
9706f2543Smrg
10706f2543Smrg#define XAA_GC_FUNC_PROLOGUE(pGC)\
11706f2543Smrg    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
12706f2543Smrg    (pGC)->funcs = pGCPriv->wrapFuncs;\
13706f2543Smrg    if(pGCPriv->flags)\
14706f2543Smrg	(pGC)->ops = pGCPriv->wrapOps
15706f2543Smrg
16706f2543Smrg#define XAA_GC_FUNC_EPILOGUE(pGC)\
17706f2543Smrg    pGCPriv->wrapFuncs = (pGC)->funcs;\
18706f2543Smrg    (pGC)->funcs = &XAAGCFuncs;\
19706f2543Smrg    if(pGCPriv->flags) {\
20706f2543Smrg	pGCPriv->wrapOps = (pGC)->ops;\
21706f2543Smrg	(pGC)->ops = (pGCPriv->flags & OPS_ARE_ACCEL) ? pGCPriv->XAAOps :\
22706f2543Smrg				&XAAPixmapOps;\
23706f2543Smrg    }
24706f2543Smrg
25706f2543Smrg
26706f2543Smrg#define XAA_GC_OP_PROLOGUE(pGC)\
27706f2543Smrg    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
28706f2543Smrg    GCFuncs *oldFuncs = pGC->funcs;\
29706f2543Smrg    pGC->funcs = pGCPriv->wrapFuncs;\
30706f2543Smrg    pGC->ops = pGCPriv->wrapOps
31706f2543Smrg
32706f2543Smrg#define XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC)\
33706f2543Smrg    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
34706f2543Smrg    GCFuncs *oldFuncs = pGC->funcs;\
35706f2543Smrg    if(!RegionNumRects(pGC->pCompositeClip)) return; \
36706f2543Smrg    pGC->funcs = pGCPriv->wrapFuncs;\
37706f2543Smrg    pGC->ops = pGCPriv->wrapOps
38706f2543Smrg
39706f2543Smrg
40706f2543Smrg#define XAA_GC_OP_EPILOGUE(pGC)\
41706f2543Smrg    pGCPriv->wrapOps = pGC->ops;\
42706f2543Smrg    pGC->funcs = oldFuncs;\
43706f2543Smrg    pGC->ops   = pGCPriv->XAAOps
44706f2543Smrg
45706f2543Smrg
46706f2543Smrg#define XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw)\
47706f2543Smrg    XAAGCPtr pGCPriv = (XAAGCPtr)dixLookupPrivate(&(pGC)->devPrivates, XAAGetGCKey()); \
48706f2543Smrg    XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pDraw));\
49706f2543Smrg    GCFuncs *oldFuncs = pGC->funcs;\
50706f2543Smrg    pGC->funcs = pGCPriv->wrapFuncs;\
51706f2543Smrg    pGC->ops = pGCPriv->wrapOps; \
52706f2543Smrg    SYNC_CHECK(pGC)
53706f2543Smrg
54706f2543Smrg#define XAA_PIXMAP_OP_EPILOGUE(pGC)\
55706f2543Smrg    pGCPriv->wrapOps = pGC->ops;\
56706f2543Smrg    pGC->funcs = oldFuncs;\
57706f2543Smrg    pGC->ops   = &XAAPixmapOps;\
58706f2543Smrg    pixPriv->flags |= DIRTY
59706f2543Smrg
60706f2543Smrg#ifdef HAVE_XORG_CONFIG_H
61706f2543Smrg#include <xorg-config.h>
62706f2543Smrg#endif
63706f2543Smrg
64706f2543Smrg#define XAA_RENDER_PROLOGUE(pScreen,field)\
65706f2543Smrg    (GetPictureScreen(pScreen)->field = \
66706f2543Smrg     ((XAAScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAGetScreenKey()))->field)
67706f2543Smrg
68706f2543Smrg#define XAA_RENDER_EPILOGUE(pScreen, field, wrapper)\
69706f2543Smrg    (GetPictureScreen(pScreen)->field = wrapper)
70706f2543Smrg
71706f2543Smrg/* This also works fine for drawables */
72706f2543Smrg
73706f2543Smrg#define SYNC_CHECK(pGC) {\
74706f2543Smrg     XAAInfoRecPtr infoRec =\
75706f2543Smrg((XAAScreenPtr)dixLookupPrivate(&(pGC)->pScreen->devPrivates, XAAGetScreenKey()))->AccelInfoRec;	\
76706f2543Smrg    if(infoRec->NeedToSync) {\
77706f2543Smrg	(*infoRec->Sync)(infoRec->pScrn);\
78706f2543Smrg	infoRec->NeedToSync = FALSE;\
79706f2543Smrg    }}
80