| Index: src/opts/SkBlitMask_opts.h
|
| diff --git a/src/opts/SkBlitMask_opts.h b/src/opts/SkBlitMask_opts.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9129560ef4de7d84ceda58786d2cdb304cda17a7
|
| --- /dev/null
|
| +++ b/src/opts/SkBlitMask_opts.h
|
| @@ -0,0 +1,37 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkBlitMask_opts_DEFINED
|
| +#define SkBlitMask_opts_DEFINED
|
| +
|
| +#include "Sk4px.h"
|
| +
|
| +namespace SK_OPTS_NS {
|
| +
|
| +static void blit_mask_d32_a8(SkPMColor* dst, size_t dstRB,
|
| + const SkAlpha* mask, size_t maskRB,
|
| + SkColor color, int w, int h) {
|
| + auto s = Sk4px::DupPMColor(SkPreMultiplyColor(color));
|
| +
|
| + auto fn = [&](const Sk4px& d, const Sk4px& aa) {
|
| + // = (s + d(1-sa))aa + d(1-aa)
|
| + // = s*aa + d(1-sa*aa)
|
| + auto left = s.approxMulDiv255(aa),
|
| + right = d.approxMulDiv255(left.alphas().inv());
|
| + return left + right; // This does not overflow (exhaustively checked).
|
| + };
|
| +
|
| + while (h --> 0) {
|
| + Sk4px::MapDstAlpha(w, dst, mask, fn);
|
| + dst += dstRB / sizeof(*dst);
|
| + mask += maskRB / sizeof(*mask);
|
| + }
|
| +}
|
| +
|
| +} // SK_OPTS_NS
|
| +
|
| +#endif//SkBlitMask_opts_DEFINED
|
|
|