1
2#ifdef HAVE_XORG_CONFIG_H
3#include <xorg-config.h>
4#endif
5
6#include "misc.h"
7#include "xf86.h"
8#include "xf86_OSproc.h"
9
10#include <X11/X.h>
11#include "scrnintstr.h"
12#include "xf86str.h"
13#include "xaa.h"
14#include "xaalocal.h"
15#include "gcstruct.h"
16#include "pixmapstr.h"
17#include "xaawrap.h"
18
19
20
21static void
22XAAFillSpansFallback(
23    DrawablePtr pDraw,
24    GC		*pGC,
25    int		nInit,
26    DDXPointPtr pptInit,
27    int *pwidthInit,
28    int fSorted )
29{
30    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
31    SYNC_CHECK(pGC);
32    (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
33    XAA_GC_OP_EPILOGUE(pGC);
34}
35
36static void
37XAASetSpansFallback(
38    DrawablePtr		pDraw,
39    GCPtr		pGC,
40    char		*pcharsrc,
41    register DDXPointPtr ppt,
42    int			*pwidth,
43    int			nspans,
44    int			fSorted )
45{
46    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
47    SYNC_CHECK(pGC);
48    (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
49    XAA_GC_OP_EPILOGUE(pGC);
50}
51
52static void
53XAAPutImageFallback(
54    DrawablePtr pDraw,
55    GCPtr	pGC,
56    int		depth,
57    int x, int y, int w, int h,
58    int		leftPad,
59    int		format,
60    char 	*pImage )
61{
62    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
63    SYNC_CHECK(pGC);
64    (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
65		leftPad, format, pImage);
66    XAA_GC_OP_EPILOGUE(pGC);
67}
68
69static RegionPtr
70XAACopyAreaFallback(
71    DrawablePtr pSrc,
72    DrawablePtr pDst,
73    GC *pGC,
74    int srcx, int srcy,
75    int width, int height,
76    int dstx, int dsty )
77{
78    RegionPtr ret;
79
80    XAA_GC_OP_PROLOGUE(pGC);
81    if((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
82	IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
83	SYNC_CHECK(pGC);
84    }
85    ret = (*pGC->ops->CopyArea)(pSrc, pDst,
86            pGC, srcx, srcy, width, height, dstx, dsty);
87    XAA_GC_OP_EPILOGUE(pGC);
88    return ret;
89}
90
91static RegionPtr
92XAACopyPlaneFallback(
93    DrawablePtr	pSrc,
94    DrawablePtr	pDst,
95    GCPtr pGC,
96    int	srcx, int srcy,
97    int	width, int height,
98    int	dstx, int dsty,
99    unsigned long bitPlane )
100{
101    RegionPtr ret;
102
103    XAA_GC_OP_PROLOGUE(pGC);
104    if((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
105	IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
106	SYNC_CHECK(pGC);
107    }
108    ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
109	       pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
110    XAA_GC_OP_EPILOGUE(pGC);
111    return ret;
112}
113
114static void
115XAAPolyPointFallback(
116    DrawablePtr pDraw,
117    GCPtr pGC,
118    int mode,
119    int npt,
120    xPoint *pptInit )
121{
122    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
123    SYNC_CHECK(pGC);
124    (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
125    XAA_GC_OP_EPILOGUE(pGC);
126}
127
128
129static void
130XAAPolylinesFallback(
131    DrawablePtr pDraw,
132    GCPtr	pGC,
133    int		mode,
134    int		npt,
135    DDXPointPtr pptInit )
136{
137    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
138    SYNC_CHECK(pGC);
139    (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
140    XAA_GC_OP_EPILOGUE(pGC);
141}
142
143static void
144XAAPolySegmentFallback(
145    DrawablePtr	pDraw,
146    GCPtr	pGC,
147    int		nseg,
148    xSegment	*pSeg )
149{
150    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
151    SYNC_CHECK(pGC);
152    (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
153    XAA_GC_OP_EPILOGUE(pGC);
154}
155
156static void
157XAAPolyRectangleFallback(
158    DrawablePtr  pDraw,
159    GCPtr        pGC,
160    int	         nRectsInit,
161    xRectangle  *pRectsInit )
162{
163    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
164    SYNC_CHECK(pGC);
165    (*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
166    XAA_GC_OP_EPILOGUE(pGC);
167}
168
169static void
170XAAPolyArcFallback(
171    DrawablePtr	pDraw,
172    GCPtr	pGC,
173    int		narcs,
174    xArc	*parcs )
175{
176    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
177    SYNC_CHECK(pGC);
178    (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
179    XAA_GC_OP_EPILOGUE(pGC);
180}
181
182static void
183XAAFillPolygonFallback(
184    DrawablePtr	pDraw,
185    GCPtr	pGC,
186    int		shape,
187    int		mode,
188    int		count,
189    DDXPointPtr	ptsIn )
190{
191    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
192    SYNC_CHECK(pGC);
193    (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
194    XAA_GC_OP_EPILOGUE(pGC);
195}
196
197
198static void
199XAAPolyFillRectFallback(
200    DrawablePtr	pDraw,
201    GCPtr	pGC,
202    int		nrectFill,
203    xRectangle	*prectInit )
204{
205    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
206    SYNC_CHECK(pGC);
207    (*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
208    XAA_GC_OP_EPILOGUE(pGC);
209}
210
211
212static void
213XAAPolyFillArcFallback(
214    DrawablePtr	pDraw,
215    GCPtr	pGC,
216    int		narcs,
217    xArc	*parcs )
218{
219    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
220    SYNC_CHECK(pGC);
221    (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
222    XAA_GC_OP_EPILOGUE(pGC);
223}
224
225static int
226XAAPolyText8Fallback(
227    DrawablePtr pDraw,
228    GCPtr	pGC,
229    int		x,
230    int 	y,
231    int 	count,
232    char	*chars )
233{
234    int ret;
235
236    XAA_GC_OP_PROLOGUE(pGC);
237    SYNC_CHECK(pGC);
238    ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
239    XAA_GC_OP_EPILOGUE(pGC);
240    return ret;
241}
242
243static int
244XAAPolyText16Fallback(
245    DrawablePtr pDraw,
246    GCPtr	pGC,
247    int		x,
248    int		y,
249    int 	count,
250    unsigned short *chars )
251{
252    int ret;
253
254    XAA_GC_OP_PROLOGUE(pGC);
255    SYNC_CHECK(pGC);
256    ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
257    XAA_GC_OP_EPILOGUE(pGC);
258    return ret;
259}
260
261static void
262XAAImageText8Fallback(
263    DrawablePtr pDraw,
264    GCPtr	pGC,
265    int		x,
266    int		y,
267    int 	count,
268    char	*chars )
269{
270    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
271    SYNC_CHECK(pGC);
272    (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
273    XAA_GC_OP_EPILOGUE(pGC);
274}
275
276static void
277XAAImageText16Fallback(
278    DrawablePtr pDraw,
279    GCPtr	pGC,
280    int		x,
281    int		y,
282    int 	count,
283    unsigned short *chars )
284{
285    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
286    SYNC_CHECK(pGC);
287    (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
288    XAA_GC_OP_EPILOGUE(pGC);
289}
290
291
292static void
293XAAImageGlyphBltFallback(
294    DrawablePtr pDraw,
295    GCPtr pGC,
296    int xInit, int yInit,
297    unsigned int nglyph,
298    CharInfoPtr *ppci,
299    pointer pglyphBase )
300{
301    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
302    SYNC_CHECK(pGC);
303    (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph, ppci, pglyphBase);
304    XAA_GC_OP_EPILOGUE(pGC);
305}
306
307static void
308XAAPolyGlyphBltFallback(
309    DrawablePtr pDraw,
310    GCPtr pGC,
311    int xInit, int yInit,
312    unsigned int nglyph,
313    CharInfoPtr *ppci,
314    pointer pglyphBase )
315{
316    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
317    SYNC_CHECK(pGC);
318    (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph, ppci, pglyphBase);
319    XAA_GC_OP_EPILOGUE(pGC);
320}
321
322static void
323XAAPushPixelsFallback(
324    GCPtr	pGC,
325    PixmapPtr	pBitMap,
326    DrawablePtr pDraw,
327    int	dx, int dy, int xOrg, int yOrg )
328{
329    XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
330    SYNC_CHECK(pGC);
331    (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
332    XAA_GC_OP_EPILOGUE(pGC);
333}
334
335GCOps XAAFallbackOps = {
336    XAAFillSpansFallback, XAASetSpansFallback,
337    XAAPutImageFallback, XAACopyAreaFallback,
338    XAACopyPlaneFallback, XAAPolyPointFallback,
339    XAAPolylinesFallback, XAAPolySegmentFallback,
340    XAAPolyRectangleFallback, XAAPolyArcFallback,
341    XAAFillPolygonFallback, XAAPolyFillRectFallback,
342    XAAPolyFillArcFallback, XAAPolyText8Fallback,
343    XAAPolyText16Fallback, XAAImageText8Fallback,
344    XAAImageText16Fallback, XAAImageGlyphBltFallback,
345    XAAPolyGlyphBltFallback, XAAPushPixelsFallback,
346};
347
348GCOps *XAAGetFallbackOps(void)
349{
350    return &XAAFallbackOps;
351}
352