forked from enlightenment/efl
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:
parent
85ecf662d4
commit
e21a40de9d
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue