Evas: Fix COPY op for mask+color

Also, mark some functions with a FIXME as they look just wrong.
COPY_REL is never used...

MMX and NEON optimizations should be implemented for COPY MASK+COL.
This commit is contained in:
Jean-Philippe Andre 2014-11-10 18:16:56 +09:00
parent 85ecf662d4
commit e21a40de9d
3 changed files with 40 additions and 5 deletions

View File

@ -6,6 +6,7 @@ _op_copy_mas_c_dp(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
int alpha;
UNROLL8_PLD_WHILE(d, l, e,
{
/* d = m*c */
alpha = *m;
switch(alpha)
{
@ -82,14 +83,17 @@ init_copy_mask_color_pt_funcs_c(void)
static void
_op_copy_rel_mas_c_dp(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
/* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
DATA32 *e;
int color;
UNROLL8_PLD_WHILE(d, l, e,
{
/* d = (m*c)*da */
color = *m;
switch(color)
{
case 0:
*d = 0;
break;
case 255:
color = 1 + (*d >> 24);
@ -134,6 +138,7 @@ init_copy_rel_mask_color_span_funcs_c(void)
static void
_op_copy_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
/* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
s = 1 + (*d >> 24);
s = MUL_256(s, c);
*d = INTERP_256(m + 1, s, *d);

View File

@ -3,6 +3,30 @@
#ifdef BUILD_MMX
static void
_op_copy_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
#if 1
DATA32 *e;
int alpha;
UNROLL8_PLD_WHILE(d, l, e,
{
/* d = m*c */
alpha = *m;
switch(alpha)
{
case 0:
*d = 0;
break;
case 255:
*d = c;
break;
default:
alpha++;
*d = MUL_256(alpha, c);
break;
}
m++; d++;
});
#else
#warning This MMX function looks broken. Please fixme.
DATA32 *e = d + l;
pxor_r2r(mm0, mm0);
MOV_P2R(c, mm2, mm0)
@ -29,6 +53,7 @@ _op_copy_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int
}
m++; d++;
}
#endif
}
#define _op_copy_mas_cn_dp_mmx _op_copy_mas_c_dp_mmx
@ -99,6 +124,7 @@ init_copy_mask_color_pt_funcs_mmx(void)
#ifdef BUILD_MMX
static void
_op_copy_rel_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
/* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
DATA32 *e = d + l;
pxor_r2r(mm0, mm0);
MOV_P2R(c, mm2, mm0)

View File

@ -5,20 +5,22 @@ static void
_op_copy_mas_c_dp_neon(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
// FIXME: neon-it
DATA32 *e;
int color;
int alpha;
UNROLL8_PLD_WHILE(d, l, e,
{
color = *m;
switch(color)
/* d = m*c */
alpha = *m;
switch(alpha)
{
case 0:
*d = 0;
break;
case 255:
*d = c;
break;
default:
color++;
*d = INTERP_256(color, c, *d);
alpha++;
*d = MUL_256(alpha, c);
break;
}
m++; d++;
@ -86,6 +88,7 @@ init_copy_mask_color_pt_funcs_neon(void)
#ifdef BUILD_NEON
static void
_op_copy_rel_mas_c_dp_neon(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
/* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
// FIXME: neon-it
DATA32 *e;
int color;
@ -140,6 +143,7 @@ init_copy_rel_mask_color_span_funcs_neon(void)
#ifdef BUILD_NEON
static void
_op_copy_rel_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
/* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
s = 1 + (*d >> 24);
s = MUL_256(s, c);
*d = INTERP_256(m + 1, s, *d);