diff options
Diffstat (limited to 'xorg-server/fb/fbblt.c')
-rw-r--r-- | xorg-server/fb/fbblt.c | 271 |
1 files changed, 3 insertions, 268 deletions
diff --git a/xorg-server/fb/fbblt.c b/xorg-server/fb/fbblt.c index c615106d1..b4123656a 100644 --- a/xorg-server/fb/fbblt.c +++ b/xorg-server/fb/fbblt.c @@ -520,277 +520,12 @@ fbBlt24(FbBits * srcLine, #endif } -#if FB_SHIFT == FB_STIP_SHIFT + 1 - -/* - * Could be generalized to FB_SHIFT > FB_STIP_SHIFT + 1 by - * creating an ring of values stepped through for each line - */ - -void -fbBltOdd(FbBits * srcLine, - FbStride srcStrideEven, - FbStride srcStrideOdd, - int srcXEven, - int srcXOdd, - FbBits * dstLine, - FbStride dstStrideEven, - FbStride dstStrideOdd, - int dstXEven, - int dstXOdd, int width, int height, int alu, FbBits pm, int bpp) -{ - FbBits *src; - int leftShiftEven, rightShiftEven; - FbBits startmaskEven, endmaskEven; - int nmiddleEven; - - FbBits *dst; - int leftShiftOdd, rightShiftOdd; - FbBits startmaskOdd, endmaskOdd; - int nmiddleOdd; - - int leftShift, rightShift; - FbBits startmask, endmask; - int nmiddle; - - int srcX, dstX; - - FbBits bits, bits1; - int n; - - Bool destInvarient; - Bool even; - - FbDeclareMergeRop(); - - FbInitializeMergeRop(alu, pm); - destInvarient = FbDestInvarientMergeRop(); - - srcLine += srcXEven >> FB_SHIFT; - dstLine += dstXEven >> FB_SHIFT; - srcXEven &= FB_MASK; - dstXEven &= FB_MASK; - srcXOdd &= FB_MASK; - dstXOdd &= FB_MASK; - - FbMaskBits(dstXEven, width, startmaskEven, nmiddleEven, endmaskEven); - FbMaskBits(dstXOdd, width, startmaskOdd, nmiddleOdd, endmaskOdd); - - even = TRUE; - InitializeShifts(srcXEven, dstXEven, leftShiftEven, rightShiftEven); - InitializeShifts(srcXOdd, dstXOdd, leftShiftOdd, rightShiftOdd); - while (height--) { - src = srcLine; - dst = dstLine; - if (even) { - srcX = srcXEven; - dstX = dstXEven; - startmask = startmaskEven; - endmask = endmaskEven; - nmiddle = nmiddleEven; - leftShift = leftShiftEven; - rightShift = rightShiftEven; - srcLine += srcStrideEven; - dstLine += dstStrideEven; - even = FALSE; - } - else { - srcX = srcXOdd; - dstX = dstXOdd; - startmask = startmaskOdd; - endmask = endmaskOdd; - nmiddle = nmiddleOdd; - leftShift = leftShiftOdd; - rightShift = rightShiftOdd; - srcLine += srcStrideOdd; - dstLine += dstStrideOdd; - even = TRUE; - } - if (srcX == dstX) { - if (startmask) { - bits = READ(src++); - WRITE(dst, FbDoMaskMergeRop(bits, READ(dst), startmask)); - dst++; - } - n = nmiddle; - if (destInvarient) { - while (n--) { - bits = READ(src++); - WRITE(dst, FbDoDestInvarientMergeRop(bits)); - dst++; - } - } - else { - while (n--) { - bits = READ(src++); - WRITE(dst, FbDoMergeRop(bits, READ(dst))); - dst++; - } - } - if (endmask) { - bits = READ(src); - WRITE(dst, FbDoMaskMergeRop(bits, READ(dst), endmask)); - } - } - else { - bits = 0; - if (srcX > dstX) - bits = READ(src++); - if (startmask) { - bits1 = FbScrLeft(bits, leftShift); - bits = READ(src++); - bits1 |= FbScrRight(bits, rightShift); - WRITE(dst, FbDoMaskMergeRop(bits1, READ(dst), startmask)); - dst++; - } - n = nmiddle; - if (destInvarient) { - while (n--) { - bits1 = FbScrLeft(bits, leftShift); - bits = READ(src++); - bits1 |= FbScrRight(bits, rightShift); - WRITE(dst, FbDoDestInvarientMergeRop(bits1)); - dst++; - } - } - else { - while (n--) { - bits1 = FbScrLeft(bits, leftShift); - bits = READ(src++); - bits1 |= FbScrRight(bits, rightShift); - WRITE(dst, FbDoMergeRop(bits1, READ(dst))); - dst++; - } - } - if (endmask) { - bits1 = FbScrLeft(bits, leftShift); - if (FbScrLeft(endmask, rightShift)) { - bits = READ(src); - bits1 |= FbScrRight(bits, rightShift); - } - WRITE(dst, FbDoMaskMergeRop(bits1, READ(dst), endmask)); - } - } - } -} - -void -fbBltOdd24(FbBits * srcLine, - FbStride srcStrideEven, - FbStride srcStrideOdd, - int srcXEven, - int srcXOdd, - FbBits * dstLine, - FbStride dstStrideEven, - FbStride dstStrideOdd, - int dstXEven, int dstXOdd, int width, int height, int alu, FbBits pm) -{ - Bool even = TRUE; - - while (height--) { - if (even) { - fbBlt24Line(srcLine, srcXEven, dstLine, dstXEven, - width, alu, pm, FALSE); - srcLine += srcStrideEven; - dstLine += dstStrideEven; - even = FALSE; - } - else { - fbBlt24Line(srcLine, srcXOdd, dstLine, dstXOdd, - width, alu, pm, FALSE); - srcLine += srcStrideOdd; - dstLine += dstStrideOdd; - even = TRUE; - } - } -} - -#endif - -#if FB_STIP_SHIFT != FB_SHIFT -void -fbSetBltOdd(FbStip * stip, - FbStride stipStride, - int srcX, - FbBits ** bits, - FbStride * strideEven, - FbStride * strideOdd, int *srcXEven, int *srcXOdd) -{ - int srcAdjust; - int strideAdjust; - - /* - * bytes needed to align source - */ - srcAdjust = (((int) stip) & (FB_MASK >> 3)); - /* - * FbStip units needed to align stride - */ - strideAdjust = stipStride & (FB_MASK >> FB_STIP_SHIFT); - - *bits = (FbBits *) ((char *) stip - srcAdjust); - if (srcAdjust) { - *strideEven = FbStipStrideToBitsStride(stipStride + 1); - *strideOdd = FbStipStrideToBitsStride(stipStride); - - *srcXEven = srcX + (srcAdjust << 3); - *srcXOdd = srcX + (srcAdjust << 3) - (strideAdjust << FB_STIP_SHIFT); - } - else { - *strideEven = FbStipStrideToBitsStride(stipStride); - *strideOdd = FbStipStrideToBitsStride(stipStride + 1); - - *srcXEven = srcX; - *srcXOdd = srcX + (strideAdjust << FB_STIP_SHIFT); - } -} -#endif - void fbBltStip(FbStip * src, FbStride srcStride, /* in FbStip units, not FbBits units */ int srcX, FbStip * dst, FbStride dstStride, /* in FbStip units, not FbBits units */ int dstX, int width, int height, int alu, FbBits pm, int bpp) { -#if FB_STIP_SHIFT != FB_SHIFT - if (FB_STIP_ODDSTRIDE(srcStride) || FB_STIP_ODDPTR(src) || - FB_STIP_ODDSTRIDE(dstStride) || FB_STIP_ODDPTR(dst)) { - FbStride srcStrideEven, srcStrideOdd; - FbStride dstStrideEven, dstStrideOdd; - int srcXEven, srcXOdd; - int dstXEven, dstXOdd; - FbBits *s, *d; - int sx, dx; - - src += srcX >> FB_STIP_SHIFT; - srcX &= FB_STIP_MASK; - dst += dstX >> FB_STIP_SHIFT; - dstX &= FB_STIP_MASK; - - fbSetBltOdd(src, srcStride, srcX, - &s, &srcStrideEven, &srcStrideOdd, &srcXEven, &srcXOdd); - - fbSetBltOdd(dst, dstStride, dstX, - &d, &dstStrideEven, &dstStrideOdd, &dstXEven, &dstXOdd); - - if (bpp == 24 && !FbCheck24Pix(pm)) { - fbBltOdd24(s, srcStrideEven, srcStrideOdd, - srcXEven, srcXOdd, - d, dstStrideEven, dstStrideOdd, - dstXEven, dstXOdd, width, height, alu, pm); - } - else { - fbBltOdd(s, srcStrideEven, srcStrideOdd, - srcXEven, srcXOdd, - d, dstStrideEven, dstStrideOdd, - dstXEven, dstXOdd, width, height, alu, pm, bpp); - } - } - else -#endif - { - fbBlt((FbBits *) src, FbStipStrideToBitsStride(srcStride), - srcX, - (FbBits *) dst, FbStipStrideToBitsStride(dstStride), - dstX, width, height, alu, pm, bpp, FALSE, FALSE); - } + fbBlt((FbBits *) src, FbStipStrideToBitsStride(srcStride), srcX, + (FbBits *) dst, FbStipStrideToBitsStride(dstStride), dstX, + width, height, alu, pm, bpp, FALSE, FALSE); } |