xserver: Branch 'master'

Søren Sandmann Pedersen sandmann at kemper.freedesktop.org
Tue May 15 12:01:16 PDT 2007


 fb/fbpict.c |  551 +++---------------------------------------------------------
 1 files changed, 36 insertions(+), 515 deletions(-)

New commits:
diff-tree 3da842bf930d7875599ca0c06cb4a09cfa987ac5 (from 1568b6b6a0d7337f29c7b87cc46ae64b3b0f8fdf)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue May 15 14:57:14 2007 -0400

    Revert various fast path functions to their pre-pixman-merge state
    since they fail rendercheck. Remove their associated macros.
    
    See bug 10903.

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 7d94d00..1146e99 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -78,64 +78,6 @@ fbIn (CARD32 x, CARD8 y)
     return m|n|o|p;
 }
 
-#define genericCombine24(a,b,c,d) (((a)*(c)+(b)*(d)))
-
-/*
- * This macro does src IN mask OVER dst when src and dst are 0888.
- * If src has alpha, this will not work
- */
-#define inOver0888(alpha, source, destval, dest) { \
- 	CARD32 dstrb=destval&0xFF00FF; CARD32 dstag=(destval>>8)&0xFF00FF; \
- 	CARD32 drb=((source&0xFF00FF)-dstrb)*alpha; CARD32 dag=(((source>>8)&0xFF00FF)-dstag)*alpha; \
-	WRITE(dest, ((((drb>>8) + dstrb) & 0x00FF00FF) | ((((dag>>8) + dstag) << 8) & 0xFF00FF00))); \
-    }
-
-/*
- * This macro does src IN mask OVER dst when src and dst are 0565 and
- * mask is a 5-bit alpha value.  Again, if src has alpha, this will not
- * work.
- */
-#define inOver0565(alpha, source, destval, dest) { \
- 	CARD16 dstrb = destval & 0xf81f; CARD16 dstg  = destval & 0x7e0; \
- 	CARD32 drb = ((source&0xf81f)-dstrb)*alpha; CARD32 dg=((source & 0x7e0)-dstg)*alpha; \
-	WRITE(dest, ((((drb>>5) + dstrb)&0xf81f) | (((dg>>5)  + dstg) & 0x7e0))); \
-    }
-
-
-#define inOver2x0565(alpha, source, destval, dest) { \
- 	CARD32 dstrb = destval & 0x07e0f81f; CARD32 dstg  = (destval & 0xf81f07e0)>>5; \
- 	CARD32 drb = ((source&0x07e0f81f)-dstrb)*alpha; CARD32 dg=(((source & 0xf81f07e0)>>5)-dstg)*alpha; \
-	WRITE(dest, ((((drb>>5) + dstrb)&0x07e0f81f) | ((((dg>>5)  + dstg)<<5) & 0xf81f07e0))); \
-    }
-
-
-#if IMAGE_BYTE_ORDER == LSBFirst
-#define setupPackedReader(count,temp,where,workingWhere,workingVal) count=(long)where; \
-					temp=count&3; \
-					where-=temp; \
-					workingWhere=(CARD32 *)where; \
-                                        workingVal=READ(workingWhere++); \
-					count=4-temp; \
-					workingVal>>=(8*temp)
-        #define readPacked(where,x,y,z) {if(!(x)) { (x)=4; y = READ(z++); } where=(y)&0xff; (y)>>=8; (x)--;}
-	#define readPackedSource(where) readPacked(where,ws,workingSource,wsrc)
-	#define readPackedDest(where) readPacked(where,wd,workingiDest,widst)
-        #define writePacked(what) workingoDest>>=8; workingoDest|=(what<<24); ww--; if(!ww) { ww=4; WRITE (wodst++, workingoDest); } 
-#else
-	#warning "I havn't tested fbCompositeTrans_0888xnx0888() on big endian yet!"
-	#define setupPackedReader(count,temp,where,workingWhere,workingVal) count=(long)where; \
-					temp=count&3; \
-					where-=temp; \
-					workingWhere=(CARD32 *)where; \
-                                        workingVal=READ(workingWhere++); \
-					count=4-temp; \
-					workingVal<<=(8*temp)
-        #define readPacked(where,x,y,z) {if(!(x)) { (x)=4; y = READ(z++); } where=(y)>>24; (y)<<=8; (x)--;}
-	#define readPackedSource(where) readPacked(where,ws,workingSource,wsrc)
-	#define readPackedDest(where) readPacked(where,wd,workingiDest,widst)
-        #define writePacked(what) workingoDest<<=8; workingoDest|=what; ww--; if(!ww) { ww=4; WRITE(wodst++, workingoDest); } 
-#endif
-
 /*
  * Naming convention:
  *
@@ -279,7 +221,6 @@ fbCompositeSolidMask_nx8888x8888C (CARD8
     fbFinishAccess (pDst->pDrawable);
 }
 
-#define srcAlphaCombine24(a,b) genericCombine24(a,b,srca,srcia)
 void
 fbCompositeSolidMask_nx8x0888 (CARD8      op,
 			       PicturePtr pSrc,
@@ -294,86 +235,53 @@ fbCompositeSolidMask_nx8x0888 (CARD8    
 			       CARD16     width,
 			       CARD16     height)
 {
-    CARD32	src, srca, srcia;
-    CARD8	*dstLine, *dst, *edst;
+    CARD32	src, srca;
+    CARD8	*dstLine, *dst;
+    CARD32	d;
     CARD8	*maskLine, *mask, m;
     FbStride	dstStride, maskStride;
     CARD16	w;
-    CARD32 rs,gs,bs,rd,gd,bd;
 
     fbComposeGetSolid(pSrc, src, pDst->format);
 
     srca = src >> 24;
-    srcia = 255-srca;
     if (src == 0)
 	return;
 
-    rs=src&0xff;
-    gs=(src>>8)&0xff;
-    bs=(src>>16)&0xff;
-      
     fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 3);
     fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);
 
     while (height--)
     {
-	/* fixme: cleanup unused */
-	unsigned long wt, wd;
-	CARD32 workingiDest;
-	CARD32 *widst;
- 	
-	edst = dst = dstLine;
+	dst = dstLine;
 	dstLine += dstStride;
 	mask = maskLine;
 	maskLine += maskStride;
 	w = width;
