pixman: Branch 'master'
Søren Sandmann Pedersen
sandmann at kemper.freedesktop.org
Wed May 7 19:31:48 PDT 2008
pixman/pixman-mmx.c | 36 ++++++++++++++++++++++++++++++++----
1 file changed, 32 insertions(+), 4 deletions(-)
New commits:
commit 1f275b4bdc28b121f4afd3cfd2df187bebedf35d
Author: Søren Sandmann <sandmann at redhat.com>
Date: Wed May 7 22:27:56 2008 -0400
Add support for 8 bit fills in pixman_fill_mmx()
diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index 024dfee..5c6adfb 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -1733,13 +1733,27 @@ pixman_fill_mmx (uint32_t *bits,
__m64 v1, v2, v3, v4, v5, v6, v7;
#endif
- if (bpp == 16 && (xor >> 16 != (xor & 0xffff)))
+ if (bpp != 16 && bpp != 32 && bpp != 8)
return FALSE;
- if (bpp != 16 && bpp != 32)
+ if (bpp == 16 && (xor >> 16 != (xor & 0xffff)))
return FALSE;
- if (bpp == 16)
+ if (bpp == 8 &&
+ ((xor >> 16 != (xor & 0xffff)) ||
+ (xor >> 24 != (xor & 0x00ff) >> 16)))
+ {
+ return FALSE;
+ }
+
+ if (bpp == 8)
+ {
+ stride = stride * (int) sizeof (uint32_t) / 1;
+ byte_line = (uint8_t *)(((uint8_t *)bits) + stride * y + x);
+ byte_width = width;
+ stride *= 1;
+ }
+ else if (bpp == 16)
{
stride = stride * (int) sizeof (uint32_t) / 2;
byte_line = (uint8_t *)(((uint16_t *)bits) + stride * y + x);
@@ -1778,6 +1792,13 @@ pixman_fill_mmx (uint32_t *bits,
byte_line += stride;
w = byte_width;
+ while (w >= 1 && ((unsigned long)d & 1))
+ {
+ *(uint8_t *)d = (xor & 0xff);
+ w--;
+ d++;
+ }
+
while (w >= 2 && ((unsigned long)d & 3))
{
*(uint16_t *)d = xor;
@@ -1831,12 +1852,19 @@ pixman_fill_mmx (uint32_t *bits,
w -= 4;
d += 4;
}
- if (w >= 2)
+ while (w >= 2)
{
*(uint16_t *)d = xor;
w -= 2;
d += 2;
}
+ while (w >= 1)
+ {
+ *(uint8_t *)d = (xor & 0xff);
+ w--;
+ d++;
+ }
+
}
_mm_empty();
More information about the xorg-commit
mailing list