From: Søren Sandmann Pedersen <[email protected]>
Before, it was 0 or 1 meaning 'no repeat' and 'normal repeat'
respectively. Now we explicitly pass in either NONE or NORMAL.
---
pixman/pixman-fast-path.c | 43 ++++++++++++++++++++++++++-----------------
1 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
index c4dd3a6..7b8c9bc 100644
--- a/pixman/pixman-fast-path.c
+++ b/pixman/pixman-fast-path.c
@@ -1399,7 +1399,7 @@ repeat (pixman_repeat_t repeat, int *c, int size)
#define GET_0565_ALPHA(s) 0xff
#define FAST_NEAREST(scale_func_name, SRC_FORMAT, DST_FORMAT,
\
- src_type_t, dst_type_t, OP, do_repeat)
\
+ src_type_t, dst_type_t, OP, repeat_mode)
\
static void
\
fast_composite_scaled_nearest_ ## scale_func_name ## _ ## OP
(pixman_implementation_t *imp, \
pixman_op_t
op, \
@@ -1435,6 +1435,12 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _
## OP (pixman_implementat
if (PIXMAN_OP_ ## OP != PIXMAN_OP_SRC && PIXMAN_OP_ ## OP !=
PIXMAN_OP_OVER) \
abort();
\
\
+ if (PIXMAN_REPEAT_ ## repeat_mode != PIXMAN_REPEAT_NORMAL &&
\
+ PIXMAN_REPEAT_ ## repeat_mode != PIXMAN_REPEAT_NONE)
\
+ {
\
+ abort();
\
+ }
\
+
\
PIXMAN_IMAGE_GET_LINE (dst_image, dst_x, dst_y, dst_type_t, dst_stride,
dst_line, 1); \
/* pass in 0 instead of src_x and src_y because src_x and src_y need to be
\
* transformed from destination space to source space */
\
@@ -1458,7 +1464,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
vx = v.vector[0];
\
vy = v.vector[1];
\
\
- if (do_repeat)
\
+ if (PIXMAN_REPEAT_ ## repeat_mode == PIXMAN_REPEAT_NORMAL)
\
{
\
/* Clamp repeating positions inside the actual samples */
\
max_vx = src_image->bits.width << 16;
\
@@ -1477,7 +1483,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
\
y = vy >> 16;
\
vy += unit_y;
\
- if (do_repeat)
\
+ if (PIXMAN_REPEAT_ ## repeat_mode == PIXMAN_REPEAT_NORMAL)
\
repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy);
\
\
src = src_first_line + src_stride * y;
\
@@ -1488,7 +1494,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
{
\
x1 = vx >> 16;
\
vx += unit_x;
\
- if (do_repeat)
\
+ if (PIXMAN_REPEAT_ ## repeat_mode == PIXMAN_REPEAT_NORMAL)
\
{
\
/* This works because we know that unit_x is positive */
\
while (vx >= max_vx)
\
@@ -1498,7 +1504,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
\
x2 = vx >> 16;
\
vx += unit_x;
\
- if (do_repeat)
\
+ if (PIXMAN_REPEAT_ ## repeat_mode == PIXMAN_REPEAT_NORMAL)
\
{
\
/* This works because we know that unit_x is positive */
\
while (vx >= max_vx)
\
@@ -1517,7 +1523,8 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
}
\
else if (s1)
\
{
\
- d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);
\
+ d = CONVERT_ ## DST_FORMAT ## _TO_8888 (*dst);
\
+ s1 = CONVERT_ ## SRC_FORMAT ## _TO_8888 (s1);
\
a1 ^= 0xff;
\
UN8x4_MUL_UN8_ADD_UN8x4 (d, a1, s1);
\
*dst = CONVERT_8888_TO_ ## DST_FORMAT (d);
\
@@ -1531,6 +1538,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
else if (s2)
\
{
\
d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);
\
+ s2 = CONVERT_## SRC_FORMAT ## _TO_8888 (s2);
\
a2 ^= 0xff;
\
UN8x4_MUL_UN8_ADD_UN8x4 (d, a2, s2);
\
*dst = CONVERT_8888_TO_ ## DST_FORMAT (d);
\
@@ -1548,7 +1556,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
{
\
x1 = vx >> 16;
\
vx += unit_x;
\
- if (do_repeat)
\
+ if (PIXMAN_REPEAT_ ## repeat_mode == PIXMAN_REPEAT_NORMAL)
\
{
\
/* This works because we know that unit_x is positive */
\
while (vx >= max_vx)
\
@@ -1567,6 +1575,7 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ##
OP (pixman_implementat
else if (s1)
\
{
\
d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);
\
+ s1 = CONVERT_ ## SRC_FORMAT ## _TO_8888 (s1);
\
a1 ^= 0xff;
\
UN8x4_MUL_UN8_ADD_UN8x4 (d, a1, s1);
\
*dst = CONVERT_8888_TO_ ## DST_FORMAT (d);
\
@@ -1581,16 +1590,16 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _
## OP (pixman_implementat
}
\
}
-FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, SRC, /*repeat: */
0);
-FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, SRC, /*repeat:
*/ 1);
-FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, OVER, /*repeat:
*/ 0);
-FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, OVER, /*repeat:
*/ 1);
-FAST_NEAREST(x888_565_none, 8888, 0565, uint32_t, uint16_t, SRC, /*repeat: */
0);
-FAST_NEAREST(x888_565_normal, 8888, 0565, uint32_t, uint16_t, SRC, /*repeat:
*/ 1);
-FAST_NEAREST(565_565_none, 0565, 0565, uint16_t, uint16_t, SRC, /*repeat: */
0);
-FAST_NEAREST(565_565_normal, 0565, 0565, uint16_t, uint16_t, SRC, /*repeat: */
1);
-FAST_NEAREST(8888_565_none, 8888, 0565, uint32_t, uint16_t, OVER, /*repeat: */
0);
-FAST_NEAREST(8888_565_normal, 8888, 0565, uint32_t, uint16_t, OVER, /*repeat:
*/ 1);
+FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, SRC, NONE);
+FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, SRC, NORMAL);
+FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, OVER, NONE);
+FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, OVER, NORMAL);
+FAST_NEAREST(x888_565_none, 8888, 0565, uint32_t, uint16_t, SRC, NONE);
+FAST_NEAREST(x888_565_normal, 8888, 0565, uint32_t, uint16_t, SRC, NORMAL);
+FAST_NEAREST(565_565_none, 0565, 0565, uint16_t, uint16_t, SRC, NONE);
+FAST_NEAREST(565_565_normal, 0565, 0565, uint16_t, uint16_t, SRC, NORMAL);
+FAST_NEAREST(8888_565_none, 8888, 0565, uint32_t, uint16_t, OVER, NONE);
+FAST_NEAREST(8888_565_normal, 8888, 0565, uint32_t, uint16_t, OVER, NORMAL);
static force_inline uint32_t
fetch_nearest (pixman_repeat_t src_repeat,
--
1.6.0.6
_______________________________________________
Pixman mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pixman