pixman: Branch 'yuv-porting'

Jose Fonseca jrfonseca at kemper.freedesktop.org
Fri Sep 14 02:59:13 PDT 2007


 pixman/pixman-mmx.c  | 1004 ---------------------------------------------------
 pixman/pixman-mmx.h  |   28 -
 pixman/pixman-pict.c |   30 -
 3 files changed, 1 insertion(+), 1061 deletions(-)

New commits:
diff-tree 14f2a4c222bb6f0748a07e21663663b43beef466 (from c61d6ae39e5039dcb27bf95334a86520b562bbc5)
Author: José Fonseca <jrfonseca at tungstengraphics.com>
Date:   Fri Sep 14 10:53:32 2007 +0100

    Remove the MMX code path for YV12 for the meanwhile, as pixel output is not
    exactly the same as the non-MMX code.
    
    This reverts commit c61d6ae39e5039dcb27bf95334a86520b562bbc5.

diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index 4fb2579..8c7be6d 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -30,9 +30,6 @@
  */
 #include <config.h>
 
-#include <stdlib.h>
-#include <limits.h>
-
 #ifdef USE_MMX
 
 #if defined(__amd64__) || defined(__x86_64__)
@@ -920,188 +917,6 @@ void fbComposeSetupMMX(void)
     } 
 }
 
-static __inline__ uint8_t
-interpolate_bilinear (int   distx,
-		      int   idistx,
-		      int   disty,
-		      int   idisty,
-		      uint8_t tl,
-		      uint8_t tr,
-		      uint8_t bl,
-		      uint8_t br)
-{
-    return ((tl * idistx + tr * distx) * idisty +
-	    (bl * idistx + br * distx) * disty) >> 16;
-}
-
-static __inline__ uint32_t
-interpolate_bilinear_8888 (int   distx,
-			   int   idistx,
-			   int   disty,
-			   int   idisty,
-			   uint8_t *l00,
-			   uint8_t *l01,
-			   uint8_t *l10,
-			   uint8_t *l11,
-			   int   x00,
-			   int   x01,
-			   int   x10,
-			   int   x11)
-{
-    uint8_t buffer[4];
-
-    buffer[0] = interpolate_bilinear (distx, idistx, disty, idisty,
-				      l00[x00], l01[x01],
-				      l10[x10], l11[x11]);
-
-    buffer[1] = interpolate_bilinear (distx, idistx, disty, idisty,
-				      l00[x00 + 1], l01[x01 + 1],
-				      l10[x10 + 1], l11[x11 + 1]);
-
-    buffer[2] = interpolate_bilinear (distx, idistx, disty, idisty,
-				      l00[x00 + 2], l01[x01 + 2],
-				      l10[x10 + 2], l11[x11 + 2]);
-
-    buffer[3] = interpolate_bilinear (distx, idistx, disty, idisty,
-				      l00[x00 + 3], l01[x01 + 3],
-				      l10[x10 + 3], l11[x11 + 3]);
-
-    return *((uint32_t *) buffer);
-}
-
-static __inline__ uint32_t
-fetch_bilinear2_8888 (int   distx,
-		      int   idistx,
-		      int   disty,
-		      int   idisty,
-		      uint8_t *l0,
-		      uint8_t *l1,
-		      int   x0,
-		      int   x1)
-{
-    return interpolate_bilinear_8888 (distx,
-				      idistx,
-				      disty,
-				      idisty,
-				      l0,
-				      l0,
-				      l1,
-				      l1,
-				      x0,
-				      x0 + 4,
-				      x1,
-				      x1 + 4);
-}
-
-static __inline__ uint32_t
-fetch_bilinear_8888 (int   distx,
-		     int   idistx,
-		     int   disty,
-		     int   idisty,
-		     uint8_t *l0,
-		     uint8_t *l1,
-		     int   x)
-{
-    return fetch_bilinear2_8888 (distx, idistx, disty, idisty, l0, l1, x, x);
-}
-
-static uint32_t _zero32x2[2] = { 0x0, 0x0 };
-static uint8_t  *_zero8x8 = (uint8_t *) _zero32x2;
-
-static __inline__ int
-set_scale_steps (uint32_t   *src,
-		 int srcStride,
-		 int	  xStart,
-		 int	  xStep,
-		 int	  width,
-		 int	  line,
-		 int	  lastLine,
-		 pixman_repeat_t repeatType,
-		 uint8_t	  **s0,
-		 uint8_t	  **s1,
-		 int	  *x0,
-		 int	  *x0Step,
-		 int	  *x1,
-		 int	  *x1Step)
-{
-    if (line < 0)
-    {
-	if (repeatType == PIXMAN_REPEAT_PAD)
-	{
-	    *s0 = (uint8_t *) src;
-	    *s1 = (uint8_t *) src;
-
-	    *x0     = xStart;
-	    *x0Step = xStep;
-	    *x1     = xStart;
-	    *x1Step = xStep;
-	}
-	else
-	{
-	    if (line == -1)
-	    {
-		*s0 = _zero8x8;
-
-		*x0     = 0;
-		*x0Step = 0;
-
-		*s1 = (uint8_t *) src;
-
-		*x1     = xStart;
-		*x1Step = xStep;
-	    }
-	    else
-	    {
-		return 0;
-	    }
-	}
-    }
-    else if (line >= lastLine)
-    {
-	if (repeatType == PIXMAN_REPEAT_PAD)
-	{
-	    *s0 = (uint8_t *) (src + srcStride * lastLine);
-	    *s1 = (uint8_t *) (src + srcStride * lastLine);
-
-	    *x0     = xStart;
-	    *x0Step = xStep;
-	    *x1     = xStart;
-	    *x1Step = xStep;
-	}
-	else
-	{
-	    if (line == lastLine)
-	    {
-		*s0 = (uint8_t *) (src + srcStride * line);
-
-		*x0     = xStart;
-		*x0Step = xStep;
-
-		*s1 = _zero8x8;
-
-		*x1     = 0;
-		*x1Step = 0;
-	    }
-	    else
-	    {
-		return 0;
-	    }
-	}
-    }
-    else
-    {
-	*s0 = (uint8_t *) (src + srcStride * line);
-	*s1 = (uint8_t *) (src + srcStride * (line + 1));
-
-	*x0     = xStart;
-	*x0Step = xStep;
-	*x1     = xStart;
-	*x1Step = xStep;
-    }
-
-    return width;
-}
-
 
 /* ------------------ MMX code paths called from fbpict.c ----------------------- */
 
