update callers to not use SkColorProfileType
Requires https://codereview.chromium.org/2087833002/ to land first.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2086583002
Review-Url: https://codereview.chromium.org/2086583002
diff --git a/bench/SkLinearBitmapPipelineBench.cpp b/bench/SkLinearBitmapPipelineBench.cpp
index 476d015..ad5cf61 100644
--- a/bench/SkLinearBitmapPipelineBench.cpp
+++ b/bench/SkLinearBitmapPipelineBench.cpp
@@ -17,12 +17,12 @@
struct CommonBitmapFPBenchmark : public Benchmark {
CommonBitmapFPBenchmark(
SkISize srcSize,
- SkColorProfileType colorProfile,
+ bool isSRGB,
SkMatrix m,
bool useBilerp,
SkShader::TileMode xTile,
SkShader::TileMode yTile)
- : fColorProfile(colorProfile)
+ : fIsSRGB(isSRGB)
, fM{m}
, fUseBilerp{useBilerp}
, fXTile{xTile}
@@ -89,7 +89,8 @@
bool trash = fM.invert(&fInvert);
sk_ignore_unused_variable(trash);
- fInfo = SkImageInfo::MakeN32Premul(width, height, fColorProfile);
+ fInfo = SkImageInfo::MakeN32Premul(width, height, fIsSRGB ?
+ SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named) : nullptr);
}
bool isSuitableFor(Backend backend) override {
@@ -100,7 +101,7 @@
SkString fName;
SkISize fSrcSize;
- SkColorProfileType fColorProfile;
+ bool fIsSRGB;
SkMatrix fM;
SkMatrix fInvert;
bool fUseBilerp;
@@ -113,16 +114,16 @@
struct SkBitmapFPGeneral final : public CommonBitmapFPBenchmark {
SkBitmapFPGeneral(
SkISize srcSize,
- SkColorProfileType colorProfile,
+ bool isSRGB,
SkMatrix m,
bool useBilerp,
SkShader::TileMode xTile,
SkShader::TileMode yTile)
- : CommonBitmapFPBenchmark(srcSize, colorProfile, m, useBilerp, xTile, yTile) { }
+ : CommonBitmapFPBenchmark(srcSize, isSRGB, m, useBilerp, xTile, yTile) { }
SkString BaseName() override {
SkString name;
- if (fInfo.isSRGB()) {
+ if (fInfo.gammaCloseToSRGB()) {
name.set("sRGB");
} else {
name.set("Linr");
@@ -159,12 +160,12 @@
struct SkBitmapFPOrigShader : public CommonBitmapFPBenchmark {
SkBitmapFPOrigShader(
SkISize srcSize,
- SkColorProfileType colorProfile,
+ bool isSRGB,
SkMatrix m,
bool useBilerp,
SkShader::TileMode xTile,
SkShader::TileMode yTile)
- : CommonBitmapFPBenchmark(srcSize, colorProfile, m, useBilerp, xTile, yTile) { }
+ : CommonBitmapFPBenchmark(srcSize, isSRGB, m, useBilerp, xTile, yTile) { }
SkString BaseName() override {
SkString name{"Orig"};
@@ -212,80 +213,82 @@
sk_sp<SkImage> fImage;
};
+const bool gSRGB = true;
+const bool gLinearRGB = false;
static SkISize srcSize = SkISize::Make(120, 100);
static SkMatrix mI = SkMatrix::I();
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mI, false,
+ srcSize, gSRGB, mI, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mI, false,
+ srcSize, gLinearRGB, mI, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mI, false,
+ srcSize, gLinearRGB, mI, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mI, true,
+ srcSize, gSRGB, mI, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mI, true,
+ srcSize, gLinearRGB, mI, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mI, true,
+ srcSize, gLinearRGB, mI, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
static SkMatrix mS = SkMatrix::MakeScale(2.7f, 2.7f);
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mS, false,
+ srcSize, gSRGB, mS, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mS, false,
+ srcSize, gLinearRGB, mS, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mS, false,
+ srcSize, gLinearRGB, mS, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mS, true,
+ srcSize, gSRGB, mS, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mS, true,
+ srcSize, gLinearRGB, mS, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mS, true,
+ srcSize, gLinearRGB, mS, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
// Repeat
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mS, false,
+ srcSize, gSRGB, mS, false,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mS, false,
+ srcSize, gLinearRGB, mS, false,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mS, false,
+ srcSize, gLinearRGB, mS, false,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mS, true,
+ srcSize, gSRGB, mS, true,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mS, true,
+ srcSize, gLinearRGB, mS, true,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mS, true,
+ srcSize, gLinearRGB, mS, true,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
static SkMatrix rotate(SkScalar r) {
@@ -296,50 +299,50 @@
static SkMatrix mR = rotate(30);
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mR, false,
+ srcSize, gSRGB, mR, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mR, false,
+ srcSize, gLinearRGB, mR, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mR, false,
+ srcSize, gLinearRGB, mR, false,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mR, true,
+ srcSize, gSRGB, mR, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mR, true,
+ srcSize, gLinearRGB, mR, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mR, true,
+ srcSize, gLinearRGB, mR, true,
SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);)
// Repeat
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mR, false,
+ srcSize, gSRGB, mR, false,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mR, false,
+ srcSize, gLinearRGB, mR, false,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mR, false,
+ srcSize, gLinearRGB, mR, false,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kSRGB_SkColorProfileType, mR, true,
+ srcSize, gSRGB, mR, true,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPGeneral(
- srcSize, kLinear_SkColorProfileType, mR, true,
+ srcSize, gLinearRGB, mR, true,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
DEF_BENCH(return new SkBitmapFPOrigShader(
- srcSize, kLinear_SkColorProfileType, mR, true,
+ srcSize, gLinearRGB, mR, true,
SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);)
diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h
index ea3e672..4b55c47 100644
--- a/include/core/SkColorSpace.h
+++ b/include/core/SkColorSpace.h
@@ -76,7 +76,6 @@
}
protected:
-
SkColorSpace(GammaNamed gammaNamed, const SkMatrix44& toXYZD50, Named named);
friend Named sk_deduce_named_from_colorspace(SkColorSpace*);
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index ba4f850..b45ee38 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -13,8 +13,6 @@
#include "SkRect.h"
#include "SkSize.h"
-#define SK_SUPPORT_LEGACY_COLORPROFILETYPE
-
class SkReadBuffer;
class SkWriteBuffer;
@@ -220,8 +218,8 @@
/**
* Sets colortype to the native ARGB32 type, and the alphatype to premul.
*/
- static SkImageInfo MakeN32Premul(int width, int height) {
- return Make(width, height, kN32_SkColorType, kPremul_SkAlphaType, nullptr);
+ static SkImageInfo MakeN32Premul(int width, int height, sk_sp<SkColorSpace> cs = nullptr) {
+ return Make(width, height, kN32_SkColorType, kPremul_SkAlphaType, cs);
}
static SkImageInfo MakeN32Premul(const SkISize& size) {
diff --git a/src/core/SkBlitter_PM4f.cpp b/src/core/SkBlitter_PM4f.cpp
index bf332c5..455a97b 100644
--- a/src/core/SkBlitter_PM4f.cpp
+++ b/src/core/SkBlitter_PM4f.cpp
@@ -354,7 +354,7 @@
if (is_opaque(paint, shaderContext)) {
fFlags |= SkXfermode::kSrcIsOpaque_D32Flag;
}
- if (info.isSRGB()) {
+ if (info.gammaCloseToSRGB()) {
fFlags |= SkXfermode::kDstIsSRGB_D32Flag;
}
fProc1 = SkXfermode::GetD32Proc(fXfer, fFlags | SkXfermode::kSrcIsSingle_D32Flag);
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp
index 90e38f4..950f187 100644
--- a/src/core/SkBlitter_Sprite.cpp
+++ b/src/core/SkBlitter_Sprite.cpp
@@ -59,7 +59,7 @@
if (dst.colorType() != src.colorType()) {
return false;
}
- if (dst.info().profileType() != src.info().profileType()) {
+ if (dst.info().gammaCloseToSRGB() != src.info().gammaCloseToSRGB()) {
return false;
}
if (paint.getMaskFilter() || paint.getColorFilter() || paint.getImageFilter()) {
@@ -81,8 +81,7 @@
// At this point memcpy can't be used. The following check for using SrcOver.
- if (dst.colorType() != kN32_SkColorType
- || dst.info().profileType() != kSRGB_SkColorProfileType) {
+ if (dst.colorType() != kN32_SkColorType || !dst.info().gammaCloseToSRGB()) {
return false;
}
@@ -109,7 +108,7 @@
void blitRect(int x, int y, int width, int height) override {
SkASSERT(fDst.colorType() == fSource.colorType());
- SkASSERT(fDst.info().profileType() == fSource.info().profileType());
+ SkASSERT(fDst.info().gammaCloseToSRGB() == fSource.info().gammaCloseToSRGB());
SkASSERT(width > 0 && height > 0);
if (fUseMemcpy) {
@@ -175,7 +174,7 @@
blitter = SkSpriteBlitter::ChooseD16(source, paint, allocator);
break;
case kN32_SkColorType:
- if (dst.info().isSRGB()) {
+ if (dst.info().gammaCloseToSRGB()) {
blitter = SkSpriteBlitter::ChooseS32(source, paint, allocator);
} else {
blitter = SkSpriteBlitter::ChooseL32(source, paint, allocator);
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 1a5c4c4..0313ed1 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -2283,7 +2283,7 @@
drawAsSprite = false;
} else{
// Until imagefilters are updated, they cannot handle any src type but N32...
- if (bitmap.info().colorType() != kN32_SkColorType || bitmap.info().isSRGB()) {
+ if (bitmap.info().colorType() != kN32_SkColorType || bitmap.info().gammaCloseToSRGB()) {
drawAsSprite = false;
}
}
@@ -2368,7 +2368,7 @@
*paint);
if (drawAsSprite && paint->getImageFilter()) {
// Until imagefilters are updated, they cannot handle any src type but N32...
- if (bitmap.info().colorType() != kN32_SkColorType || bitmap.info().isSRGB()) {
+ if (bitmap.info().colorType() != kN32_SkColorType || bitmap.info().gammaCloseToSRGB()) {
drawAsSprite = false;
}
}
diff --git a/src/core/SkColorShader.cpp b/src/core/SkColorShader.cpp
index 83fd239..250a367 100644
--- a/src/core/SkColorShader.cpp
+++ b/src/core/SkColorShader.cpp
@@ -286,7 +286,7 @@
}
switch (info.colorType()) {
case kN32_SkColorType:
- if (info.isSRGB()) {
+ if (info.gammaCloseToSRGB()) {
flags |= SkXfermode::kDstIsSRGB_D32Flag;
}
state->fStorage[0] = (void*)SkXfermode::GetD32Proc(state->fXfer, flags);
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 9a0509c..e7bacab 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -1561,7 +1561,8 @@
uint32_t SkDraw::scalerContextFlags() const {
uint32_t flags = SkPaint::kBoostContrast_ScalerContextFlag;
- if (fDevice->imageInfo().isLinear()) {
+ // TODO: how should we handle non-srgb, non-linear gamma?
+ if (!fDevice->imageInfo().gammaCloseToSRGB()) {
flags |= SkPaint::kFakeGamma_ScalerContextFlag;
}
return flags;
diff --git a/src/core/SkLinearBitmapPipeline.cpp b/src/core/SkLinearBitmapPipeline.cpp
index 4f6985b..3a86062 100644
--- a/src/core/SkLinearBitmapPipeline.cpp
+++ b/src/core/SkLinearBitmapPipeline.cpp
@@ -567,22 +567,22 @@
using Blender = SkLinearBitmapPipeline::BlendProcessorInterface;
-template <SkColorType colorType, template <SkColorType, SkColorProfileType, typename> class Sampler>
+template <SkColorType colorType, template <SkColorType, SkGammaType, typename> class Sampler>
static void choose_specific_sampler(
Blender* next,
const SkPixmap& srcPixmap,
SkLinearBitmapPipeline::SampleStage* sampleStage)
{
- if (srcPixmap.info().profileType() == kSRGB_SkColorProfileType) {
- using S = Sampler<colorType, kSRGB_SkColorProfileType, Blender>;
+ if (srcPixmap.info().gammaCloseToSRGB()) {
+ using S = Sampler<colorType, kSRGB_SkGammaType, Blender>;
sampleStage->initStage<S>(next, srcPixmap);
} else {
- using S = Sampler<colorType, kLinear_SkColorProfileType, Blender>;
+ using S = Sampler<colorType, kLinear_SkGammaType, Blender>;
sampleStage->initStage<S>(next, srcPixmap);
}
}
-template<template <SkColorType, SkColorProfileType, typename> class Sampler>
+template<template <SkColorType, SkGammaType, typename> class Sampler>
static SkLinearBitmapPipeline::SampleProcessorInterface* choose_pixel_sampler_base(
Blender* next,
const SkPixmap& srcPixmap,
@@ -592,7 +592,7 @@
const SkImageInfo& imageInfo = srcPixmap.info();
switch (imageInfo.colorType()) {
case kAlpha_8_SkColorType: {
- using S = Sampler<kAlpha_8_SkColorType, kLinear_SkColorProfileType, Blender>;
+ using S = Sampler<kAlpha_8_SkColorType, kLinear_SkGammaType, Blender>;
sampleStage->initStage<S>(next, srcPixmap, A8TintColor);
}
break;
@@ -615,7 +615,7 @@
choose_specific_sampler<kGray_8_SkColorType, Sampler>(next, srcPixmap, sampleStage);
break;
case kRGBA_F16_SkColorType: {
- using S = Sampler<kRGBA_F16_SkColorType, kLinear_SkColorProfileType, Blender>;
+ using S = Sampler<kRGBA_F16_SkColorType, kLinear_SkGammaType, Blender>;
sampleStage->initStage<S>(next, srcPixmap);
}
break;
@@ -772,8 +772,9 @@
if (srcPixmap.info().colorType() != kRGBA_8888_SkColorType
|| dstInfo.colorType() != kRGBA_8888_SkColorType) { return false; }
- if (srcPixmap.info().profileType() != kSRGB_SkColorProfileType
- || dstInfo.profileType() != kSRGB_SkColorProfileType) { return false; }
+ if (!srcPixmap.info().gammaCloseToSRGB() || !dstInfo.gammaCloseToSRGB()) {
+ return false;
+ }
if (xferMode != SkXfermode::kSrc_Mode && xferMode != SkXfermode::kSrcOver_Mode) {
return false;
diff --git a/src/core/SkLinearBitmapPipeline.h b/src/core/SkLinearBitmapPipeline.h
index dce537a..452ab8e 100644
--- a/src/core/SkLinearBitmapPipeline.h
+++ b/src/core/SkLinearBitmapPipeline.h
@@ -15,6 +15,11 @@
class SkEmbeddableLinearPipeline;
+enum SkGammaType {
+ kLinear_SkGammaType,
+ kSRGB_SkGammaType,
+};
+
///////////////////////////////////////////////////////////////////////////////////////////////////
// SkLinearBitmapPipeline - encapsulates all the machinery for doing floating point pixel
// processing in a linear color space.
diff --git a/src/core/SkLinearBitmapPipeline_sample.h b/src/core/SkLinearBitmapPipeline_sample.h
index 5184a41..56f4322 100644
--- a/src/core/SkLinearBitmapPipeline_sample.h
+++ b/src/core/SkLinearBitmapPipeline_sample.h
@@ -55,14 +55,14 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
// PixelGetter is the lowest level interface to the source data. There is a PixelGetter for each
// of the different SkColorTypes.
-template <SkColorType colorType, SkColorProfileType colorProfile> class PixelGetter;
+template <SkColorType, SkGammaType> class PixelGetter;
// Alpha handling:
// The alpha from the paint (tintColor) is used in the blend part of the pipeline to modulate
// the entire bitmap. So, the tint color is given an alpha of 1.0 so that the later alpha can
// modulate this color later.
template <>
-class PixelGetter<kAlpha_8_SkColorType, kLinear_SkColorProfileType> {
+class PixelGetter<kAlpha_8_SkColorType, kLinear_SkGammaType> {
public:
using Element = uint8_t;
PixelGetter(const SkPixmap& srcPixmap, SkColor tintColor)
@@ -76,63 +76,63 @@
const Sk4f fTintColor;
};
-template <SkColorProfileType colorProfile>
-class PixelGetter<kRGB_565_SkColorType, colorProfile> {
+template <SkGammaType gammaType>
+class PixelGetter<kRGB_565_SkColorType, gammaType> {
public:
using Element = uint16_t;
PixelGetter(const SkPixmap& srcPixmap) { }
Sk4f getPixelAt(const uint16_t* src) {
SkPMColor pixel = SkPixel16ToPixel32(*src);
- return colorProfile == kSRGB_SkColorProfileType
+ return gammaType == kSRGB_SkGammaType
? Sk4f_fromS32(pixel)
: Sk4f_fromL32(pixel);
}
};
-template <SkColorProfileType colorProfile>
-class PixelGetter<kARGB_4444_SkColorType, colorProfile> {
+template <SkGammaType gammaType>
+class PixelGetter<kARGB_4444_SkColorType, gammaType> {
public:
using Element = uint16_t;
PixelGetter(const SkPixmap& srcPixmap) { }
Sk4f getPixelAt(const uint16_t* src) {
SkPMColor pixel = SkPixel4444ToPixel32(*src);
- return colorProfile == kSRGB_SkColorProfileType
+ return gammaType == kSRGB_SkGammaType
? Sk4f_fromS32(pixel)
: Sk4f_fromL32(pixel);
}
};
-template <SkColorProfileType colorProfile>
-class PixelGetter<kRGBA_8888_SkColorType, colorProfile> {
+template <SkGammaType gammaType>
+class PixelGetter<kRGBA_8888_SkColorType, gammaType> {
public:
using Element = uint32_t;
PixelGetter(const SkPixmap& srcPixmap) { }
Sk4f getPixelAt(const uint32_t* src) {
- return colorProfile == kSRGB_SkColorProfileType
+ return gammaType == kSRGB_SkGammaType
? Sk4f_fromS32(*src)
: Sk4f_fromL32(*src);
}
};
-template <SkColorProfileType colorProfile>
-class PixelGetter<kBGRA_8888_SkColorType, colorProfile> {
+template <SkGammaType gammaType>
+class PixelGetter<kBGRA_8888_SkColorType, gammaType> {
public:
using Element = uint32_t;
PixelGetter(const SkPixmap& srcPixmap) { }
Sk4f getPixelAt(const uint32_t* src) {
- Sk4f pixel = colorProfile == kSRGB_SkColorProfileType
+ Sk4f pixel = gammaType == kSRGB_SkGammaType
? Sk4f_fromS32(*src)
: Sk4f_fromL32(*src);
return swizzle_rb(pixel);
}
};
-template <SkColorProfileType colorProfile>
-class PixelGetter<kIndex_8_SkColorType, colorProfile> {
+template <SkGammaType gammaType>
+class PixelGetter<kIndex_8_SkColorType, gammaType> {
public:
using Element = uint8_t;
PixelGetter(const SkPixmap& srcPixmap) {
@@ -166,7 +166,7 @@
float invAlpha = 1.0f / alpha;
Sk4f normalize = {invAlpha, invAlpha, invAlpha, 1.0f / 255.0f};
pixel = pixel * normalize;
- if (colorProfile == kSRGB_SkColorProfileType) {
+ if (gammaType == kSRGB_SkGammaType) {
pixel = linear_to_srgb(pixel);
}
return pixel;
@@ -178,8 +178,8 @@
Sk4f* fColorTable;
};
-template <SkColorProfileType colorProfile>
-class PixelGetter<kGray_8_SkColorType, colorProfile> {
+template <SkGammaType gammaType>
+class PixelGetter<kGray_8_SkColorType, gammaType> {
public:
using Element = uint8_t;
PixelGetter(const SkPixmap& srcPixmap) { }
@@ -187,14 +187,14 @@
Sk4f getPixelAt(const uint8_t* src) {
float gray = *src * (1.0f/255.0f);
Sk4f pixel = Sk4f{gray, gray, gray, 1.0f};
- return colorProfile == kSRGB_SkColorProfileType
+ return gammaType == kSRGB_SkGammaType
? srgb_to_linear(pixel)
: pixel;
}
};
template <>
-class PixelGetter<kRGBA_F16_SkColorType, kLinear_SkColorProfileType> {
+class PixelGetter<kRGBA_F16_SkColorType, kLinear_SkGammaType> {
public:
using Element = uint64_t;
PixelGetter(const SkPixmap& srcPixmap) { }
@@ -206,9 +206,9 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
// PixelAccessor handles all the same plumbing for all the PixelGetters.
-template <SkColorType colorType, SkColorProfileType colorProfile>
+template <SkColorType colorType, SkGammaType gammaType>
class PixelAccessor {
- using Element = typename PixelGetter<colorType, colorProfile>::Element;
+ using Element = typename PixelGetter<colorType, gammaType>::Element;
public:
template <typename... Args>
PixelAccessor(const SkPixmap& srcPixmap, Args&&... args)
@@ -263,7 +263,7 @@
private:
const Element* const fSrc;
const Sk4i fWidth;
- PixelGetter<colorType, colorProfile> fGetter;
+ PixelGetter<colorType, gammaType> fGetter;
};
// We're moving through source space at a rate of 1 source pixel per 1 dst pixel.
@@ -308,7 +308,7 @@
}
// NearestNeighborSampler - use nearest neighbor filtering to create runs of destination pixels.
-template<SkColorType colorType, SkColorProfileType colorProfile, typename Next>
+template<SkColorType colorType, SkGammaType gammaType, typename Next>
class NearestNeighborSampler : public SkLinearBitmapPipeline::SampleProcessorInterface {
public:
template<typename... Args>
@@ -424,13 +424,13 @@
span_fallback(span, this);
}
- Next* const fNext;
- PixelAccessor<colorType, colorProfile> fStrategy;
+ Next* const fNext;
+ PixelAccessor<colorType, gammaType> fStrategy;
};
// -- BilerpSampler --------------------------------------------------------------------------------
// BilerpSampler - use a bilerp filter to create runs of destination pixels.
-template<SkColorType colorType, SkColorProfileType colorProfile, typename Next>
+template<SkColorType colorType, SkGammaType gammaType, typename Next>
class BilerpSampler : public SkLinearBitmapPipeline::SampleProcessorInterface {
public:
template<typename... Args>
@@ -801,8 +801,8 @@
}
}
- Next* const fNext;
- PixelAccessor<colorType, colorProfile> fStrategy;
+ Next* const fNext;
+ PixelAccessor<colorType, gammaType> fStrategy;
};
} // namespace
diff --git a/src/core/SkMipMap.cpp b/src/core/SkMipMap.cpp
index b9302cd..f469762 100644
--- a/src/core/SkMipMap.cpp
+++ b/src/core/SkMipMap.cpp
@@ -304,14 +304,6 @@
return sk_64_asS32(size);
}
-static bool treat_like_srgb(const SkImageInfo& info) {
- if (info.colorSpace()) {
- return info.colorSpace()->gammaCloseToSRGB();
- } else {
- return kSRGB_SkColorProfileType == info.profileType();
- }
-}
-
SkMipMap* SkMipMap::Build(const SkPixmap& src, SkSourceGammaTreatment treatment,
SkDiscardableFactoryProc fact) {
typedef void FilterProc(void*, const void* srcPtr, size_t srcRB, int count);
@@ -328,7 +320,7 @@
const SkColorType ct = src.colorType();
const SkAlphaType at = src.alphaType();
const bool srgbGamma = (SkSourceGammaTreatment::kRespect == treatment)
- && treat_like_srgb(src.info());
+ && src.info().gammaCloseToSRGB();
switch (ct) {
case kRGBA_8888_SkColorType:
diff --git a/src/core/SkSpanProcs.cpp b/src/core/SkSpanProcs.cpp
index 385bd6b..dddf741 100644
--- a/src/core/SkSpanProcs.cpp
+++ b/src/core/SkSpanProcs.cpp
@@ -49,7 +49,7 @@
SkLoadSpanProc SkLoadSpanProc_Choose(const SkImageInfo& info) {
switch (info.colorType()) {
case kN32_SkColorType:
- return info.isSRGB() ? load_s32 : load_l32;
+ return info.gammaCloseToSRGB() ? load_s32 : load_l32;
case kRGBA_F16_SkColorType:
return load_f16;
default:
diff --git a/src/effects/gradients/Sk4fLinearGradient.cpp b/src/effects/gradients/Sk4fLinearGradient.cpp
index ca0ca6d..d22dbff 100644
--- a/src/effects/gradients/Sk4fLinearGradient.cpp
+++ b/src/effects/gradients/Sk4fLinearGradient.cpp
@@ -448,7 +448,7 @@
const LinearGradient4fContext* ctx =
static_cast<const LinearGradient4fContext*>(state->fCtx);
- if (dst.info().isLinear()) {
+ if (!dst.info().gammaCloseToSRGB()) {
if (ctx->fColorsArePremul) {
ctx->shadePremulSpan<DstType::L32, ApplyPremul::False>(
x, y, dst.writable_addr32(x, y), count);
diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp
index b06dc64..4b39ab0 100644
--- a/tests/ColorSpaceTest.cpp
+++ b/tests/ColorSpaceTest.cpp
@@ -163,6 +163,5 @@
}
SkImageInfo info = SkImageInfo::MakeS32(10, 10, kPremul_SkAlphaType);
- REPORTER_ASSERT(r, kSRGB_SkColorProfileType == info.profileType());
- REPORTER_ASSERT(r, SkColorSpace::kSRGB_GammaNamed == info.colorSpace()->gammaNamed());
+ REPORTER_ASSERT(r, info.gammaCloseToSRGB());
}
diff --git a/tests/ImageIsOpaqueTest.cpp b/tests/ImageIsOpaqueTest.cpp
index 51229bf..42c9f99 100644
--- a/tests/ImageIsOpaqueTest.cpp
+++ b/tests/ImageIsOpaqueTest.cpp
@@ -26,8 +26,7 @@
SkReadBuffer rb(storage, wb.bytesWritten());
// pick a noisy byte pattern, so we ensure that unflatten sets all of our fields
- SkImageInfo info2 = SkImageInfo::Make(0xB8, 0xB8, (SkColorType) 0xB8, (SkAlphaType) 0xB8,
- (SkColorProfileType) 0xB8);
+ SkImageInfo info2 = SkImageInfo::Make(0xB8, 0xB8, (SkColorType) 0xB8, (SkAlphaType) 0xB8);
info2.unflatten(rb);
REPORTER_ASSERT(reporter, rb.offset() == wb.bytesWritten());
@@ -38,13 +37,19 @@
}
DEF_TEST(ImageInfo_flattening, reporter) {
+ sk_sp<SkColorSpace> spaces[] = {
+ nullptr,
+ SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named),
+ SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named),
+ };
+
for (int ct = 0; ct <= kLastEnum_SkColorType; ++ct) {
for (int at = 0; at <= kLastEnum_SkAlphaType; ++at) {
- for (int pt = 0; pt <= kLastEnum_SkColorProfileType; ++pt) {
+ for (auto& cs : spaces) {
SkImageInfo info = SkImageInfo::Make(100, 200,
static_cast<SkColorType>(ct),
static_cast<SkAlphaType>(at),
- static_cast<SkColorProfileType>(pt));
+ cs);
test_flatten(reporter, info);
}
}