⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pixman-pict.c

📁 嵌入式图形库
💻 C
📖 第 1 页 / 共 4 页
字号:
    int		dstXoff, dstYoff;    int		maskXoff, maskYoff;    uint32_t	src;    fbComposeGetSolid(pSrc, src, pDst->bits.format);    fbGetStipDrawable (pMask->pDrawable, maskBits, maskStride, maskBpp, maskXoff, maskYoff);    fbGetDrawable (pDst->pDrawable, dstBits, dstStride, dstBpp, dstXoff, dstYoff);    switch (dstBpp) {    case 32:	break;    case 24:	break;    case 16:	src = cvt8888to0565(src);	break;    }    src = fbReplicatePixel (src, dstBpp);    fbBltOne (maskBits + maskStride * (yMask + maskYoff),	      maskStride,	      xMask + maskXoff,	      dstBits + dstStride * (yDst + dstYoff),	      dstStride,	      (xDst + dstXoff) * dstBpp,	      dstBpp,	      width * dstBpp,	      height,	      0x0,	      src,	      FB_ALLONES,	      0x0);#endif}/* * Apply a constant alpha value in an over computation */static voidfbCompositeSrcSrc_nxn  (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);/* * Simple bitblt */static voidfbCompositeSrcSrc_nxn  (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){    /* FIXME */#if 0    uint32_t	*dst;    uint32_t	*src;    int	dstStride, srcStride;    int		srcXoff, srcYoff;    int		dstXoff, dstYoff;    int		srcBpp;    int		dstBpp;    pixman_bool_t	reverse = FALSE;    pixman_bool_t	upsidedown = FALSE;    fbGetDrawable(pSrc->pDrawable,src,srcStride,srcBpp,srcXoff,srcYoff);    fbGetDrawable(pDst->pDrawable,dst,dstStride,dstBpp,dstXoff,dstYoff);    fbBlt (src + (ySrc + srcYoff) * srcStride,	   srcStride,	   (xSrc + srcXoff) * srcBpp,	   dst + (yDst + dstYoff) * dstStride,	   dstStride,	   (xDst + dstXoff) * dstBpp,	   (width) * dstBpp,	   (height),	   GXcopy,	   FB_ALLONES,	   dstBpp,	   reverse,	   upsidedown);#endif}static voidpixman_image_composite_rect  (pixman_op_t                   op,			      pixman_image_t               *src,			      pixman_image_t               *mask,			      pixman_image_t               *dest,			      int16_t                       src_x,			      int16_t                       src_y,			      int16_t                       mask_x,			      int16_t                       mask_y,			      int16_t                       dest_x,			      int16_t                       dest_y,			      uint16_t                      width,			      uint16_t                      height);voidfbCompositeSolidFill (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){    uint32_t	src;    fbComposeGetSolid(pSrc, src, pDst->bits.format);    if (pDst->bits.format == PIXMAN_a8)	src = src >> 24;    else if (pDst->bits.format == PIXMAN_r5g6b5 ||	     pDst->bits.format == PIXMAN_b5g6r5)	src = cvt8888to0565 (src);    pixman_fill (pDst->bits.bits, pDst->bits.rowstride,		 PIXMAN_FORMAT_BPP (pDst->bits.format),		 xDst, yDst,		 width, height,		 src);}static voidfbCompositeSrc_8888xx888 (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){    uint32_t	*dst;    uint32_t    *src;    int		 dstStride, srcStride;    uint32_t	 n_bytes = width * sizeof (uint32_t);    fbComposeGetStart (pSrc, xSrc, ySrc, uint32_t, srcStride, src, 1);    fbComposeGetStart (pDst, xDst, yDst, uint32_t, dstStride, dst, 1);    while (height--)    {	memcpy (dst, src, n_bytes);	dst += dstStride;	src += srcStride;    }}static voidpixman_walk_composite_region (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_bool_t srcRepeat,			      pixman_bool_t maskRepeat,			      CompositeFunc compositeRect){    int		    n;    const pixman_box16_t *pbox;    int		    w, h, w_this, h_this;    int		    x_msk, y_msk, x_src, y_src, x_dst, y_dst;    pixman_region16_t reg;    pixman_region16_t *region;    pixman_region_init (&reg);    if (!pixman_compute_composite_region (&reg, pSrc, pMask, pDst,					  xSrc, ySrc, xMask, yMask, xDst, yDst, width, height))    {	return;    }    region = &reg;    pbox = pixman_region_rectangles (region, &n);    while (n--)    {	h = pbox->y2 - pbox->y1;	y_src = pbox->y1 - yDst + ySrc;	y_msk = pbox->y1 - yDst + yMask;	y_dst = pbox->y1;	while (h)	{	    h_this = h;	    w = pbox->x2 - pbox->x1;	    x_src = pbox->x1 - xDst + xSrc;	    x_msk = pbox->x1 - xDst + xMask;	    x_dst = pbox->x1;	    if (maskRepeat)	    {		y_msk = MOD (y_msk, pMask->bits.height);		if (h_this > pMask->bits.height - y_msk)		    h_this = pMask->bits.height - y_msk;	    }	    if (srcRepeat)	    {		y_src = MOD (y_src, pSrc->bits.height);		if (h_this > pSrc->bits.height - y_src)		    h_this = pSrc->bits.height - y_src;	    }	    while (w)	    {		w_this = w;		if (maskRepeat)		{		    x_msk = MOD (x_msk, pMask->bits.width);		    if (w_this > pMask->bits.width - x_msk)			w_this = pMask->bits.width - x_msk;		}		if (srcRepeat)		{		    x_src = MOD (x_src, pSrc->bits.width);		    if (w_this > pSrc->bits.width - x_src)			w_this = pSrc->bits.width - x_src;		}		(*compositeRect) (op, pSrc, pMask, pDst,				  x_src, y_src, x_msk, y_msk, x_dst, y_dst,				  w_this, h_this);		w -= w_this;		x_src += w_this;		x_msk += w_this;		x_dst += w_this;	    }	    h -= h_this;	    y_src += h_this;	    y_msk += h_this;	    y_dst += h_this;	}	pbox++;    }    pixman_region_fini (&reg);}static pixman_bool_tcan_get_solid (pixman_image_t *image){    if (image->type == SOLID)	return TRUE;    if (image->type != BITS	||	image->bits.width != 1	||	image->bits.height != 1)    {	return FALSE;    }    if (image->common.repeat != PIXMAN_REPEAT_NORMAL)	return FALSE;    switch (image->bits.format)    {    case PIXMAN_a8r8g8b8:    case PIXMAN_x8r8g8b8:    case PIXMAN_a8b8g8r8:    case PIXMAN_x8b8g8r8:    case PIXMAN_r8g8b8:    case PIXMAN_b8g8r8:    case PIXMAN_r5g6b5:    case PIXMAN_b5g6r5:	return TRUE;    default:	return FALSE;    }}#define SCANLINE_BUFFER_LENGTH 2048static voidpixman_image_composite_rect  (pixman_op_t                   op,			      pixman_image_t               *src,			      pixman_image_t               *mask,			      pixman_image_t               *dest,			      int16_t                       src_x,			      int16_t                       src_y,			      int16_t                       mask_x,			      int16_t                       mask_y,			      int16_t                       dest_x,			      int16_t                       dest_y,			      uint16_t                      width,			      uint16_t                      height){    FbComposeData compose_data;    uint32_t _scanline_buffer[SCANLINE_BUFFER_LENGTH * 3];    uint32_t *scanline_buffer = _scanline_buffer;    return_if_fail (src != NULL);    return_if_fail (dest != NULL);    if (width > SCANLINE_BUFFER_LENGTH)    {	scanline_buffer = (uint32_t *)pixman_malloc_abc (width, 3, sizeof (uint32_t));	if (!scanline_buffer)	    return;    }    compose_data.op = op;    compose_data.src = src;    compose_data.mask = mask;    compose_data.dest = dest;    compose_data.xSrc = src_x;    compose_data.ySrc = src_y;    compose_data.xMask = mask_x;    compose_data.yMask = mask_y;    compose_data.xDest = dest_x;    compose_data.yDest = dest_y;    compose_data.width = width;    compose_data.height = height;    pixman_composite_rect_general (&compose_data, scanline_buffer);    if (scanline_buffer != _scanline_buffer)	free (scanline_buffer);}/* These "formats" both have depth 0, so they * will never clash with any real ones */#define PIXMAN_null		PIXMAN_FORMAT(0,0,0,0,0,0)#define PIXMAN_solid		PIXMAN_FORMAT(0,1,0,0,0,0)#define NEED_COMPONENT_ALPHA		(1 << 0)#define NEED_PIXBUF			(1 << 1)#define NEED_SOLID_MASK		        (1 << 2)typedef struct{    pixman_op_t			op;    pixman_format_code_t	src_format;    pixman_format_code_t	mask_format;    pixman_format_code_t	dest_format;    CompositeFunc		func;    uint32_t			flags;} FastPathInfo;#ifdef USE_MMXstatic const FastPathInfo mmx_fast_paths[] ={    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_r5g6b5,   fbCompositeSolidMask_nx8x0565mmx,     0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_b5g6r5,   fbCompositeSolidMask_nx8x0565mmx,     0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8x8888mmx,     0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8x8888mmx,     0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8x8888mmx,     0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8x8888mmx,     0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8r8g8b8, PIXMAN_r5g6b5,   fbCompositeSolidMask_nx8888x0565Cmmx, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8b8g8r8, PIXMAN_b5g6r5,   fbCompositeSolidMask_nx8888x0565Cmmx, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5,   fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5,   fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5,   fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5,   fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8,       PIXMAN_a8r8g8b8, fbCompositeSrc_x888xnx8888mmx,    NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8,       PIXMAN_x8r8g8b8, fbCompositeSrc_x888xnx8888mmx,	   NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8,	PIXMAN_a8b8g8r8, fbCompositeSrc_x888xnx8888mmx,	   NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8,	PIXMAN_x8b8g8r8, fbCompositeSrc_x888xnx8888mmx,	   NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8,       PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8x8888mmx,    NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8,       PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8x8888mmx,	   NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8,	PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8x8888mmx,	   NEED_SOLID_MASK },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8,	PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8x8888mmx,	   NEED_SOLID_MASK },#if 0    /* FIXME: This code is commented out since it's apparently not actually faster than the generic code. */    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8,	PIXMAN_x8r8g8b8, fbCompositeOver_x888x8x8888mmx,   0 },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8,	PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888mmx,   0 },    { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8,	PIXMAN_x8b8g8r8, fbCompositeOver_x888x8x8888mmx,   0 },    { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8,	PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888mmx,   0 },#endif    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_null,	PIXMAN_a8r8g8b8, fbCompositeSolid_nx8888mmx,        0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_null,     PIXMAN_x8r8g8b8, fbCompositeSolid_nx8888mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_null,     PIXMAN_r5g6b5,   fbCompositeSolid_nx0565mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_null,     PIXMAN_x8r8g8b8, fbCompositeCopyAreammx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_null,     PIXMAN_x8b8g8r8, fbCompositeCopyAreammx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null,     PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8888mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null,	PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8888mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null,	PIXMAN_r5g6b5,	 fbCompositeSrc_8888x0565mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null,	PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8888mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null,	PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8888mmx,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null,     PIXMAN_b5g6r5,   fbCompositeSrc_8888x0565mmx,	   0 },    { PIXMAN_OP_ADD, PIXMAN_a8r8g8b8,  PIXMAN_null,	PIXMAN_a8r8g8b8, fbCompositeSrcAdd_8888x8888mmx,   0 },    { PIXMAN_OP_ADD, PIXMAN_a8b8g8r8,  PIXMAN_null,	PIXMAN_a8b8g8r8, fbCompositeSrcAdd_8888x8888mmx,   0 },    { PIXMAN_OP_ADD, PIXMAN_a8,        PIXMAN_null,     PIXMAN_a8,       fbCompositeSrcAdd_8000x8000mmx,   0 },    { PIXMAN_OP_ADD, PIXMAN_solid,     PIXMAN_a8,       PIXMAN_a8,       fbCompositeSrcAdd_8888x8x8mmx,    0 },    { PIXMAN_OP_SRC, PIXMAN_solid,     PIXMAN_a8,       PIXMAN_a8r8g8b8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },    { PIXMAN_OP_SRC, PIXMAN_solid,     PIXMAN_a8,       PIXMAN_x8r8g8b8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },    { PIXMAN_OP_SRC, PIXMAN_solid,     PIXMAN_a8,       PIXMAN_a8b8g8r8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },    { PIXMAN_OP_SRC, PIXMAN_solid,     PIXMAN_a8,       PIXMAN_x8b8g8r8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },    { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8,  PIXMAN_null,	PIXMAN_a8r8g8b8, fbCompositeCopyAreammx, 0 },    { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8,  PIXMAN_null,	PIXMAN_a8b8g8r8, fbCompositeCopyAreammx, 0 },    { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8,  PIXMAN_null,	PIXMAN_x8r8g8b8, fbCompositeCopyAreammx, 0 },    { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8,  PIXMAN_null,	PIXMAN_x8b8g8r8, fbCompositeCopyAreammx, 0 },    { PIXMAN_OP_SRC, PIXMAN_r5g6b5,    PIXMAN_null,     PIXMAN_r5g6b5,   fbCompositeCopyAreammx, 0 },    { PIXMAN_OP_SRC, PIXMAN_b5g6r5,    PIXMAN_null,     PIXMAN_b5g6r5,   fbCompositeCopyAreammx, 0 },    { PIXMAN_OP_IN,  PIXMAN_a8,        PIXMAN_null,     PIXMAN_a8,       fbCompositeIn_8x8mmx,   0 },    { PIXMAN_OP_IN,  PIXMAN_solid,     PIXMAN_a8,	PIXMAN_a8,	 fbCompositeIn_nx8x8mmx, 0 },    { PIXMAN_OP_NONE },};#endif#ifdef USE_SSE2static const FastPathInfo sse_fast_paths[] ={    { PIXMAN_OP_NONE },};#endifstatic const FastPathInfo c_fast_paths[] ={    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_r5g6b5,   fbCompositeSolidMask_nx8x0565, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_b5g6r5,   fbCompositeSolidMask_nx8x0565, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_r8g8b8,   fbCompositeSolidMask_nx8x0888, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_b8g8r8,   fbCompositeSolidMask_nx8x0888, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8x8888, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8x8888, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8x8888, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8,       PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8x8888, 0 },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8r8g8b8, PIXMAN_r5g6b5,   fbCompositeSolidMask_nx8888x0565C, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a8b8g8r8, PIXMAN_b5g6r5,   fbCompositeSolidMask_nx8888x0565C, NEED_COMPONENT_ALPHA },#if 0    /* FIXME: This code is commented out since it's apparently not actually faster than the generic code */    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8,	PIXMAN_x8r8g8b8, fbCompositeOver_x888x8x8888,       0 },    { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8,	PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888,       0 },    { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8,	PIXMAN_x8b8g8r8, fbCompositeOver_x888x8x8888,       0 },    { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8,	PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888,       0 },#endif    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null,     PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8888,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null,	PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8888,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null,	PIXMAN_r5g6b5,	 fbCompositeSrc_8888x0565,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null,	PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8888,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null,	PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8888,	   0 },    { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null,     PIXMAN_b5g6r5,   fbCompositeSrc_8888x0565,	   0 },#if 0    /* FIXME */    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a1,	PIXMAN_r5g6b5,   fbCompositeSolidMask_nx1xn,	   0 },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -