xserver: Branch 'master'

Søren Sandmann Pedersen sandmann at kemper.freedesktop.org
Wed Feb 7 00:18:27 EET 2007


 fb/fbmmx.c |   98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 fb/fbmmx.h |   12 +++++++
 2 files changed, 110 insertions(+)

New commits:
diff-tree 5a3334410367a2186b2c667fa1eb6cf0baf93e95 (from b2cd3b133748cc5aa541905a703a6fdb1cbbb1e6)
Author: Soren Sandmann Pedersen <ssp at dhcp83-218.boston.redhat.com>
Date:   Tue Feb 6 17:11:01 2007 -0500

    Add new fbCompositeSrc_8888x0565mmx() function, based on patch by Dan
    Williams. Bug 9682.

diff --git a/fb/fbmmx.c b/fb/fbmmx.c
index f74930a..5bbede1 100644
--- a/fb/fbmmx.c
+++ b/fb/fbmmx.c
@@ -1339,6 +1339,104 @@ fbCompositeSrc_8888x8888mmx (CARD8	op,
 }
 
 void
+fbCompositeSrc_8888x0565mmx (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;
+    CARD32	*srcLine, *src;
+    FbStride	dstStride, srcStride;
+    CARD16	w;
+    
+    CHECKPOINT();
+    
+    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);
+    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);
+    
+    assert (pSrc->pDrawable == pMask->pDrawable);
+    
+    while (height--)
+    {
+	dst = dstLine;
+	dstLine += dstStride;
+	src = srcLine;
+	srcLine += srcStride;
+	w = width;
+	
+	CHECKPOINT();
+	
+	while (w && (unsigned long)dst & 7)
+	{
+	    __m64 vsrc = load8888 (*src);
+	    ullong d = *dst;
+	    __m64 vdest = expand565 ((__m64)d, 0);
+	    
+	    vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);
+	    
+	    *dst = (ullong)vdest;
+	    
+	    w--;
+	    dst++;
+	    src++;
+	}
+	
+	CHECKPOINT();
+	
+	while (w >= 4)
+	{
+	    __m64 vsrc0, vsrc1, vsrc2, vsrc3;
+	    __m64 vdest;
+
+	    vsrc0 = load8888(*(src + 0));
+	    vsrc1 = load8888(*(src + 1));
+	    vsrc2 = load8888(*(src + 2));
+	    vsrc3 = load8888(*(src + 3));
+
+	    vdest = *(__m64 *)dst;
+	    
+	    vdest = pack565(over(vsrc0, expand_alpha(vsrc0), expand565(vdest, 0)), vdest, 0);
+	    vdest = pack565(over(vsrc1, expand_alpha(vsrc1), expand565(vdest, 1)), vdest, 1);
+	    vdest = pack565(over(vsrc2, expand_alpha(vsrc2), expand565(vdest, 2)), vdest, 2);
+	    vdest = pack565(over(vsrc3, expand_alpha(vsrc3), expand565(vdest, 3)), vdest, 3);
+	    
+	    *(__m64 *)dst = vdest;
+
+	    w -= 4;
+	    dst += 4;
+	    src += 4;
+	}
+
+	CHECKPOINT();
+	
+	while (w)
+	{
+	    __m64 vsrc = load8888 (*src);
+	    ullong d = *dst;
+	    __m64 vdest = expand565 ((__m64)d, 0);
+	    
+	    vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);
+	    
+	    *dst = (ullong)vdest;
+	    
+	    w--;
+	    dst++;
+	    src++;
+	}
+    }
+    
+    _mm_empty();
+}
+
+void
 fbCompositeSolidMask_nx8x8888mmx (CARD8      op,
 				  PicturePtr pSrc,
 				  PicturePtr pMask,
diff --git a/fb/fbmmx.h b/fb/fbmmx.h
index 34718e3..b3e4d71 100644
--- a/fb/fbmmx.h
+++ b/fb/fbmmx.h
@@ -130,6 +130,18 @@ void fbCompositeSrc_8888RevNPx8888mmx (C
 				       INT16      yDst,
 				       CARD16     width,
 				       CARD16     height);
+void fbCompositeSrc_8888x0565mmx (CARD8      op,
+				  PicturePtr pSrc,
+				  PicturePtr pMask,
+				  PicturePtr pDst,
+				  INT16      xSrc,
+				  INT16      ySrc,
+				  INT16      xMask,
+				  INT16      yMask,
+				  INT16      xDst,
+				  INT16      yDst,
+				  CARD16     width,
+				  CARD16     height);
 void fbCompositeSrc_8888RevNPx0565mmx (CARD8      op,
 				       PicturePtr pSrc,
 				       PicturePtr pMask,



More information about the xorg-commit mailing list