diff options
-rw-r--r-- | src/core/SkSpecialImage.cpp | 4 | ||||
-rw-r--r-- | src/effects/SkBlurImageFilter.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkMorphologyImageFilter.cpp | 2 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 7 |
4 files changed, 13 insertions, 2 deletions
diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp index 2b371d6f74..b8eabc50bf 100644 --- a/src/core/SkSpecialImage.cpp +++ b/src/core/SkSpecialImage.cpp @@ -481,6 +481,10 @@ public: } sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const override { + if (!fTexture->getContext()) { + return nullptr; + } + GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(info, *fTexture->getContext()->caps()); desc.fFlags = kRenderTarget_GrSurfaceFlag; diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp index 692b6c9b80..60d8d17cdf 100644 --- a/src/effects/SkBlurImageFilter.cpp +++ b/src/effects/SkBlurImageFilter.cpp @@ -94,7 +94,7 @@ sk_sp<SkSpecialImage> SkBlurImageFilter::onFilterImage(SkSpecialImage* source, const SkVector sigma = map_sigma(fSigma, ctx.ctm()); #if SK_SUPPORT_GPU - if (input->peekTexture()) { + if (input->peekTexture() && input->peekTexture()->getContext()) { if (0 == sigma.x() && 0 == sigma.y()) { offset->fX = inputBounds.x(); offset->fY = inputBounds.y(); diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index 6abd1fc236..b592fd01b0 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -551,7 +551,7 @@ sk_sp<SkSpecialImage> SkMorphologyImageFilter::filterImageGeneric(bool dilate, } #if SK_SUPPORT_GPU - if (input->peekTexture()) { + if (input->peekTexture() && input->peekTexture()->getContext()) { auto type = dilate ? GrMorphologyEffect::kDilate_MorphologyType : GrMorphologyEffect::kErode_MorphologyType; sk_sp<SkSpecialImage> result(apply_morphology(input.get(), srcBounds, type, diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 724d77b4c0..d0c526b170 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -228,6 +228,13 @@ GrRenderTarget* SkGpuDevice::CreateRenderTarget( // homogenous backing (e.g., raster or gpu). void SkGpuDevice::drawSpriteWithFilter(const SkDraw& draw, const SkBitmap& bitmap, int x, int y, const SkPaint& paint) { + ASSERT_SINGLE_OWNER + GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawSpriteWithFilter", fContext); + + if (fContext->abandoned()) { + return; + } + if (bitmap.getTexture()) { INHERITED::drawSpriteWithFilter(draw, bitmap, x, y, paint); return; |