Consistently fail readPixels when rowbytes not a multiple of bpp
Previously this would report success but may have rounded the
rowbytes down to a multiple of bpp prior to writing the dst.
On GPU it could trigger an assert in a debug build.
Bug: chromium:1163061
Change-Id: I19709f4cdb71139732998a4dd2e14476099f0ba8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/363782
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index 6e2fbe5..dce7230 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -473,8 +473,8 @@
}
std::vector<float> rgba(4*fColorCount); // TODO: SkSTArray?
- SkConvertPixels(dst, rgba.data(), dst.minRowBytes(),
- src, fOrigColors4f, src.minRowBytes());
+ SkAssertResult(SkConvertPixels(dst, rgba.data(), dst.minRowBytes(),
+ src, fOrigColors4f, src.minRowBytes()));
// Transform our colors into a scale factor f and bias b such that for
// any t between stops i and i+1, the color we want is mad(t, f[i], b[i]).
@@ -637,8 +637,10 @@
auto info = SkImageInfo::Make(colorCount,1, kRGBA_F32_SkColorType, kUnpremul_SkAlphaType);
- SkConvertPixels(info.makeColorSpace(sk_ref_sp(dst)), fStorage.begin(), info.minRowBytes(),
- info.makeColorSpace(sk_ref_sp(src)), fColors , info.minRowBytes());
+ auto dstInfo = info.makeColorSpace(sk_ref_sp(dst));
+ auto srcInfo = info.makeColorSpace(sk_ref_sp(src));
+ SkAssertResult(SkConvertPixels(dstInfo, fStorage.begin(), info.minRowBytes(),
+ srcInfo, fColors , info.minRowBytes()));
fColors = fStorage.begin();
}