xaaGC.c revision 706f2543
1
2#ifdef HAVE_XORG_CONFIG_H
3#include <xorg-config.h>
4#endif
5
6#include <string.h>
7
8#include "misc.h"
9#include "xf86.h"
10#include "xf86_OSproc.h"
11
12#include <X11/X.h>
13#include "scrnintstr.h"
14#include "xf86str.h"
15#include "xaa.h"
16#include "xaalocal.h"
17#include "migc.h"
18#include "gcstruct.h"
19#include "pixmapstr.h"
20#include "xaawrap.h"
21
22static void XAAValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
23static void XAAChangeGC(GCPtr pGC, unsigned long mask);
24static void XAACopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
25static void XAADestroyGC(GCPtr pGC);
26static void XAAChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
27static void XAADestroyClip(GCPtr pGC);
28static void XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc);
29
30GCFuncs XAAGCFuncs = {
31    XAAValidateGC, XAAChangeGC, XAACopyGC, XAADestroyGC,
32    XAAChangeClip, XAADestroyClip, XAACopyClip
33};
34
35extern GCOps XAAPixmapOps;
36
37Bool
38XAACreateGC(GCPtr pGC)
39{
40    ScreenPtr    pScreen = pGC->pScreen;
41    XAAGCPtr     pGCPriv = (XAAGCPtr)dixLookupPrivate(&pGC->devPrivates,
42						      XAAGetGCKey());
43    Bool         ret;
44
45    XAA_SCREEN_PROLOGUE(pScreen,CreateGC);
46
47    if((ret = (*pScreen->CreateGC)(pGC))) {
48	pGCPriv->wrapOps = NULL;
49	pGCPriv->wrapFuncs = pGC->funcs;
50	pGCPriv->XAAOps = &XAAFallbackOps;
51	pGC->funcs = &XAAGCFuncs;
52    }
53
54    XAA_SCREEN_EPILOGUE(pScreen,CreateGC,XAACreateGC);
55
56    return ret;
57}
58
59
60static void
61XAAValidateGC(
62   GCPtr         pGC,
63   unsigned long changes,
64   DrawablePtr   pDraw
65){
66    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
67    XAA_GC_FUNC_PROLOGUE(pGC);
68
69    (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
70
71    if((changes & GCPlaneMask) &&
72       ((pGC->planemask & infoRec->FullPlanemasks[pGC->depth - 1]) ==
73	 infoRec->FullPlanemasks[pGC->depth - 1]))
74    {
75	pGC->planemask = ~0;
76    }
77
78    if(pGC->depth != 32) {
79	/* 0xffffffff is reserved for transparency */
80	if(pGC->bgPixel == 0xffffffff)
81	    pGC->bgPixel = 0x7fffffff;
82	if(pGC->fgPixel == 0xffffffff)
83	    pGC->fgPixel = 0x7fffffff;
84    }
85
86    if((pDraw->type == DRAWABLE_PIXMAP) &&
87       !IS_OFFSCREEN_PIXMAP(pDraw) &&
88       !PIXMAP_IS_SCREEN(pDraw)) {
89	pGCPriv->flags = OPS_ARE_PIXMAP;
90        pGCPriv->changes |= changes;
91
92	/* make sure we're not using videomemory pixmaps to render
93	   onto system memory drawables */
94
95	if((pGC->fillStyle == FillTiled) &&
96	    IS_OFFSCREEN_PIXMAP(pGC->tile.pixmap) &&
97	    !OFFSCREEN_PIXMAP_LOCKED(pGC->tile.pixmap)) {
98
99	    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
100	    FBAreaPtr area = pPriv->offscreenArea;
101
102	    XAARemoveAreaCallback(area); /* clobbers pPriv->offscreenArea */
103	    xf86FreeOffscreenArea(area);
104	}
105    }
106    else if(!infoRec->pScrn->vtSema && (pDraw->type == DRAWABLE_WINDOW)) {
107	pGCPriv->flags = 0;
108        pGCPriv->changes |= changes;
109    }
110    else {
111	if(!(pGCPriv->flags & OPS_ARE_ACCEL)) {
112	    changes |= pGCPriv->changes;
113	    pGCPriv->changes = 0;
114	}
115	pGCPriv->flags = OPS_ARE_ACCEL;
116
117#if 1
118	/* Ugh.  If we can't use the blitter on offscreen pixmaps used
119	   as tiles, then we need to move them out as cfb can't handle
120	   tiles with non-zero origins */
121
122	if((pGC->fillStyle == FillTiled) &&
123	    IS_OFFSCREEN_PIXMAP(pGC->tile.pixmap) &&
124	    (DO_PIXMAP_COPY != (*infoRec->TiledFillChooser)(pGC))) {
125
126	    XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
127	    FBAreaPtr area = pPriv->offscreenArea;
128
129	    XAARemoveAreaCallback(area); /* clobbers pPriv->offscreenArea */
130	    xf86FreeOffscreenArea(area);
131	}
132#endif
133    }
134
135    XAA_GC_FUNC_EPILOGUE(pGC);
136
137    if(!(pGCPriv->flags & OPS_ARE_ACCEL)) return;
138
139    if((changes & GCTile) && !pGC->tileIsPixel && pGC->tile.pixmap){
140	XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
141
142	if(pixPriv->flags & DIRTY) {
143	    pixPriv->flags &= ~(DIRTY | REDUCIBILITY_MASK);
144	    pGC->tile.pixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
145	}
146    }
147    if((changes & GCStipple) && pGC->stipple){
148	XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
149
150	if(pixPriv->flags & DIRTY) {
151	    pixPriv->flags &= ~(DIRTY | REDUCIBILITY_MASK);
152	    pGC->stipple->drawable.serialNumber = NEXT_SERIAL_NUMBER;
153	}
154    }
155
156    /* If our Ops are still the default ones we need to allocate new ones */
157    if(pGC->ops == &XAAFallbackOps) {
158	if(!(pGCPriv->XAAOps = malloc(sizeof(GCOps)))) {
159	    pGCPriv->XAAOps = &XAAFallbackOps;
160	    return;
161	}
162	/* make a modifiable copy of the default ops */
163	memcpy(pGCPriv->XAAOps, &XAAFallbackOps, sizeof(GCOps));
164	pGC->ops = pGCPriv->XAAOps;
165	changes = ~0;
166    }
167
168    if(!changes) return;
169
170    if((changes & GCDashList) && infoRec->ComputeDash)
171	infoRec->ComputeDash(pGC);
172
173    if(changes & infoRec->FillSpansMask)
174	(*infoRec->ValidateFillSpans)(pGC, changes, pDraw);
175
176    if(changes & infoRec->SetSpansMask)
177	(*infoRec->ValidateSetSpans)(pGC, changes, pDraw);
178
179    if(changes & infoRec->PutImageMask)
180	(*infoRec->ValidatePutImage)(pGC, changes, pDraw);
181
182    if(changes & infoRec->CopyAreaMask)
183	(*infoRec->ValidateCopyArea)(pGC, changes, pDraw);
184
185    if(changes & infoRec->CopyPlaneMask)
186	(*infoRec->ValidateCopyPlane)(pGC, changes, pDraw);
187
188    if(changes & infoRec->PolyPointMask)
189	(*infoRec->ValidatePolyPoint)(pGC, changes, pDraw);
190
191    if(changes & infoRec->PolylinesMask)
192	(*infoRec->ValidatePolylines)(pGC, changes, pDraw);
193
194    if(changes & infoRec->PolySegmentMask)
195	(*infoRec->ValidatePolySegment)(pGC, changes, pDraw);
196
197    if(changes & infoRec->PolyRectangleMask)
198	(*infoRec->ValidatePolyRectangle)(pGC, changes, pDraw);
199
200    if(changes & infoRec->PolyArcMask)
201	(*infoRec->ValidatePolyArc)(pGC, changes, pDraw);
202
203    if(changes & infoRec->FillPolygonMask)
204	(*infoRec->ValidateFillPolygon)(pGC, changes, pDraw);
205
206    if(changes & infoRec->PolyFillRectMask)
207	(*infoRec->ValidatePolyFillRect)(pGC, changes, pDraw);
208
209    if(changes & infoRec->PolyFillArcMask)
210	(*infoRec->ValidatePolyFillArc)(pGC, changes, pDraw);
211
212    if(changes & infoRec->PolyGlyphBltMask)
213	(*infoRec->ValidatePolyGlyphBlt)(pGC, changes, pDraw);
214
215    if(changes & infoRec->ImageGlyphBltMask)
216	(*infoRec->ValidateImageGlyphBlt)(pGC, changes, pDraw);
217
218    if(changes & infoRec->PolyText8Mask)
219	(*infoRec->ValidatePolyText8)(pGC, changes, pDraw);
220
221    if(changes & infoRec->PolyText16Mask)
222	(*infoRec->ValidatePolyText16)(pGC, changes, pDraw);
223
224    if(changes & infoRec->ImageText8Mask)
225	(*infoRec->ValidateImageText8)(pGC, changes, pDraw);
226
227    if(changes & infoRec->ImageText16Mask)
228	(*infoRec->ValidateImageText16)(pGC, changes, pDraw);
229
230    if(changes & infoRec->PushPixelsMask)
231	(*infoRec->ValidatePushPixels)(pGC, changes, pDraw);
232}
233
234
235static void
236XAADestroyGC(GCPtr pGC)
237{
238    XAA_GC_FUNC_PROLOGUE (pGC);
239
240    if(pGCPriv->XAAOps != &XAAFallbackOps)
241	free(pGCPriv->XAAOps);
242
243    free(pGCPriv->DashPattern);
244    pGCPriv->flags = 0;
245
246    (*pGC->funcs->DestroyGC)(pGC);
247    XAA_GC_FUNC_EPILOGUE (pGC);
248}
249
250static void
251XAAChangeGC (
252    GCPtr	    pGC,
253    unsigned long   mask
254)
255{
256    XAA_GC_FUNC_PROLOGUE (pGC);
257    (*pGC->funcs->ChangeGC) (pGC, mask);
258    XAA_GC_FUNC_EPILOGUE (pGC);
259
260   /* we have to assume that shared memory pixmaps are dirty
261      because we can't wrap all operations on them */
262
263    if((mask & GCTile) && !pGC->tileIsPixel &&
264	PIXMAP_IS_SHARED(pGC->tile.pixmap))
265    {
266	XAAPixmapPtr pPixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
267	pPixPriv->flags |= DIRTY;
268    }
269
270    if((mask & GCStipple) && PIXMAP_IS_SHARED(pGC->stipple)){
271	XAAPixmapPtr pPixPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
272	pPixPriv->flags |= DIRTY;
273    }
274}
275
276static void
277XAACopyGC (
278    GCPtr	    pGCSrc,
279    unsigned long   mask,
280    GCPtr	    pGCDst)
281{
282    XAA_GC_FUNC_PROLOGUE (pGCDst);
283    (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
284    XAA_GC_FUNC_EPILOGUE (pGCDst);
285}
286static void
287XAAChangeClip (
288    GCPtr   pGC,
289    int		type,
290    pointer	pvalue,
291    int		nrects )
292{
293    XAA_GC_FUNC_PROLOGUE (pGC);
294    (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
295    XAA_GC_FUNC_EPILOGUE (pGC);
296}
297
298static void
299XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc)
300{
301    XAA_GC_FUNC_PROLOGUE (pgcDst);
302    (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
303    XAA_GC_FUNC_EPILOGUE (pgcDst);
304}
305
306static void
307XAADestroyClip(GCPtr pGC)
308{
309    XAA_GC_FUNC_PROLOGUE (pGC);
310    (* pGC->funcs->DestroyClip)(pGC);
311    XAA_GC_FUNC_EPILOGUE (pGC);
312}
313
314/**** Pixmap Wrappers ****/
315
316
317
318static void
319XAAFillSpansPixmap(
320    DrawablePtr pDraw,
321    GC		*pGC,
322    int		nInit,
323    DDXPointPtr pptInit,
324    int *pwidthInit,
325    int fSorted
326){
327    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
328    (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
329    XAA_PIXMAP_OP_EPILOGUE(pGC);
330}
331
332static void
333XAASetSpansPixmap(
334    DrawablePtr		pDraw,
335    GCPtr		pGC,
336    char		*pcharsrc,
337    register DDXPointPtr ppt,
338    int			*pwidth,
339    int			nspans,
340    int			fSorted
341){
342    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
343    (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
344    XAA_PIXMAP_OP_EPILOGUE(pGC);
345}
346
347static void
348XAAPutImagePixmap(
349    DrawablePtr pDraw,
350    GCPtr	pGC,
351    int		depth,
352    int x, int y, int w, int h,
353    int		leftPad,
354    int		format,
355    char 	*pImage
356){
357    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
358    (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
359		leftPad, format, pImage);
360    XAA_PIXMAP_OP_EPILOGUE(pGC);
361}
362
363static RegionPtr
364XAACopyAreaPixmap(
365    DrawablePtr pSrc,
366    DrawablePtr pDst,
367    GC *pGC,
368    int srcx, int srcy,
369    int width, int height,
370    int dstx, int dsty
371){
372    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
373    RegionPtr ret;
374
375    if(infoRec->pScrn->vtSema &&
376	((pSrc->type == DRAWABLE_WINDOW) || IS_OFFSCREEN_PIXMAP(pSrc)))
377    {
378	if(infoRec->ReadPixmap && (pGC->alu == GXcopy) &&
379           (pSrc->bitsPerPixel == pDst->bitsPerPixel) &&
380          ((pGC->planemask & infoRec->FullPlanemasks[pSrc->depth - 1])
381              == infoRec->FullPlanemasks[pSrc->depth - 1]))
382        {
383            XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pDst));
384	    pixPriv->flags |= DIRTY;
385
386            return (XAABitBlt( pSrc, pDst, pGC,
387                srcx, srcy, width, height, dstx, dsty,
388                XAADoImageRead, 0L));
389        } else
390	if(infoRec->NeedToSync) {
391	   (*infoRec->Sync)(infoRec->pScrn);
392	    infoRec->NeedToSync = FALSE;
393	}
394    }
395
396    {
397	XAA_PIXMAP_OP_PROLOGUE(pGC, pDst);
398	ret = (*pGC->ops->CopyArea)(pSrc, pDst,
399            pGC, srcx, srcy, width, height, dstx, dsty);
400	XAA_PIXMAP_OP_EPILOGUE(pGC);
401    }
402    return ret;
403}
404
405static RegionPtr
406XAACopyPlanePixmap(
407    DrawablePtr	pSrc,
408    DrawablePtr	pDst,
409    GCPtr pGC,
410    int	srcx, int srcy,
411    int	width, int height,
412    int	dstx, int dsty,
413    unsigned long bitPlane
414){
415    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
416    RegionPtr ret;
417
418    XAA_PIXMAP_OP_PROLOGUE(pGC, pDst);
419
420    if(infoRec->pScrn->vtSema &&
421	((pSrc->type == DRAWABLE_WINDOW) || IS_OFFSCREEN_PIXMAP(pSrc))){
422	if(infoRec->NeedToSync) {
423	   (*infoRec->Sync)(infoRec->pScrn);
424	    infoRec->NeedToSync = FALSE;
425	}
426    }
427
428    ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
429	       pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
430    XAA_PIXMAP_OP_EPILOGUE(pGC);
431    return ret;
432}
433
434static void
435XAAPolyPointPixmap(
436    DrawablePtr pDraw,
437    GCPtr pGC,
438    int mode,
439    int npt,
440    xPoint *pptInit
441){
442    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
443    (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
444    XAA_PIXMAP_OP_EPILOGUE(pGC);
445}
446
447
448static void
449XAAPolylinesPixmap(
450    DrawablePtr pDraw,
451    GCPtr	pGC,
452    int		mode,
453    int		npt,
454    DDXPointPtr pptInit
455){
456    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
457    (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
458    XAA_PIXMAP_OP_EPILOGUE(pGC);
459}
460
461static void
462XAAPolySegmentPixmap(
463    DrawablePtr	pDraw,
464    GCPtr	pGC,
465    int		nseg,
466    xSegment	*pSeg
467){
468    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
469    (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
470    XAA_PIXMAP_OP_EPILOGUE(pGC);
471}
472
473static void
474XAAPolyRectanglePixmap(
475    DrawablePtr  pDraw,
476    GCPtr        pGC,
477    int	         nRectsInit,
478    xRectangle  *pRectsInit
479){
480    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
481    (*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
482    XAA_PIXMAP_OP_EPILOGUE(pGC);
483}
484
485static void
486XAAPolyArcPixmap(
487    DrawablePtr	pDraw,
488    GCPtr	pGC,
489    int		narcs,
490    xArc	*parcs
491){
492    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
493    (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
494    XAA_PIXMAP_OP_EPILOGUE(pGC);
495}
496
497static void
498XAAFillPolygonPixmap(
499    DrawablePtr	pDraw,
500    GCPtr	pGC,
501    int		shape,
502    int		mode,
503    int		count,
504    DDXPointPtr	ptsIn
505){
506    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
507    (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
508    XAA_PIXMAP_OP_EPILOGUE(pGC);
509}
510
511
512static void
513XAAPolyFillRectPixmap(
514    DrawablePtr	pDraw,
515    GCPtr	pGC,
516    int		nrectFill,
517    xRectangle	*prectInit
518){
519    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
520    (*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
521    XAA_PIXMAP_OP_EPILOGUE(pGC);
522}
523
524
525static void
526XAAPolyFillArcPixmap(
527    DrawablePtr	pDraw,
528    GCPtr	pGC,
529    int		narcs,
530    xArc	*parcs
531){
532    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
533    (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
534    XAA_PIXMAP_OP_EPILOGUE(pGC);
535}
536
537static int
538XAAPolyText8Pixmap(
539    DrawablePtr pDraw,
540    GCPtr	pGC,
541    int		x,
542    int 	y,
543    int 	count,
544    char	*chars
545){
546    int ret;
547
548    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
549    ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
550    XAA_PIXMAP_OP_EPILOGUE(pGC);
551    return ret;
552}
553
554static int
555XAAPolyText16Pixmap(
556    DrawablePtr pDraw,
557    GCPtr	pGC,
558    int		x,
559    int		y,
560    int 	count,
561    unsigned short *chars
562){
563    int ret;
564
565    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
566    ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
567    XAA_PIXMAP_OP_EPILOGUE(pGC);
568    return ret;
569}
570
571static void
572XAAImageText8Pixmap(
573    DrawablePtr pDraw,
574    GCPtr	pGC,
575    int		x,
576    int		y,
577    int 	count,
578    char	*chars
579){
580    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
581    (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
582    XAA_PIXMAP_OP_EPILOGUE(pGC);
583}
584static void
585XAAImageText16Pixmap(
586    DrawablePtr pDraw,
587    GCPtr	pGC,
588    int		x,
589    int		y,
590    int 	count,
591    unsigned short *chars
592){
593    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
594    (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
595    XAA_PIXMAP_OP_EPILOGUE(pGC);
596}
597
598
599static void
600XAAImageGlyphBltPixmap(
601    DrawablePtr pDraw,
602    GCPtr pGC,
603    int xInit, int yInit,
604    unsigned int nglyph,
605    CharInfoPtr *ppci,
606    pointer pglyphBase
607){
608    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
609    (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph,
610					ppci, pglyphBase);
611    XAA_PIXMAP_OP_EPILOGUE(pGC);
612}
613
614static void
615XAAPolyGlyphBltPixmap(
616    DrawablePtr pDraw,
617    GCPtr pGC,
618    int xInit, int yInit,
619    unsigned int nglyph,
620    CharInfoPtr *ppci,
621    pointer pglyphBase
622){
623    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
624    (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph,
625				ppci, pglyphBase);
626    XAA_PIXMAP_OP_EPILOGUE(pGC);
627}
628
629static void
630XAAPushPixelsPixmap(
631    GCPtr	pGC,
632    PixmapPtr	pBitMap,
633    DrawablePtr pDraw,
634    int	dx, int dy, int xOrg, int yOrg
635){
636    XAA_PIXMAP_OP_PROLOGUE(pGC, pDraw);
637    (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
638    XAA_PIXMAP_OP_EPILOGUE(pGC);
639}
640
641GCOps XAAPixmapOps = {
642    XAAFillSpansPixmap, XAASetSpansPixmap,
643    XAAPutImagePixmap, XAACopyAreaPixmap,
644    XAACopyPlanePixmap, XAAPolyPointPixmap,
645    XAAPolylinesPixmap, XAAPolySegmentPixmap,
646    XAAPolyRectanglePixmap, XAAPolyArcPixmap,
647    XAAFillPolygonPixmap, XAAPolyFillRectPixmap,
648    XAAPolyFillArcPixmap, XAAPolyText8Pixmap,
649    XAAPolyText16Pixmap, XAAImageText8Pixmap,
650    XAAImageText16Pixmap, XAAImageGlyphBltPixmap,
651    XAAPolyGlyphBltPixmap, XAAPushPixelsPixmap,
652};
653