Mercurial > hg > dmlib
changeset 18:022eee2e7de6
Add dmScaledBlitSurface32to32TransparentGA().
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 28 Sep 2012 14:50:58 +0300 |
parents | a60fe802636a |
children | 10f58ff516b3 |
files | dmblitfunc.h |
diffstat | 1 files changed, 58 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/dmblitfunc.h Fri Sep 28 14:50:14 2012 +0300 +++ b/dmblitfunc.h Fri Sep 28 14:50:58 2012 +0300 @@ -165,6 +165,64 @@ #include "dmscaledblit.h" +// ----------------------------------------------------------------------- + +#define DM_SCALED_NAME dmScaledBlitSurface32to32TransparentGA +#define DM_SCALED_SRC_BYTES 4 +#define DM_SCALED_DST_BYTES 4 +#define DM_SCALED_ARGS , Uint32 alpha + +#ifdef DM_USE_SIMD +#define DM_SCALED_VARS \ + const Uint64 qpdrm = 0xff00ff00ff00ffULL; + +#define DM_SCALED_SRC_TYPE Uint32 +#define DM_SCALED_DST_TYPE Uint32 +#define DM_SCALED_INNER_INIT \ + asm( \ + "movd %0, %%mm4\n" \ + "punpcklwd %%mm4, %%mm4\n" \ + "punpckldq %%mm4, %%mm4\n" \ + : \ + : "m" (alpha) \ + : "%mm4" ); + +#define DM_SCALED_INNER \ + asm( \ + "movd %2, %%mm1\n" \ + "pxor %%mm2, %%mm2\n" \ + "movd %1, %%mm3\n" \ + "punpcklbw %%mm2, %%mm1\n" \ + "punpcklbw %%mm2, %%mm3\n" \ + \ + "psubw %%mm3, %%mm1\n" \ + "pmullw %%mm4, %%mm1\n" \ + "psraw $8, %%mm1\n" \ + "paddw %%mm3, %%mm1\n" \ + "pand %3, %%mm1\n" \ + "packuswb %%mm2, %%mm1\n" \ + "movd %%mm1, %0\n" \ + : "=m" (*dp) \ + : "m" (*dp), "m" (sp[FP_GETH(xv)]), "m" (qpdrm) \ + : "memory", "%mm1", "%mm2", "%mm3", "%mm4" ); dp++; + +#define DM_SCALED_FINISH asm("emms\n"); + +#else + +#define DM_SCALED_SRC_TYPE DMRGBA32 +#define DM_SCALED_DST_TYPE DMRGBA32 +#define DM_SCALED_INNER \ + const DMRGBA32 q = sp[FP_GETH(xv)]; \ + dp->r += ((q.r - dp->r) * alpha) >> 8; \ + dp->g += ((q.g - dp->g) * alpha) >> 8; \ + dp->b += ((q.b - dp->b) * alpha) >> 8; \ + dp->a = alpha; \ + dp++; +#endif + +#include "dmscaledblit.h" + // ======================================================================= // DMD_SATURATE // =======================================================================