Preserve color space of images in deferred texture API
For raster images, this already worked (we were peeking the
pixmap's info). But for generated images, we discarded
format and color space information. Fixes an error with the
deferred GMs in sRGB modes, and also should help the Chrome
color correctness work.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2416453004
Review-Url: https://codereview.chromium.org/2416453004
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index b769e0a..af16681 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -492,7 +492,7 @@
if (!data && !this->peekPixels(nullptr)) {
return 0;
}
- info = SkImageInfo::MakeN32(scaledSize.width(), scaledSize.height(), this->alphaType());
+ info = as_IB(this)->onImageInfo().makeWH(scaledSize.width(), scaledSize.height());
pixelSize = SkAlign8(SkAutoPixmapStorage::AllocSize(info, nullptr));
if (fillMode) {
pixmap.alloc(info);
@@ -509,7 +509,6 @@
SkASSERT(!pixmap.ctable());
}
}
- SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
int mipMapLevelCount = 1;
if (useMipMaps) {
// SkMipMap only deals with the mipmap levels it generates, which does
@@ -528,7 +527,7 @@
currentMipMapLevelIndex--) {
SkISize mipSize = SkMipMap::ComputeLevelSize(scaledSize.width(), scaledSize.height(),
currentMipMapLevelIndex);
- SkImageInfo mipInfo = SkImageInfo::MakeN32(mipSize.fWidth, mipSize.fHeight, at);
+ SkImageInfo mipInfo = info.makeWH(mipSize.fWidth, mipSize.fHeight);
pixelSize += SkAlign8(SkAutoPixmapStorage::AllocSize(mipInfo, nullptr));
}
}
@@ -614,10 +613,6 @@
// range 0-(x-1).
for (int generatedMipLevelIndex = 0; generatedMipLevelIndex < mipMapLevelCount - 1;
generatedMipLevelIndex++) {
- SkISize mipSize = SkMipMap::ComputeLevelSize(scaledSize.width(), scaledSize.height(),
- generatedMipLevelIndex);
-
- SkImageInfo mipInfo = SkImageInfo::MakeN32(mipSize.fWidth, mipSize.fHeight, at);
SkMipMap::Level mipLevel;
mipmaps->getLevel(generatedMipLevelIndex, &mipLevel);