-$usage = "Usage: combine.pl { 8 | 16 } < combine.inc";
+$usage = "Usage: combine.pl { 8 | 16 } < pixman-combine.c.template";
$#ARGV == 0 or die $usage;
return IntDiv(b,a); /* b/a */
}
+#define GetComp(v,i) ((comp2_t) (comp1_t) ((v) >> i))
+
+#define Add(x,y,i,t) ((t) = GetComp(x,i) + GetComp(y,i), \
+ (comp4_t) ((comp1_t) ((t) | (0 - ((t) >> G_SHIFT)))) << (i))
+
#define FbGen(x,y,i,ax,ay,t,u,v) ((t) = (IntMult(GetComp(y,i),ay,(u)) + \
IntMult(GetComp(x,i),ax,(v))), \
(comp4_t) ((comp1_t) ((t) | \
#define IntMult(a,b,t) ( (t) = (a) * (b) + ONE_HALF, ( ( ( (t)>>G_SHIFT ) + (t) )>>G_SHIFT ) )
#define IntDiv(a,b) (((comp2_t) (a) * MASK) / (b))
-
-#define GetComp(v,i) ((comp2_t) (comp1_t) ((v) >> i))
-
-#define Add(x,y,i,t) ((t) = GetComp(x,i) + GetComp(y,i), \
- (comp4_t) ((comp1_t) ((t) | (0 - ((t) >> G_SHIFT)))) << (i))
+#define IntAdd(x,y,t) ( \
+ (t) = x + y, \
+ (comp4_t) (comp1_t) ((t) | (0 - ((t) >> G_SHIFT))))
#define DivOne(x) (((x) + ONE_HALF + (((x) + ONE_HALF) >> G_SHIFT)) >> G_SHIFT)
}
else if (m != 0xff)
{
- *dst = FbIntMult(m, *dst, t);
+ *dst = IntMult(m, *dst, t);
}
dst++;
}
while (w--)
{
m = *mask++;
- m = FbIntMult(m, srca, t);
+ m = IntMult(m, srca, t);
if (m == 0)
{
*dst = 0;
}
else if (m != 0xff)
{
- *dst = FbIntMult(m, *dst, t);
+ *dst = IntMult(m, *dst, t);
}
dst++;
}
}
else if (s != 0xff)
{
- *dst = FbIntMult(s, *dst, t);
+ *dst = IntMult(s, *dst, t);
}
dst++;
}
a = *mask++;
d = *dst;
- m = FbIntMult (sa, a, tmp);
- r = FbIntAdd (m, d, tmp);
+ m = IntMult (sa, a, tmp);
+ r = IntAdd (m, d, tmp);
*dst++ = r;
}
#include <mmintrin.h>
#include "pixman-private.h"
+#include "pixman-combine32.h"
#define noVERBOSE
uint32_t da = ~d >> 24;
if (sa > da) {
- __m64 msa = load8888(FbIntDiv(da, sa) << 24);
+ __m64 msa = load8888(IntDiv(da, sa) << 24);
msa = expand_alpha(msa);
ms = pix_multiply(ms, msa);
}
a = *mask++;
d = *dst;
- m = FbIntMult (sa, a, tmp);
- d = FbIntMult (m, d, tmp);
+ m = IntMult (sa, a, tmp);
+ d = IntMult (m, d, tmp);
*dst++ = d;
}
s = *src;
d = *dst;
- *dst = FbIntMult (s, d, tmp);
+ *dst = IntMult (s, d, tmp);
src++;
dst++;
a = *mask++;
d = *dst;
- m = FbIntMult (sa, a, tmp);
- r = FbIntAdd (m, d, tmp);
+ m = IntMult (sa, a, tmp);
+ r = IntAdd (m, d, tmp);
*dst++ = r;
}
_pixman_gradient_walker_pixel (pixman_gradient_walker_t *walker,
pixman_fixed_32_32_t x);
-#define FbIntMult(a,b,t) ((t) = (a) * (b) + 0x80, ((((t) >> 8) + (t)) >> 8))
-#define FbIntDiv(a,b) (((uint16_t) (a) * 255) / (b))
-#define FbIntAdd(x,y,t) ( \
- (t) = x + y, \
- (uint32_t) (uint8_t) ((t) | (0 - ((t) >> 8))))
-
/*
* Edges
*/
#include <xmmintrin.h> /* for _mm_shuffle_pi16 and _MM_SHUFFLE */
#include <emmintrin.h> /* for SSE2 intrinsics */
#include "pixman-private.h"
+#include "pixman-combine32.h"
#ifdef USE_SSE2
if (sa > da)
{
- ms = pixMultiply_1x64 (ms, expandAlpha_1x64 (unpack_32_1x64 (FbIntDiv(da, sa) << 24)));
+ ms = pixMultiply_1x64 (ms, expandAlpha_1x64 (unpack_32_1x64 (IntDiv(da, sa) << 24)));
}
return pack_1x64_32 (_mm_adds_pu16 (md, ms));
pixman_region32_init_rect (&clip_region, 50, 0, 100, 200);
pixman_image_set_clip_region32 (src_img, &clip_region);
pixman_image_set_source_clipping (src_img, TRUE);
+ pixman_image_set_has_client_clip (src_img, TRUE);
pixman_image_set_transform (src_img, &trans);
pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NORMAL);