efl/legacy/evas/src/lib/engines/common_8/evas_soft8_dither_mask.c

101 lines
2.0 KiB
C

#include "evas_common_soft8.h"
EFL_ALWAYS_INLINE void
_soft8_convert_from_rgba_pt(const DATA32 * src, DATA8 * dst, DATA8 * alpha)
{
if (A_VAL(src) == 0)
{
*dst = 0;
*alpha = 0;
}
else
{
*dst = GRY_8_FROM_RGB(src);
*alpha = A_VAL(src);
}
}
static inline void
_soft8_convert_from_rgba_scanline(const DATA32 * src, DATA8 * dst,
DATA8 * alpha, const int w)
{
int x, m;
m = (w & ~7);
x = 0;
pld(src, 0);
while (x < m)
{
pld(src, 32);
UNROLL8(
{
_soft8_convert_from_rgba_pt(src, dst, alpha);
src++; dst++; alpha++; x++;}
);
}
for (; x < w; x++, src++, dst++, alpha++)
_soft8_convert_from_rgba_pt(src, dst, alpha);
}
void
evas_common_soft8_image_convert_from_rgba(Soft8_Image * im, const DATA32 * src)
{
const DATA32 *sp;
DATA8 *dp;
DATA8 *ap;
unsigned int y;
sp = src;
dp = im->pixels;
ap = im->alpha;
for (y = 0; y < im->cache_entry.h;
y++, sp += im->cache_entry.w, dp += im->stride, ap += im->stride)
_soft8_convert_from_rgba_scanline(sp, dp, ap, im->cache_entry.w);
}
EFL_ALWAYS_INLINE void
_soft8_convert_from_rgb_pt(const DATA32 * src, DATA8 * dst)
{
*dst = GRY_8_FROM_RGB(src);
}
static inline void
_soft8_convert_from_rgb_scanline(const DATA32 * src, DATA8 * dst, const int w)
{
int x, m;
m = (w & ~7);
x = 0;
pld(src, 0);
while (x < m)
{
pld(src, 32);
UNROLL8(
{
_soft8_convert_from_rgb_pt(src, dst); src++; dst++; x++;}
);
}
for (; x < w; x++, src++, dst++)
_soft8_convert_from_rgb_pt(src, dst);
}
void
evas_common_soft8_image_convert_from_rgb(Soft8_Image * im, const DATA32 * src)
{
const DATA32 *sp;
DATA8 *dp;
unsigned int y;
sp = src;
dp = im->pixels;
for (y = 0; y < im->cache_entry.h;
y++, sp += im->cache_entry.w, dp += im->stride)
_soft8_convert_from_rgb_scanline(sp, dp, im->cache_entry.w);
}