aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXform.h
diff options
context:
space:
mode:
authorGravatar msarett <msarett@google.com>2016-06-16 10:50:55 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-16 10:50:55 -0700
commitdea0340cadb759932e53416a657f5ea75fee8b5f (patch)
treef3c7e4c1873771ee818e0a1c86515a3ea5250d75 /src/core/SkColorSpaceXform.h
parentbd770d619553a88eeaa64ff29082f62db5c9b4d2 (diff)
Implement fast, correct gamma conversion for color xforms
201295.jpg on HP z620 (300x280, most common form of sRGB profile) QCMS Xform 0.495 ms Skia Old Xform 0.235 ms Skia NEW Xform 0.423 ms Vs Old Code 0.56x Vs QCMS 1.17x So to summarize, we are now much slower than before, but still a bit faster than QCMS. And now we are also far more accurate than QCMS :). BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2060823003 CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review-Url: https://codereview.chromium.org/2060823003
Diffstat (limited to 'src/core/SkColorSpaceXform.h')
-rw-r--r--src/core/SkColorSpaceXform.h29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/core/SkColorSpaceXform.h b/src/core/SkColorSpaceXform.h
index 3472643519..1ea608094f 100644
--- a/src/core/SkColorSpaceXform.h
+++ b/src/core/SkColorSpaceXform.h
@@ -26,23 +26,36 @@ public:
/**
* Apply the color conversion to a src buffer, storing the output in the dst buffer.
- * The src is stored in RGBA_8888 and the dst is stored in 8888 platform format.
- * The output is not premultiplied.
+ * The src is opaque and stored in RGBA_8888, and the dst is also opaque and stored
+ * in 8888 platform format.
*/
- virtual void xform_RGBA_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const = 0;
+ virtual void xform_RGB1_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const = 0;
virtual ~SkColorSpaceXform() {}
};
-class Sk2Dot2Xform : public SkColorSpaceXform {
+class SkSRGBTo2Dot2Xform : public SkColorSpaceXform {
public:
- void xform_RGBA_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const override;
+ void xform_RGB1_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const override;
private:
- Sk2Dot2Xform(const SkMatrix44& srcToDst);
+ SkSRGBTo2Dot2Xform(const SkMatrix44& srcToDst);
- float fSrcToDst[16];
+ float fSrcToDst[12];
+
+ friend class SkColorSpaceXform;
+};
+
+class Sk2Dot2To2Dot2Xform : public SkColorSpaceXform {
+public:
+
+ void xform_RGB1_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const override;
+
+private:
+ Sk2Dot2To2Dot2Xform(const SkMatrix44& srcToDst);
+
+ float fSrcToDst[12];
friend class SkColorSpaceXform;
};
@@ -53,7 +66,7 @@ private:
class SkDefaultXform : public SkColorSpaceXform {
public:
- void xform_RGBA_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const override;
+ void xform_RGB1_8888(uint32_t* dst, const uint32_t* src, uint32_t len) const override;
private:
SkDefaultXform(const sk_sp<SkGammas>& srcGammas, const SkMatrix44& srcToDst,