From 32b5e70178acda2ce1548cce1740841e7d30344a Mon Sep 17 00:00:00 2001 From: brianosman Date: Thu, 13 Oct 2016 06:44:23 -0700 Subject: [PATCH] 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 --- src/image/SkImage_Gpu.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index b769e0a684..af16681933 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -492,7 +492,7 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox 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 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox 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 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox 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 @@ size_t SkImage::getDeferredTextureImageData(const GrContextThreadSafeProxy& prox // 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);