Use SkSurfaceValidateRasterInfo in some lesser-used canvas factories
The previous version would reject valid configs (like non-N32 8888).
This changes the results of some unit tests:
- Creating a zero-sized canvas via MakeRasterDirect now fails (like
it would if you tried to create a zero-sized surface).
- The picture image generator can now produce BGRA and RGBA results,
regardless of N32, and can produce unpremul.
Bug: skia:
Change-Id: Ifd9fe98adf56748f73eaea01118c928b0a13606b
Reviewed-on: https://skia-review.googlesource.com/c/161120
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 380195f..701a8a1 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -2802,34 +2802,9 @@
///////////////////////////////////////////////////////////////////////////////
-// TODO: This still disagrees with SkSurfaceValidateRasterInfo
-static bool supported_for_raster_canvas(const SkImageInfo& info) {
- switch (info.alphaType()) {
- case kPremul_SkAlphaType:
- case kOpaque_SkAlphaType:
- break;
- default:
- return false;
- }
-
- switch (info.colorType()) {
- case kAlpha_8_SkColorType:
- case kRGB_565_SkColorType:
- case kN32_SkColorType:
- case kRGBA_F16_SkColorType:
- case kRGBA_F32_SkColorType:
- case kRGBA_1010102_SkColorType:
- break;
- default:
- return false;
- }
-
- return true;
-}
-
std::unique_ptr<SkCanvas> SkCanvas::MakeRasterDirect(const SkImageInfo& info, void* pixels,
size_t rowBytes, const SkSurfaceProps* props) {
- if (!supported_for_raster_canvas(info)) {
+ if (!SkSurfaceValidateRasterInfo(info, rowBytes)) {
return nullptr;
}
@@ -2907,7 +2882,7 @@
std::unique_ptr<SkCanvas>
SkRasterHandleAllocator::MakeCanvas(std::unique_ptr<SkRasterHandleAllocator> alloc,
const SkImageInfo& info, const Rec* rec) {
- if (!alloc || !supported_for_raster_canvas(info)) {
+ if (!alloc || !SkSurfaceValidateRasterInfo(info, rec ? rec->fRowBytes : kIgnoreRowBytesValue)) {
return nullptr;
}