diff options
author | 2017-06-12 13:46:11 -0400 | |
---|---|---|
committer | 2017-06-12 18:09:03 +0000 | |
commit | b6759dd16e130cf844c799c96a20f4845a81e072 (patch) | |
tree | 98ff5426154643edd24d9de49b8526d3e5ae3661 /src | |
parent | 5e819cac114b7286c50c9c3040fca259cd4b06fb (diff) |
Revert "Revert "Disable F16-nullptr sources""
This relands the original change with a modification. We should
not check for non-null pixels because this breaks the Android
hw bitmap use case.
Bug: b/62482405
Change-Id: I081412bb46754d33b69e02e5754f04a082e081ae
Reviewed-on: https://skia-review.googlesource.com/19494
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/image/SkImage_Raster.cpp | 30 | ||||
-rw-r--r-- | src/image/SkSurface_Gpu.cpp | 4 | ||||
-rw-r--r-- | src/image/SkSurface_Raster.cpp | 2 |
3 files changed, 18 insertions, 18 deletions
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index 6fc3296c52..fcdfce2371 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -303,25 +303,25 @@ sk_sp<SkImage> SkImage::MakeFromRaster(const SkPixmap& pmap, RasterReleaseProc p return sk_make_sp<SkImage_Raster>(pmap.info(), std::move(data), pmap.rowBytes(), pmap.ctable()); } -sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, SkCopyPixelsMode cpm) { - bool hasColorTable = false; - if (kIndex_8_SkColorType == bm.colorType()) { - hasColorTable = bm.getColorTable() != nullptr; - } - - if (!SkImage_Raster::ValidArgs(bm.info(), bm.rowBytes(), hasColorTable, nullptr)) { - return nullptr; - } - +sk_sp<SkImage> SkMakeImageFromRasterBitmapPriv(const SkBitmap& bm, SkCopyPixelsMode cpm) { if (kAlways_SkCopyPixelsMode == cpm || (!bm.isImmutable() && kNever_SkCopyPixelsMode != cpm)) { SkPixmap pmap; - if (bm.getPixels() && bm.peekPixels(&pmap)) { + if (bm.peekPixels(&pmap)) { return SkImage::MakeRasterCopy(pmap); + } else { + return sk_sp<SkImage>(); } - } else { - return sk_make_sp<SkImage_Raster>(bm, kNever_SkCopyPixelsMode == cpm); } - return sk_sp<SkImage>(); + + return sk_make_sp<SkImage_Raster>(bm, kNever_SkCopyPixelsMode == cpm); +} + +sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, SkCopyPixelsMode cpm) { + if (!SkImageInfoIsValidAllowNumericalCS(bm.info()) || bm.rowBytes() < bm.info().minRowBytes()) { + return nullptr; + } + + return SkMakeImageFromRasterBitmapPriv(bm, cpm); } sk_sp<SkImage> SkMakeImageInColorSpace(const SkBitmap& bm, sk_sp<SkColorSpace> dstCS, uint32_t id) { @@ -339,7 +339,7 @@ sk_sp<SkImage> SkMakeImageInColorSpace(const SkBitmap& bm, sk_sp<SkColorSpace> d // For the Android use case, this is very likely to be true. if (SkColorSpace::Equals(srcCS.get(), dstCS.get())) { SkASSERT(0 == id || bm.getGenerationID() == id); - return SkMakeImageFromRasterBitmap(bm, kNever_SkCopyPixelsMode); + return SkMakeImageFromRasterBitmapPriv(bm, kNever_SkCopyPixelsMode); } return SkImage::MakeFromGenerator(SkColorSpaceXformImageGenerator::Make( diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp index 992e4c9274..0fa8b650c5 100644 --- a/src/image/SkSurface_Gpu.cpp +++ b/src/image/SkSurface_Gpu.cpp @@ -175,7 +175,7 @@ void SkSurface_Gpu::onPrepareForExternalIO() { bool SkSurface_Gpu::Valid(const SkImageInfo& info) { switch (info.colorType()) { case kRGBA_F16_SkColorType: - return !info.colorSpace() || info.colorSpace()->gammaIsLinear(); + return info.colorSpace() && info.colorSpace()->gammaIsLinear(); case kRGBA_8888_SkColorType: case kBGRA_8888_SkColorType: return !info.colorSpace() || info.colorSpace()->gammaCloseToSRGB(); @@ -187,7 +187,7 @@ bool SkSurface_Gpu::Valid(const SkImageInfo& info) { bool SkSurface_Gpu::Valid(GrContext* context, GrPixelConfig config, SkColorSpace* colorSpace) { switch (config) { case kRGBA_half_GrPixelConfig: - return !colorSpace || colorSpace->gammaIsLinear(); + return colorSpace && colorSpace->gammaIsLinear(); case kSRGBA_8888_GrPixelConfig: case kSBGRA_8888_GrPixelConfig: return context->caps()->srgbSupport() && colorSpace && colorSpace->gammaCloseToSRGB(); diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp index 1ee3d7ea61..688e23411f 100644 --- a/src/image/SkSurface_Raster.cpp +++ b/src/image/SkSurface_Raster.cpp @@ -63,7 +63,7 @@ bool SkSurfaceValidateRasterInfo(const SkImageInfo& info, size_t rowBytes) { shift = 2; break; case kRGBA_F16_SkColorType: - if (info.colorSpace() && !info.colorSpace()->gammaIsLinear()) { + if (!info.colorSpace() || !info.colorSpace()->gammaIsLinear()) { return false; } shift = 3; |