raster pushed a commit to branch master.
commit 19141484464c42e7376229cbe0e428d7d15288f7
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date: Fri Jun 14 21:32:15 2013 +0900
evas: optimization - handle if c1 == c2 for map interplated lines
---
src/lib/evas/common/evas_map_image_core.c | 34 +++++++++++++++++++++----------
src/lib/evas/common/evas_map_image_loop.c | 26 ++++++++++++++++++++++-
2 files changed, 48 insertions(+), 12 deletions(-)
diff --git a/src/lib/evas/common/evas_map_image_core.c
b/src/lib/evas/common/evas_map_image_core.c
index 89b5051..7e44c4b 100644
--- a/src/lib/evas/common/evas_map_image_core.c
+++ b/src/lib/evas/common/evas_map_image_core.c
@@ -7,13 +7,13 @@
int x, w, ww;
FPc u, v, ud, vd, dv, ue, ve;
DATA32 *d, *s;
-#ifdef COLMUL
+#ifdef COLMUL
FPc cv, cd; // col
# ifdef SCALE_USING_MMX
FPc cc;
-#endif
+#endif
DATA32 c1, c2; // col
-#endif
+#endif
Line *line;
#ifdef SCALE_USING_MMX
@@ -74,8 +74,8 @@
else
d = buf;
-#define SMOOTH 1
-#ifdef COLMUL
+#define SMOOTH 1
+#ifdef COLMUL
c1 = span->col[0]; // col
c2 = span->col[1]; // col
cv = 0; // col
@@ -85,16 +85,20 @@
{
if (c1 == 0xffffffff)
{
-#endif
+#endif
+#define COLSAME 1
#include "evas_map_image_loop.c"
-#ifdef COLMUL
+#undef COLSAME
+#ifdef COLMUL
}
else if ((c1 == 0x0000ff) &&
(!src->cache_entry.flags.alpha))
{
// all black line
# define COLBLACK 1
+# define COLSAME 1
# include "evas_map_image_loop.c"
-# undef COLBLACK
+# undef COLSAME
+# undef COLBLACK
}
else if (c1 == 0x000000)
{
@@ -103,7 +107,9 @@
else
{
// generic loop
+# define COLSAME 1
# include "evas_map_image_loop.c"
+# undef COLSAME
}
}
else
@@ -132,7 +138,7 @@
#ifdef COLMUL
FPc cv, cd; // col
DATA32 c1, c2; // col
-#endif
+#endif
Line *line;
line = &(spans[y - ystart]);
@@ -185,16 +191,20 @@
{
if (c1 == 0xffffffff)
{
-#endif
+#endif
+#define COLSAME 1
#include "evas_map_image_loop.c"
+#undef COLSAME
#ifdef COLMUL
}
else if ((c1 == 0x0000ff) &&
(!src->cache_entry.flags.alpha))
{
// all black line
# define COLBLACK 1
+# define COLSAME 1
# include "evas_map_image_loop.c"
-# undef COLBLACK
+# undef COLSAME
+# undef COLBLACK
}
else if (c1 == 0x000000)
{
@@ -203,7 +213,9 @@
else
{
// generic loop
+# define COLSAME 1
# include "evas_map_image_loop.c"
+# undef COLSAME
}
}
else
diff --git a/src/lib/evas/common/evas_map_image_loop.c
b/src/lib/evas/common/evas_map_image_loop.c
index c434386..be176ee 100644
--- a/src/lib/evas/common/evas_map_image_loop.c
+++ b/src/lib/evas/common/evas_map_image_loop.c
@@ -1,5 +1,12 @@
#ifdef SMOOTH
{
+# ifdef SCALE_USING_MMX
+# ifdef COLMUL
+# ifdef COLSAME
+ MOV_P2R(c1, mm7, mm0); // col
+# endif
+# endif
+# endif
while (ww > 0)
{
# ifdef COLBLACK
@@ -56,6 +63,10 @@
}
INTERP_256_R2R(mm4, mm2, mm1, mm5);
# ifdef COLMUL
+# ifdef COLSAME
+// MOV_P2R(c1, mm7, mm0); // col
+ MUL4_SYM_R2R(mm7, mm1, mm5); // col
+# else
cc = cv >> 16; // col
cv += cd; // col
MOV_A2R(cc, mm2); // col
@@ -63,6 +74,7 @@
MOV_P2R(c2, mm4, mm0); // col
INTERP_256_R2R(mm2, mm4, mm3, mm5); // col
MUL4_SYM_R2R(mm3, mm1, mm5); // col
+# endif
# endif
MOV_R2P(mm1, *d, mm0);
# else
@@ -70,9 +82,13 @@
val3 = INTERP_256(ru, val4, val3);
val1 = INTERP_256(rv, val3, val1); // col
# ifdef COLMUL
+# ifdef COLSAME
+ *d = MUL4_SYM(c1, val1);
+# else
val2 = INTERP_256((cv >> 16), c2, c1); // col
*d = MUL4_SYM(val2, val1); // col
cv += cd; // col
+# endif
# else
*d = INTERP_256(rv, val3, val1);
# endif
@@ -90,7 +106,11 @@
{
# ifdef COLMUL
# ifndef COLBLACK
- DATA32 val1, cval; // col
+ DATA32 val1;
+# ifdef COLSAME
+# else
+ DATA32 cval; // col
+# endif
# endif
# endif
# ifdef COLBLACK
@@ -100,9 +120,13 @@
(u >> (FP + FPI));
# ifdef COLMUL
val1 = *s; // col
+# ifdef COLSAME
+ *d = MUL4_SYM(c1, val1);
+# else
cval = INTERP_256((cv >> 16), c2, c1); // col
*d = MUL4_SYM(cval, val1);
cv += cd; // col
+# endif
# else
*d = *s;
# endif
--
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev