282 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			282 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
| 
 | |
| #ifdef HAVE_XORG_CONFIG_H
 | |
| #include <xorg-config.h>
 | |
| #endif
 | |
| 
 | |
| #include "misc.h"
 | |
| #include "xf86.h"
 | |
| #include "xf86_OSproc.h"
 | |
| 
 | |
| #include <X11/X.h>
 | |
| #include "scrnintstr.h"
 | |
| #include "xf86str.h"
 | |
| #include "xaa.h"
 | |
| #include "xaalocal.h"
 | |
| #include "gcstruct.h"
 | |
| #include "pixmapstr.h"
 | |
| #include "xaawrap.h"
 | |
| 
 | |
| static void
 | |
| XAAFillSpansFallback(DrawablePtr pDraw,
 | |
|                      GC * pGC,
 | |
|                      int nInit,
 | |
|                      DDXPointPtr pptInit, int *pwidthInit, int fSorted)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->FillSpans) (pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAASetSpansFallback(DrawablePtr pDraw,
 | |
|                     GCPtr pGC,
 | |
|                     char *pcharsrc,
 | |
|                     register DDXPointPtr ppt,
 | |
|                     int *pwidth, int nspans, int fSorted)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->SetSpans) (pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPutImageFallback(DrawablePtr pDraw,
 | |
|                     GCPtr pGC,
 | |
|                     int depth,
 | |
|                     int x, int y, int w, int h,
 | |
|                     int leftPad, int format, char *pImage)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h,
 | |
|                            leftPad, format, pImage);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static RegionPtr
 | |
| XAACopyAreaFallback(DrawablePtr pSrc,
 | |
|                     DrawablePtr pDst,
 | |
|                     GC * pGC,
 | |
|                     int srcx, int srcy,
 | |
|                     int width, int height, int dstx, int dsty)
 | |
| {
 | |
|     RegionPtr ret;
 | |
| 
 | |
|     XAA_GC_OP_PROLOGUE(pGC);
 | |
|     if ((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
 | |
|         IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
 | |
|         SYNC_CHECK(pGC);
 | |
|     }
 | |
|     ret = (*pGC->ops->CopyArea) (pSrc, pDst,
 | |
|                                  pGC, srcx, srcy, width, height, dstx, dsty);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| static RegionPtr
 | |
| XAACopyPlaneFallback(DrawablePtr pSrc,
 | |
|                      DrawablePtr pDst,
 | |
|                      GCPtr pGC,
 | |
|                      int srcx, int srcy,
 | |
|                      int width, int height,
 | |
|                      int dstx, int dsty, unsigned long bitPlane)
 | |
| {
 | |
|     RegionPtr ret;
 | |
| 
 | |
|     XAA_GC_OP_PROLOGUE(pGC);
 | |
|     if ((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
 | |
|         IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
 | |
|         SYNC_CHECK(pGC);
 | |
|     }
 | |
|     ret = (*pGC->ops->CopyPlane) (pSrc, pDst,
 | |
|                                   pGC, srcx, srcy, width, height, dstx, dsty,
 | |
|                                   bitPlane);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolyPointFallback(DrawablePtr pDraw,
 | |
|                      GCPtr pGC, int mode, int npt, xPoint * pptInit)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolyPoint) (pDraw, pGC, mode, npt, pptInit);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolylinesFallback(DrawablePtr pDraw,
 | |
|                      GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->Polylines) (pDraw, pGC, mode, npt, pptInit);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolySegmentFallback(DrawablePtr pDraw, GCPtr pGC, int nseg, xSegment * pSeg)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolySegment) (pDraw, pGC, nseg, pSeg);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolyRectangleFallback(DrawablePtr pDraw,
 | |
|                          GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolyRectangle) (pDraw, pGC, nRectsInit, pRectsInit);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolyArcFallback(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolyArc) (pDraw, pGC, narcs, parcs);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAFillPolygonFallback(DrawablePtr pDraw,
 | |
|                        GCPtr pGC,
 | |
|                        int shape, int mode, int count, DDXPointPtr ptsIn)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolyFillRectFallback(DrawablePtr pDraw,
 | |
|                         GCPtr pGC, int nrectFill, xRectangle *prectInit)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolyFillArcFallback(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, parcs);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static int
 | |
| XAAPolyText8Fallback(DrawablePtr pDraw,
 | |
|                      GCPtr pGC, int x, int y, int count, char *chars)
 | |
| {
 | |
|     int ret;
 | |
| 
 | |
|     XAA_GC_OP_PROLOGUE(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     ret = (*pGC->ops->PolyText8) (pDraw, pGC, x, y, count, chars);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| static int
 | |
| XAAPolyText16Fallback(DrawablePtr pDraw,
 | |
|                       GCPtr pGC, int x, int y, int count, unsigned short *chars)
 | |
| {
 | |
|     int ret;
 | |
| 
 | |
|     XAA_GC_OP_PROLOGUE(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     ret = (*pGC->ops->PolyText16) (pDraw, pGC, x, y, count, chars);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAImageText8Fallback(DrawablePtr pDraw,
 | |
|                       GCPtr pGC, int x, int y, int count, char *chars)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->ImageText8) (pDraw, pGC, x, y, count, chars);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAImageText16Fallback(DrawablePtr pDraw,
 | |
|                        GCPtr pGC,
 | |
|                        int x, int y, int count, unsigned short *chars)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->ImageText16) (pDraw, pGC, x, y, count, chars);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAImageGlyphBltFallback(DrawablePtr pDraw,
 | |
|                          GCPtr pGC,
 | |
|                          int xInit, int yInit,
 | |
|                          unsigned int nglyph,
 | |
|                          CharInfoPtr * ppci, pointer pglyphBase)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->ImageGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph, ppci,
 | |
|                                 pglyphBase);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPolyGlyphBltFallback(DrawablePtr pDraw,
 | |
|                         GCPtr pGC,
 | |
|                         int xInit, int yInit,
 | |
|                         unsigned int nglyph,
 | |
|                         CharInfoPtr * ppci, pointer pglyphBase)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PolyGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph, ppci,
 | |
|                                pglyphBase);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| static void
 | |
| XAAPushPixelsFallback(GCPtr pGC,
 | |
|                       PixmapPtr pBitMap,
 | |
|                       DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
 | |
| {
 | |
|     XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
 | |
|     SYNC_CHECK(pGC);
 | |
|     (*pGC->ops->PushPixels) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
 | |
|     XAA_GC_OP_EPILOGUE(pGC);
 | |
| }
 | |
| 
 | |
| GCOps XAAFallbackOps = {
 | |
|     XAAFillSpansFallback, XAASetSpansFallback,
 | |
|     XAAPutImageFallback, XAACopyAreaFallback,
 | |
|     XAACopyPlaneFallback, XAAPolyPointFallback,
 | |
|     XAAPolylinesFallback, XAAPolySegmentFallback,
 | |
|     XAAPolyRectangleFallback, XAAPolyArcFallback,
 | |
|     XAAFillPolygonFallback, XAAPolyFillRectFallback,
 | |
|     XAAPolyFillArcFallback, XAAPolyText8Fallback,
 | |
|     XAAPolyText16Fallback, XAAImageText8Fallback,
 | |
|     XAAImageText16Fallback, XAAImageGlyphBltFallback,
 | |
|     XAAPolyGlyphBltFallback, XAAPushPixelsFallback,
 | |
| };
 | |
| 
 | |
| GCOps *
 | |
| XAAGetFallbackOps(void)
 | |
| {
 | |
|     return &XAAFallbackOps;
 | |
| }
 |