diff options
-rw-r--r-- | src/core/SkColorFilter.cpp | 2 | ||||
-rw-r--r-- | src/core/SkPM4f.h | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index 8a37e1b56c..167a668380 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -43,7 +43,7 @@ void SkColorFilter::filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) while (count > 0) { int n = SkTMin(count, N); for (int i = 0; i < n; ++i) { - SkNx_cast<uint8_t>(Sk4f::Load(src[i].fVec) * Sk4f(255) + Sk4f(0.5f)).store(&tmp[i]); + tmp[i] = src[i].toPMColor(); } this->filterSpan(tmp, n, tmp); for (int i = 0; i < n; ++i) { diff --git a/src/core/SkPM4f.h b/src/core/SkPM4f.h index e99ddccd8e..f983101f41 100644 --- a/src/core/SkPM4f.h +++ b/src/core/SkPM4f.h @@ -50,6 +50,13 @@ struct SkPM4f { Sk4f to4f_bgra() const { return swizzle_rb(this->to4f()); } Sk4f to4f_pmorder() const { return swizzle_rb_if_bgra(this->to4f()); } + SkPMColor toPMColor() const { + Sk4f value = swizzle_rb_if_bgra(this->to4f()); + SkPMColor result; + SkNx_cast<uint8_t>(value * Sk4f(255) + Sk4f(0.5f)).store(&result); + return result; + } + void toF16(uint16_t[4]) const; uint64_t toF16() const; // 4 float16 values packed into uint64_t |