| Index: src/effects/SkGpuBlurUtils.cpp
|
| diff --git a/src/effects/SkGpuBlurUtils.cpp b/src/effects/SkGpuBlurUtils.cpp
|
| index 276fb6c1028d67d02d4c2aa7687c9e6aec03d394..ec37505d3eb041255ca547dbdda0981a109978ea 100644
|
| --- a/src/effects/SkGpuBlurUtils.cpp
|
| +++ b/src/effects/SkGpuBlurUtils.cpp
|
| @@ -46,7 +46,6 @@ static float adjust_sigma(float sigma, int maxTextureSize, int *scaleFactor, int
|
| }
|
|
|
| static void convolve_gaussian_1d(GrDrawContext* drawContext,
|
| - GrRenderTarget* rt,
|
| const GrClip& clip,
|
| const SkRect& srcRect,
|
| const SkRect& dstRect,
|
| @@ -60,11 +59,10 @@ static void convolve_gaussian_1d(GrDrawContext* drawContext,
|
| SkAutoTUnref<GrFragmentProcessor> conv(GrConvolutionEffect::CreateGaussian(
|
| texture, direction, radius, sigma, useBounds, bounds));
|
| paint.addColorFragmentProcessor(conv);
|
| - drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), dstRect, srcRect);
|
| + drawContext->drawNonAARectToRect(clip, paint, SkMatrix::I(), dstRect, srcRect);
|
| }
|
|
|
| static void convolve_gaussian_2d(GrDrawContext* drawContext,
|
| - GrRenderTarget* rt,
|
| const GrClip& clip,
|
| const SkRect& srcRect,
|
| const SkRect& dstRect,
|
| @@ -83,11 +81,10 @@ static void convolve_gaussian_2d(GrDrawContext* drawContext,
|
| useBounds ? GrTextureDomain::kClamp_Mode : GrTextureDomain::kIgnore_Mode,
|
| true, sigmaX, sigmaY));
|
| paint.addColorFragmentProcessor(conv);
|
| - drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), dstRect, srcRect);
|
| + drawContext->drawNonAARectToRect(clip, paint, SkMatrix::I(), dstRect, srcRect);
|
| }
|
|
|
| static void convolve_gaussian(GrDrawContext* drawContext,
|
| - GrRenderTarget* rt,
|
| const GrClip& clip,
|
| const SkRect& srcRect,
|
| const SkRect& dstRect,
|
| @@ -98,7 +95,7 @@ static void convolve_gaussian(GrDrawContext* drawContext,
|
| bool cropToSrcRect) {
|
| float bounds[2] = { 0.0f, 1.0f };
|
| if (!cropToSrcRect) {
|
| - convolve_gaussian_1d(drawContext, rt, clip, srcRect, dstRect, texture,
|
| + convolve_gaussian_1d(drawContext, clip, srcRect, dstRect, texture,
|
| direction, radius, sigma, false, bounds);
|
| return;
|
| }
|
| @@ -130,15 +127,15 @@ static void convolve_gaussian(GrDrawContext* drawContext,
|
| }
|
| if (radius >= size * SK_ScalarHalf) {
|
| // Blur radius covers srcRect; use bounds over entire draw
|
| - convolve_gaussian_1d(drawContext, rt, clip, srcRect, dstRect, texture,
|
| + convolve_gaussian_1d(drawContext, clip, srcRect, dstRect, texture,
|
| direction, radius, sigma, true, bounds);
|
| } else {
|
| // Draw upper and lower margins with bounds; middle without.
|
| - convolve_gaussian_1d(drawContext, rt, clip, lowerSrcRect, lowerDstRect, texture,
|
| + convolve_gaussian_1d(drawContext, clip, lowerSrcRect, lowerDstRect, texture,
|
| direction, radius, sigma, true, bounds);
|
| - convolve_gaussian_1d(drawContext, rt, clip, upperSrcRect, upperDstRect, texture,
|
| + convolve_gaussian_1d(drawContext, clip, upperSrcRect, upperDstRect, texture,
|
| direction, radius, sigma, true, bounds);
|
| - convolve_gaussian_1d(drawContext, rt, clip, middleSrcRect, middleDstRect, texture,
|
| + convolve_gaussian_1d(drawContext, clip, middleSrcRect, middleDstRect, texture,
|
| direction, radius, sigma, false, bounds);
|
| }
|
| }
|
| @@ -222,12 +219,12 @@ GrTexture* GaussianBlur(GrContext* context,
|
| scale_rect(&dstRect, i < scaleFactorX ? 0.5f : 1.0f,
|
| i < scaleFactorY ? 0.5f : 1.0f);
|
|
|
| - SkAutoTUnref<GrDrawContext> dstDrawContext(context->drawContext());
|
| + SkAutoTUnref<GrDrawContext> dstDrawContext(
|
| + context->drawContext(dstTexture->asRenderTarget()));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| - dstDrawContext->drawNonAARectToRect(dstTexture->asRenderTarget(), clip, paint,
|
| - SkMatrix::I(), dstRect, srcRect);
|
| + dstDrawContext->drawNonAARectToRect(clip, paint, SkMatrix::I(), dstRect, srcRect);
|
|
|
| srcDrawContext.swap(dstDrawContext);
|
| srcRect = dstRect;
|
| @@ -245,11 +242,12 @@ GrTexture* GaussianBlur(GrContext* context,
|
| SkASSERT((1 == scaleFactorX) && (1 == scaleFactorY));
|
| SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
|
|
|
| - SkAutoTUnref<GrDrawContext> dstDrawContext(context->drawContext());
|
| + SkAutoTUnref<GrDrawContext> dstDrawContext(
|
| + context->drawContext(dstTexture->asRenderTarget()));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| - convolve_gaussian_2d(dstDrawContext, dstTexture->asRenderTarget(), clip, srcRect, dstRect,
|
| + convolve_gaussian_2d(dstDrawContext, clip, srcRect, dstRect,
|
| srcTexture, radiusX, radiusY, sigmaX, sigmaY, cropToRect, srcIRect);
|
|
|
| srcDrawContext.swap(dstDrawContext);
|
| @@ -262,7 +260,7 @@ GrTexture* GaussianBlur(GrContext* context,
|
| if (scaleFactorX > 1) {
|
| // TODO: if we pass in the source draw context we don't need this here
|
| if (!srcDrawContext) {
|
| - srcDrawContext.reset(context->drawContext());
|
| + srcDrawContext.reset(context->drawContext(srcTexture->asRenderTarget()));
|
| if (!srcDrawContext) {
|
| return nullptr;
|
| }
|
| @@ -272,15 +270,16 @@ GrTexture* GaussianBlur(GrContext* context,
|
| // X convolution from reading garbage.
|
| clearRect = SkIRect::MakeXYWH(srcIRect.fRight, srcIRect.fTop,
|
| radiusX, srcIRect.height());
|
| - srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
|
| + srcDrawContext->clear(&clearRect, 0x0, false);
|
| }
|
| SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
|
|
|
| - SkAutoTUnref<GrDrawContext> dstDrawContext(context->drawContext());
|
| + SkAutoTUnref<GrDrawContext> dstDrawContext(
|
| + context->drawContext(dstTexture->asRenderTarget()));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| - convolve_gaussian(dstDrawContext, dstTexture->asRenderTarget(), clip, srcRect, dstRect,
|
| + convolve_gaussian(dstDrawContext, clip, srcRect, dstRect,
|
| srcTexture, Gr1DKernelEffect::kX_Direction, radiusX, sigmaX,
|
| cropToRect);
|
|
|
| @@ -294,7 +293,7 @@ GrTexture* GaussianBlur(GrContext* context,
|
| if (scaleFactorY > 1 || sigmaX > 0.0f) {
|
| // TODO: if we pass in the source draw context we don't need this here
|
| if (!srcDrawContext) {
|
| - srcDrawContext.reset(context->drawContext());
|
| + srcDrawContext.reset(context->drawContext(srcTexture->asRenderTarget()));
|
| if (!srcDrawContext) {
|
| return nullptr;
|
| }
|
| @@ -304,16 +303,17 @@ GrTexture* GaussianBlur(GrContext* context,
|
| // convolution from reading garbage.
|
| clearRect = SkIRect::MakeXYWH(srcIRect.fLeft, srcIRect.fBottom,
|
| srcIRect.width(), radiusY);
|
| - srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
|
| + srcDrawContext->clear(&clearRect, 0x0, false);
|
| }
|
|
|
| SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
|
|
|
| - SkAutoTUnref<GrDrawContext> dstDrawContext(context->drawContext());
|
| + SkAutoTUnref<GrDrawContext> dstDrawContext(
|
| + context->drawContext(dstTexture->asRenderTarget()));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| - convolve_gaussian(dstDrawContext, dstTexture->asRenderTarget(), clip, srcRect,
|
| + convolve_gaussian(dstDrawContext, clip, srcRect,
|
| dstRect, srcTexture, Gr1DKernelEffect::kY_Direction, radiusY, sigmaY,
|
| cropToRect);
|
|
|
| @@ -331,10 +331,10 @@ GrTexture* GaussianBlur(GrContext* context,
|
| // upsampling.
|
| clearRect = SkIRect::MakeXYWH(srcIRect.fLeft, srcIRect.fBottom,
|
| srcIRect.width() + 1, 1);
|
| - srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
|
| + srcDrawContext->clear(&clearRect, 0x0, false);
|
| clearRect = SkIRect::MakeXYWH(srcIRect.fRight, srcIRect.fTop,
|
| 1, srcIRect.height());
|
| - srcDrawContext->clear(srcTexture->asRenderTarget(), &clearRect, 0x0, false);
|
| + srcDrawContext->clear(&clearRect, 0x0, false);
|
| SkMatrix matrix;
|
| matrix.setIDiv(srcTexture->width(), srcTexture->height());
|
|
|
| @@ -346,12 +346,12 @@ GrTexture* GaussianBlur(GrContext* context,
|
| SkRect dstRect(srcRect);
|
| scale_rect(&dstRect, (float) scaleFactorX, (float) scaleFactorY);
|
|
|
| - SkAutoTUnref<GrDrawContext> dstDrawContext(context->drawContext());
|
| + SkAutoTUnref<GrDrawContext> dstDrawContext(
|
| + context->drawContext(dstTexture->asRenderTarget()));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| - dstDrawContext->drawNonAARectToRect(dstTexture->asRenderTarget(), clip, paint,
|
| - SkMatrix::I(), dstRect, srcRect);
|
| + dstDrawContext->drawNonAARectToRect(clip, paint, SkMatrix::I(), dstRect, srcRect);
|
|
|
| srcDrawContext.swap(dstDrawContext);
|
| srcRect = dstRect;
|
|
|