aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkMatrixConvolutionImageFilter.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2016-12-28 12:28:18 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-29 00:28:54 +0000
commite02d3caab823728d3106bcb1d4fbb674afc959fb (patch)
tree87f83848ddafe339f14c3371b8a91285d77493c0 /src/effects/SkMatrixConvolutionImageFilter.cpp
parent7cf774573cc5bc7e588ed4489d0a4127e9edf0cc (diff)
Add ImageToColorSpace helper in SkImageFilter
Share this logic among a couple filters that need it. This also fixes a bug that showed up in the morhpology GM for GPU color space configs. BUG=skia: Change-Id: Ic686b07aff80e58e14a86108703bfbb3cf524979 Reviewed-on: https://skia-review.googlesource.com/6475 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/effects/SkMatrixConvolutionImageFilter.cpp')
-rw-r--r--src/effects/SkMatrixConvolutionImageFilter.cpp32
1 files changed, 5 insertions, 27 deletions
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 40d09d661a..6af8508b5a 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -10,7 +10,6 @@
#include "SkColorPriv.h"
#include "SkReadBuffer.h"
#include "SkSpecialImage.h"
-#include "SkSpecialSurface.h"
#include "SkWriteBuffer.h"
#include "SkRect.h"
#include "SkUnPreMultiply.h"
@@ -282,23 +281,6 @@ static GrTextureDomain::Mode convert_tilemodes(SkMatrixConvolutionImageFilter::T
}
return GrTextureDomain::kIgnore_Mode;
}
-
-// Return a copy of 'src' transformed to the output's color space
-static sk_sp<SkSpecialImage> image_to_color_space(SkSpecialImage* src,
- const SkImageFilter::OutputProperties& outProps) {
- sk_sp<SkSpecialSurface> surf(src->makeSurface(
- outProps, SkISize::Make(src->width(), src->height())));
- if (!surf) {
- return sk_ref_sp(src);
- }
-
- SkCanvas* canvas = surf->getCanvas();
- SkASSERT(canvas);
-
- src->draw(canvas, 0, 0, nullptr);
-
- return surf->makeImageSnapshot();
-}
#endif
sk_sp<SkSpecialImage> SkMatrixConvolutionImageFilter::onFilterImage(SkSpecialImage* source,
@@ -322,15 +304,11 @@ sk_sp<SkSpecialImage> SkMatrixConvolutionImageFilter::onFilterImage(SkSpecialIma
fKernelSize.width() * fKernelSize.height() <= MAX_KERNEL_SIZE) {
GrContext* context = source->getContext();
- // If the input is not yet already in the destination color space, do an explicit up-front
- // conversion. This is extremely unlikely (maybe even impossible). Typically, applyCropRect
- // will have called pad_image to account for our dilation of bounds, so the result will
- // already be moved to the destination color space. If someone makes a filter DAG that
- // avoids that, then we use this fall-back, which saves us from having to do the xform
- // during the filter itself.
- if (input->getColorSpace() != ctx.outputProperties().colorSpace()) {
- input = image_to_color_space(input.get(), ctx.outputProperties());
- }
+ // Ensure the input is in the destination color space. Typically applyCropRect will have
+ // called pad_image to account for our dilation of bounds, so the result will already be
+ // moved to the destination color space. If a filter DAG avoids that, then we use this
+ // fall-back, which saves us from having to do the xform during the filter itself.
+ input = ImageToColorSpace(input.get(), ctx.outputProperties());
sk_sp<GrTexture> inputTexture(input->asTextureRef(context));
SkASSERT(inputTexture);