diff options
author | Matt Sarett <msarett@google.com> | 2017-03-24 10:06:03 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-24 17:11:26 +0000 |
commit | f3880933092c3226cd7ffd1690fe72c9c0cc376c (patch) | |
tree | 893a45cb711edc327e1a450f1ce3cb2974a42528 | |
parent | 70288c0a9179f308fc7de1b07899baef4446e444 (diff) |
Delete SkColorSpace::ColorSpaceFlags
BUG=skia:
Change-Id: Ia0688876915cd773614ca0c4ccd467cf6e7c603e
Reviewed-on: https://skia-review.googlesource.com/10105
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
-rw-r--r-- | dm/DM.cpp | 5 | ||||
-rw-r--r-- | include/core/SkColorSpace.h | 14 | ||||
-rw-r--r-- | src/codec/SkCodecPriv.h | 3 | ||||
-rw-r--r-- | src/core/SkColorSpace.cpp | 138 | ||||
-rw-r--r-- | src/core/SkColorSpaceXform.cpp | 2 | ||||
-rw-r--r-- | src/core/SkColorSpace_A2B.cpp | 2 | ||||
-rw-r--r-- | src/core/SkColorSpace_Base.h | 12 | ||||
-rw-r--r-- | src/core/SkColorSpace_ICC.cpp | 10 | ||||
-rw-r--r-- | src/core/SkColorSpace_XYZ.cpp | 14 | ||||
-rw-r--r-- | src/core/SkColorSpace_XYZ.h | 4 | ||||
-rw-r--r-- | src/core/SkRasterPipelineBlitter.cpp | 16 | ||||
-rw-r--r-- | src/gpu/GrSurfaceContext.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrSurfaceContext.h | 2 | ||||
-rw-r--r-- | src/gpu/SkGr.cpp | 11 | ||||
-rw-r--r-- | src/image/SkImage.cpp | 2 | ||||
-rw-r--r-- | src/image/SkSurface_Gpu.cpp | 6 | ||||
-rw-r--r-- | tests/ColorSpaceTest.cpp | 10 | ||||
-rw-r--r-- | tests/ColorSpaceXformTest.cpp | 4 | ||||
-rw-r--r-- | tests/ICCTest.cpp | 2 | ||||
-rw-r--r-- | tools/flags/SkCommonFlagsConfig.cpp | 10 |
20 files changed, 67 insertions, 204 deletions
@@ -867,16 +867,11 @@ static Sink* create_sink(const GrContextOptions& grCtxOptions, const SkCommandLi if (FLAGS_cpu) { auto srgbColorSpace = SkColorSpace::MakeSRGB(); - auto srgbColorSpaceNonLinearBlending = SkColorSpace::MakeRGB( - SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kSRGB_Gamut, - SkColorSpace::kNonLinearBlending_ColorSpaceFlag); auto srgbLinearColorSpace = SkColorSpace::MakeSRGBLinear(); SINK("565", RasterSink, kRGB_565_SkColorType); SINK("8888", RasterSink, kN32_SkColorType); SINK("srgb", RasterSink, kN32_SkColorType, srgbColorSpace); - SINK("srgbnl", RasterSink, kN32_SkColorType, srgbColorSpaceNonLinearBlending); SINK("f16", RasterSink, kRGBA_F16_SkColorType, srgbLinearColorSpace); SINK("pdf", PDFSink); SINK("skp", SKPSink); diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h index 27288f76d8..6a4919b733 100644 --- a/include/core/SkColorSpace.h +++ b/include/core/SkColorSpace.h @@ -87,23 +87,17 @@ public: kRec2020_Gamut, }; - enum ColorSpaceFlags { - kNonLinearBlending_ColorSpaceFlag = 0x1, - }; - /** * Create an SkColorSpace from a transfer function and a color gamut. * * 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, 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, - uint32_t flags = 0); + static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, Gamut gamut); + static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, const SkMatrix44& toXYZD50); + static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut); static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs, - const SkMatrix44& toXYZD50, uint32_t flags = 0); + const SkMatrix44& toXYZD50); /** * Create an SkColorSpace from an ICC profile. diff --git a/src/codec/SkCodecPriv.h b/src/codec/SkCodecPriv.h index 5bf0272f6e..af049b36d8 100644 --- a/src/codec/SkCodecPriv.h +++ b/src/codec/SkCodecPriv.h @@ -311,8 +311,7 @@ static inline bool needs_color_xform(const SkImageInfo& dstInfo, const SkImageIn bool isF16 = kRGBA_F16_SkColorType == dstInfo.colorType(); // Need a color xform when dst space does not match the src. - bool srcDstNotEqual = - !SkColorSpace_Base::EqualsIgnoreFlags(srcInfo.colorSpace(), dstInfo.colorSpace()); + bool srcDstNotEqual = !SkColorSpace::Equals(srcInfo.colorSpace(), dstInfo.colorSpace()); return needsColorCorrectPremul || isF16 || srcDstNotEqual; } diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp index b953ffa53d..9942406a0e 100644 --- a/src/core/SkColorSpace.cpp +++ b/src/core/SkColorSpace.cpp @@ -83,9 +83,8 @@ bool SkColorSpacePrimaries::toXYZD50(SkMatrix44* toXYZ_D50) const { /////////////////////////////////////////////////////////////////////////////////////////////////// -SkColorSpace_Base::SkColorSpace_Base(sk_sp<SkData> profileData, uint32_t flags) +SkColorSpace_Base::SkColorSpace_Base(sk_sp<SkData> profileData) : fProfileData(std::move(profileData)) - , fFlags(flags) {} /** @@ -113,25 +112,21 @@ static bool xyz_almost_equal(const SkMatrix44& toXYZD50, const float* standard) color_space_almost_equal(toXYZD50.getFloat(3, 3), 1.0f); } -sk_sp<SkColorSpace> SkColorSpace_Base::MakeRGB(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50, - uint32_t flags) +sk_sp<SkColorSpace> SkColorSpace_Base::MakeRGB(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50) { - bool nonLinearBlending = SkToBool(flags & kNonLinearBlending_ColorSpaceFlag); switch (gammaNamed) { case kSRGB_SkGammaNamed: if (xyz_almost_equal(toXYZD50, gSRGB_toXYZD50)) { - return nonLinearBlending - ? SkColorSpace_Base::MakeNamed(kSRGB_NonLinearBlending_Named) - : SkColorSpace_Base::MakeNamed(kSRGB_Named); + return SkColorSpace_Base::MakeNamed(kSRGB_Named); } break; case k2Dot2Curve_SkGammaNamed: - if (xyz_almost_equal(toXYZD50, gAdobeRGB_toXYZD50) && !nonLinearBlending) { + if (xyz_almost_equal(toXYZD50, gAdobeRGB_toXYZD50)) { return SkColorSpace_Base::MakeNamed(kAdobeRGB_Named); } break; case kLinear_SkGammaNamed: - if (xyz_almost_equal(toXYZD50, gSRGB_toXYZD50) && !nonLinearBlending) { + if (xyz_almost_equal(toXYZD50, gSRGB_toXYZD50)) { return SkColorSpace_Base::MakeNamed(kSRGBLinear_Named); } break; @@ -142,37 +137,36 @@ sk_sp<SkColorSpace> SkColorSpace_Base::MakeRGB(SkGammaNamed gammaNamed, const Sk break; } - return sk_sp<SkColorSpace>(new SkColorSpace_XYZ(gammaNamed, toXYZD50, flags)); + return sk_sp<SkColorSpace>(new SkColorSpace_XYZ(gammaNamed, toXYZD50)); } -sk_sp<SkColorSpace> SkColorSpace::MakeRGB(RenderTargetGamma gamma, const SkMatrix44& toXYZD50, - uint32_t flags) { +sk_sp<SkColorSpace> SkColorSpace::MakeRGB(RenderTargetGamma gamma, const SkMatrix44& toXYZD50) { switch (gamma) { case kLinear_RenderTargetGamma: - return SkColorSpace_Base::MakeRGB(kLinear_SkGammaNamed, toXYZD50, flags); + return SkColorSpace_Base::MakeRGB(kLinear_SkGammaNamed, toXYZD50); case kSRGB_RenderTargetGamma: - return SkColorSpace_Base::MakeRGB(kSRGB_SkGammaNamed, toXYZD50, flags); + return SkColorSpace_Base::MakeRGB(kSRGB_SkGammaNamed, toXYZD50); default: return nullptr; } } sk_sp<SkColorSpace> SkColorSpace::MakeRGB(const SkColorSpaceTransferFn& coeffs, - const SkMatrix44& toXYZD50, uint32_t flags) { + const SkMatrix44& toXYZD50) { if (!is_valid_transfer_fn(coeffs)) { return nullptr; } if (is_almost_srgb(coeffs)) { - return SkColorSpace::MakeRGB(kSRGB_RenderTargetGamma, toXYZD50, flags); + return SkColorSpace::MakeRGB(kSRGB_RenderTargetGamma, toXYZD50); } if (is_almost_2dot2(coeffs)) { - return SkColorSpace_Base::MakeRGB(k2Dot2Curve_SkGammaNamed, toXYZD50, flags); + return SkColorSpace_Base::MakeRGB(k2Dot2Curve_SkGammaNamed, toXYZD50); } if (is_almost_linear(coeffs)) { - return SkColorSpace_Base::MakeRGB(kLinear_SkGammaNamed, toXYZD50, flags); + return SkColorSpace_Base::MakeRGB(kLinear_SkGammaNamed, toXYZD50); } void* memory = sk_malloc_throw(sizeof(SkGammas) + sizeof(SkColorSpaceTransferFn)); @@ -186,32 +180,29 @@ sk_sp<SkColorSpace> SkColorSpace::MakeRGB(const SkColorSpaceTransferFn& coeffs, gammas->fData[channel] = data; } return sk_sp<SkColorSpace>(new SkColorSpace_XYZ(kNonStandard_SkGammaNamed, - std::move(gammas), toXYZD50, nullptr, flags)); + std::move(gammas), toXYZD50, nullptr)); } -sk_sp<SkColorSpace> SkColorSpace::MakeRGB(RenderTargetGamma gamma, Gamut gamut, uint32_t flags) { +sk_sp<SkColorSpace> SkColorSpace::MakeRGB(RenderTargetGamma gamma, Gamut gamut) { SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); to_xyz_d50(&toXYZD50, gamut); - return SkColorSpace::MakeRGB(gamma, toXYZD50, flags); + return SkColorSpace::MakeRGB(gamma, toXYZD50); } -sk_sp<SkColorSpace> SkColorSpace::MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut, - uint32_t flags) { +sk_sp<SkColorSpace> SkColorSpace::MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut) { SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); to_xyz_d50(&toXYZD50, gamut); - return SkColorSpace::MakeRGB(coeffs, toXYZD50, flags); + return SkColorSpace::MakeRGB(coeffs, toXYZD50); } static SkColorSpace* gAdobeRGB; static SkColorSpace* gSRGB; static SkColorSpace* gSRGBLinear; -static SkColorSpace* gSRGBNonLinearBlending; sk_sp<SkColorSpace> SkColorSpace_Base::MakeNamed(Named named) { static SkOnce sRGBOnce; static SkOnce adobeRGBOnce; static SkOnce sRGBLinearOnce; - static SkOnce sRGBNonLinearBlendingOnce; switch (named) { case kSRGB_Named: { @@ -221,7 +212,7 @@ sk_sp<SkColorSpace> SkColorSpace_Base::MakeNamed(Named named) { // Force the mutable type mask to be computed. This avoids races. (void)srgbToxyzD50.getType(); - gSRGB = new SkColorSpace_XYZ(kSRGB_SkGammaNamed, srgbToxyzD50, 0 /* flags */); + gSRGB = new SkColorSpace_XYZ(kSRGB_SkGammaNamed, srgbToxyzD50); }); return sk_ref_sp<SkColorSpace>(gSRGB); } @@ -232,8 +223,7 @@ sk_sp<SkColorSpace> SkColorSpace_Base::MakeNamed(Named named) { // Force the mutable type mask to be computed. This avoids races. (void)adobergbToxyzD50.getType(); - gAdobeRGB = new SkColorSpace_XYZ(k2Dot2Curve_SkGammaNamed, adobergbToxyzD50, - 0 /* flags */); + gAdobeRGB = new SkColorSpace_XYZ(k2Dot2Curve_SkGammaNamed, adobergbToxyzD50); }); return sk_ref_sp<SkColorSpace>(gAdobeRGB); } @@ -244,23 +234,10 @@ sk_sp<SkColorSpace> SkColorSpace_Base::MakeNamed(Named named) { // Force the mutable type mask to be computed. This avoids races. (void)srgbToxyzD50.getType(); - gSRGBLinear = new SkColorSpace_XYZ(kLinear_SkGammaNamed, srgbToxyzD50, - 0 /* flags */); + gSRGBLinear = new SkColorSpace_XYZ(kLinear_SkGammaNamed, srgbToxyzD50); }); return sk_ref_sp<SkColorSpace>(gSRGBLinear); } - case kSRGB_NonLinearBlending_Named: { - sRGBNonLinearBlendingOnce([] { - SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); - srgbToxyzD50.set3x3RowMajorf(gSRGB_toXYZD50); - - // Force the mutable type mask to be computed. This avoids races. - (void)srgbToxyzD50.getType(); - gSRGBNonLinearBlending = new SkColorSpace_XYZ(kSRGB_SkGammaNamed, srgbToxyzD50, - kNonLinearBlending_ColorSpaceFlag); - }); - return sk_ref_sp<SkColorSpace>(gSRGBNonLinearBlending); - } default: break; } @@ -300,35 +277,7 @@ bool SkColorSpace::toXYZD50(SkMatrix44* toXYZD50) const { } bool SkColorSpace::isSRGB() const { - return gSRGB == this || gSRGBNonLinearBlending == this; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -sk_sp<SkColorSpace> SkColorSpace_Base::makeWithoutFlags() { - if (!fFlags) { - return sk_ref_sp(this); - } - - SkASSERT(Type::kXYZ == this->type()); - SkColorSpaceTransferFn fn; - SkAssertResult(this->onIsNumericalTransferFn(&fn)); - return SkColorSpace::MakeRGB(fn, *this->toXYZD50(), 0); -} - -sk_sp<SkColorSpace> SkColorSpace_Base::makeWithNonLinearBlending() { - if (SkToBool(SkColorSpace::kNonLinearBlending_ColorSpaceFlag & fFlags)) { - return sk_ref_sp(this); - } - - // This should only be called on XYZ color spaces. A2B color spaces are never - // allowed to be destinations - which means that this flag does not make any - // sense for them. - SkASSERT(Type::kXYZ == this->type()); - SkColorSpaceTransferFn fn; - SkAssertResult(this->onIsNumericalTransferFn(&fn)); - return SkColorSpace::MakeRGB(fn, *this->toXYZD50(), - SkColorSpace::kNonLinearBlending_ColorSpaceFlag); + return gSRGB == this; } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -362,8 +311,7 @@ struct ColorSpaceHeader { */ static constexpr uint8_t kTransferFn_Flag = 1 << 3; - static ColorSpaceHeader Pack(Version version, uint8_t named, uint8_t gammaNamed, - bool nonLinearBlending, uint8_t flags) + static ColorSpaceHeader Pack(Version version, uint8_t named, uint8_t gammaNamed, uint8_t flags) { ColorSpaceHeader header; @@ -376,8 +324,6 @@ struct ColorSpaceHeader { SkASSERT(gammaNamed <= kNonStandard_SkGammaNamed); header.fGammaNamed = (uint8_t) gammaNamed; - header.fNonLinearBlend = nonLinearBlending ? 1 : 0; - SkASSERT(flags <= kTransferFn_Flag); header.fFlags = flags; return header; @@ -386,8 +332,7 @@ struct ColorSpaceHeader { uint8_t fVersion; // Always zero uint8_t fNamed; // Must be a SkColorSpace::Named uint8_t fGammaNamed; // Must be a SkGammaNamed - uint8_t fNonLinearBlend : 1; // kNonLinearBlending_ColorSpaceFlag - uint8_t fFlags : 7; // Some combination of the flags listed above + uint8_t fFlags; }; size_t SkColorSpace::writeToMemory(void* memory) const { @@ -402,26 +347,19 @@ size_t SkColorSpace::writeToMemory(void* memory) const { if (this == gSRGB) { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack( - k0_Version, SkColorSpace_Base::kSRGB_Named, gammaNamed, false, 0); + k0_Version, SkColorSpace_Base::kSRGB_Named, gammaNamed, 0); } return sizeof(ColorSpaceHeader); } else if (this == gAdobeRGB) { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack( - k0_Version, SkColorSpace_Base::kAdobeRGB_Named, gammaNamed, false, 0); + k0_Version, SkColorSpace_Base::kAdobeRGB_Named, gammaNamed, 0); } return sizeof(ColorSpaceHeader); } else if (this == gSRGBLinear) { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack( - k0_Version, SkColorSpace_Base::kSRGBLinear_Named, gammaNamed, false, 0); - } - return sizeof(ColorSpaceHeader); - } else if (this == gSRGBNonLinearBlending) { - if (memory) { - *((ColorSpaceHeader*)memory) = ColorSpaceHeader::Pack( - k0_Version, SkColorSpace_Base::kSRGB_NonLinearBlending_Named, gammaNamed, - true, 0); + k0_Version, SkColorSpace_Base::kSRGBLinear_Named, gammaNamed, 0); } return sizeof(ColorSpaceHeader); } @@ -434,7 +372,6 @@ size_t SkColorSpace::writeToMemory(void* memory) const { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack(k0_Version, 0, gammaNamed, - thisXYZ->nonLinearBlending(), ColorSpaceHeader::kMatrix_Flag); memory = SkTAddOffset<void>(memory, sizeof(ColorSpaceHeader)); thisXYZ->toXYZD50()->as3x4RowMajorf((float*) memory); @@ -453,7 +390,6 @@ size_t SkColorSpace::writeToMemory(void* memory) const { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack(k0_Version, 0, thisXYZ->fGammaNamed, - thisXYZ->nonLinearBlending(), ColorSpaceHeader::kTransferFn_Flag); memory = SkTAddOffset<void>(memory, sizeof(ColorSpaceHeader)); @@ -483,7 +419,6 @@ size_t SkColorSpace::writeToMemory(void* memory) const { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack(k0_Version, 0, kNonStandard_SkGammaNamed, - as_CSB(this)->nonLinearBlending(), ColorSpaceHeader::kICC_Flag); memory = SkTAddOffset<void>(memory, sizeof(ColorSpaceHeader)); @@ -519,8 +454,6 @@ sk_sp<SkColorSpace> SkColorSpace::Deserialize(const void* data, size_t length) { return SkColorSpace_Base::MakeNamed((SkColorSpace_Base::Named) header.fNamed); } - uint32_t colorSpaceFlags = header.fNonLinearBlend ? kNonLinearBlending_ColorSpaceFlag : 0; - switch ((SkGammaNamed) header.fGammaNamed) { case kSRGB_SkGammaNamed: case k2Dot2Curve_SkGammaNamed: @@ -531,8 +464,7 @@ sk_sp<SkColorSpace> SkColorSpace::Deserialize(const void* data, size_t length) { SkMatrix44 toXYZ(SkMatrix44::kUninitialized_Constructor); toXYZ.set3x4RowMajorf((const float*) data); - return SkColorSpace_Base::MakeRGB((SkGammaNamed) header.fGammaNamed, toXYZ, - colorSpaceFlags); + return SkColorSpace_Base::MakeRGB((SkGammaNamed) header.fGammaNamed, toXYZ); } default: break; @@ -570,22 +502,13 @@ sk_sp<SkColorSpace> SkColorSpace::Deserialize(const void* data, size_t length) { SkMatrix44 toXYZ(SkMatrix44::kUninitialized_Constructor); toXYZ.set3x4RowMajorf((const float*) data); - return SkColorSpace::MakeRGB(transferFn, toXYZ, colorSpaceFlags); + return SkColorSpace::MakeRGB(transferFn, toXYZ); } default: return nullptr; } } -bool SkColorSpace_Base::EqualsIgnoreFlags(SkColorSpace* src, SkColorSpace* dst) { - if (!src || !dst) { - return src == dst; - } - - return SkColorSpace::Equals(as_CSB(src)->makeWithoutFlags().get(), - as_CSB(dst)->makeWithoutFlags().get()); -} - bool SkColorSpace::Equals(const SkColorSpace* src, const SkColorSpace* dst) { if (src == dst) { return true; @@ -614,9 +537,6 @@ bool SkColorSpace::Equals(const SkColorSpace* src, const SkColorSpace* dst) { if (srcXYZ->gammaNamed() != dstXYZ->gammaNamed()) { return false; } - if (srcXYZ->nonLinearBlending() != dstXYZ->nonLinearBlending()) { - return false; - } switch (srcXYZ->gammaNamed()) { case kSRGB_SkGammaNamed: diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp index 317992036d..62cde5c393 100644 --- a/src/core/SkColorSpaceXform.cpp +++ b/src/core/SkColorSpaceXform.cpp @@ -318,7 +318,7 @@ std::unique_ptr<SkColorSpaceXform> SkColorSpaceXform_Base::New(SkColorSpace* src ColorSpaceMatch csm = kNone_ColorSpaceMatch; SkMatrix44 srcToDst(SkMatrix44::kUninitialized_Constructor); - if (SkColorSpace_Base::EqualsIgnoreFlags(srcSpace, dstSpace)) { + if (SkColorSpace::Equals(srcSpace, dstSpace)) { srcToDst.setIdentity(); csm = kFull_ColorSpaceMatch; } else { diff --git a/src/core/SkColorSpace_A2B.cpp b/src/core/SkColorSpace_A2B.cpp index 11df9cc06c..7e097ffa80 100644 --- a/src/core/SkColorSpace_A2B.cpp +++ b/src/core/SkColorSpace_A2B.cpp @@ -9,7 +9,7 @@ SkColorSpace_A2B::SkColorSpace_A2B(ICCTypeFlag iccType, std::vector<Element> elements, PCS pcs, sk_sp<SkData> profileData) - : INHERITED(std::move(profileData), 0) + : INHERITED(std::move(profileData)) , fICCType(iccType) , fElements(std::move(elements)) , fPCS(pcs) diff --git a/src/core/SkColorSpace_Base.h b/src/core/SkColorSpace_Base.h index f9ef360706..61f65a5983 100644 --- a/src/core/SkColorSpace_Base.h +++ b/src/core/SkColorSpace_Base.h @@ -180,16 +180,12 @@ public: */ virtual sk_sp<SkColorSpace> makeSRGBGamma() = 0; - sk_sp<SkColorSpace> makeWithoutFlags(); - sk_sp<SkColorSpace> makeWithNonLinearBlending(); - enum class Type : uint8_t { kXYZ, kA2B }; virtual Type type() const = 0; - bool nonLinearBlending() const { return SkToBool(fFlags & kNonLinearBlending_ColorSpaceFlag); } typedef uint8_t ICCTypeFlag; static constexpr ICCTypeFlag kRGB_ICCTypeFlag = 1 << 0; @@ -198,8 +194,7 @@ public: static sk_sp<SkColorSpace> MakeICC(const void* input, size_t len, ICCTypeFlag type); - static sk_sp<SkColorSpace> MakeRGB(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50, - uint32_t flags); + static sk_sp<SkColorSpace> MakeRGB(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50); enum Named : uint8_t { kSRGB_Named, @@ -210,14 +205,11 @@ public: static sk_sp<SkColorSpace> MakeNamed(Named); - static bool EqualsIgnoreFlags(SkColorSpace* src, SkColorSpace* dst); - protected: - SkColorSpace_Base(sk_sp<SkData> profileData, uint32_t flags); + SkColorSpace_Base(sk_sp<SkData> profileData); private: sk_sp<SkData> fProfileData; - uint32_t fFlags; friend class SkColorSpace; friend class SkColorSpace_XYZ; diff --git a/src/core/SkColorSpace_ICC.cpp b/src/core/SkColorSpace_ICC.cpp index 3e080b273b..9c2082af7f 100644 --- a/src/core/SkColorSpace_ICC.cpp +++ b/src/core/SkColorSpace_ICC.cpp @@ -1410,11 +1410,10 @@ static sk_sp<SkColorSpace> make_xyz(const ICCProfileHeader& header, ICCTag* tags if (kNonStandard_SkGammaNamed == gammaNamed) { return sk_sp<SkColorSpace>(new SkColorSpace_XYZ(gammaNamed, std::move(gammas), - mat, std::move(profileData), - 0 /* flags */)); + mat, std::move(profileData))); } - return SkColorSpace_Base::MakeRGB(gammaNamed, mat, 0 /* flags */); + return SkColorSpace_Base::MakeRGB(gammaNamed, mat); } static sk_sp<SkColorSpace> make_gray(const ICCProfileHeader& header, ICCTag* tags, int tagCount, @@ -1439,7 +1438,7 @@ static sk_sp<SkColorSpace> make_gray(const ICCProfileHeader& header, ICCTag* tag toXYZD50.setFloat(1, 1, kWhitePointD50[1]); toXYZD50.setFloat(2, 2, kWhitePointD50[2]); if (SkGammas::Type::kNamed_Type == type) { - return SkColorSpace_Base::MakeRGB(data.fNamed, toXYZD50, 0 /* flags */); + return SkColorSpace_Base::MakeRGB(data.fNamed, toXYZD50); } size_t allocSize = sizeof(SkGammas); @@ -1456,8 +1455,7 @@ static sk_sp<SkColorSpace> make_gray(const ICCProfileHeader& header, ICCTag* tag return sk_sp<SkColorSpace>(new SkColorSpace_XYZ(kNonStandard_SkGammaNamed, std::move(gammas), - toXYZD50, std::move(profileData), - 0 /* flags */)); + toXYZD50, std::move(profileData))); } static sk_sp<SkColorSpace> make_a2b(SkColorSpace_Base::ICCTypeFlag iccType, diff --git a/src/core/SkColorSpace_XYZ.cpp b/src/core/SkColorSpace_XYZ.cpp index a3377683fc..baf99694b3 100644 --- a/src/core/SkColorSpace_XYZ.cpp +++ b/src/core/SkColorSpace_XYZ.cpp @@ -10,9 +10,8 @@ #include "SkColorSpaceXform_Base.h" #include "SkOpts.h" -SkColorSpace_XYZ::SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50, - uint32_t flags) - : INHERITED(nullptr, flags) +SkColorSpace_XYZ::SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50) + : INHERITED(nullptr) , fGammaNamed(gammaNamed) , fGammas(nullptr) , fToXYZD50(toXYZD50) @@ -21,9 +20,8 @@ SkColorSpace_XYZ::SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& to {} SkColorSpace_XYZ::SkColorSpace_XYZ(SkGammaNamed gammaNamed, sk_sp<SkGammas> gammas, - const SkMatrix44& toXYZD50, sk_sp<SkData> profileData, - uint32_t flags) - : INHERITED(std::move(profileData), flags) + const SkMatrix44& toXYZD50, sk_sp<SkData> profileData) + : INHERITED(std::move(profileData)) , fGammaNamed(gammaNamed) , fGammas(std::move(gammas)) , fToXYZD50(toXYZD50) @@ -88,14 +86,14 @@ sk_sp<SkColorSpace> SkColorSpace_XYZ::makeLinearGamma() { if (this->gammaIsLinear()) { return sk_ref_sp(this); } - return SkColorSpace_Base::MakeRGB(kLinear_SkGammaNamed, fToXYZD50, fFlags); + return SkColorSpace_Base::MakeRGB(kLinear_SkGammaNamed, fToXYZD50); } sk_sp<SkColorSpace> SkColorSpace_XYZ::makeSRGBGamma() { if (this->gammaCloseToSRGB()) { return sk_ref_sp(this); } - return SkColorSpace_Base::MakeRGB(kSRGB_SkGammaNamed, fToXYZD50, fFlags); + return SkColorSpace_Base::MakeRGB(kSRGB_SkGammaNamed, fToXYZD50); } void SkColorSpace_XYZ::toDstGammaTables(const uint8_t* tables[3], sk_sp<SkData>* storage, diff --git a/src/core/SkColorSpace_XYZ.h b/src/core/SkColorSpace_XYZ.h index c1854525a1..d0ce0f813e 100644 --- a/src/core/SkColorSpace_XYZ.h +++ b/src/core/SkColorSpace_XYZ.h @@ -36,10 +36,10 @@ public: void toDstGammaTables(const uint8_t* tables[3], sk_sp<SkData>* storage, int numTables) const; - SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZ, uint32_t flags); + SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZ); SkColorSpace_XYZ(SkGammaNamed gammaNamed, sk_sp<SkGammas> gammas, - const SkMatrix44& toXYZ, sk_sp<SkData> profileData, uint32_t flags); + const SkMatrix44& toXYZ, sk_sp<SkData> profileData); private: const SkGammaNamed fGammaNamed; diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp index fc69bf4c55..a926b43efa 100644 --- a/src/core/SkRasterPipelineBlitter.cpp +++ b/src/core/SkRasterPipelineBlitter.cpp @@ -23,12 +23,10 @@ public: static SkBlitter* Create(const SkPixmap&, const SkPaint&, const SkMatrix& ctm, SkArenaAlloc*); - SkRasterPipelineBlitter(SkPixmap dst, SkBlendMode blend, SkPM4f paintColor, - bool nonLinearBlending) + SkRasterPipelineBlitter(SkPixmap dst, SkBlendMode blend, SkPM4f paintColor) : fDst(dst) , fBlend(blend) , fPaintColor(paintColor) - , fNonLinearBlending(nonLinearBlending) {} void blitH (int x, int y, int w) override; @@ -49,7 +47,6 @@ private: SkBlendMode fBlend; SkPM4f fPaintColor; SkRasterPipeline fShader; - bool fNonLinearBlending; // We may be able to specialize blitH() into a memset. bool fCanMemsetInBlitH = false; @@ -92,12 +89,10 @@ SkBlitter* SkRasterPipelineBlitter::Create(const SkPixmap& dst, const SkPaint& paint, const SkMatrix& ctm, SkArenaAlloc* alloc) { - bool nonLinearBlending = dst.colorSpace() && as_CSB(dst.colorSpace())->nonLinearBlending(); auto blitter = alloc->make<SkRasterPipelineBlitter>( dst, paint.getBlendMode(), - SkPM4f_from_SkColor(paint.getColor(), dst.colorSpace()), - nonLinearBlending); + SkPM4f_from_SkColor(paint.getColor(), dst.colorSpace())); SkBlendMode* blend = &blitter->fBlend; @@ -130,11 +125,6 @@ SkBlitter* SkRasterPipelineBlitter::Create(const SkPixmap& dst, pipeline->append(SkRasterPipeline::constant_color, paintColor); } - // Some people want the rest of the pipeline to operate on sRGB encoded color channels... - if (nonLinearBlending && dst.info().gammaCloseToSRGB()) { - pipeline->append(SkRasterPipeline::to_srgb); - } - if (colorFilter) { if (!colorFilter->appendStages(pipeline, dst.colorSpace(), alloc, is_opaque)) { return nullptr; @@ -191,7 +181,7 @@ void SkRasterPipelineBlitter::append_load_d(SkRasterPipeline* p) const { } void SkRasterPipelineBlitter::append_store(SkRasterPipeline* p) const { - if (!fNonLinearBlending && fDst.info().gammaCloseToSRGB()) { + if (fDst.info().gammaCloseToSRGB()) { p->append(SkRasterPipeline::to_srgb); } if (fDst.info().colorType() == kBGRA_8888_SkColorType) { diff --git a/src/gpu/GrSurfaceContext.cpp b/src/gpu/GrSurfaceContext.cpp index d3225e3225..a28c27a649 100644 --- a/src/gpu/GrSurfaceContext.cpp +++ b/src/gpu/GrSurfaceContext.cpp @@ -28,7 +28,3 @@ GrSurfaceContext::GrSurfaceContext(GrContext* context, #endif , fDrawingManager(drawingMgr) { } - -bool GrSurfaceContext::isGammaCorrect() const { - return fColorSpace && !as_CSB(fColorSpace)->nonLinearBlending(); -} diff --git a/src/gpu/GrSurfaceContext.h b/src/gpu/GrSurfaceContext.h index 109c4a0ffa..88badc1c6e 100644 --- a/src/gpu/GrSurfaceContext.h +++ b/src/gpu/GrSurfaceContext.h @@ -34,7 +34,7 @@ public: SkColorSpace* getColorSpace() const { return fColorSpace.get(); } sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; } - bool isGammaCorrect() const; + bool isGammaCorrect() const { return fColorSpace; } // TODO: these two calls would be way cooler if this object had a GrSurfaceProxy pointer int width() const { return this->asSurfaceProxy()->width(); } diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 27fe79635e..155199812d 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -116,8 +116,7 @@ static const SkPixmap* compute_desc(const GrCaps& caps, const SkPixmap& pixmap, SkColorSpace* colorSpace = pixmap.colorSpace(); if (caps.srgbSupport() && - colorSpace && colorSpace->gammaCloseToSRGB() && !as_CSB(colorSpace)->nonLinearBlending() && - !GrPixelConfigIsSRGB(desc->fConfig)) { + colorSpace && colorSpace->gammaCloseToSRGB() && !GrPixelConfigIsSRGB(desc->fConfig)) { // We were supplied an sRGB-like color space, but we don't have a suitable pixel config. // Convert to 8888 sRGB so we can handle the data correctly. The raster backend doesn't // handle sRGB Index8 -> sRGB 8888 correctly (yet), so lie about both the source and @@ -365,12 +364,10 @@ GrPixelConfig SkImageInfo2GrPixelConfig(const SkImageInfo& info, const GrCaps& c case kARGB_4444_SkColorType: return kRGBA_4444_GrPixelConfig; case kRGBA_8888_SkColorType: - return (caps.srgbSupport() && cs && cs->gammaCloseToSRGB() && - !as_CSB(cs)->nonLinearBlending()) + return (caps.srgbSupport() && cs && cs->gammaCloseToSRGB()) ? kSRGBA_8888_GrPixelConfig : kRGBA_8888_GrPixelConfig; case kBGRA_8888_SkColorType: - return (caps.srgbSupport() && cs && cs->gammaCloseToSRGB() && - !as_CSB(cs)->nonLinearBlending()) + return (caps.srgbSupport() && cs && cs->gammaCloseToSRGB()) ? kSBGRA_8888_GrPixelConfig : kBGRA_8888_GrPixelConfig; case kIndex_8_SkColorType: return kSkia8888_GrPixelConfig; @@ -423,7 +420,7 @@ bool GrPixelConfigToColorType(GrPixelConfig config, SkColorType* ctOut) { } GrPixelConfig GrRenderableConfigForColorSpace(const SkColorSpace* colorSpace) { - if (!colorSpace || as_CSB(colorSpace)->nonLinearBlending()) { + if (!colorSpace) { return kRGBA_8888_GrPixelConfig; } else if (colorSpace->gammaIsLinear()) { return kRGBA_half_GrPixelConfig; diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 566bdc092f..e45bbd7cf3 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -312,7 +312,7 @@ sk_sp<SkImage> SkImage_Base::makeColorSpace(sk_sp<SkColorSpace> target) const { // (1) The color spaces are equal (nullptr is considered to be sRGB). // (2) The color type is kAlpha8. if ((!this->colorSpace() && target->isSRGB()) || - SkColorSpace_Base::EqualsIgnoreFlags(this->colorSpace(), target.get()) || + SkColorSpace::Equals(this->colorSpace(), target.get()) || kAlpha_8_SkColorType == this->onImageInfo().colorType()) { return sk_ref_sp(const_cast<SkImage_Base*>(this)); } diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp index fdbbf82779..cef355e091 100644 --- a/src/image/SkSurface_Gpu.cpp +++ b/src/image/SkSurface_Gpu.cpp @@ -186,15 +186,13 @@ bool SkSurface_Gpu::Valid(GrContext* context, GrPixelConfig config, SkColorSpace return !colorSpace || colorSpace->gammaIsLinear(); case kSRGBA_8888_GrPixelConfig: case kSBGRA_8888_GrPixelConfig: - return context->caps()->srgbSupport() && colorSpace && colorSpace->gammaCloseToSRGB() && - !as_CSB(colorSpace)->nonLinearBlending(); + return context->caps()->srgbSupport() && colorSpace && colorSpace->gammaCloseToSRGB(); case kRGBA_8888_GrPixelConfig: case kBGRA_8888_GrPixelConfig: // If we don't have sRGB support, we may get here with a color space. It still needs // to be sRGB-like (so that the application will work correctly on sRGB devices.) return !colorSpace || - (colorSpace->gammaCloseToSRGB() && (!context->caps()->srgbSupport() || - !as_CSB(colorSpace)->nonLinearBlending())); + (colorSpace->gammaCloseToSRGB() && !context->caps()->srgbSupport()); default: return !colorSpace; } diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index 059fa591fa..2eb7347092 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -311,13 +311,6 @@ DEF_TEST(ColorSpace_Equals, r) { REPORTER_ASSERT(r, !SkColorSpace::Equals(upperRight.get(), adobe.get())); REPORTER_ASSERT(r, !SkColorSpace::Equals(z30.get(), rgb4.get())); REPORTER_ASSERT(r, !SkColorSpace::Equals(srgb.get(), rgb4.get())); - - sk_sp<SkColorSpace> srgbFlag = - SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kSRGB_Gamut, - SkColorSpace::kNonLinearBlending_ColorSpaceFlag); - REPORTER_ASSERT(r, !SkColorSpace::Equals(srgb.get(), srgbFlag.get())); - REPORTER_ASSERT(r, SkColorSpace_Base::EqualsIgnoreFlags(srgb.get(), srgbFlag.get())); } static inline bool matrix_almost_equal(const SkMatrix44& a, const SkMatrix44& b) { @@ -481,8 +474,6 @@ DEF_TEST(ColorSpace_MatrixHash, r) { DEF_TEST(ColorSpace_IsSRGB, r) { sk_sp<SkColorSpace> srgb0 = SkColorSpace::MakeSRGB(); - sk_sp<SkColorSpace> srgb1 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kSRGB_Gamut, SkColorSpace::kNonLinearBlending_ColorSpaceFlag); SkColorSpaceTransferFn fn; fn.fA = 1.0f; @@ -495,6 +486,5 @@ DEF_TEST(ColorSpace_IsSRGB, r) { sk_sp<SkColorSpace> twoDotTwo = SkColorSpace::MakeRGB(fn, SkColorSpace::kSRGB_Gamut); REPORTER_ASSERT(r, srgb0->isSRGB()); - REPORTER_ASSERT(r, srgb1->isSRGB()); REPORTER_ASSERT(r, !twoDotTwo->isSRGB()); } diff --git a/tests/ColorSpaceXformTest.cpp b/tests/ColorSpaceXformTest.cpp index 03c8f494d2..f8a5c8fec4 100644 --- a/tests/ColorSpaceXformTest.cpp +++ b/tests/ColorSpaceXformTest.cpp @@ -23,7 +23,7 @@ public: static std::unique_ptr<SkColorSpaceXform> CreateIdentityXform(const sk_sp<SkGammas>& gammas) { // Logically we can pass any matrix here. For simplicty, pass I(), i.e. D50 XYZ gamut. sk_sp<SkColorSpace> space(new SkColorSpace_XYZ( - kNonStandard_SkGammaNamed, gammas, SkMatrix::I(), nullptr, 0 /* flags */)); + kNonStandard_SkGammaNamed, gammas, SkMatrix::I(), nullptr)); // Use special testing entry point, so we don't skip the xform, even though src == dst. return SlowIdentityXform(static_cast<SkColorSpace_XYZ*>(space.get())); @@ -53,7 +53,7 @@ public: SkColorSpace_Base::kRGB_ICCTypeFlag, std::move(srcElements)); sk_sp<SkColorSpace> dstSpace(new SkColorSpace_XYZ(gammaNamed, gammas, arbitraryMatrix, - nullptr, 0 /* flags */)); + nullptr)); return SkColorSpaceXform::New(static_cast<SkColorSpace_A2B*>(srcSpace.get()), static_cast<SkColorSpace_XYZ*>(dstSpace.get())); diff --git a/tests/ICCTest.cpp b/tests/ICCTest.cpp index e2f845c711..5d541bdc27 100644 --- a/tests/ICCTest.cpp +++ b/tests/ICCTest.cpp @@ -161,7 +161,7 @@ public: static sk_sp<SkICC> MakeICC(sk_sp<SkGammas> gammas) { return MakeICC(sk_sp<SkColorSpace>(new SkColorSpace_XYZ( kNonStandard_SkGammaNamed, std::move(gammas), - SkMatrix44(SkMatrix44::kIdentity_Constructor), nullptr, 0 /* flags */))); + SkMatrix44(SkMatrix44::kIdentity_Constructor), nullptr))); } }; diff --git a/tools/flags/SkCommonFlagsConfig.cpp b/tools/flags/SkCommonFlagsConfig.cpp index b9d6a5d5d7..1e980d20e9 100644 --- a/tools/flags/SkCommonFlagsConfig.cpp +++ b/tools/flags/SkCommonFlagsConfig.cpp @@ -306,14 +306,10 @@ static bool parse_option_gpu_color(const SkString& value, } const bool linearGamma = commands[0].equals("f16"); - const bool nonLinearBlending = commands[0].equals("srgbnl"); SkColorSpace::Gamut gamut = SkColorSpace::kSRGB_Gamut; SkColorSpace::RenderTargetGamma gamma = linearGamma ? SkColorSpace::kLinear_RenderTargetGamma : SkColorSpace::kSRGB_RenderTargetGamma; - SkColorSpace::ColorSpaceFlags flags = - nonLinearBlending ? SkColorSpace::kNonLinearBlending_ColorSpaceFlag - : (SkColorSpace::ColorSpaceFlags) 0; - *outColorSpace = SkColorSpace::MakeRGB(gamma, gamut, flags); + *outColorSpace = SkColorSpace::MakeRGB(gamma, gamut); if (commands.count() == 2) { if (commands[1].equals("srgb")) { @@ -327,7 +323,7 @@ static bool parse_option_gpu_color(const SkString& value, }; SkMatrix44 wideGamutRGBMatrix(SkMatrix44::kUninitialized_Constructor); wideGamutRGBMatrix.set3x3RowMajorf(gWideGamutRGB_toXYZD50); - *outColorSpace = SkColorSpace::MakeRGB(gamma, wideGamutRGBMatrix, flags); + *outColorSpace = SkColorSpace::MakeRGB(gamma, wideGamutRGBMatrix); } else if (commands[1].equals("narrow")) { // NarrowGamut RGB (an artifically smaller than sRGB gamut) SkColorSpacePrimaries primaries ={ @@ -338,7 +334,7 @@ static bool parse_option_gpu_color(const SkString& value, }; SkMatrix44 narrowGamutRGBMatrix(SkMatrix44::kUninitialized_Constructor); primaries.toXYZD50(&narrowGamutRGBMatrix); - *outColorSpace = SkColorSpace::MakeRGB(gamma, narrowGamutRGBMatrix, flags); + *outColorSpace = SkColorSpace::MakeRGB(gamma, narrowGamutRGBMatrix); } else { // Unknown color gamut return false; |