// kLighten_Mode static inline int lighten_byte(int sc, int dc, int sa, int da) { int sd = sc * da; int ds = dc * sa; if (sd > ds) { // srcover return sc + dc - SkDiv255Round(ds); } else { // dstover return dc + sc - SkDiv255Round(sd); } }
static inline bool S32A_D565_Blend_1(SkPMColor sc, uint16_t dc, U8CPU alpha) { unsigned dst_scale = 255 - SkMulDiv255Round(SkGetPackedA32(sc), alpha); unsigned dr = (SkMulS16(SkGetPackedR32(sc), alpha) >> 3) + SkMulS16(SkGetPackedR16(dc), dst_scale); unsigned dg = (SkMulS16(SkGetPackedG32(sc), alpha) >> 2) + SkMulS16(SkGetPackedG16(dc), dst_scale); unsigned rr = SkDiv255Round(dr); unsigned rg = SkDiv255Round(dg); if (rr <= 31 && rg <= 63) { return true; } return false; }
static inline bool S32A_D565_Blend_02(SkPMColor sc, uint16_t dc, U8CPU alpha) { unsigned dst_scale = 255 - SkMulDiv255Round(SkGetPackedA32(sc), alpha); unsigned dr = SkMulS16(SkGetPackedR32(sc), alpha) + SkMulS16(GetPackedR16As32(dc), dst_scale); unsigned dg = SkMulS16(SkGetPackedG32(sc), alpha) + SkMulS16(GetPackedG16As32(dc), dst_scale); unsigned db = SkMulS16(SkGetPackedB32(sc), alpha) + SkMulS16(GetPackedB16As32(dc), dst_scale); int rc = SkPack888ToRGB16(SkDiv255Round(dr), SkDiv255Round(dg), SkDiv255Round(db)); unsigned rr = SkGetPackedR16(rc); unsigned rg = SkGetPackedG16(rc); if (rr <= 31 && rg <= 63) { return true; } return false; }
static inline int clamp_div255round(int prod) { if (prod <= 0) { return 0; } else if (prod >= 255*255) { return 255; } else { return SkDiv255Round(prod); } }