@@ -3155,825 +2970,6 @@ fbCompositeOver_x888x8x8888mmx (pixman_o
     _mm_empty();
 }
 
-typedef struct _ScanlineBuf {
-    pixman_bool_t lock[2];
-    int    y[2];
-    uint8_t *line[2];
-    int   height;
-    uint8_t *heap;
-} ScanlineBuf;
-
-static pixman_bool_t
-init_scanline_buffer (ScanlineBuf *slb,
-		      uint8_t	  *buffer,
-		      int	  size,
-		      int	  length,
-		      int	  height)
-{
-    int i, s;
-
-    s = length << 1;
-
-    if (size < s)
-    {
-	slb->heap = malloc (s);
-	if (!slb->heap)
-	    return FALSE;
-
-	buffer = slb->heap;
-    }
-    else
-    {
-	slb->heap = NULL;
-    }
-
-    for (i = 0; i < 2; i++)
-    {
-	slb->lock[i] = FALSE;
-	slb->y[i]    = SHRT_MAX;
-	slb->line[i] = buffer;
-
-	buffer += length;
-    }
-
-    slb->height = height;
-
-    return TRUE;
-}
-
-static void
-fini_scanline_buffer (ScanlineBuf *slb)
-{
-    if (slb->heap)
-	free (slb->heap);
-}
-
-static __inline__ void
-release_scanlines (ScanlineBuf *slb)
-{
-    int i;
-
-    for (i = 0; i < 2; i++)
-	slb->lock[i] = FALSE;
-}
-
-static __inline__ int
-_y_to_scanline (ScanlineBuf *slb,
-		int	    y)
-{
-    return (y < 0) ? 0 : (y >= slb->height) ? slb->height - 1 : y;
-}
-
-static __inline__ uint8_t *
-get_scanline (ScanlineBuf *slb,
-	      int	  y)
-{
-    int i;
-
-    y = _y_to_scanline (slb, y);
-
-    for (i = 0; i < 2; i++)
-    {
-	if (slb->y[i] == y)
-	{
-	    slb->lock[i] = TRUE;
-	    return slb->line[i];
-	}
-    }
-
-    return NULL;
-}
-
-typedef struct {
-    ullong subYw;
-    ullong U_green;
-    ullong U_blue;
-    ullong V_red;
-    ullong V_green;
-    ullong Y_coeff;
-    ullong mmx0080;
-    ullong mmx00ff;
-} YUVData;
-
-static const YUVData yuv = {
-    .subYw   = 0x1010101010101010ULL,
-    .U_green = 0xf377f377f377f377ULL,
-    .U_blue  = 0x408d408d408d408dULL,
-    .V_red   = 0x3313331333133313ULL,
-    .V_green = 0xe5fce5fce5fce5fcULL,
-    .Y_coeff = 0x2543254325432543ULL,
-    .mmx0080 = 0x0080008000800080ULL,
-    .mmx00ff = 0x00ff00ff00ff00ffULL
-};
-
-static __inline__ void
-mmx_loadyv12 (uint8_t *py,
-	      uint8_t *pu,
-	      uint8_t *pv)
-{
-    __asm__ __volatile__ (
-	"movq      %0,    %%mm6\n" /* mm6 = Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
-	"pxor      %%mm4, %%mm4\n" /* mm4 = 0                       */
-	"psubusb   %1,    %%mm6\n" /* Y -= 16                       */
-	"movd      %2,    %%mm0\n" /* mm0 = 00 00 00 00 U3 U2 U1 U0 */
-	"movq      %%mm6, %%mm7\n" /* mm7 = Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
-	"pand      %3,    %%mm6\n" /* mm6 =    Y6    Y4    Y2    Y0 */
-	"psrlw     %4,    %%mm7\n" /* mm7 =    Y7    Y5    Y3    Y1 */
-	"movd      %5,    %%mm1\n" /* mm1 = 00 00 00 00 V3 V2 V1 V0 */
-	"psllw     %6,    %%mm6\n" /* promote precision             */
-	"pmulhw    %7,    %%mm6\n" /* mm6 = luma_rgb even           */
-	"psllw     %8,    %%mm7\n" /* promote precision             */
-	"punpcklbw %%mm4, %%mm0\n" /* mm0 = U3 U2 U1 U0             */
-	"psubsw    %9,    %%mm0\n" /* U -= 128                      */
-	"punpcklbw %%mm4, %%mm1\n" /* mm1 = V3 V2 V1 V0             */
-	"pmulhw    %10,   %%mm7\n" /* mm7 = luma_rgb odd            */
-	"psllw     %11,   %%mm0\n" /* promote precision             */
-	"psubsw    %12,   %%mm1\n" /* V -= 128                      */
-	"movq      %%mm0, %%mm2\n" /* mm2 = U3 U2 U1 U0             */
-	"psllw     %13,   %%mm1\n" /* promote precision             */
-	"movq      %%mm1, %%mm4\n" /* mm4 = V3 V2 V1 V0             */
-	"pmulhw    %14,   %%mm0\n" /* mm0 = chroma_b                */
-	"pmulhw    %15,   %%mm1\n" /* mm1 = chroma_r                */
-	"movq      %%mm0, %%mm3\n" /* mm3 = chroma_b                */
-	"paddsw    %%mm6, %%mm0\n" /* mm0 = B6 B4 B2 B0             */
-	"paddsw    %%mm7, %%mm3\n" /* mm3 = B7 B5 B3 B1             */
-	"packuswb  %%mm0, %%mm0\n" /* saturate to 0-255             */
-	"pmulhw    %16,   %%mm2\n" /* mm2 = U * U_green             */
-	"packuswb  %%mm3, %%mm3\n" /* saturate to 0-255             */
-	"punpcklbw %%mm3, %%mm0\n" /* mm0 = B7 B6 B5 B4 B3 B2 B1 B0 */
-	"pmulhw    %17,   %%mm4\n" /* mm4 = V * V_green             */
-	"paddsw    %%mm4, %%mm2\n" /* mm2 = chroma_g                */
-	"movq      %%mm2, %%mm5\n" /* mm5 = chroma_g                */
-	"movq      %%mm1, %%mm4\n" /* mm4 = chroma_r                */
-	"paddsw    %%mm6, %%mm2\n" /* mm2 = G6 G4 G2 G0             */
-	"packuswb  %%mm2, %%mm2\n" /* saturate to 0-255             */
-	"paddsw    %%mm6, %%mm1\n" /* mm1 = R6 R4 R2 R0             */
-	"packuswb  %%mm1, %%mm1\n" /* saturate to 0-255             */
-	"paddsw    %%mm7, %%mm4\n" /* mm4 = R7 R5 R3 R1             */
-	"packuswb  %%mm4, %%mm4\n" /* saturate to 0-255             */
-	"paddsw    %%mm7, %%mm5\n" /* mm5 = G7 G5 G3 G1             */
-	"packuswb  %%mm5, %%mm5\n" /* saturate to 0-255             */
-	"punpcklbw %%mm4, %%mm1\n" /* mm1 = R7 R6 R5 R4 R3 R2 R1 R0 */
-	"punpcklbw %%mm5, %%mm2\n" /* mm2 = G7 G6 G5 G4 G3 G2 G1 G0 */
-	: /* no outputs */
-	: "m" (*py), "m" (yuv.subYw), "m" (*pu), "m" (yuv.mmx00ff),
-	  "i" (8), "m" (*pv), "i" (3), "m" (yuv.Y_coeff),
-	  "i" (3), "m" (yuv.mmx0080), "m" (yuv.Y_coeff), "i" (3),
-	  "m" (yuv.mmx0080), "i" (3), "m" (yuv.U_blue), "m" (yuv.V_red),
-	  "m" (yuv.U_green), "m" (yuv.V_green));
-}
-
-static __inline__ void
-mmx_pack8888 (uint8_t *image)
-{
-    __asm__ __volatile__ (
-	"pxor      %%mm3, %%mm3\n"
-	"movq      %%mm0, %%mm6\n"
-	"punpcklbw %%mm2, %%mm6\n"
-	"movq      %%mm1, %%mm7\n"
-	"punpcklbw %%mm3, %%mm7\n"
-	"movq      %%mm0, %%mm4\n"
-	"punpcklwd %%mm7, %%mm6\n"
-	"movq      %%mm1, %%mm5\n"
-	"movq      %%mm6, (%0)\n"
-	"movq      %%mm0, %%mm6\n"
-	"punpcklbw %%mm2, %%mm6\n"
-	"punpckhwd %%mm7, %%mm6\n"
-	"movq      %%mm6, 8(%0)\n"
-	"punpckhbw %%mm2, %%mm4\n"
-	"punpckhbw %%mm3, %%mm5\n"
-	"punpcklwd %%mm5, %%mm4\n"
-	"movq      %%mm4, 16(%0)\n"
-	"movq      %%mm0, %%mm4\n"
-	"punpckhbw %%mm2, %%mm4\n"
-	"punpckhwd %%mm5, %%mm4\n"
-	"movq      %%mm4, 24(%0)\n"
-	: /* no outputs */
-	: "r" (image) );
-}
-
-static __inline__ uint32_t
-loadyuv (uint8_t *py,
-	 uint8_t *pu,
-	 uint8_t *pv)
-{
-    int16_t y, u, v;
-    int32_t r, g, b;
-
-    y = *py - 16;
-    u = *pu - 128;
-    v = *pv - 128;
-
-    /* R = 1.164(Y - 16) + 1.596(V - 128) */
-    r = 0x012b27 * y + 0x019a2e * v;
-    /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */
-    g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u;
-    /* B = 1.164(Y - 16) + 2.018(U - 128) */
-    b = 0x012b27 * y + 0x0206a2 * u;
-
-    return 0xff000000 |
-	(r >= 0 ? r < 0x1000000 ? r         & 0xff0000 : 0xff0000 : 0) |
-	(g >= 0 ? g < 0x1000000 ? (g >> 8)  & 0x00ff00 : 0x00ff00 : 0) |
-	(b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0);
-}
-
-static __inline__ uint8_t *
-loadyv12_scanline (ScanlineBuf *slb,
-		   int	       y,
-		   uint8_t       *srcY,
-		   int	       yStride,
-		   uint8_t       *srcU,
-		   uint8_t       *srcV,
-		   int	       uvStride,
-		   int	       x,
-		   int	       width)
-{
-    uint8_t *py, *pu, *pv, *pd;
-    int   i, w;
-
-    y = _y_to_scanline (slb, y);
-
-    for (i = 0; slb->lock[i]; i++);
-
-    slb->y[i]    = y;
-    slb->lock[i] = TRUE;
-
-    py = srcY + yStride  * (y >> 0);
-    pu = srcU + uvStride * (y >> 1);
-    pv = srcV + uvStride * (y >> 1);
-
-    pd = slb->line[i];
-
-    w = width;
-
-    while (w && (unsigned long) py & 7)
-    {
-	*((uint32_t *) pd) = loadyuv (py, pu, pv);
-
-	pd += 4;
-	py += 1;
-
-	if (w & 1)
-	{
-	    pu += 1;
-	    pv += 1;
-	}
-
-	w--;
-    }
-
-    while (w >= 8)
-    {
-	mmx_loadyv12 (py, pu, pv);
-	mmx_pack8888 (pd);
-
-	py += 8;
-	pu += 4;
-	pv += 4;
-	pd += 32;
-
-	w -= 8;
-    }
-
-    while (w)
-    {
-	*((uint32_t *) pd) = loadyuv (py, pu, pv);
-
-	pd += 4;
-	py += 1;
-
-	if (w & 1)
-	{
-	    pu += 1;
-	    pv += 1;
-	}
-
-	w--;
-    }
-
-    return slb->line[i];
-}
-
-static __inline__ uint8_t *
-loadyuy2_scanline (ScanlineBuf *slb,
-		   int	       y,
-		   uint8_t       *src,
-		   int	       stride,
-		   int	       x,
-		   int	       width)
-{
-    uint8_t *py, *pu, *pv, *pd;
-    int   i, w;
-
-    y = _y_to_scanline (slb, y);
-
-    for (i = 0; slb->lock[i]; i++);
-
-    slb->y[i]    = y;
-    slb->lock[i] = TRUE;
-
-    py = src + stride * (y >> 0);
-    pu = py + 1;
-    pv = py + 3;
-
-    pd = slb->line[i];
-
-    w = width;
-
-    while (w)
-    {
-	*((uint32_t *) pd) = loadyuv (py, pu, pv);
-
-	pd += 4;
-	py += 2;
-
-	if (w & 1)
-	{
-	    pu += 4;
-	    pv += 4;
-	}
-
-	w--;
-    }
-
-    return slb->line[i];
-}
-
-/* TODO: MMX code for bilinear interpolation */
-void
-fbCompositeSrc_yv12x8888mmx (pixman_op_t      op,
-			     pixman_image_t * pSrc,
-			     pixman_image_t * pMask,
-			     pixman_image_t * pDst,
-			     int16_t      xSrc,
-			     int16_t      ySrc,
-			     int16_t      xMask,
-			     int16_t      yMask,
-			     int16_t      xDst,
-			     int16_t      yDst,
-			     uint16_t     width,
-			     uint16_t     height)
-{
-    pixman_transform_t *transform = pSrc->common.transform;
-    uint8_t	  *dst, *srcY, *srcU, *srcV;
-    uint32_t	  *srcBits = pSrc->bits.bits;
-    int		  srcStride, uvStride;
-    uint32_t	  *dstBits = pDst->bits.bits;
-    int		  dstStride;
-    int		  offset, w;
-    uint8_t	  *pd;
-
-    dst = (uint8_t *) dstBits;
-    dstStride = pDst->bits.rowstride * sizeof (uint32_t);
-
-    srcY = (uint8_t *) srcBits;
-    srcStride = pSrc->bits.rowstride;
-
-    if (srcStride < 0)
-    {
-	offset = ((-srcStride) >> 1) * ((pSrc->bits.height - 1) >> 1) -
-	    srcStride;
-	srcV = (uint8_t *) (srcBits + offset);
-	offset += ((-srcStride) >> 1) * ((pSrc->bits.height) >> 1);
-	srcU = (uint8_t *) (srcBits + offset);
-    }
-    else
-    {
-	offset = srcStride * pSrc->bits.height;
-
-	srcV = (uint8_t *) (srcBits + offset);
-	srcU = (uint8_t *) (srcBits + offset + (offset >> 2));
-    }
-
-    srcStride *= sizeof (uint32_t);
-    uvStride = srcStride >> 1;
-
-    if (transform)
-    {
-	/* transformation is a Y coordinate flip, this is achieved by
-	   moving start offsets for each plane and changing sign of stride */
-	if (transform->matrix[0][0] == (1 << 16)  &&
-	    transform->matrix[1][1] == -(1 << 16) &&
-	    transform->matrix[0][2] == 0          &&
-	    transform->matrix[1][2] == (pSrc->bits.height << 16))
-	{
-	    srcY = srcY + ((pSrc->bits.height >> 0) - 1) * srcStride;
-	    srcU = srcU + ((pSrc->bits.height >> 1) - 1) * uvStride;
-	    srcV = srcV + ((pSrc->bits.height >> 1) - 1) * uvStride;
-
-	    srcStride = -srcStride;
-	    uvStride  = -uvStride;
-
-	    transform = 0;
-	}
-    }
-
-    dst += dstStride * yDst + (xDst << 2);
-
-    if (transform)
-    {
-	ScanlineBuf slb;
-	uint8_t	    _scanline_buf[8192];
-	uint8_t	    *ps0, *ps1;
-	int	    x, x0, y, line, xStep, yStep;
-	int         distx, idistx, disty, idisty;
-	int	    srcEnd = pSrc->bits.width << 16;
-	int	    srcEndIndex = (pSrc->bits.width - 1) << 16;
-
-	xStep = transform->matrix[0][0];
-	yStep = transform->matrix[1][1];
-
-	x0 = transform->matrix[0][2] + xStep * xSrc;
-	y  = transform->matrix[1][2] + yStep * ySrc;
-
-	init_scanline_buffer (&slb,
-			      _scanline_buf, sizeof (_scanline_buf),
-			      pSrc->bits.width << 2,
-			      pSrc->bits.height);
-
-	while (height--)
-	{
-	    disty  = (y >> 8) & 0xff;
-	    idisty = 256 - disty;
-	    line   = y >> 16;
-
-	    ps0 = get_scanline (&slb, line);
-	    ps1 = get_scanline (&slb, line + 1);
-
-	    if (!ps0)
-		ps0 = loadyv12_scanline (&slb, line,
-					 srcY, srcStride, srcU, srcV, uvStride,
-					 0, pSrc->bits.width);
-
-	    if (!ps1)
-		ps1 = loadyv12_scanline (&slb, line + 1,
-					 srcY, srcStride, srcU, srcV, uvStride,
-					 0, pSrc->bits.width);
-
-	    pd = dst;
-
-	    x = x0;
-	    w = width;
-
-	    if (pSrc->common.filter == PIXMAN_FILTER_BILINEAR)
-	    {
-		while (w && x < 0)
-		{
-		    *(uint32_t *) pd = fetch_bilinear_8888 (0, 256, disty, idisty,
-							  ps0, ps1, 0);
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w && x < srcEndIndex)
-		{
-		    distx  = (x >> 8) & 0xff;
-		    idistx = 256 - distx;
-
-		    *(uint32_t *) pd = fetch_bilinear_8888 (distx, idistx,
-							  disty, idisty,
-							  ps0, ps1,
-							  (x >> 14) & ~3);
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w)
-		{
-		    *(uint32_t *) pd = fetch_bilinear_8888 (256, 0,
-							  disty, idisty,
-							  ps0, ps1,
-							  (x >> 14) & ~3);
-
-		    pd += 4;
-		    w  -= 1;
-		}
-	    }
-	    else
-	    {
-		while (w && x < 0)
-		{
-		    *(uint32_t *) pd = *(uint32_t *) ps0;
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w && x < srcEnd)
-		{
-		    *(uint32_t *) pd = ((uint32_t *) ps0)[x >> 16];
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w)
-		{
-		    *(uint32_t *) pd = ((uint32_t *) ps0)[x >> 16];
-
-		    pd += 4;
-		    w  -= 1;
-		}
-	    }
-
-	    y   += yStep;
-	    dst += dstStride;
-
-	    release_scanlines (&slb);
-	}
-
-	fini_scanline_buffer (&slb);
-    }
-    else
-    {
-	uint8_t *py, *pu, *pv;
-
-	srcY += srcStride * (ySrc >> 0) + (xSrc >> 0);
-	srcU += uvStride  * (ySrc >> 1) + (xSrc >> 1);
-	srcV += uvStride  * (ySrc >> 1) + (xSrc >> 1);
-
-	while (height)
-	{
-	    py = srcY;
-	    pu = srcU;
-	    pv = srcV;
-	    pd = dst;
-
-	    w = width;
-
-	    while (w && (unsigned long) py & 7)
-	    {
-		*((uint32_t *) pd) = loadyuv (py, pu, pv);
-
-		pd += 4;
-		py += 1;
-
-		if (w & 1)
-		{
-		    pu += 1;
-		    pv += 1;
-		}
-
-		w--;
-	    }
-
-	    while (w >= 8)
-	    {
-		mmx_loadyv12 (py, pu, pv);
-		mmx_pack8888 (pd);
-
-		py += 8;
-		pu += 4;
-		pv += 4;
-		pd += 32;
-
-		w -= 8;
-	    }
-
-	    while (w)
-	    {
-		*((uint32_t *) pd) = loadyuv (py, pu, pv);
-
-		pd += 4;
-		py += 1;
-
-		if (w & 1)
-		{
-		    pu += 1;
-		    pv += 1;
-		}
-
-		w--;
-	    }
-
-	    dst  += dstStride;
-	    srcY += srcStride;
-
-	    if (height & 1)
-	    {
-		srcU += uvStride;
-		srcV += uvStride;
-	    }
-
-	    height--;
-	}
-    }
-
-    _mm_empty ();
-}
-
-/* TODO: MMX code for yuy2 */
-void
-fbCompositeSrc_yuy2x8888mmx (pixman_op_t      op,
-			     pixman_image_t * pSrc,
-			     pixman_image_t * pMask,
-			     pixman_image_t * pDst,
-			     int16_t      xSrc,
-			     int16_t      ySrc,
-			     int16_t      xMask,
-			     int16_t      yMask,
-			     int16_t      xDst,
-			     int16_t      yDst,
-			     uint16_t     width,
-			     uint16_t     height)
-{
-    pixman_transform_t *transform = pSrc->common.transform;
-    uint8_t	  *dst, *src;
-    uint32_t	  *srcBits = pSrc->bits.bits;
-    int		  srcStride;
-    uint32_t	  *dstBits = pDst->bits.bits;
-    int		  dstStride;
-    int		  w;
-    uint8_t	  *pd;
-
-    dst = (uint8_t *) dstBits;
-    dstStride = pDst->bits.rowstride * sizeof (uint32_t);
-
-    src = (uint8_t *) srcBits;
-    srcStride = pSrc->bits.rowstride * sizeof (uint32_t);
-
-    if (transform)
-    {
-	/* transformation is a Y coordinate flip, this is achieved by
-	   moving start offsets for each plane and changing sign of stride */
-	if (transform->matrix[0][0] == (1 << 16)  &&
-	    transform->matrix[1][1] == -(1 << 16) &&
-	    transform->matrix[0][2] == 0          &&
-	    transform->matrix[1][2] == (pSrc->bits.height << 16))
-	{
-	    src = src + (pSrc->bits.height - 1) * srcStride;
-
-	    srcStride = -srcStride;
-
-	    transform = 0;
-	}
-    }
-
-    dst += dstStride * yDst + (xDst << 2);
-
-    if (transform)
-    {
-	ScanlineBuf slb;
-	uint8_t	    _scanline_buf[8192];
-	uint8_t	    *ps0, *ps1;
-	int	    x, x0, y, line, xStep, yStep;
-	int         distx, idistx, disty, idisty;
-	int	    srcEnd = pSrc->bits.width << 16;
-	int	    srcEndIndex = (pSrc->bits.width - 1) << 16;
-
-	xStep = transform->matrix[0][0];
-	yStep = transform->matrix[1][1];
-
-	x0 = transform->matrix[0][2] + xStep * xSrc;
-	y  = transform->matrix[1][2] + yStep * ySrc;
-
-	init_scanline_buffer (&slb,
-			      _scanline_buf, sizeof (_scanline_buf),
-			      pSrc->bits.width << 2,
-			      pSrc->bits.height);
-
-	while (height--)
-	{
-	    disty  = (y >> 8) & 0xff;
-	    idisty = 256 - disty;
-	    line   = y >> 16;
-
-	    ps0 = get_scanline (&slb, line);
-	    ps1 = get_scanline (&slb, line + 1);
-
-	    if (!ps0)
-		ps0 = loadyuy2_scanline (&slb, line,
-					 src, srcStride,
-					 0, pSrc->bits.width);
-
-	    if (!ps1)
-		ps1 = loadyuy2_scanline (&slb, line + 1,
-					 src, srcStride,
-					 0, pSrc->bits.width);
-
-	    pd = dst;
-
-	    x = x0;
-	    w = width;
-
-	    if (pSrc->common.filter == PIXMAN_FILTER_BILINEAR)
-	    {
-		while (w && x < 0)
-		{
-		    *(uint32_t *) pd = fetch_bilinear_8888 (0, 256, disty, idisty,
-							  ps0, ps1, 0);
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w && x < srcEndIndex)
-		{
-		    distx  = (x >> 8) & 0xff;
-		    idistx = 256 - distx;
-
-		    *(uint32_t *) pd = fetch_bilinear_8888 (distx, idistx,
-							  disty, idisty,
-							  ps0, ps1,
-							  (x >> 14) & ~3);
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w)
-		{
-		    *(uint32_t *) pd = fetch_bilinear_8888 (256, 0, disty, idisty,
-							  ps0, ps1,
-							  (x >> 14) & ~3);
-
-		    pd += 4;
-		    w  -= 1;
-		}
-	    }
-	    else
-	    {
-		while (w && x < 0)
-		{
-		    *(uint32_t *) pd = *(uint32_t *) ps0;
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w && x < srcEnd)
-		{
-		    *(uint32_t *) pd = ((uint32_t *) ps0)[x >> 16];
-
-		    x  += xStep;
-		    pd += 4;
-		    w  -= 1;
-		}
-
-		while (w)
-		{
-		    *(uint32_t *) pd = ((uint32_t *) ps0)[x >> 16];
-
-		    pd += 4;
-		    w  -= 1;
-		}
-	    }
-
-	    y   += yStep;
-	    dst += dstStride;
-
-	    release_scanlines (&slb);
-	}
-
-	fini_scanline_buffer (&slb);
-    }
-    else
-    {
-	uint8_t *py, *pu, *pv;
-
-	src += srcStride * (ySrc >> 0) + xSrc;
-
-	while (height)
-	{
-	    py = src;
-	    pu = src + 1;
-	    pv = src + 3;
-	    pd = dst;
-
-	    w = width;
-
-	    while (w)
-	    {
-		*((uint32_t *) pd) = loadyuv (py, pu, pv);
-
-		pd += 4;
-		py += 2;
-
-		if (w & 1)
-		{
-		    pu += 4;
-		    pv += 4;
-		}
-
-		w--;
-	    }
-
-	    dst += dstStride;
-	    src += srcStride;
-
-	    height--;
-	}
-    }
-}
 
 
 #endif /* USE_MMX */