- 	
-#ifndef NO_MASKED_PACKED_READ
-	setupPackedReader(wd,wt,edst,widst,workingiDest);
-#endif
- 	
+
 	while (w--)
 	{
-#ifndef NO_MASKED_PACKED_READ
-	    readPackedDest(rd);
-	    readPackedDest(gd);
-	    readPackedDest(bd);
-#else
-	    rd = READ(edst++);
-	    gd = READ(edst++);
-	    bd = READ(edst++);
-#endif
 	    m = READ(mask++);
 	    if (m == 0xff)
 	    {
 		if (srca == 0xff)
-		{
-		    WRITE(dst++, rs);
-		    WRITE(dst++, gs);
-		    WRITE(dst++, bs);
-		}
+		    d = src;
 		else
 		{
-		    WRITE(dst++, (srcAlphaCombine24(rs, rd)>>8));
-		    WRITE(dst++, (srcAlphaCombine24(gs, gd)>>8));
-		    WRITE(dst++, (srcAlphaCombine24(bs, bd)>>8));
+		    d = Fetch24(dst);
+		    d = fbOver24 (src, d);
 		}
+		Store24(dst,d);
 	    }
 	    else if (m)
 	    {
-		int na=(srca*(int)m)>>8;
-		int nia=255-na;
-		WRITE(dst++, (genericCombine24(rs, rd, na, nia)>>8));
-		WRITE(dst++, (genericCombine24(gs, gd, na, nia)>>8));
-		WRITE(dst++, (genericCombine24(bs, bd, na, nia)>>8));
-	    }
-	    else
-	    {
-		dst+=3;
+		d = fbOver24 (fbIn(src,m), Fetch24(dst));
+		Store24(dst,d);
 	    }
+	    dst += 3;
 	}
     }
