Sat Mar 26 18:49:21 2005 Soeren Sandmann <sandmann@redhat.com>
programs/Xserver/fb/fbmmx.h New function. Hook it up here
This commit is contained in:
parent
0d33b58837
commit
476ae15640
80
fb/fbmmx.c
80
fb/fbmmx.c
|
@ -731,6 +731,86 @@ fbCompositeSrc_8888x8x8888mmx (CARD8 op,
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fbCompositeSrc_8888x8888mmx (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 *dstLine, *dst;
|
||||||
|
CARD32 *srcLine, *src;
|
||||||
|
FbStride dstStride, srcStride;
|
||||||
|
CARD16 w;
|
||||||
|
__m64 srca;
|
||||||
|
|
||||||
|
CHECKPOINT();
|
||||||
|
|
||||||
|
fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);
|
||||||
|
fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);
|
||||||
|
|
||||||
|
srca = MC (4x00ff);
|
||||||
|
|
||||||
|
while (height--)
|
||||||
|
{
|
||||||
|
dst = dstLine;
|
||||||
|
dstLine += dstStride;
|
||||||
|
src = srcLine;
|
||||||
|
srcLine += srcStride;
|
||||||
|
w = width;
|
||||||
|
|
||||||
|
while (w && (unsigned long)dst & 7)
|
||||||
|
{
|
||||||
|
__m64 s = load8888 (*src);
|
||||||
|
__m64 d = load8888 (*dst);
|
||||||
|
|
||||||
|
*dst = (ullong)pack8888 (over (s, expand_alpha (s), d), (__m64)_mm_setzero_si64());
|
||||||
|
|
||||||
|
w--;
|
||||||
|
dst++;
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (w >= 2)
|
||||||
|
{
|
||||||
|
__m64 vd = *(__m64 *)(dst + 0);
|
||||||
|
__m64 vs = *(__m64 *)(src + 0);
|
||||||
|
__m64 vs0 = expand8888 (vs, 0);
|
||||||
|
__m64 vs1 = expand8888 (vs, 1);
|
||||||
|
|
||||||
|
*(__m64 *)dst = (__m64)pack8888 (
|
||||||
|
over (vs0, expand_alpha (vs0), expand8888 (vd, 0)),
|
||||||
|
over (vs1, expand_alpha (vs1), expand8888 (vd, 1)));
|
||||||
|
|
||||||
|
w -= 2;
|
||||||
|
dst += 2;
|
||||||
|
src += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (w)
|
||||||
|
{
|
||||||
|
__m64 s = load8888 (*src);
|
||||||
|
__m64 d = load8888 (*dst);
|
||||||
|
|
||||||
|
*dst = (ullong)pack8888 (over (s, expand_alpha (s), d),
|
||||||
|
(__m64)_mm_setzero_si64());
|
||||||
|
|
||||||
|
w--;
|
||||||
|
dst++;
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_mm_empty();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fbCompositeSolidMask_nx8x8888mmx (CARD8 op,
|
fbCompositeSolidMask_nx8x8888mmx (CARD8 op,
|
||||||
PicturePtr pSrc,
|
PicturePtr pSrc,
|
||||||
|
|
12
fb/fbmmx.h
12
fb/fbmmx.h
|
@ -60,6 +60,18 @@ void fbCompositeSrcAdd_8888x8888mmx (CARD8 op,
|
||||||
INT16 yDst,
|
INT16 yDst,
|
||||||
CARD16 width,
|
CARD16 width,
|
||||||
CARD16 height);
|
CARD16 height);
|
||||||
|
void fbCompositeSrc_8888x8888mmx (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 fbCompositeSolidMask_nx8888x8888Cmmx (CARD8 op,
|
void fbCompositeSolidMask_nx8888x8888Cmmx (CARD8 op,
|
||||||
PicturePtr pSrc,
|
PicturePtr pSrc,
|
||||||
PicturePtr pMask,
|
PicturePtr pMask,
|
||||||
|
|
14
fb/fbpict.c
14
fb/fbpict.c
|
@ -1088,7 +1088,12 @@ fbComposite (CARD8 op,
|
||||||
switch (pDst->format) {
|
switch (pDst->format) {
|
||||||
case PICT_a8r8g8b8:
|
case PICT_a8r8g8b8:
|
||||||
case PICT_x8r8g8b8:
|
case PICT_x8r8g8b8:
|
||||||
func = fbCompositeSrc_8888x8888;
|
#ifdef USE_MMX
|
||||||
|
if (fbHaveMMX())
|
||||||
|
func = fbCompositeSrc_8888x8888mmx;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
func = fbCompositeSrc_8888x8888;
|
||||||
break;
|
break;
|
||||||
case PICT_r8g8b8:
|
case PICT_r8g8b8:
|
||||||
func = fbCompositeSrc_8888x0888;
|
func = fbCompositeSrc_8888x0888;
|
||||||
|
@ -1123,7 +1128,12 @@ fbComposite (CARD8 op,
|
||||||
switch (pDst->format) {
|
switch (pDst->format) {
|
||||||
case PICT_a8b8g8r8:
|
case PICT_a8b8g8r8:
|
||||||
case PICT_x8b8g8r8:
|
case PICT_x8b8g8r8:
|
||||||
func = fbCompositeSrc_8888x8888;
|
#ifdef USE_MMX
|
||||||
|
if (fbHaveMMX())
|
||||||
|
func = fbCompositeSrc_8888x8888mmx;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
func = fbCompositeSrc_8888x8888;
|
||||||
break;
|
break;
|
||||||
case PICT_b8g8r8:
|
case PICT_b8g8r8:
|
||||||
func = fbCompositeSrc_8888x0888;
|
func = fbCompositeSrc_8888x0888;
|
||||||
|
|
13
fb/fbpict.h
13
fb/fbpict.h
|
@ -1029,6 +1029,19 @@ fbCompositeSolidMask_nx1xn (CARD8 op,
|
||||||
INT16 yDst,
|
INT16 yDst,
|
||||||
CARD16 width,
|
CARD16 width,
|
||||||
CARD16 height);
|
CARD16 height);
|
||||||
|
void
|
||||||
|
fbCompositeSrc_8888x8888mmx (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
|
void
|
||||||
fbComposite (CARD8 op,
|
fbComposite (CARD8 op,
|
||||||
|
|
Loading…
Reference in New Issue