aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-06-12 13:46:11 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-12 18:09:03 +0000
commitb6759dd16e130cf844c799c96a20f4845a81e072 (patch)
tree98ff5426154643edd24d9de49b8526d3e5ae3661 /src
parent5e819cac114b7286c50c9c3040fca259cd4b06fb (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.cpp30
-rw-r--r--src/image/SkSurface_Gpu.cpp4
-rw-r--r--src/image/SkSurface_Raster.cpp2
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;