-    
+
     fbFinishAccess (pMask->pDrawable);
     fbFinishAccess (pDst->pDrawable);
 }
@@ -392,105 +300,21 @@ fbCompositeSolidMask_nx8x0565 (CARD8    
 				  CARD16     width,
 				  CARD16     height)
 {
-    CARD32	src, srca8, srca5;
+    CARD32	src, srca;
     CARD16	*dstLine, *dst;
-    CARD16	d;
-    CARD32	t;
+    CARD32	d;
     CARD8	*maskLine, *mask, m;
     FbStride	dstStride, maskStride;
-    CARD16	w,src16;
-    
-    fbComposeGetSolid(pSrc, src, pDst->format);
-    
-    if (src == 0)
-	return;
-      
-    srca8 = (src >> 24);
-    srca5 = (srca8 >> 3);
-    src16 = cvt8888to0565(src);
-     
-    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);
-    fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);
-    
-    while (height--)
-    {
-	dst = dstLine;
-	dstLine += dstStride;
-	mask = maskLine;
-	maskLine += maskStride;
-	w = width;
- 
-	while (w--)
-	{
-	    m = READ(mask++);
-	    if (m == 0)
-		dst++;
-	    else if (srca5 == (0xff >> 3))
-	    {
-		if (m == 0xff)
-		    WRITE(dst++, src16);
-		else 
- 		{
-		    d = READ(dst);
-		    m >>= 3;
-		    inOver0565 (m, src16, d, dst++);
- 		}
-	    }
-	    else
-	    {
-		d = READ(dst);
-		if (m == 0xff) 
-		{
-		    t = fbOver24 (src, cvt0565to0888 (d));
-		}
-		else
-		{
-		    t = fbIn (src, m);
-		    t = fbOver (t, cvt0565to0888 (d));
-		}
-		WRITE(dst++, cvt8888to0565 (t));
-	    }
-	}
-    }
-    
-    fbFinishAccess (pMask->pDrawable);
-    fbFinishAccess (pDst->pDrawable);
-}
-
-static void
-fbCompositeSolidMask_nx8888x0565 (CARD8      op,
-				  PicturePtr pSrc,
-				  PicturePtr pMask,
-				  PicturePtr pDst,
-				  INT16      xSrc,
-				  INT16      ySrc,
-				  INT16      xMask,
-				  INT16      yMask,
-				  INT16      xDst,
-				  INT16      yDst,
-				  CARD16     width,
-				  CARD16     height)
-{
-    CARD32	src, srca8, srca5;
-    CARD16	*dstLine, *dst;
-    CARD16	d;
-    CARD32	*maskLine, *mask;
-    CARD32	t;
-    CARD8	m;
-    FbStride	dstStride, maskStride;
-    CARD16	w, src16;
+    CARD16	w;
 
     fbComposeGetSolid(pSrc, src, pDst->format);
 
+    srca = src >> 24;
     if (src == 0)
 	return;
 
-    srca8 = src >> 24;
-    srca5 = srca8 >> 3;
-    src16 = cvt8888to0565(src);
-
     fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);
-    fbComposeGetStart (pMask, xMask, yMask, CARD32, maskStride, maskLine, 1);
+    fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);
 
     while (height--)
     {
@@ -502,38 +326,30 @@ fbCompositeSolidMask_nx8888x0565 (CARD8 
 
 	while (w--)
 	{
-	    m = READ(mask++) >> 24;
-	    if (m == 0)
-		dst++;
-	    else if (srca5 == (0xff >> 3))
+	    m = READ(mask++);
+	    if (m == 0xff)
 	    {
-		if (m == 0xff)
-		    WRITE(dst++, src16);
+		if (srca == 0xff)
+		    d = src;
 		else
 		{
 		    d = READ(dst);
-		    m >>= 3;
-		    inOver0565 (m, src16, d, dst++);
+		    d = fbOver24 (src, cvt0565to0888(d));
 		}
+		WRITE(dst, cvt8888to0565(d));
 	    }
-	    else
+	    else if (m)
 	    {
-		if (m == 0xff) 
-		{
-		    d = READ(dst);
-		    t = fbOver24 (src, cvt0565to0888 (d));
-		    WRITE(dst++, cvt8888to0565 (t));
-		}
-		else
-		{
-		    d = READ(dst);
-		    t = fbIn (src, m);
-		    t = fbOver (t, cvt0565to0888 (d));
-		    WRITE(dst++, cvt8888to0565 (t));
-		}
+		d = READ(dst);
+		d = fbOver24 (fbIn(src,m), cvt0565to0888(d));
+		WRITE(dst, cvt8888to0565(d));
 	    }
+	    dst++;
 	}
     }
+
+    fbFinishAccess (pMask->pDrawable);
+    fbFinishAccess (pDst->pDrawable);
 }
 
 void