diff --git a/pixman/pixman-mmx.h b/pixman/pixman-mmx.h
index a8e27e4..a74d4ba 100644
--- a/pixman/pixman-mmx.h
+++ b/pixman/pixman-mmx.h
@@ -312,32 +312,4 @@ fbCompositeOver_x888x8x8888mmx (pixman_o
 				uint16_t     width,
 				uint16_t     height);
 
-void
-fbCompositeSrc_yv12x8888mmx (pixman_op_t      op,
-			     pixman_image_t * pSrc,
-			     pixman_image_t * pMask,
-			     pixman_image_t * pDst,
-			     int16_t    xSrc,
-			     int16_t    ySrc,
-			     int16_t    xMask,
-			     int16_t    yMask,
-			     int16_t    xDst,
-			     int16_t    yDst,
-			     uint16_t   width,
-			     uint16_t   height);
-
-void
-fbCompositeSrc_yuy2x8888mmx (pixman_op_t      op,
-			     pixman_image_t * pSrc,
-			     pixman_image_t * pMask,
-			     pixman_image_t * pDst,
-			     int16_t    xSrc,
-			     int16_t    ySrc,
-			     int16_t    xMask,
-			     int16_t    yMask,
-			     int16_t    xDst,
-			     int16_t    yDst,
-			     uint16_t   width,
-			     uint16_t   height);
-
 #endif /* USE_MMX */
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index d2bc3d3..c7d73fc 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1437,35 +1437,7 @@ pixman_image_composite (pixman_op_t     
 	    maskTransform = FALSE;
     }
 
