diff options
author | reed <reed@google.com> | 2016-03-08 10:09:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-08 10:09:18 -0800 |
commit | 93bb080503eec5df5674a1bcfe4baaceced799ff (patch) | |
tree | f5503b474d579ea5dc9bed06f7996aabf9bf7839 /src/core/SkColorMatrixFilterRowMajor255.cpp | |
parent | 08e65e718a3464a594e6dfca0351dfed19ac2445 (diff) |
make pm4f be RGBA always, not pmcolor order
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1774523002
Review URL: https://codereview.chromium.org/1774523002
Diffstat (limited to 'src/core/SkColorMatrixFilterRowMajor255.cpp')
-rw-r--r-- | src/core/SkColorMatrixFilterRowMajor255.cpp | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp index e2545c2af6..09df61699d 100644 --- a/src/core/SkColorMatrixFilterRowMajor255.cpp +++ b/src/core/SkColorMatrixFilterRowMajor255.cpp @@ -12,29 +12,24 @@ #include "SkWriteBuffer.h" #include "SkUnPreMultiply.h" #include "SkString.h" -#include "SkPM4f.h" +#include "SkPM4fPriv.h" -#define SK_PMORDER_INDEX_A (SK_A32_SHIFT / 8) -#define SK_PMORDER_INDEX_R (SK_R32_SHIFT / 8) -#define SK_PMORDER_INDEX_G (SK_G32_SHIFT / 8) -#define SK_PMORDER_INDEX_B (SK_B32_SHIFT / 8) - -static void transpose_to_pmorder(float dst[20], const float src[20]) { +static void transpose(float dst[20], const float src[20]) { const float* srcR = src + 0; const float* srcG = src + 5; const float* srcB = src + 10; const float* srcA = src + 15; for (int i = 0; i < 20; i += 4) { - dst[i + SK_PMORDER_INDEX_A] = *srcA++; - dst[i + SK_PMORDER_INDEX_R] = *srcR++; - dst[i + SK_PMORDER_INDEX_G] = *srcG++; - dst[i + SK_PMORDER_INDEX_B] = *srcB++; + dst[i + 0] = *srcR++; + dst[i + 1] = *srcG++; + dst[i + 2] = *srcB++; + dst[i + 3] = *srcA++; } } void SkColorMatrixFilterRowMajor255::initState() { - transpose_to_pmorder(fTranspose, fMatrix); + transpose(fTranspose, fMatrix); const float* array = fMatrix; @@ -108,11 +103,10 @@ void filter_span(const float array[], const T src[], int count, T dst[]) { srcf = unpremul(srcf); } - Sk4f r4 = srcf[SK_R32_SHIFT/8]; - Sk4f g4 = srcf[SK_G32_SHIFT/8]; - Sk4f b4 = srcf[SK_B32_SHIFT/8]; - Sk4f a4 = srcf[SK_A32_SHIFT/8]; - + Sk4f r4 = srcf[Adaptor::R]; + Sk4f g4 = srcf[Adaptor::G]; + Sk4f b4 = srcf[Adaptor::B]; + Sk4f a4 = srcf[Adaptor::A]; // apply matrix Sk4f dst4 = c0 * r4 + c1 * g4 + c2 * b4 + c3 * a4 + c4; @@ -121,11 +115,17 @@ void filter_span(const float array[], const T src[], int count, T dst[]) { } struct SkPMColorAdaptor { + enum { + R = SK_R_INDEX, + G = SK_G_INDEX, + B = SK_B_INDEX, + A = SK_A_INDEX, + }; static SkPMColor From4f(const Sk4f& c4) { - return round(c4); + return round(swizzle_rb_if_bgra(c4)); } static Sk4f To4f(SkPMColor c) { - return SkNx_cast<float>(Sk4b::Load(&c)) * Sk4f(1.0f/255); + return to_4f(c) * Sk4f(1.0f/255); } }; void SkColorMatrixFilterRowMajor255::filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const { @@ -133,13 +133,17 @@ void SkColorMatrixFilterRowMajor255::filterSpan(const SkPMColor src[], int count } struct SkPM4fAdaptor { + enum { + R = SkPM4f::R, + G = SkPM4f::G, + B = SkPM4f::B, + A = SkPM4f::A, + }; static SkPM4f From4f(const Sk4f& c4) { - SkPM4f c; - c4.store(&c); - return c; + return SkPM4f::From4f(c4); } static Sk4f To4f(const SkPM4f& c) { - return Sk4f::Load(&c); + return c.to4f(); } }; void SkColorMatrixFilterRowMajor255::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const { |