Add framebuffer access wrapper infrastructure.
Create fbPrepareAccess macros to call into the driver to set up the wfbReadMemory and wfbWriteWemory pointers. Call these from fbGetDrawable and fbGetStipDrawable. Add the READ and WRITE macros, which expand to simple memory accesses for fb, and calls through the function pointers for wfb. Add fbFinishAccess macro to give the driver an opportunity to clean up. Add calls to this in the appropriate places.
This commit is contained in:
parent
319efac445
commit
a4005c15fb
69
fb/fb.h
69
fb/fb.h
|
@ -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
|
||||
*/
|
||||
|
|
14
fb/fb24_32.c
14
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -90,3 +90,8 @@ fbAllocatePrivates(ScreenPtr pScreen, int *pGCIndex)
|
|||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifdef FB_ACCESS_WRAPPER
|
||||
ReadMemoryProcPtr wfbReadMemory;
|
||||
WriteMemoryProcPtr wfbWriteMemory;
|
||||
#endif
|
||||
|
|
|
@ -109,6 +109,7 @@ fbPolyArc (DrawablePtr pDrawable,
|
|||
miPolyArc(pDrawable, pGC, 1, parcs);
|
||||
parcs++;
|
||||
}
|
||||
fbFinishAccess (pDrawable);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
|
13
fb/fbbits.h
13
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
|
||||
|
||||
|
|
|
@ -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 *);
|
||||
|
|
10
fb/fbcopy.c
10
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++;
|
||||
}
|
||||
|
|
13
fb/fbfill.c
13
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -84,4 +84,6 @@ fbGetSpans(DrawablePtr pDrawable,
|
|||
ppt++;
|
||||
pwidth++;
|
||||
}
|
||||
|
||||
fbFinishAccess (pDrawable);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
39
fb/fbpict.c
39
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))
|
||||
|
|
|
@ -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) {\
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -165,6 +165,7 @@ fbPushFill (DrawablePtr pDrawable,
|
|||
fbAnd(GXnoop,(FbBits) 0,FB_ALLONES),
|
||||
fbXor(GXnoop,(FbBits) 0,FB_ALLONES));
|
||||
}
|
||||
fbFinishAccess (pDrawable);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -99,5 +99,6 @@ fbSetSpans (DrawablePtr pDrawable,
|
|||
pwidth++;
|
||||
}
|
||||
fbValidateDrawable (pDrawable);
|
||||
fbFinishAccess (pDrawable);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user