-    /* YUV is only used internally for XVideo */
-    if (pSrc->bits.format == PIXMAN_yv12 || pSrc->bits.format == PIXMAN_yuy2)
-    {
-#ifdef USE_MMX
-	/* non rotating transformation */
-	if (!pSrc->common.transform ||
-	    (pSrc->common.transform->matrix[0][1] == 0 &&
-	     pSrc->common.transform->matrix[1][0] == 0 &&
-	     pSrc->common.transform->matrix[2][0] == 0 &&
-	     pSrc->common.transform->matrix[2][1] == 0 &&
-	     pSrc->common.transform->matrix[2][2] == 1 << 16))
-	{
-	    switch (pDst->bits.format) {
-	    case PIXMAN_a8r8g8b8:
-	    case PIXMAN_x8r8g8b8:
-		if (pixman_have_mmx())
-		{
-		    if (pSrc->bits.format == PIXMAN_yv12)
-			func = fbCompositeSrc_yv12x8888mmx;
-		    else
-			func = fbCompositeSrc_yuy2x8888mmx;
-		}
-	    default:
-		break;
-	    }
-	}
-#endif
-    }
-    else if ((pSrc->type == BITS || can_get_solid (pSrc)) && (!pMask || pMask->type == BITS)
+    if ((pSrc->type == BITS || can_get_solid (pSrc)) && (!pMask || pMask->type == BITS)
         && !srcTransform && !maskTransform
         && !maskAlphaMap && !srcAlphaMap && !dstAlphaMap
         && (pSrc->common.filter != PIXMAN_FILTER_CONVOLUTION)


More information about the xorg-commit mailing list