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