@@ -1060,295 +876,6 @@ fbCompositeSrcSrc_nxn  (CARD8	   op,
 			CARD16     width,
 			CARD16     height);
 
-static void
-fbCompositeTrans_0565xnx0565(CARD8      op,
-			     PicturePtr pSrc,
-			     PicturePtr pMask,
-			     PicturePtr pDst,
-			     INT16      xSrc,
-			     INT16      ySrc,
-			     INT16      xMask,
-			     INT16      yMask,
-			     INT16      xDst,
-			     INT16      yDst,
-			     CARD16     width,
-			     CARD16     height)
-{
-    CARD16	*dstLine, *dst;
-    CARD16	*srcLine, *src;
-    FbStride	dstStride, srcStride;
-    CARD16	w;
-    FbBits	mask;
-    CARD8	maskAlpha;
-    CARD16	s_16, d_16;
-    CARD32	s_32, d_32;
-    
-    fbComposeGetSolid (pMask, mask, pDst->format);
-    maskAlpha = mask >> 27;
-    
-    if (!maskAlpha)
-	return;
-    if (maskAlpha == 0xff)
-    {
-	fbCompositeSrcSrc_nxn (PictOpSrc, pSrc, pMask, pDst,
-			       xSrc, ySrc, xMask, yMask, xDst, yDst, 
-			       width, height);
-	return;
-    }
-
-    fbComposeGetStart (pSrc, xSrc, ySrc, CARD16, srcStride, srcLine, 1);
-    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);
-
-    while (height--)
-    {
-	CARD32 *isrc, *idst;
-	dst = dstLine;
-	dstLine += dstStride;
-	src = srcLine;
-	srcLine += srcStride;
-	w = width;
-	
-	if(((long)src&1)==1)
-	{
-	    s_16 = READ(src++);
-	    d_16 = READ(dst);
-	    inOver0565(maskAlpha, s_16, d_16, dst++);
-	    w--;
-	}
-	isrc=(CARD32 *)src;
-	if(((long)dst&1)==0)
-	{
-	    idst=(CARD32 *)dst;
-	    while (w>1)
-	    {
-		s_32 = READ(isrc++);
-		d_32 = READ(idst);
-		inOver2x0565(maskAlpha, s_32, d_32, idst++);
-		w-=2;
-	    }
-	    dst=(CARD16 *)idst;
-	}
-	else
-	{
-	    while (w > 1)
-	    {
-		s_32 = READ(isrc++);
-#if IMAGE_BYTE_ORDER == LSBFirst
-		s_16=s_32&0xffff;
-#else
-		s_16=s_32>>16;
-#endif
-		d_16 = READ(dst);
-		inOver0565 (maskAlpha, s_16, d_16, dst++);
-#if IMAGE_BYTE_ORDER == LSBFirst
-		s_16=s_32>>16;
-#else
-		s_16=s_32&0xffff;
-#endif
-		d_16 = READ(dst);
-		inOver0565(maskAlpha, s_16, d_16, dst++);
-		w-=2;
-	    }
-	}
-	src=(CARD16 *)isrc;
-	if(w!=0)
-	{
-	    s_16 = READ(src);
-	    d_16 = READ(dst);
-	    inOver0565(maskAlpha, s_16, d_16, dst);
-	}
-    }
-    
-    fbFinishAccess (pSrc->pDrawable);
-    fbFinishAccess (pDst->pDrawable);
-}
-
-/* macros for "i can't believe it's not fast" packed pixel handling */
-#define alphamaskCombine24(a,b) genericCombine24(a,b,maskAlpha,maskiAlpha)
-
-static void
-fbCompositeTrans_0888xnx0888(CARD8      op,
- 			     PicturePtr pSrc,
- 			     PicturePtr pMask,
- 			     PicturePtr pDst,
- 			     INT16      xSrc,
- 			     INT16      ySrc,
- 			     INT16      xMask,
- 			     INT16      yMask,
- 			     INT16      xDst,
- 			     INT16      yDst,
- 			     CARD16     width,
- 			     CARD16     height)
-{
-    CARD8	*dstLine, *dst,*idst;
-    CARD8	*srcLine, *src;
-    FbStride	dstStride, srcStride;
-    CARD16	w;
-    FbBits	mask;
-    CARD16	maskAlpha,maskiAlpha;
-    
-    fbComposeGetSolid (pMask, mask, pDst->format);
-    maskAlpha = mask >> 24;
-    maskiAlpha= 255-maskAlpha;
-    
-    if (!maskAlpha)
- 	return;
-    /*
-      if (maskAlpha == 0xff)
-      {
-      fbCompositeSrc_0888x0888 (op, pSrc, pMask, pDst,
-      xSrc, ySrc, xMask, yMask, xDst, yDst, 
-      width, height);
-      return;
-      }
-    */
-    
-    fbComposeGetStart (pSrc, xSrc, ySrc, CARD8, srcStride, srcLine, 3);
-    fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 3);
-    
-    {
-	unsigned long ws,wt;
-	CARD32 workingSource;
-	CARD32 *wsrc, *wdst, *widst;
-	CARD32 rs, rd, nd;
-	CARD8 *isrc;
-	
-	
-	/* are xSrc and xDst at the same alignment?  if not, we need to be complicated :) */
-	/* if(0==0) */
-	if ((((xSrc * 3) & 3) != ((xDst * 3) & 3)) ||
-	    ((srcStride & 3) != (dstStride & 3)))
-	{
-	    while (height--)
-	    {
-		dst = dstLine;
-		dstLine += dstStride;
-		isrc = src = srcLine;
-		srcLine += srcStride;
-		w = width*3;
-		
-		setupPackedReader(ws,wt,isrc,wsrc,workingSource);
-		
-		/* get to word aligned */
-		switch(~(long)dst&3)
-		{
-		case 1:
-		    readPackedSource(rs);
-		    /* *dst++=alphamaskCombine24(rs, *dst)>>8; */
-		    rd = READ(dst);  /* make gcc happy.  hope it doens't cost us too much performance*/
-		    WRITE(dst++, alphamaskCombine24(rs, rd) >> 8);
-		    w--; if(w==0) break;
-		case 2:
-		    readPackedSource(rs);
-		    rd = READ(dst);
-		    WRITE(dst++, alphamaskCombine24(rs, rd) >> 8);
-		    w--; if(w==0) break;
-		case 3:
-		    readPackedSource(rs);
-		    rd = READ(dst);
-		    WRITE(dst++,alphamaskCombine24(rs, rd) >> 8);
-		    w--; if(w==0) break;
-		}
-		wdst=(CARD32 *)dst;
-		while (w>3)
-		{
-		    rs=READ(wsrc++);
-		    /* FIXME: write a special readPackedWord macro, which knows how to 
-		     * halfword combine
-		     */
-#if IMAGE_BYTE_ORDER == LSBFirst
-		    rd=READ(wdst);
-		    readPackedSource(nd);
-		    readPackedSource(rs);
-		    nd|=rs<<8;
-		    readPackedSource(rs);
-		    nd|=rs<<16;
-		    readPackedSource(rs);
-		    nd|=rs<<24;
-#else
-		    readPackedSource(nd);
-		    nd<<=24;
-		    readPackedSource(rs);
-		    nd|=rs<<16;
-		    readPackedSource(rs);
-		    nd|=rs<<8;
-		    readPackedSource(rs);
-		    nd|=rs;
-#endif
-		    inOver0888(maskAlpha, nd, rd, wdst++);
-		    w-=4;
-		}
-		src=(CARD8 *)wdst;
-		switch(w)
-		{
-		case 3:
-		    readPackedSource(rs);
-		    rd=READ(dst);
-		    WRITE(dst++,alphamaskCombine24(rs, rd)>>8);
-		case 2:
-		    readPackedSource(rs);
-		    rd = READ(dst);  
-		    WRITE(dst++, alphamaskCombine24(rs, rd)>>8);
-		case 1:
-		    readPackedSource(rs);
-		    rd = READ(dst);  
-		    WRITE(dst++, alphamaskCombine24(rs, rd)>>8);
-		}
-	    }
-	}
-	else
-	{
-	    while (height--)
-	    {
-		idst=dst = dstLine;
-		dstLine += dstStride;
-		src = srcLine;
-		srcLine += srcStride;
-		w = width*3;
-		/* get to word aligned */
-		switch(~(long)src&3)
-		{
-		case 1:
-		    rd=alphamaskCombine24(READ(src++), READ(dst))>>8;
-		    WRITE(dst++, rd);
-		    w--; if(w==0) break;
-		case 2:
-		    rd=alphamaskCombine24(READ(src++), READ(dst))>>8;
-		    WRITE(dst++, rd);
-		    w--; if(w==0) break;
-		case 3:
-		    rd=alphamaskCombine24(READ(src++), READ(dst))>>8;
-		    WRITE(dst++, rd);
-		    w--; if(w==0) break;
-		}
-		wsrc=(CARD32 *)src;
-		widst=(CARD32 *)dst;
-		while(w>3)
-		{
-		    rs = READ(wsrc++);
-		    rd = READ(widst);
-		    inOver0888 (maskAlpha, rs, rd, widst++);
-		    w-=4;
-		}
-		src=(CARD8 *)wsrc;
-		dst=(CARD8 *)widst;
-		switch(w)
-		{
-		case 3:
-		    rd=alphamaskCombine24(READ(src++), READ(dst))>>8;
-		    WRITE(dst++, rd);
-		case 2:
-		    rd=alphamaskCombine24(READ(src++), READ(dst))>>8;
-		    WRITE(dst++, rd);
-		case 1:
-		    rd=alphamaskCombine24(READ(src++), READ(dst))>>8;
-		    WRITE(dst++, rd);
-		}
-	    }
-	}
-    }
-}
-
 /*
  * Simple bitblt
  */
