Avoid using kClamp domain in GrMatrixConvolutionEffect::MakeGaussian.
SkBlurMaskFilterImpl::filterMaskGPU uses full src proxy as srcBounds
passed to SkGpuBlurUtils::GaussianFilter.
Change-Id: Ia3e3b339f358f551e37b80328cfdb7382af902b3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/267480
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
index 4736332..fafd35e 100644
--- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp
+++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
@@ -304,6 +304,13 @@
bool convolveAlpha,
SkScalar sigmaX,
SkScalar sigmaY) {
+ // SkGpuBlurUtils is not as aggressive as it once was about avoiding texture domains.
+ // Check for a trivial case here where the domain can be avoided. TODO: Use GrTextureEffect
+ // here which includes this and more.
+ if (tileMode == GrTextureDomain::kClamp_Mode && !srcView.proxy()->isFullyLazy() &&
+ srcBounds.contains(SkIRect::MakeSize(srcView.proxy()->backingStoreDimensions()))) {
+ tileMode = GrTextureDomain::kIgnore_Mode;
+ }
float kernel[MAX_KERNEL_SIZE];
fill_in_2D_gaussian_kernel(kernel, kernelSize.width(), kernelSize.height(), sigmaX, sigmaY);