SkPDF/Device/ImageFilter: Fix ImageFilter fallback code
Broken in https://chromium.googlesource.com/skia/+/76033be
I have confirmed that this fixes 470083.
BUG=470083
Review URL: https://codereview.chromium.org/1080923004
[cherry-picked from commit 00b7e5e]
NOTREECHECKS=true
NOTRY=true
R=reed@google.com
Review URL: https://codereview.chromium.org/1167023003
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
index 99c29ee..ec57711 100644
--- a/include/core/SkDevice.h
+++ b/include/core/SkDevice.h
@@ -330,15 +330,19 @@
static SkPixelGeometry AdjustGeometry(const SkImageInfo&, TileUsage, SkPixelGeometry);
// The constructor may change the pixel geometry based on other parameters.
- CreateInfo(const SkImageInfo& info, TileUsage tileUsage, SkPixelGeometry geo)
+ CreateInfo(const SkImageInfo& info,
+ TileUsage tileUsage,
+ SkPixelGeometry geo,
+ bool forImageFilter = false)
: fInfo(info)
, fTileUsage(tileUsage)
, fPixelGeometry(AdjustGeometry(info, tileUsage, geo))
- {}
+ , fForImageFilter(forImageFilter) {}
const SkImageInfo fInfo;
const TileUsage fTileUsage;
const SkPixelGeometry fPixelGeometry;
+ const bool fForImageFilter;
};
/**
diff --git a/src/core/SkDeviceImageFilterProxy.h b/src/core/SkDeviceImageFilterProxy.h
index aa2fd1a..eecb09d 100644
--- a/src/core/SkDeviceImageFilterProxy.h
+++ b/src/core/SkDeviceImageFilterProxy.h
@@ -22,7 +22,8 @@
SkBaseDevice* createDevice(int w, int h) override {
SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
SkBaseDevice::kPossible_TileUsage,
- kUnknown_SkPixelGeometry);
+ kUnknown_SkPixelGeometry,
+ true /*forImageFilter*/);
return fDevice->onCreateDevice(cinfo, NULL);
}
bool canHandleImageFilter(const SkImageFilter* filter) override {
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index ced075e..3a0d63c 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -577,7 +577,8 @@
}
SkBaseDevice* SkPDFDevice::onCreateDevice(const CreateInfo& cinfo, const SkPaint* layerPaint) {
- if (layerPaint && not_supported_for_layers(*layerPaint)) {
+ if (cinfo.fForImageFilter ||
+ (layerPaint && not_supported_for_layers(*layerPaint))) {
return SkBitmapDevice::Create(cinfo.fInfo);
}
SkISize size = SkISize::Make(cinfo.fInfo.width(), cinfo.fInfo.height());