On 9/10/2012 7:04 AM, Cosmin Apreutesei wrote:
Hi,
I have to build cairo on windows because I want to use the recording
surface and I can't find binaries above 1.10 anywhere on the net (till
now I have used the binaries from GTK but these are old and the
recording surface doesn't work with those).
Trying to build pixman with:
make CFG=debug -f Makefile.win32
gives me:
pixman-mmx.c(545) : error C2143: syntax error : missing ';' before 'type'
and then 100 syntax errors like that (other c files compile ok until
the mmx one).
The sources were pulled today from git. The environment is VSE2008.
make is 3.81 from mingw (I also had to throw in pkg-config binaries +
dependencies from GTK).
I also tried to build the latest pixman (0.26.2) with the same command
but it failed with:
Entering directory `/x/work/pixman-0.26.2/test'
Makefile.win32: No such file or directory
I also tried building with mozilla-build from the mingw bash prompt,
with the same results.
So what's the best (preferably from cmdline) way to build pixman and
cairo under windows? And which is the best version? The release or the
git one?
Btw, if anyone has an up-to-date cairo.dll that would work for me too.
Hi Cosmin,
With this patch you should be able to compile.
Thanks,
Dimiter 'malkia' Stanev
pixman-mmx.diff
diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index 74a5e87..9e597db 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -541,7 +541,7 @@ expand565 (__m64 pixel, int pos)
static force_inline void
expand_4xpacked565 (__m64 vin, __m64 *vout0, __m64 *vout1, int full_alpha)
{
- __m64 t0, t1, alpha = _mm_setzero_si64 ();;
+ __m64 t0, t1, alpha = _mm_setzero_si64 ();
__m64 r = _mm_and_si64 (vin, MC (expand_565_r));
__m64 g = _mm_and_si64 (vin, MC (expand_565_g));
__m64 b = _mm_and_si64 (vin, MC (expand_565_b));
@@ -1902,22 +1902,22 @@ mmx_composite_over_8888_0565
(pixman_implementation_t *imp,
while (w >= 4)
{
__m64 vdest = *(__m64 *)dst;
- __m64 v0, v1, v2, v3;
+ __m64 v0, v1, v2, v3, vsrc0, vsrc1, vsrc2, vsrc3;
expand_4x565 (vdest, &v0, &v1, &v2, &v3, 0);
- __m64 vsrc0 = load8888 ((src + 0));
- __m64 vsrc1 = load8888 ((src + 1));
- __m64 vsrc2 = load8888 ((src + 2));
- __m64 vsrc3 = load8888 ((src + 3));
-
+ vsrc0 = load8888 ((src + 0));
+ vsrc1 = load8888 ((src + 1));
+ vsrc2 = load8888 ((src + 2));
+ vsrc3 = load8888 ((src + 3));
+
v0 = over (vsrc0, expand_alpha (vsrc0), v0);
v1 = over (vsrc1, expand_alpha (vsrc1), v1);
v2 = over (vsrc2, expand_alpha (vsrc2), v2);
v3 = over (vsrc3, expand_alpha (vsrc3), v3);
-
+
*(__m64 *)dst = pack_4x565 (v0, v1, v2, v3);
-
+
w -= 4;
dst += 4;
src += 4;
@@ -2454,22 +2454,22 @@ mmx_composite_over_n_8_0565 (pixman_implementation_t
*imp,
else if (m0 | m1 | m2 | m3)
{
__m64 vdest = *(__m64 *)dst;
- __m64 v0, v1, v2, v3;
+ __m64 v0, v1, v2, v3, vm0, vm1, vm2, vm3;
expand_4x565 (vdest, &v0, &v1, &v2, &v3, 0);
- __m64 vm0 = to_m64 (m0);
+ vm0 = to_m64 (m0);
v0 = in_over (vsrc, vsrca, expand_alpha_rev (vm0), v0);
-
- __m64 vm1 = to_m64 (m1);
+
+ vm1 = to_m64 (m1);
v1 = in_over (vsrc, vsrca, expand_alpha_rev (vm1), v1);
-
- __m64 vm2 = to_m64 (m2);
+
+ vm2 = to_m64 (m2);
v2 = in_over (vsrc, vsrca, expand_alpha_rev (vm2), v2);
-
- __m64 vm3 = to_m64 (m3);
+
+ vm3 = to_m64 (m3);
v3 = in_over (vsrc, vsrca, expand_alpha_rev (vm3), v3);
-
+
*(__m64 *)dst = pack_4x565 (v0, v1, v2, v3);;
}
@@ -3545,32 +3545,35 @@ mmx_composite_over_reverse_n_8888
(pixman_implementation_t *imp,
#define BILINEAR_INTERPOLATE_ONE_PIXEL(pix)
\
do {
\
+ __m64 t_hi, t_lo, b_hi, b_lo, hi, lo; \
/* fetch 2x2 pixel block into 2 mmx registers */
\
__m64 t = ldq_u ((__m64 *)&src_top [pixman_fixed_to_int (vx)]);
\
__m64 b = ldq_u ((__m64 *)&src_bottom [pixman_fixed_to_int (vx)]);
\
vx += unit_x;
\
/* vertical interpolation */
\
- __m64 t_hi = _mm_mullo_pi16 (_mm_unpackhi_pi8 (t, mm_zero), mm_wt);
\
- __m64 t_lo = _mm_mullo_pi16 (_mm_unpacklo_pi8 (t, mm_zero), mm_wt);
\
- __m64 b_hi = _mm_mullo_pi16 (_mm_unpackhi_pi8 (b, mm_zero), mm_wb);
\
- __m64 b_lo = _mm_mullo_pi16 (_mm_unpacklo_pi8 (b, mm_zero), mm_wb);
\
- __m64 hi = _mm_add_pi16 (t_hi, b_hi);
\
- __m64 lo = _mm_add_pi16 (t_lo, b_lo);
\
+ t_hi = _mm_mullo_pi16 (_mm_unpackhi_pi8 (t, mm_zero), mm_wt);
\
+ t_lo = _mm_mullo_pi16 (_mm_unpacklo_pi8 (t, mm_zero), mm_wt);
\
+ b_hi = _mm_mullo_pi16 (_mm_unpackhi_pi8 (b, mm_zero), mm_wb);
\
+ b_lo = _mm_mullo_pi16 (_mm_unpacklo_pi8 (b, mm_zero), mm_wb);
\
+ hi = _mm_add_pi16 (t_hi, b_hi);
\
+ lo = _mm_add_pi16 (t_lo, b_lo);
\
if (BILINEAR_INTERPOLATION_BITS < 8)
\
{
\
+ __m64 p, q; \
/* calculate horizontal weights */
\
__m64 mm_wh = _mm_add_pi16 (mm_addc7, _mm_xor_si64 (mm_xorc7,
\
_mm_srli_pi16 (mm_x,
\
16 -
BILINEAR_INTERPOLATION_BITS))); \
mm_x = _mm_add_pi16 (mm_x, mm_ux);
\
/* horizontal interpolation */
\
- __m64 p = _mm_unpacklo_pi16 (lo, hi);
\
- __m64 q = _mm_unpackhi_pi16 (lo, hi);
\
+ p = _mm_unpacklo_pi16 (lo, hi);
\
+ q = _mm_unpackhi_pi16 (lo, hi);
\
lo = _mm_madd_pi16 (p, mm_wh);
\
hi = _mm_madd_pi16 (q, mm_wh);
\
}
\
else
\
{
\
+ __m64 mm_lo_lo, mm_lo_hi, mm_hi_lo, mm_hi_hi;
\
/* calculate horizontal weights */
\
__m64 mm_wh_lo = _mm_sub_pi16 (mm_BSHIFT, _mm_srli_pi16 (mm_x,
\
16 - BILINEAR_INTERPOLATION_BITS));
\
@@ -3578,10 +3581,10 @@ do {
\
16 - BILINEAR_INTERPOLATION_BITS);
\
mm_x = _mm_add_pi16 (mm_x, mm_ux);
\
/* horizontal interpolation */
\
- __m64 mm_lo_lo = _mm_mullo_pi16 (lo, mm_wh_lo);
\
- __m64 mm_lo_hi = _mm_mullo_pi16 (hi, mm_wh_hi);
\
- __m64 mm_hi_lo = _mm_mulhi_pu16 (lo, mm_wh_lo);
\
- __m64 mm_hi_hi = _mm_mulhi_pu16 (hi, mm_wh_hi);
\
+ mm_lo_lo = _mm_mullo_pi16 (lo, mm_wh_lo);
\
+ mm_lo_hi = _mm_mullo_pi16 (hi, mm_wh_hi);
\
+ mm_hi_lo = _mm_mulhi_pu16 (lo, mm_wh_lo);
\
+ mm_hi_hi = _mm_mulhi_pu16 (hi, mm_wh_hi);
\
lo = _mm_add_pi32 (_mm_unpacklo_pi16 (mm_lo_lo, mm_hi_lo),
\
_mm_unpacklo_pi16 (mm_lo_hi, mm_hi_hi));
\
hi = _mm_add_pi32 (_mm_unpackhi_pi16 (mm_lo_lo, mm_hi_lo),
\
--
cairo mailing list
cairo-+tBg5+tf/GYFvLozru7NVdi2O/jbr...@public.gmane.org
http://lists.cairographics.org/mailman/listinfo/cairo
_______________________________________________
Pixman mailing list
pixman-pd4fty7x32lngt0pjobp9y5qc8qiu...@public.gmane.org
http://lists.freedesktop.org/mailman/listinfo/pixman