aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkColorFilter.cpp2
-rw-r--r--src/core/SkPM4f.h7
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