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;
|
int alpha;
|
||||||
UNROLL8_PLD_WHILE(d, l, e,
|
UNROLL8_PLD_WHILE(d, l, e,
|
||||||
{
|
{
|
||||||
|
/* d = m*c */
|
||||||
alpha = *m;
|
alpha = *m;
|
||||||
switch(alpha)
|
switch(alpha)
|
||||||
{
|
{
|
||||||
|
@ -82,14 +83,17 @@ init_copy_mask_color_pt_funcs_c(void)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_op_copy_rel_mas_c_dp(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
|
_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;
|
DATA32 *e;
|
||||||
int color;
|
int color;
|
||||||
UNROLL8_PLD_WHILE(d, l, e,
|
UNROLL8_PLD_WHILE(d, l, e,
|
||||||
{
|
{
|
||||||
|
/* d = (m*c)*da */
|
||||||
color = *m;
|
color = *m;
|
||||||
switch(color)
|
switch(color)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
*d = 0;
|
||||||
break;
|
break;
|
||||||
case 255:
|
case 255:
|
||||||
color = 1 + (*d >> 24);
|
color = 1 + (*d >> 24);
|
||||||
|
@ -134,6 +138,7 @@ init_copy_rel_mask_color_span_funcs_c(void)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_op_copy_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
|
_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 = 1 + (*d >> 24);
|
||||||
s = MUL_256(s, c);
|
s = MUL_256(s, c);
|
||||||
*d = INTERP_256(m + 1, s, *d);
|
*d = INTERP_256(m + 1, s, *d);
|
||||||
|
|
|
@ -3,6 +3,30 @@
|
||||||
#ifdef BUILD_MMX
|
#ifdef BUILD_MMX
|
||||||
static void
|
static void
|
||||||
_op_copy_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
|
_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;
|
DATA32 *e = d + l;
|
||||||
pxor_r2r(mm0, mm0);
|
pxor_r2r(mm0, mm0);
|
||||||
MOV_P2R(c, mm2, 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++;
|
m++; d++;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _op_copy_mas_cn_dp_mmx _op_copy_mas_c_dp_mmx
|
#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
|
#ifdef BUILD_MMX
|
||||||
static void
|
static void
|
||||||
_op_copy_rel_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
|
_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;
|
DATA32 *e = d + l;
|
||||||
pxor_r2r(mm0, mm0);
|
pxor_r2r(mm0, mm0);
|
||||||
MOV_P2R(c, mm2, 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) {
|
_op_copy_mas_c_dp_neon(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
|
||||||
// FIXME: neon-it
|
// FIXME: neon-it
|
||||||
DATA32 *e;
|
DATA32 *e;
|
||||||
int color;
|
int alpha;
|
||||||
UNROLL8_PLD_WHILE(d, l, e,
|
UNROLL8_PLD_WHILE(d, l, e,
|
||||||
{
|
{
|
||||||
color = *m;
|
/* d = m*c */
|
||||||
switch(color)
|
alpha = *m;
|
||||||
|
switch(alpha)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
*d = 0;
|
||||||
break;
|
break;
|
||||||
case 255:
|
case 255:
|
||||||
*d = c;
|
*d = c;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
color++;
|
alpha++;
|
||||||
*d = INTERP_256(color, c, *d);
|
*d = MUL_256(alpha, c);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
m++; d++;
|
m++; d++;
|
||||||
|
@ -86,6 +88,7 @@ init_copy_mask_color_pt_funcs_neon(void)
|
||||||
#ifdef BUILD_NEON
|
#ifdef BUILD_NEON
|
||||||
static void
|
static void
|
||||||
_op_copy_rel_mas_c_dp_neon(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
|
_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
|
// FIXME: neon-it
|
||||||
DATA32 *e;
|
DATA32 *e;
|
||||||
int color;
|
int color;
|
||||||
|
@ -140,6 +143,7 @@ init_copy_rel_mask_color_span_funcs_neon(void)
|
||||||
#ifdef BUILD_NEON
|
#ifdef BUILD_NEON
|
||||||
static void
|
static void
|
||||||
_op_copy_rel_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
|
_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 = 1 + (*d >> 24);
|
||||||
s = MUL_256(s, c);
|
s = MUL_256(s, c);
|
||||||
*d = INTERP_256(m + 1, s, *d);
|
*d = INTERP_256(m + 1, s, *d);
|
||||||
|
|
Loading…
Reference in New Issue