diff options
-rw-r--r-- | fb/fb.h | 69 | ||||
-rw-r--r-- | fb/fb24_32.c | 14 | ||||
-rw-r--r-- | fb/fballpriv.c | 5 | ||||
-rw-r--r-- | fb/fbarc.c | 1 | ||||
-rw-r--r-- | fb/fbbits.h | 13 | ||||
-rw-r--r-- | fb/fbcompose.c | 12 | ||||
-rw-r--r-- | fb/fbcopy.c | 10 | ||||
-rw-r--r-- | fb/fbfill.c | 13 | ||||
-rw-r--r-- | fb/fbgc.c | 7 | ||||
-rw-r--r-- | fb/fbgetsp.c | 2 | ||||
-rw-r--r-- | fb/fbglyph.c | 8 | ||||
-rw-r--r-- | fb/fbimage.c | 6 | ||||
-rw-r--r-- | fb/fbpict.c | 39 | ||||
-rw-r--r-- | fb/fbpict.h | 1 | ||||
-rw-r--r-- | fb/fbpixmap.c | 6 | ||||
-rw-r--r-- | fb/fbpoint.c | 1 | ||||
-rw-r--r-- | fb/fbpseudocolor.c | 4 | ||||
-rw-r--r-- | fb/fbpush.c | 1 | ||||
-rw-r--r-- | fb/fbscreen.c | 40 | ||||
-rw-r--r-- | fb/fbseg.c | 8 | ||||
-rw-r--r-- | fb/fbsetsp.c | 1 | ||||
-rw-r--r-- | fb/fbtrap.c | 4 | ||||
-rw-r--r-- | fb/fbwindow.c | 8 | ||||
-rw-r--r-- | fb/wfbrename.h | 2 |
24 files changed, 266 insertions, 9 deletions
@@ -47,8 +47,12 @@ #ifdef FB_ACCESS_WRAPPER #include "wfbrename.h" #define FBPREFIX(x) wfb##x +#define WRITE(ptr, val) ((*wfbWriteMemory)(ptr, val)) +#define READ(ptr) ((*wfbReadMemory)(ptr)) #else #define FBPREFIX(x) fb##x +#define WRITE(ptr, val) (*(ptr) = (val)) +#define READ(ptr) (*(ptr)) #endif /* @@ -595,6 +599,34 @@ extern WindowPtr *WindowTable; #define FB_SCREEN_PRIVATE #endif +/* Framebuffer access wrapper */ +#ifdef FB_ACCESS_WRAPPER +typedef FbBits (*ReadMemoryProcPtr)(FbBits *src); +typedef void (*WriteMemoryProcPtr)(FbBits *dst, FbBits value); +typedef void (*SetupWrapProcPtr)(ReadMemoryProcPtr *pRead, + WriteMemoryProcPtr *pWrite, + PixmapPtr pPixmap); +typedef void (*FinishWrapProcPtr)(PixmapPtr pPixmap); +#define fbPrepareAccess(pPix) \ + fbGetScreenPrivate((pPix)->drawable.pScreen)->setupWrap( \ + &wfbReadMemory, \ + &wfbWriteMemory, \ + (pPix)) +#define fbFinishAccess(pDrawable) { \ + PixmapPtr _pPix; \ + if ((pDrawable)->type != DRAWABLE_PIXMAP) \ + _pPix = fbGetWindowPixmap(pDrawable); \ + else \ + _pPix = (PixmapPtr) (pDrawable); \ + fbGetScreenPrivate(_pPix->drawable.pScreen)->finishWrap(_pPix); \ +} + +#else +#define fbPrepareAccess(pPix) +#define fbFinishAccess(pDraw) +#endif + + #ifdef FB_SCREEN_PRIVATE extern int fbScreenPrivateIndex; extern int fbGetScreenPrivateIndex(void); @@ -603,6 +635,10 @@ extern int fbGetScreenPrivateIndex(void); typedef struct { unsigned char win32bpp; /* window bpp for 32-bpp images */ unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */ +#ifdef FB_ACCESS_WRAPPER + SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */ + FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */ +#endif } FbScreenPrivRec, *FbScreenPrivPtr; #define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \ @@ -681,6 +717,7 @@ typedef struct { (xoff) = __fbPixOffXPix(_pPix); \ (yoff) = __fbPixOffYPix(_pPix); \ } \ + fbPrepareAccess(_pPix); \ (pointer) = (FbBits *) _pPix->devPrivate.ptr; \ (stride) = ((int) _pPix->devKind) / sizeof (FbBits); (void)(stride); \ (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \ @@ -697,6 +734,7 @@ typedef struct { (xoff) = __fbPixOffXPix(_pPix); \ (yoff) = __fbPixOffYPix(_pPix); \ } \ + fbPrepareAccess(_pPix); \ (pointer) = (FbStip *) _pPix->devPrivate.ptr; \ (stride) = ((int) _pPix->devKind) / sizeof (FbStip); (void)(stride); \ (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \ @@ -1745,6 +1783,31 @@ fbSetupScreen(ScreenPtr pScreen, int width, /* pixel width of frame buffer */ int bpp); /* bits per pixel of frame buffer */ +#ifdef FB_ACCESS_WRAPPER +Bool +wfbFinishScreenInit(ScreenPtr pScreen, + pointer pbits, + int xsize, + int ysize, + int dpix, + int dpiy, + int width, + int bpp, + SetupWrapProcPtr setupWrap, + FinishWrapProcPtr finishWrap); + +Bool +wfbScreenInit(ScreenPtr pScreen, + pointer pbits, + int xsize, + int ysize, + int dpix, + int dpiy, + int width, + int bpp, + SetupWrapProcPtr setupWrap, + FinishWrapProcPtr finishWrap); +#else Bool fbFinishScreenInit(ScreenPtr pScreen, pointer pbits, @@ -1764,6 +1827,7 @@ fbScreenInit(ScreenPtr pScreen, int dpiy, int width, int bpp); +#endif void fbInitializeBackingStore (ScreenPtr pScreen); @@ -2001,6 +2065,11 @@ fbReplicatePixel (Pixel p, int bpp); void fbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp); +#ifdef FB_ACCESS_WRAPPER +extern ReadMemoryProcPtr wfbReadMemory; +extern WriteMemoryProcPtr wfbWriteMemory; +#endif + /* * fbwindow.c */ diff --git a/fb/fb24_32.c b/fb/fb24_32.c index 572da4865..0fdd9b821 100644 --- a/fb/fb24_32.c +++ b/fb/fb24_32.c @@ -305,6 +305,8 @@ fb24_32GetSpans(DrawablePtr pDrawable, ppt++; pwidth++; } + + fbFinishAccess (pDrawable); } void @@ -366,6 +368,8 @@ fb24_32SetSpans (DrawablePtr pDrawable, ppt++; pwidth++; } + + fbFinishAccess (pDrawable); } /* @@ -429,6 +433,8 @@ fb24_32PutZImage (DrawablePtr pDrawable, alu, pm); } + + fbFinishAccess (pDrawable); } void @@ -463,6 +469,8 @@ fb24_32GetImage (DrawablePtr pDrawable, fb24_32BltUp (src + (y + srcYoff) * srcStride, srcStride, x + srcXoff, (CARD8 *) d, dstStride, 0, w, h, GXcopy, pm); + + fbFinishAccess (pDrawable); } void @@ -519,6 +527,9 @@ fb24_32CopyMtoN (DrawablePtr pSrcDrawable, pPriv->pm); pbox++; } + + fbFinishAccess (pSrcDrawable); + fbFinishAccess (pDstDrawable); } PixmapPtr @@ -563,6 +574,9 @@ fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel) GXcopy, FB_ALLONES); + fbFinishAccess (&pOldTile->drawable); + fbFinishAccess (&pNewTile->drawable); + return pNewTile; } diff --git a/fb/fballpriv.c b/fb/fballpriv.c index 3c05ff36e..4f807ed8d 100644 --- a/fb/fballpriv.c +++ b/fb/fballpriv.c @@ -90,3 +90,8 @@ fbAllocatePrivates(ScreenPtr pScreen, int *pGCIndex) #endif return TRUE; } + +#ifdef FB_ACCESS_WRAPPER +ReadMemoryProcPtr wfbReadMemory; +WriteMemoryProcPtr wfbWriteMemory; +#endif diff --git a/fb/fbarc.c b/fb/fbarc.c index 8f4d2960e..d2c1a76f1 100644 --- a/fb/fbarc.c +++ b/fb/fbarc.c @@ -109,6 +109,7 @@ fbPolyArc (DrawablePtr pDrawable, miPolyArc(pDrawable, pGC, 1, parcs); parcs++; } + fbFinishAccess (pDrawable); } else #endif diff --git a/fb/fbbits.h b/fb/fbbits.h index e5c006dbb..e99a297b5 100644 --- a/fb/fbbits.h +++ b/fb/fbbits.h @@ -119,6 +119,8 @@ BRESSOLID (DrawablePtr pDrawable, e += e3; } } + + fbFinishAccess (pDrawable); } #endif @@ -263,6 +265,8 @@ onOffOdd: dashlen = len; } } + + fbFinishAccess (pDrawable); } #endif @@ -710,8 +714,10 @@ POLYLINE (DrawablePtr pDrawable, intToX(pt2) + xoff, intToY(pt2) + yoff, npt == 0 && pGC->capStyle != CapNotLast, &dashoffset); - if (!npt) + if (!npt) { + fbFinishAccess (pDrawable); return; + } pt1 = pt2; pt2 = *pts++; npt--; @@ -776,6 +782,7 @@ POLYLINE (DrawablePtr pDrawable, { RROP(bits,and,xor); } + fbFinishAccess (pDrawable); return; } pt1 = pt2; @@ -786,6 +793,8 @@ POLYLINE (DrawablePtr pDrawable, } } } + + fbFinishAccess (pDrawable); } #endif @@ -950,6 +959,8 @@ POLYSEGMENT (DrawablePtr pDrawable, } } } + + fbFinishAccess (pDrawable); } #endif diff --git a/fb/fbcompose.c b/fb/fbcompose.c index b1903e90b..c7a728066 100644 --- a/fb/fbcompose.c +++ b/fb/fbcompose.c @@ -2652,6 +2652,7 @@ static void fbFetchSolid(PicturePtr pict, int x, int y, int width, CARD32 *buffe end = buffer + width; while (buffer < end) *buffer++ = color; + fbFinishAccess (pict->pDrawable); } static void fbFetch(PicturePtr pict, int x, int y, int width, CARD32 *buffer) @@ -2670,6 +2671,7 @@ static void fbFetch(PicturePtr pict, int x, int y, int width, CARD32 *buffer) bits += y*stride; fetch(bits, x, width, buffer, indexed); + fbFinishAccess (pict->pDrawable); } #define MOD(a,b) ((a) < 0 ? ((b) - ((-(a) - 1) % (b))) - 1 : (a) % (b)) @@ -2921,8 +2923,10 @@ static void fbFetchTransformed(PicturePtr pict, int x, int y, int width, CARD32 /* when using convolution filters one might get here without a transform */ if (pict->transform) { - if (!PictureTransformPoint3d (pict->transform, &v)) + if (!PictureTransformPoint3d (pict->transform, &v)) { + fbFinishAccess (pict->pDrawable); return; + } unit.vector[0] = pict->transform->matrix[0][0]; unit.vector[1] = pict->transform->matrix[1][0]; unit.vector[2] = pict->transform->matrix[2][0]; @@ -3352,6 +3356,8 @@ static void fbFetchTransformed(PicturePtr pict, int x, int y, int width, CARD32 v.vector[2] += unit.vector[2]; } } + + fbFinishAccess (pict->pDrawable); } @@ -3397,6 +3403,7 @@ static void fbStore(PicturePtr pict, int x, int y, int width, CARD32 *buffer) bits += y*stride; store(bits, buffer, x, width, indexed); + fbFinishAccess (pict->pDrawable); } static void fbStoreExternalAlpha(PicturePtr pict, int x, int y, int width, CARD32 *buffer) @@ -3436,6 +3443,9 @@ static void fbStoreExternalAlpha(PicturePtr pict, int x, int y, int width, CARD3 store(bits, buffer, x, width, indexed); astore(alpha_bits, buffer, ax - pict->alphaOrigin.x, width, aindexed); + + fbFinishAccess (pict->alphaMap->pDrawable); + fbFinishAccess (pict->pDrawable); } typedef void (*scanStoreProc)(PicturePtr , int , int , int , CARD32 *); diff --git a/fb/fbcopy.c b/fb/fbcopy.c index 0d1cb7faf..164cd3d67 100644 --- a/fb/fbcopy.c +++ b/fb/fbcopy.c @@ -103,6 +103,8 @@ fbCopyNtoN (DrawablePtr pSrcDrawable, #endif pbox++; } + fbFinishAccess (pDstDrawable); + fbFinishAccess (pSrcDrawable); } void @@ -173,6 +175,9 @@ fbCopy1toN (DrawablePtr pSrcDrawable, } pbox++; } + + fbFinishAccess (pDstDrawable); + fbFinishAccess (pSrcDrawable); } void @@ -221,6 +226,8 @@ fbCopyNto1 (DrawablePtr pSrcDrawable, (FbStip) pPriv->and, (FbStip) pPriv->xor, (FbStip) pPriv->bgand, (FbStip) pPriv->bgxor, bitplane); + fbFinishAccess (pDstDrawable); + fbFinishAccess (pSrcDrawable); } else { @@ -281,6 +288,9 @@ fbCopyNto1 (DrawablePtr pSrcDrawable, pPriv->and, pPriv->xor, pPriv->bgand, pPriv->bgxor); xfree (tmp); + + fbFinishAccess (pDstDrawable); + fbFinishAccess (pSrcDrawable); } pbox++; } diff --git a/fb/fbfill.c b/fb/fbfill.c index ad5025c84..7ef3a70f9 100644 --- a/fb/fbfill.c +++ b/fb/fbfill.c @@ -49,8 +49,10 @@ fbFill (DrawablePtr pDrawable, case FillSolid: #ifdef USE_MMX if (!pPriv->and && fbHaveMMX()) - if (fbSolidFillmmx (pDrawable, x, y, width, height, pPriv->xor)) + if (fbSolidFillmmx (pDrawable, x, y, width, height, pPriv->xor)) { + fbFinishAccess (pDrawable); return; + } #endif fbSolid (dst + (y + dstYoff) * dstStride, dstStride, @@ -92,6 +94,7 @@ fbFill (DrawablePtr pDrawable, (pGC->patOrg.x + pDrawable->x + dstXoff), pGC->patOrg.y + pDrawable->y - y); + fbFinishAccess (&pStip->drawable); } else { @@ -129,6 +132,7 @@ fbFill (DrawablePtr pDrawable, bgand, bgxor, pGC->patOrg.x + pDrawable->x + dstXoff, pGC->patOrg.y + pDrawable->y - y); + fbFinishAccess (&pStip->drawable); } break; } @@ -157,10 +161,12 @@ fbFill (DrawablePtr pDrawable, dstBpp, (pGC->patOrg.x + pDrawable->x + dstXoff) * dstBpp, pGC->patOrg.y + pDrawable->y - y); + fbFinishAccess (&pTile->drawable); break; } } fbValidateDrawable (pDrawable); + fbFinishAccess (pDrawable); } void @@ -215,8 +221,10 @@ fbSolidBoxClipped (DrawablePtr pDrawable, if (fbSolidFillmmx (pDrawable, partX1, partY1, (partX2 - partX1), (partY2 - partY1), - xor)) + xor)) { + fbFinishAccess (pDrawable); return; + } } #endif fbSolid (dst + (partY1 + dstYoff) * dstStride, @@ -228,4 +236,5 @@ fbSolidBoxClipped (DrawablePtr pDrawable, (partY2 - partY1), and, xor); } + fbFinishAccess (pDrawable); } @@ -116,6 +116,8 @@ fbPadPixmap (PixmapPtr pPixmap) *bits = b; bits += stride; } + + fbFinishAccess (&pPixmap->drawable); } /* @@ -183,10 +185,13 @@ fbCanEvenStipple (PixmapPtr pStipple, int bpp) /* check to see that the stipple repeats horizontally */ while (h--) { - if (!fbLineRepeat (bits, len, pStipple->drawable.width)) + if (!fbLineRepeat (bits, len, pStipple->drawable.width)) { + fbFinishAccess (&pStipple->drawable); return FALSE; + } bits += stride; } + fbFinishAccess (&pStipple->drawable); return TRUE; } diff --git a/fb/fbgetsp.c b/fb/fbgetsp.c index f77ea8c52..ffd8a1d7d 100644 --- a/fb/fbgetsp.c +++ b/fb/fbgetsp.c @@ -84,4 +84,6 @@ fbGetSpans(DrawablePtr pDrawable, ppt++; pwidth++; } + + fbFinishAccess (pDrawable); } diff --git a/fb/fbglyph.c b/fb/fbglyph.c index 8e819401b..78e26a993 100644 --- a/fb/fbglyph.c +++ b/fb/fbglyph.c @@ -284,7 +284,7 @@ fbPolyGlyphBlt (DrawablePtr pDrawable, glyph = 0; if (pGC->fillStyle == FillSolid && pPriv->and == 0) { - fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); + dstBpp = pDrawable->bitsPerPixel; switch (dstBpp) { case 8: glyph = fbGlyph8; break; case 16: glyph = fbGlyph16; break; @@ -312,6 +312,7 @@ fbPolyGlyphBlt (DrawablePtr pDrawable, if (glyph && gWidth <= sizeof (FbStip) * 8 && fbGlyphIn (fbGetCompositeClip(pGC), gx, gy, gWidth, gHeight)) { + fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); (*glyph) (dst + (gy + dstYoff) * dstStride, dstStride, dstBpp, @@ -319,6 +320,7 @@ fbPolyGlyphBlt (DrawablePtr pDrawable, pPriv->xor, gx + dstXoff, gHeight); + fbFinishAccess (pDrawable); } else #endif @@ -375,7 +377,7 @@ fbImageGlyphBlt (DrawablePtr pDrawable, glyph = 0; if (pPriv->and == 0) { - fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); + dstBpp = pDrawable->bitsPerPixel; switch (dstBpp) { case 8: glyph = fbGlyph8; break; case 16: glyph = fbGlyph16; break; @@ -443,6 +445,7 @@ fbImageGlyphBlt (DrawablePtr pDrawable, if (glyph && gWidth <= sizeof (FbStip) * 8 && fbGlyphIn (fbGetCompositeClip(pGC), gx, gy, gWidth, gHeight)) { + fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); (*glyph) (dst + (gy + dstYoff) * dstStride, dstStride, dstBpp, @@ -450,6 +453,7 @@ fbImageGlyphBlt (DrawablePtr pDrawable, pPriv->fg, gx + dstXoff, gHeight); + fbFinishAccess (pDrawable); } else #endif diff --git a/fb/fbimage.c b/fb/fbimage.c index bf5c06b57..479870991 100644 --- a/fb/fbimage.c +++ b/fb/fbimage.c @@ -170,6 +170,8 @@ fbPutZImage (DrawablePtr pDrawable, pm, dstBpp); } + + fbFinishAccess (pDrawable); } void @@ -277,6 +279,8 @@ fbPutXYImage (DrawablePtr pDrawable, fgand, fgxor, bgand, bgxor); } } + + fbFinishAccess (pDrawable); } void @@ -361,4 +365,6 @@ fbGetImage (DrawablePtr pDrawable, fbXorStip(GXcopy,0,FB_STIP_ALLONES), planeMask); } + + fbFinishAccess (pDrawable); } diff --git a/fb/fbpict.c b/fb/fbpict.c index c208643dd..2af0278bd 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -153,6 +153,9 @@ fbCompositeSolidMask_nx8x8888 (CARD8 op, dst++; } } + + fbFinishAccess (pMask->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -226,6 +229,9 @@ fbCompositeSolidMask_nx8888x8888C (CARD8 op, dst++; } } + + fbFinishAccess (pMask->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -288,6 +294,9 @@ fbCompositeSolidMask_nx8x0888 (CARD8 op, dst += 3; } } + + fbFinishAccess (pMask->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -351,6 +360,9 @@ fbCompositeSolidMask_nx8x0565 (CARD8 op, dst++; } } + + fbFinishAccess (pMask->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -424,6 +436,9 @@ fbCompositeSolidMask_nx8888x0565C (CARD8 op, dst++; } } + + fbFinishAccess (pMask->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -470,6 +485,9 @@ fbCompositeSrc_8888x8888 (CARD8 op, dst++; } } + + fbFinishAccess (pSrc->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -519,6 +537,9 @@ fbCompositeSrc_8888x0888 (CARD8 op, dst += 3; } } + + fbFinishAccess (pSrc->pDrawable); + fbFinishAccess (pDst->pDrawable); } void @@ -571,6 +592,9 @@ fbCompositeSrc_8888x0565 (CARD8 op, dst++; } } + + fbFinishAccess (pDst->pDrawable); + fbFinishAccess (pSrc->pDrawable); } void @@ -607,6 +631,9 @@ fbCompositeSrc_0565x0565 (CARD8 op, while (w--) *dst++ = *src++; } + + fbFinishAccess (pDst->pDrawable); + fbFinishAccess (pSrc->pDrawable); } void @@ -657,6 +684,9 @@ fbCompositeSrcAdd_8000x8000 (CARD8 op, dst++; } } + + fbFinishAccess (pDst->pDrawable); + fbFinishAccess (pSrc->pDrawable); } void @@ -714,6 +744,9 @@ fbCompositeSrcAdd_8888x8888 (CARD8 op, dst++; } } + + fbFinishAccess (pDst->pDrawable); + fbFinishAccess (pSrc->pDrawable); } void @@ -757,6 +790,9 @@ fbCompositeSrcAdd_1000x1000 (CARD8 op, FALSE, FALSE); + + fbFinishAccess(pDst->pDrawable); + fbFinishAccess(pSrc->pDrawable); } void @@ -821,6 +857,9 @@ fbCompositeSolidMask_nx1xn (CARD8 op, src, FB_ALLONES, 0x0); + + fbFinishAccess (pDst->pDrawable); + fbFinishAccess (pMask->pDrawable); } # define mod(a,b) ((b) == 1 ? 0 : (a) >= 0 ? (a) % (b) : (b) - (-a) % (b)) diff --git a/fb/fbpict.h b/fb/fbpict.h index 4ad032471..296cfbdfb 100644 --- a/fb/fbpict.h +++ b/fb/fbpict.h @@ -99,6 +99,7 @@ /* manage missing src alpha */ \ if ((pict)->pFormat->direct.alphaMask == 0) \ (bits) |= 0xff000000; \ + fbFinishAccess ((pict)->pDrawable); \ } #define fbComposeGetStart(pict,x,y,type,stride,line,mul) {\ diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c index f79f7010d..3fe38ef9f 100644 --- a/fb/fbpixmap.c +++ b/fb/fbpixmap.c @@ -160,6 +160,8 @@ fbPixmapToRegion(PixmapPtr pPix) FirstRect = REGION_BOXPTR(pReg); rects = FirstRect; + fbPrepareAccess(pPix); + pwLine = (FbBits *) pPix->devPrivate.ptr; nWidth = pPix->devKind >> (FB_SHIFT-3); @@ -311,6 +313,8 @@ fbPixmapToRegion(PixmapPtr pPix) pReg->data = (RegDataPtr)NULL; } } + + fbFinishAccess(&pPix->drawable); #ifdef DEBUG if (!miValidRegion(pReg)) FatalError("Assertion failed file %s, line %d: expr\n", __FILE__, __LINE__); @@ -362,6 +366,7 @@ fbValidateDrawable (DrawablePtr pDrawable) if (!fbValidateBits (first, stride, FB_HEAD_BITS) || !fbValidateBits (last, stride, FB_TAIL_BITS)) fbInitializeDrawable(pDrawable); + fbFinishAccess (pDrawable); } void @@ -383,5 +388,6 @@ fbInitializeDrawable (DrawablePtr pDrawable) last = bits + stride * pDrawable->height; fbSetBits (first, stride, FB_HEAD_BITS); fbSetBits (last, stride, FB_TAIL_BITS); + fbFinishAccess (pDrawable); } #endif /* FB_DEBUG */ diff --git a/fb/fbpoint.c b/fb/fbpoint.c index 7154b53a1..4e2ff0c64 100644 --- a/fb/fbpoint.c +++ b/fb/fbpoint.c @@ -160,4 +160,5 @@ fbPolyPoint (DrawablePtr pDrawable, nBox--; pBox++) (*dots) (dst, dstStride, dstBpp, pBox, pptInit, nptInit, pDrawable->x, pDrawable->y, dstXoff, dstYoff, and, xor); + fbFinishAccess (pDrawable); } diff --git a/fb/fbpseudocolor.c b/fb/fbpseudocolor.c index 2233f95dc..170fcad0e 100644 --- a/fb/fbpseudocolor.c +++ b/fb/fbpseudocolor.c @@ -875,6 +875,8 @@ xxCopyPseudocolorRegion(ScreenPtr pScreen, RegionPtr pReg, register CARD16 *d; int w; + fbPrepareAccess((PixmapPtr)pScreen->devPrivate); + dst_base = (CARD16*) ((PixmapPtr)pScreen->devPrivate)->devPrivate.ptr; dst_stride = (int)((PixmapPtr)pScreen->devPrivate)->devKind / sizeof (CARD16); @@ -899,6 +901,8 @@ xxCopyPseudocolorRegion(ScreenPtr pScreen, RegionPtr pReg, } pbox++; } + + fbFinishAccess(&((PixmapPtr)pScreen->devPrivate)->drawable); } static void diff --git a/fb/fbpush.c b/fb/fbpush.c index 0632766d0..282344d85 100644 --- a/fb/fbpush.c +++ b/fb/fbpush.c @@ -165,6 +165,7 @@ fbPushFill (DrawablePtr pDrawable, fbAnd(GXnoop,(FbBits) 0,FB_ALLONES), fbXor(GXnoop,(FbBits) 0,FB_ALLONES)); } + fbFinishAccess (pDrawable); } else { diff --git a/fb/fbscreen.c b/fb/fbscreen.c index b88375810..045ca8fd2 100644 --- a/fb/fbscreen.c +++ b/fb/fbscreen.c @@ -155,6 +155,19 @@ fbSetupScreen(ScreenPtr pScreen, return TRUE; } +#ifdef FB_ACCESS_WRAPPER +Bool +wfbFinishScreenInit(ScreenPtr pScreen, + pointer pbits, + int xsize, + int ysize, + int dpix, + int dpiy, + int width, + int bpp, + SetupWrapProcPtr setupWrap, + FinishWrapProcPtr finishWrap) +#else Bool fbFinishScreenInit(ScreenPtr pScreen, pointer pbits, @@ -164,6 +177,7 @@ fbFinishScreenInit(ScreenPtr pScreen, int dpiy, int width, int bpp) +#endif { VisualPtr visuals; DepthPtr depths; @@ -222,6 +236,10 @@ fbFinishScreenInit(ScreenPtr pScreen, fbGetScreenPrivate(pScreen)->win32bpp = 32; fbGetScreenPrivate(pScreen)->pix32bpp = 32; } +#ifdef FB_ACCESS_WRAPPER + fbGetScreenPrivate(pScreen)->setupWrap = setupWrap; + fbGetScreenPrivate(pScreen)->finishWrap = finishWrap; +#endif #endif rootdepth = 0; if (!fbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootdepth, @@ -256,6 +274,27 @@ fbFinishScreenInit(ScreenPtr pScreen, } /* dts * (inch/dot) * (25.4 mm / inch) = mm */ +#ifdef FB_ACCESS_WRAPPER +Bool +wfbScreenInit(ScreenPtr pScreen, + pointer pbits, + int xsize, + int ysize, + int dpix, + int dpiy, + int width, + int bpp, + SetupWrapProcPtr setupWrap, + FinishWrapProcPtr finishWrap) +{ + if (!fbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp)) + return FALSE; + if (!wfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, + width, bpp, setupWrap, finishWrap)) + return FALSE; + return TRUE; +} +#else Bool fbScreenInit(ScreenPtr pScreen, pointer pbits, @@ -273,6 +312,7 @@ fbScreenInit(ScreenPtr pScreen, return FALSE; return TRUE; } +#endif #ifdef FB_OLD_SCREEN diff --git a/fb/fbseg.c b/fb/fbseg.c index d66e42468..a980c24f3 100644 --- a/fb/fbseg.c +++ b/fb/fbseg.c @@ -115,6 +115,8 @@ fbBresSolid (DrawablePtr pDrawable, } } } + + fbFinishAccess (pDrawable); } void @@ -199,6 +201,8 @@ fbBresDash (DrawablePtr pDrawable, } FbDashStep (dashlen, even); } + + fbFinishAccess (pDrawable); } void @@ -399,6 +403,8 @@ fbBresSolid24RRop (DrawablePtr pDrawable, } } } + + fbFinishAccess (pDrawable); } static void @@ -498,6 +504,8 @@ fbBresDash24RRop (DrawablePtr pDrawable, } FbDashStep (dashlen, even); } + + fbFinishAccess (pDrawable); } #endif diff --git a/fb/fbsetsp.c b/fb/fbsetsp.c index c59c13ceb..06332568b 100644 --- a/fb/fbsetsp.c +++ b/fb/fbsetsp.c @@ -99,5 +99,6 @@ fbSetSpans (DrawablePtr pDrawable, pwidth++; } fbValidateDrawable (pDrawable); + fbFinishAccess (pDrawable); } diff --git a/fb/fbtrap.c b/fb/fbtrap.c index 863969527..4c67bcdfb 100644 --- a/fb/fbtrap.c +++ b/fb/fbtrap.c @@ -95,6 +95,8 @@ fbAddTraps (PicturePtr pPicture, } traps++; } + + fbFinishAccess (pPicture->pDrawable); } void @@ -142,6 +144,8 @@ fbRasterizeTrapezoid (PicturePtr pPicture, fbRasterizeEdges (buf, bpp, width, stride, &l, &r, t, b); } + + fbFinishAccess (pPicture->pDrawable); } static int diff --git a/fb/fbwindow.c b/fb/fbwindow.c index 968b5a61d..cac662cc7 100644 --- a/fb/fbwindow.c +++ b/fb/fbwindow.c @@ -118,6 +118,9 @@ fbCopyWindowProc (DrawablePtr pSrcDrawable, upsidedown); pbox++; } + + fbFinishAccess (pDstDrawable); + fbFinishAccess (pSrcDrawable); } void @@ -249,6 +252,8 @@ fbFillRegionSolid (DrawablePtr pDrawable, fbValidateDrawable (pDrawable); pbox++; } + + fbFinishAccess (pDrawable); } #ifdef PANORAMIX @@ -311,6 +316,9 @@ fbFillRegionTiled (DrawablePtr pDrawable, yRot - (pbox->y1 + dstYoff)); pbox++; } + + fbFinishAccess (&pTile->drawable); + fbFinishAccess (pDrawable); } void diff --git a/fb/wfbrename.h b/fb/wfbrename.h index 3c1bfdeae..7b7d81e56 100644 --- a/fb/wfbrename.h +++ b/fb/wfbrename.h @@ -81,7 +81,6 @@ #define fbFillRegionSolid wfbFillRegionSolid #define fbFillRegionTiled wfbFillRegionTiled #define fbFillSpans wfbFillSpans -#define fbFinishScreenInit wfbFinishScreenInit #define fbFixCoordModePrevious wfbFixCoordModePrevious #define fbGCFuncs wfbGCFuncs #define fbGCOps wfbGCOps @@ -160,7 +159,6 @@ #define fbResolveColor wfbResolveColor #define fbRestoreAreas wfbRestoreAreas #define fbSaveAreas wfbSaveAreas -#define fbScreenInit wfbScreenInit #define fbScreenPrivateIndex wfbScreenPrivateIndex #define fbSegment wfbSegment #define fbSelectBres wfbSelectBres |