@@ -1687,6 +1214,7 @@ fbComposite (CARD8      op,
 				break;
 			    }
 			}
+#if 0
 			else
 			{
 			    switch (pDst->format) {
@@ -1697,6 +1225,7 @@ fbComposite (CARD8      op,
 				break;
                             }
 			}
+#endif
 			break;
 		    case PICT_a8b8g8r8:
 			if (pMask->componentAlpha) {
@@ -1722,6 +1251,7 @@ fbComposite (CARD8      op,
 				break;
 			    }
 			}
+#if 0
 			else
 			{
 			    switch (pDst->format) {
@@ -1732,6 +1262,7 @@ fbComposite (CARD8      op,
 				break;
                             }
 			}
+#endif
 			break;
 		    case PICT_a1:
 			switch (pDst->format) {
@@ -1833,16 +1364,6 @@ fbComposite (CARD8      op,
 			 pMask->pDrawable->height == 1)
 		{
 		    switch (pSrc->format) {
-		    case PICT_r5g6b5:
-		    case PICT_b5g6r5:
-			if (pDst->format == pSrc->format)
-			    func = fbCompositeTrans_0565xnx0565;
-			break;
-		    case PICT_r8g8b8:
-		    case PICT_b8g8r8:
-			if (pDst->format == pSrc->format)
-			    func = fbCompositeTrans_0888xnx0888;
-			break;
 #ifdef USE_MMX
 		    case PICT_x8r8g8b8:
 			if ((pDst->format == PICT_a8r8g8b8 ||


More information about the xorg-commit mailing list