Use non-linear blending flag in raster pipeline blitter
BUG=skia:
Change-Id: I00b52e6de3b46b7d26c1df2aa63c521b6c7ece2d
Reviewed-on: https://skia-review.googlesource.com/8526
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h
index 86389f2..87ef0ce 100644
--- a/include/core/SkColorSpace.h
+++ b/include/core/SkColorSpace.h
@@ -91,10 +91,11 @@
* Transfer function can be specified as an enum or as the coefficients to an equation.
* Gamut can be specified as an enum or as the matrix transformation to XYZ D50.
*/
- static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, Gamut gamut);
+ static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, Gamut gamut, uint32_t flags = 0);
static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, const SkMatrix44& toXYZD50,
uint32_t flags = 0);
- static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut);
+ static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut,
+ uint32_t flags = 0);
static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs,
const SkMatrix44& toXYZD50, uint32_t flags = 0);
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index ec519bd..a386904 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -847,7 +847,7 @@
return alloc->make<SkA8_Coverage_Blitter>(device, *paint);
}
- if (SkBlitter* blitter = SkCreateRasterPipelineBlitter(device, *paint, matrix, alloc, true)) {
+ if (SkBlitter* blitter = SkCreateRasterPipelineBlitter(device, *paint, matrix, alloc)) {
return blitter;
}
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp
index 80c5ac1..18eede3 100644
--- a/src/core/SkColorSpace.cpp
+++ b/src/core/SkColorSpace.cpp
@@ -189,16 +189,17 @@
std::move(gammas), toXYZD50, nullptr, flags));
}
-sk_sp<SkColorSpace> SkColorSpace::MakeRGB(RenderTargetGamma gamma, Gamut gamut) {
+sk_sp<SkColorSpace> SkColorSpace::MakeRGB(RenderTargetGamma gamma, Gamut gamut, uint32_t flags) {
SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor);
to_xyz_d50(&toXYZD50, gamut);
- return SkColorSpace::MakeRGB(gamma, toXYZD50);
+ return SkColorSpace::MakeRGB(gamma, toXYZD50, flags);
}
-sk_sp<SkColorSpace> SkColorSpace::MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut) {
+sk_sp<SkColorSpace> SkColorSpace::MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut,
+ uint32_t flags) {
SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor);
to_xyz_d50(&toXYZD50, gamut);
- return SkColorSpace::MakeRGB(coeffs, toXYZD50);
+ return SkColorSpace::MakeRGB(coeffs, toXYZD50, flags);
}
static SkColorSpace* gAdobeRGB;
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index e3256d4..85392dd 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -204,6 +204,6 @@
// Returns nullptr if no SkRasterPipeline blitter can be constructed for this paint.
SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&, const SkMatrix& ctm,
- SkArenaAlloc*, bool blendCorrectly);
+ SkArenaAlloc*);
#endif
diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp
index 273f5fe..a994de3 100644
--- a/src/core/SkRasterPipelineBlitter.cpp
+++ b/src/core/SkRasterPipelineBlitter.cpp
@@ -21,7 +21,7 @@
class SkRasterPipelineBlitter : public SkBlitter {
public:
static SkBlitter* Create(const SkPixmap&, const SkPaint&, const SkMatrix& ctm,
- SkArenaAlloc*, bool blendCorrectly);
+ SkArenaAlloc*);
SkRasterPipelineBlitter(SkPixmap dst, SkBlendMode blend, SkPM4f paintColor, bool blendCorrectly)
: fDst(dst)
@@ -69,9 +69,8 @@
SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst,
const SkPaint& paint,
const SkMatrix& ctm,
- SkArenaAlloc* alloc,
- bool blendCorrectly) {
- return SkRasterPipelineBlitter::Create(dst, paint, ctm, alloc, blendCorrectly);
+ SkArenaAlloc* alloc) {
+ return SkRasterPipelineBlitter::Create(dst, paint, ctm, alloc);
}
static bool supported(const SkImageInfo& info) {
@@ -87,8 +86,8 @@
SkBlitter* SkRasterPipelineBlitter::Create(const SkPixmap& dst,
const SkPaint& paint,
const SkMatrix& ctm,
- SkArenaAlloc* alloc,
- bool blendCorrectly) {
+ SkArenaAlloc* alloc) {
+ bool blendCorrectly = !(dst.colorSpace() && as_CSB(dst.colorSpace())->nonLinearBlending());
auto blitter = alloc->make<SkRasterPipelineBlitter>(
dst,
paint.getBlendMode(),