aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar brianosman <brianosman@google.com>2016-06-24 11:55:32 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-24 11:55:32 -0700
commite2cddc5342d5aacacce4429441c94d1e0ff67d8c (patch)
treef6b6b8278d4a7316e380b8709bb4d08140f2011a /src
parent23e9f7c501950ba98dad4fe1c1d834005f9db904 (diff)
Fix incorrect swizzle on BGRA platforms in filterColor4f path
Diffstat (limited to 'src')
-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