evas: optimization - handle if c1 == c2 for map interplated lines

This commit is contained in:
Carsten Haitzler 2013-06-14 21:32:15 +09:00
parent 509090bafc
commit 1914148446
2 changed files with 48 additions and 12 deletions

View File

@ -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

View File

@ -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