fb: FB_SHIFT is 5 (and FB_UNIT is 32)

The other paths don't build or work, PCI and other buses are almost
always 32 bit data paths, and X doesn't really support pixels bigger
than that anyway.

Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2014-06-17 11:24:06 -04:00
parent 3d35bd6b79
commit a198373685
9 changed files with 9 additions and 723 deletions

173
fb/fb.h
View File

@ -83,11 +83,7 @@
#define FB_SHIFT LOG2_BITMAP_PAD
#endif
#if FB_SHIFT < LOG2_BITMAP_PAD
error FB_SHIFT must be >= LOG2_BITMAP_PAD
#endif
#define FB_UNIT (1 << FB_SHIFT)
#define FB_HALFUNIT (1 << (FB_SHIFT-1))
#define FB_MASK (FB_UNIT - 1)
#define FB_ALLONES ((FbBits) -1)
#if GLYPHPADBYTES != 4
@ -105,37 +101,15 @@ error FB_SHIFT must be >= LOG2_BITMAP_PAD
#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
#define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
#if FB_SHIFT == 6
#ifdef WIN32
typedef unsigned __int64 FbBits;
#else
#if defined(__alpha__) || defined(__alpha) || \
defined(ia64) || defined(__ia64__) || \
defined(__sparc64__) || defined(_LP64) || \
defined(__s390x__) || \
defined(amd64) || defined (__amd64__) || \
defined (__powerpc64__)
typedef unsigned long FbBits;
#else
typedef unsigned long long FbBits;
#endif
#endif
#endif
#if FB_SHIFT == 5
typedef CARD32 FbBits;
#endif
#if FB_SHIFT == 4
typedef CARD16 FbBits;
#else
#error "Unsupported FB_SHIFT"
#endif
#if LOG2_BITMAP_PAD == FB_SHIFT
typedef FbBits FbStip;
#else
#if LOG2_BITMAP_PAD == 5
typedef CARD32 FbStip;
#endif
#endif
typedef int FbStride;
@ -264,122 +238,8 @@ extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
n >>= FB_SHIFT; \
}
#if FB_SHIFT == 6
#define FbDoLeftMaskByteRRop6Cases(dst,xor) \
case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
break; \
case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
break; \
case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
break; \
case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
break; \
case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
break; \
case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
break; \
case (sizeof (FbBits) - 7): \
FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
break; \
case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
break; \
case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
break; \
case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
break; \
case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
break; \
case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
break; \
case (sizeof (FbBits) - 6): \
FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
break; \
case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
break; \
case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
break; \
case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
break; \
case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
break; \
case (sizeof (FbBits) - 5): \
FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
break; \
case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
break; \
case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
break; \
case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
break; \
case (sizeof (FbBits) - 4): \
FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
break;
#define FbDoRightMaskByteRRop6Cases(dst,xor) \
case 4: \
FbStorePart(dst,0,CARD32,xor); \
break; \
case 5: \
FbStorePart(dst,0,CARD32,xor); \
FbStorePart(dst,4,CARD8,xor); \
break; \
case 6: \
FbStorePart(dst,0,CARD32,xor); \
FbStorePart(dst,4,CARD16,xor); \
break; \
case 7: \
FbStorePart(dst,0,CARD32,xor); \
FbStorePart(dst,4,CARD16,xor); \
FbStorePart(dst,6,CARD8,xor); \
break;
#else
#define FbDoLeftMaskByteRRop6Cases(dst,xor)
#define FbDoRightMaskByteRRop6Cases(dst,xor)
#endif
#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
switch (lb) { \
FbDoLeftMaskByteRRop6Cases(dst,xor) \
case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
break; \
@ -416,7 +276,6 @@ extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
FbStorePart(dst,0,CARD16,xor); \
FbStorePart(dst,2,CARD8,xor); \
break; \
FbDoRightMaskByteRRop6Cases(dst,xor) \
default: \
WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
} \
@ -470,21 +329,7 @@ extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
FbLaneCase2((n)>>2,a,(o)+2) \
}
#define FbLaneCase8(n,a,o) \
if ((n) == 0x0ff) { \
*(FbBits *) ((a)+(o)) = fgxor; \
} else { \
FbLaneCase4((n)&15,a,o) \
FbLaneCase4((n)>>4,a,(o)+4) \
}
#if FB_SHIFT == 6
#define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0)
#endif
#if FB_SHIFT == 5
#define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0)
#endif
/* Rotate a filled pixel value to the specified alignement */
#define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
@ -497,19 +342,6 @@ extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
#define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24))
/* step a rotation value to the next/previous rotation value */
#if FB_UNIT == 64
#define FbNext24Rot(r) ((r) == 16 ? 0 : (r) + 8)
#define FbPrev24Rot(r) ((r) == 0 ? 16 : (r) - 8)
#if IMAGE_BYTE_ORDER == MSBFirst
#define FbFirst24Rot(x) (((x) + 8) % 24)
#else
#define FbFirst24Rot(x) ((x) % 24)
#endif
#endif
#if FB_UNIT == 32
#define FbNext24Rot(r) ((r) == 0 ? 16 : (r) - 8)
#define FbPrev24Rot(r) ((r) == 16 ? 0 : (r) + 8)
@ -518,7 +350,6 @@ extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
#else
#define FbFirst24Rot(x) ((x) % 24)
#endif
#endif
#define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8)
#define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8)

View File

@ -70,9 +70,6 @@
#define POLYSEGMENT fbPolySegment16
#define BITS CARD16
#define BITS2 CARD32
#if FB_SHIFT == 6
#define BITS4 FbBits
#endif
#include "fbbits.h"
@ -85,9 +82,6 @@
#undef POLYSEGMENT
#undef BITS
#undef BITS2
#if FB_SHIFT == 6
#undef BITS4
#endif
#define BRESSOLID fbBresSolid24
#define BRESDASH fbBresDash24
@ -155,9 +149,6 @@
#define POLYLINE fbPolyline32
#define POLYSEGMENT fbPolySegment32
#define BITS CARD32
#if FB_SHIFT == 6
#define BITS2 FbBits
#endif
#include "fbbits.h"
@ -169,6 +160,3 @@
#undef POLYLINE
#undef POLYSEGMENT
#undef BITS
#if FB_SHIFT == 6
#undef BITS2
#endif

View File

@ -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);
}

View File

@ -67,59 +67,9 @@
#define LaneCases4(n,a) LaneCases2(n,a); LaneCases2(n+2,a)
#define LaneCases8(n,a) LaneCases4(n,a); LaneCases4(n+4,a)
#define LaneCases16(n,a) LaneCases8(n,a); LaneCases8(n+8,a)
#define LaneCases32(n,a) LaneCases16(n,a); LaneCases16(n+16,a)
#define LaneCases64(n,a) LaneCases32(n,a); LaneCases32(n+32,a)
#define LaneCases128(n,a) LaneCases64(n,a); LaneCases64(n+64,a)
#define LaneCases256(n,a) LaneCases128(n,a); LaneCases128(n+128,a)
#if FB_SHIFT == 6
#define LaneCases(a) LaneCases256(0,a)
#endif
#if FB_SHIFT == 5
#define LaneCases(a) LaneCases16(0,a)
#endif
#if FB_SHIFT == 6
static const CARD8 fb8Lane[256] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115,
116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
167, 168, 169,
170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
185, 186, 187,
188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
203, 204, 205,
206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
221, 222, 223,
224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
239, 240, 241,
242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
};
static const CARD8 fb16Lane[256] = {
0x00, 0x03, 0x0c, 0x0f,
0x30, 0x33, 0x3c, 0x3f,
0xc0, 0xc3, 0xcc, 0xcf,
0xf0, 0xf3, 0xfc, 0xff,
};
static const CARD8 fb32Lane[16] = {
0x00, 0x0f, 0xf0, 0xff,
};
#endif
#if FB_SHIFT == 5
static const CARD8 fb8Lane[16] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
};
@ -131,7 +81,6 @@ static const CARD8 fb16Lane[16] = {
static const CARD8 fb32Lane[16] = {
0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
#endif
void
fbBltOne(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
@ -285,12 +234,7 @@ fbBltOne(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
* Consume stipple bits for startmask
*/
if (startmask) {
#if FB_UNIT > 32
if (pixelsPerDst == 16)
mask = FbStipple16Bits(FbLeftStipBits(bits, 16));
else
#endif
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
if (fbLane) {
fbTransparentSpan(dst, mask & startmask, fgxor, 1);
}
@ -312,12 +256,7 @@ fbBltOne(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
w -= n;
if (copy) {
while (n--) {
#if FB_UNIT > 32
if (pixelsPerDst == 16)
mask = FbStipple16Bits(FbLeftStipBits(bits, 16));
else
#endif
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
WRITE(dst, FbOpaqueStipple(mask, fgxor, bgxor));
dst++;
bits = FbStipLeft(bits, pixelsPerDst);
@ -367,12 +306,7 @@ fbBltOne(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
if (endNeedsLoad) {
LoadBits;
}
#if FB_UNIT > 32
if (pixelsPerDst == 16)
mask = FbStipple16Bits(FbLeftStipBits(bits, 16));
else
#endif
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
if (fbLane) {
fbTransparentSpan(dst, mask & endmask, fgxor, 1);
}
@ -410,47 +344,6 @@ fbBltOne(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
#define SelMask24(b,n,r) ((((b) >> n) & 1) * Mask24(n,r))
/*
* Untested for MSBFirst or FB_UNIT == 32
*/
#if FB_UNIT == 64
#define C4_24(b,r) \
(SelMask24(b,0,r) | \
SelMask24(b,1,r) | \
SelMask24(b,2,r) | \
SelMask24(b,3,r))
#define FbStip24New(rot) (2 + (rot != 0))
#define FbStip24Len 4
const FbBits fbStipple24Bits[3][1 << FbStip24Len] = {
/* rotate 0 */
{
C4_24(0, 0), C4_24(1, 0), C4_24(2, 0), C4_24(3, 0),
C4_24(4, 0), C4_24(5, 0), C4_24(6, 0), C4_24(7, 0),
C4_24(8, 0), C4_24(9, 0), C4_24(10, 0), C4_24(11, 0),
C4_24(12, 0), C4_24(13, 0), C4_24(14, 0), C4_24(15, 0),
},
/* rotate 8 */
{
C4_24(0, 8), C4_24(1, 8), C4_24(2, 8), C4_24(3, 8),
C4_24(4, 8), C4_24(5, 8), C4_24(6, 8), C4_24(7, 8),
C4_24(8, 8), C4_24(9, 8), C4_24(10, 8), C4_24(11, 8),
C4_24(12, 8), C4_24(13, 8), C4_24(14, 8), C4_24(15, 8),
},
/* rotate 16 */
{
C4_24(0, 16), C4_24(1, 16), C4_24(2, 16), C4_24(3, 16),
C4_24(4, 16), C4_24(5, 16), C4_24(6, 16), C4_24(7, 16),
C4_24(8, 16), C4_24(9, 16), C4_24(10, 16), C4_24(11, 16),
C4_24(12, 16), C4_24(13, 16), C4_24(14, 16), C4_24(15, 16),
}
};
#endif
#if FB_UNIT == 32
#define C2_24(b,r) \
(SelMask24(b,0,r) | \
SelMask24(b,1,r))
@ -476,7 +369,6 @@ const FbBits fbStipple24Bits[3][1 << FbStip24Len] = {
C2_24(0, 16), C2_24(1, 16), C2_24(2, 16), C2_24(3, 16),
}
};
#endif
#if BITMAP_BIT_ORDER == LSBFirst

View File

@ -56,11 +56,7 @@ fbGlyphIn(RegionPtr pRegion, int x, int y, int width, int height)
#define WRITE1(d,n,fg) WRITE((d) + (n), (CARD8) fg)
#define WRITE2(d,n,fg) WRITE((CARD16 *) &(d[n]), (CARD16) fg)
#define WRITE4(d,n,fg) WRITE((CARD32 *) &(d[n]), (CARD32) fg)
#if FB_UNIT == 6 && IMAGE_BYTE_ORDER == LSBFirst
#define WRITE8(d) WRITE((FbBits *) &(d[0]), fg)
#else
#define WRITE8(d) WRITE4(d,0,_ABCA), WRITE4(d,4,_BCAB)
#endif
/*
* This is a bit tricky, but it's brief. Write 12 bytes worth

View File

@ -309,17 +309,9 @@ create_bits_picture(PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
return NULL;
#ifdef FB_ACCESS_WRAPPER
#if FB_SHIFT==5
pixman_image_set_accessors(image,
(pixman_read_memory_func_t) wfbReadMemory,
(pixman_write_memory_func_t) wfbWriteMemory);
#else
#error The pixman library only works when FbBits is 32 bits wide
#endif
#endif
/* pCompositeClip is undefined for source pictures, so

View File

@ -95,10 +95,6 @@ extern _X_EXPORT const FbMergeRopRec FbMergeRopBits[16];
* Stippling operations;
*/
extern _X_EXPORT const FbBits fbStipple16Bits[256]; /* half of table */
#define FbStipple16Bits(b) \
(fbStipple16Bits[(b)&0xff] | fbStipple16Bits[(b) >> 8] << FB_HALFUNIT)
extern _X_EXPORT const FbBits fbStipple8Bits[256];
extern _X_EXPORT const FbBits fbStipple4Bits[16];
extern _X_EXPORT const FbBits fbStipple2Bits[4];

View File

@ -38,18 +38,8 @@
#define LaneCases4(c,a) LaneCases2(c,a); LaneCases2(c+2,a)
#define LaneCases8(c,a) LaneCases4(c,a); LaneCases4(c+4,a)
#define LaneCases16(c,a) LaneCases8(c,a); LaneCases8(c+8,a)
#define LaneCases32(c,a) LaneCases16(c,a); LaneCases16(c+16,a)
#define LaneCases64(c,a) LaneCases32(c,a); LaneCases32(c+32,a)
#define LaneCases128(c,a) LaneCases64(c,a); LaneCases64(c+64,a)
#define LaneCases256(c,a) LaneCases128(c,a); LaneCases128(c+128,a)
#if FB_SHIFT == 6
#define LaneCases(a) LaneCases256(0,a)
#endif
#if FB_SHIFT == 5
#define LaneCases(a) LaneCases16(0,a)
#endif
/*
* Repeat a transparent stipple across a scanline n times
@ -64,12 +54,6 @@ fbTransparentSpan(FbBits * dst, FbBits stip, FbBits fgxor, int n)
s |= ((FbStip) (stip >> 8) & 0x02);
s |= ((FbStip) (stip >> 16) & 0x04);
s |= ((FbStip) (stip >> 24) & 0x08);
#if FB_SHIFT > 5
s |= ((FbStip) (stip >> 32) & 0x10);
s |= ((FbStip) (stip >> 40) & 0x20);
s |= ((FbStip) (stip >> 48) & 0x40);
s |= ((FbStip) (stip >> 56) & 0x80);
#endif
switch (s) {
LaneCases(dst);
}
@ -142,12 +126,7 @@ fbEvenStipple(FbBits * dst,
s += stipStride;
if (s == stipEnd)
s = stip;
#if FB_UNIT > 32
if (pixelsPerDst == 16)
mask = FbStipple16Bits(FbLeftStipBits(bits, 16));
else
#endif
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
mask = fbBits[FbLeftStipBits(bits, pixelsPerDst)];
/*
* Rotate into position and compute reduced rop values
*/

View File

@ -174,24 +174,6 @@ const FbMergeRopRec FbMergeRopBits[16] = {
SelMask(b,6,w) | \
SelMask(b,7,w))
#if FB_UNIT == 16
#define fbStipple16Bits 0
#define fbStipple8Bits 0
const FbBits fbStipple4Bits[16] = {
C4(0, 4), C4(1, 4), C4(2, 4), C4(3, 4), C4(4, 4), C4(5, 4),
C4(6, 4), C4(7, 4), C4(8, 4), C4(9, 4), C4(10, 4), C4(11, 4),
C4(12, 4), C4(13, 4), C4(14, 4), C4(15, 4),
};
const FbBits fbStipple2Bits[4] = {
C2(0, 8), C2(1, 8), C2(2, 8), C2(3, 8),
};
const FbBits fbStipple1Bits[2] = {
C1(0, 16), C1(1, 16),
};
#endif
#if FB_UNIT == 32
#define fbStipple16Bits 0
const FbBits fbStipple8Bits[256] = {
C8(0, 4), C8(1, 4), C8(2, 4), C8(3, 4), C8(4, 4), C8(5, 4),
@ -252,112 +234,7 @@ const FbBits fbStipple2Bits[4] = {
const FbBits fbStipple1Bits[2] = {
C1(0, 32), C1(1, 32),
};
#endif
#if FB_UNIT == 64
const FbBits fbStipple16Bits[256] = {
C8(0, 4), C8(1, 4), C8(2, 4), C8(3, 4), C8(4, 4), C8(5, 4),
C8(6, 4), C8(7, 4), C8(8, 4), C8(9, 4), C8(10, 4), C8(11, 4),
C8(12, 4), C8(13, 4), C8(14, 4), C8(15, 4), C8(16, 4), C8(17, 4),
C8(18, 4), C8(19, 4), C8(20, 4), C8(21, 4), C8(22, 4), C8(23, 4),
C8(24, 4), C8(25, 4), C8(26, 4), C8(27, 4), C8(28, 4), C8(29, 4),
C8(30, 4), C8(31, 4), C8(32, 4), C8(33, 4), C8(34, 4), C8(35, 4),
C8(36, 4), C8(37, 4), C8(38, 4), C8(39, 4), C8(40, 4), C8(41, 4),
C8(42, 4), C8(43, 4), C8(44, 4), C8(45, 4), C8(46, 4), C8(47, 4),
C8(48, 4), C8(49, 4), C8(50, 4), C8(51, 4), C8(52, 4), C8(53, 4),
C8(54, 4), C8(55, 4), C8(56, 4), C8(57, 4), C8(58, 4), C8(59, 4),
C8(60, 4), C8(61, 4), C8(62, 4), C8(63, 4), C8(64, 4), C8(65, 4),
C8(66, 4), C8(67, 4), C8(68, 4), C8(69, 4), C8(70, 4), C8(71, 4),
C8(72, 4), C8(73, 4), C8(74, 4), C8(75, 4), C8(76, 4), C8(77, 4),
C8(78, 4), C8(79, 4), C8(80, 4), C8(81, 4), C8(82, 4), C8(83, 4),
C8(84, 4), C8(85, 4), C8(86, 4), C8(87, 4), C8(88, 4), C8(89, 4),
C8(90, 4), C8(91, 4), C8(92, 4), C8(93, 4), C8(94, 4), C8(95, 4),
C8(96, 4), C8(97, 4), C8(98, 4), C8(99, 4), C8(100, 4), C8(101, 4),
C8(102, 4), C8(103, 4), C8(104, 4), C8(105, 4), C8(106, 4), C8(107, 4),
C8(108, 4), C8(109, 4), C8(110, 4), C8(111, 4), C8(112, 4), C8(113, 4),
C8(114, 4), C8(115, 4), C8(116, 4), C8(117, 4), C8(118, 4), C8(119, 4),
C8(120, 4), C8(121, 4), C8(122, 4), C8(123, 4), C8(124, 4), C8(125, 4),
C8(126, 4), C8(127, 4), C8(128, 4), C8(129, 4), C8(130, 4), C8(131, 4),
C8(132, 4), C8(133, 4), C8(134, 4), C8(135, 4), C8(136, 4), C8(137, 4),
C8(138, 4), C8(139, 4), C8(140, 4), C8(141, 4), C8(142, 4), C8(143, 4),
C8(144, 4), C8(145, 4), C8(146, 4), C8(147, 4), C8(148, 4), C8(149, 4),
C8(150, 4), C8(151, 4), C8(152, 4), C8(153, 4), C8(154, 4), C8(155, 4),
C8(156, 4), C8(157, 4), C8(158, 4), C8(159, 4), C8(160, 4), C8(161, 4),
C8(162, 4), C8(163, 4), C8(164, 4), C8(165, 4), C8(166, 4), C8(167, 4),
C8(168, 4), C8(169, 4), C8(170, 4), C8(171, 4), C8(172, 4), C8(173, 4),
C8(174, 4), C8(175, 4), C8(176, 4), C8(177, 4), C8(178, 4), C8(179, 4),
C8(180, 4), C8(181, 4), C8(182, 4), C8(183, 4), C8(184, 4), C8(185, 4),
C8(186, 4), C8(187, 4), C8(188, 4), C8(189, 4), C8(190, 4), C8(191, 4),
C8(192, 4), C8(193, 4), C8(194, 4), C8(195, 4), C8(196, 4), C8(197, 4),
C8(198, 4), C8(199, 4), C8(200, 4), C8(201, 4), C8(202, 4), C8(203, 4),
C8(204, 4), C8(205, 4), C8(206, 4), C8(207, 4), C8(208, 4), C8(209, 4),
C8(210, 4), C8(211, 4), C8(212, 4), C8(213, 4), C8(214, 4), C8(215, 4),
C8(216, 4), C8(217, 4), C8(218, 4), C8(219, 4), C8(220, 4), C8(221, 4),
C8(222, 4), C8(223, 4), C8(224, 4), C8(225, 4), C8(226, 4), C8(227, 4),
C8(228, 4), C8(229, 4), C8(230, 4), C8(231, 4), C8(232, 4), C8(233, 4),
C8(234, 4), C8(235, 4), C8(236, 4), C8(237, 4), C8(238, 4), C8(239, 4),
C8(240, 4), C8(241, 4), C8(242, 4), C8(243, 4), C8(244, 4), C8(245, 4),
C8(246, 4), C8(247, 4), C8(248, 4), C8(249, 4), C8(250, 4), C8(251, 4),
C8(252, 4), C8(253, 4), C8(254, 4), C8(255, 4),
};
const FbBits fbStipple8Bits[256] = {
C8(0, 8), C8(1, 8), C8(2, 8), C8(3, 8), C8(4, 8), C8(5, 8),
C8(6, 8), C8(7, 8), C8(8, 8), C8(9, 8), C8(10, 8), C8(11, 8),
C8(12, 8), C8(13, 8), C8(14, 8), C8(15, 8), C8(16, 8), C8(17, 8),
C8(18, 8), C8(19, 8), C8(20, 8), C8(21, 8), C8(22, 8), C8(23, 8),
C8(24, 8), C8(25, 8), C8(26, 8), C8(27, 8), C8(28, 8), C8(29, 8),
C8(30, 8), C8(31, 8), C8(32, 8), C8(33, 8), C8(34, 8), C8(35, 8),
C8(36, 8), C8(37, 8), C8(38, 8), C8(39, 8), C8(40, 8), C8(41, 8),
C8(42, 8), C8(43, 8), C8(44, 8), C8(45, 8), C8(46, 8), C8(47, 8),
C8(48, 8), C8(49, 8), C8(50, 8), C8(51, 8), C8(52, 8), C8(53, 8),
C8(54, 8), C8(55, 8), C8(56, 8), C8(57, 8), C8(58, 8), C8(59, 8),
C8(60, 8), C8(61, 8), C8(62, 8), C8(63, 8), C8(64, 8), C8(65, 8),
C8(66, 8), C8(67, 8), C8(68, 8), C8(69, 8), C8(70, 8), C8(71, 8),
C8(72, 8), C8(73, 8), C8(74, 8), C8(75, 8), C8(76, 8), C8(77, 8),
C8(78, 8), C8(79, 8), C8(80, 8), C8(81, 8), C8(82, 8), C8(83, 8),
C8(84, 8), C8(85, 8), C8(86, 8), C8(87, 8), C8(88, 8), C8(89, 8),
C8(90, 8), C8(91, 8), C8(92, 8), C8(93, 8), C8(94, 8), C8(95, 8),
C8(96, 8), C8(97, 8), C8(98, 8), C8(99, 8), C8(100, 8), C8(101, 8),
C8(102, 8), C8(103, 8), C8(104, 8), C8(105, 8), C8(106, 8), C8(107, 8),
C8(108, 8), C8(109, 8), C8(110, 8), C8(111, 8), C8(112, 8), C8(113, 8),
C8(114, 8), C8(115, 8), C8(116, 8), C8(117, 8), C8(118, 8), C8(119, 8),
C8(120, 8), C8(121, 8), C8(122, 8), C8(123, 8), C8(124, 8), C8(125, 8),
C8(126, 8), C8(127, 8), C8(128, 8), C8(129, 8), C8(130, 8), C8(131, 8),
C8(132, 8), C8(133, 8), C8(134, 8), C8(135, 8), C8(136, 8), C8(137, 8),
C8(138, 8), C8(139, 8), C8(140, 8), C8(141, 8), C8(142, 8), C8(143, 8),
C8(144, 8), C8(145, 8), C8(146, 8), C8(147, 8), C8(148, 8), C8(149, 8),
C8(150, 8), C8(151, 8), C8(152, 8), C8(153, 8), C8(154, 8), C8(155, 8),
C8(156, 8), C8(157, 8), C8(158, 8), C8(159, 8), C8(160, 8), C8(161, 8),
C8(162, 8), C8(163, 8), C8(164, 8), C8(165, 8), C8(166, 8), C8(167, 8),
C8(168, 8), C8(169, 8), C8(170, 8), C8(171, 8), C8(172, 8), C8(173, 8),
C8(174, 8), C8(175, 8), C8(176, 8), C8(177, 8), C8(178, 8), C8(179, 8),
C8(180, 8), C8(181, 8), C8(182, 8), C8(183, 8), C8(184, 8), C8(185, 8),
C8(186, 8), C8(187, 8), C8(188, 8), C8(189, 8), C8(190, 8), C8(191, 8),
C8(192, 8), C8(193, 8), C8(194, 8), C8(195, 8), C8(196, 8), C8(197, 8),
C8(198, 8), C8(199, 8), C8(200, 8), C8(201, 8), C8(202, 8), C8(203, 8),
C8(204, 8), C8(205, 8), C8(206, 8), C8(207, 8), C8(208, 8), C8(209, 8),
C8(210, 8), C8(211, 8), C8(212, 8), C8(213, 8), C8(214, 8), C8(215, 8),
C8(216, 8), C8(217, 8), C8(218, 8), C8(219, 8), C8(220, 8), C8(221, 8),
C8(222, 8), C8(223, 8), C8(224, 8), C8(225, 8), C8(226, 8), C8(227, 8),
C8(228, 8), C8(229, 8), C8(230, 8), C8(231, 8), C8(232, 8), C8(233, 8),
C8(234, 8), C8(235, 8), C8(236, 8), C8(237, 8), C8(238, 8), C8(239, 8),
C8(240, 8), C8(241, 8), C8(242, 8), C8(243, 8), C8(244, 8), C8(245, 8),
C8(246, 8), C8(247, 8), C8(248, 8), C8(249, 8), C8(250, 8), C8(251, 8),
C8(252, 8), C8(253, 8), C8(254, 8), C8(255, 8),
};
const FbBits fbStipple4Bits[16] = {
C4(0, 16), C4(1, 16), C4(2, 16), C4(3, 16), C4(4, 16), C4(5, 16),
C4(6, 16), C4(7, 16), C4(8, 16), C4(9, 16), C4(10, 16), C4(11, 16),
C4(12, 16), C4(13, 16), C4(14, 16), C4(15, 16),
};
const FbBits fbStipple2Bits[4] = {
C2(0, 32), C2(1, 32), C2(2, 32), C2(3, 32),
};
#define fbStipple1Bits 0
#endif
const FbBits *const fbStippleTable[] = {
0,
fbStipple1Bits,