Index: src/core/SkGpuBlurUtils.cpp |
diff --git a/src/core/SkGpuBlurUtils.cpp b/src/core/SkGpuBlurUtils.cpp |
index 8107642783f04ff5045379e4e537f811e41b0562..90ccb4ff741a8de0355d776cdf0623df9c34feb9 100644 |
--- a/src/core/SkGpuBlurUtils.cpp |
+++ b/src/core/SkGpuBlurUtils.cpp |
@@ -10,12 +10,14 @@ |
#include "SkRect.h" |
#if SK_SUPPORT_GPU |
-#include "effects/GrConvolutionEffect.h" |
-#include "effects/GrMatrixConvolutionEffect.h" |
-#include "GrContext.h" |
#include "GrCaps.h" |
-#include "GrRenderTargetContext.h" |
+#include "GrContext.h" |
#include "GrFixedClip.h" |
+#include "GrRenderTargetContext.h" |
+#include "GrTextureProxy.h" |
+ |
+#include "effects/GrConvolutionEffect.h" |
+#include "effects/GrMatrixConvolutionEffect.h" |
#define MAX_BLUR_SIGMA 4.0f |
@@ -69,7 +71,7 @@ static void convolve_gaussian_1d(GrRenderTargetContext* renderTargetContext, |
const GrClip& clip, |
const SkIRect& dstRect, |
const SkIPoint& srcOffset, |
- GrTexture* texture, |
+ GrTextureProxy* texture, |
Gr1DKernelEffect::Direction direction, |
int radius, |
float sigma, |
@@ -91,7 +93,7 @@ static void convolve_gaussian_2d(GrRenderTargetContext* renderTargetContext, |
const GrClip& clip, |
const SkIRect& dstRect, |
const SkIPoint& srcOffset, |
- GrTexture* texture, |
+ GrTextureProxy* texture, |
int radiusX, |
int radiusY, |
SkScalar sigmaX, |
@@ -118,7 +120,7 @@ static void convolve_gaussian_2d(GrRenderTargetContext* renderTargetContext, |
static void convolve_gaussian(GrRenderTargetContext* renderTargetContext, |
const GrClip& clip, |
const SkIRect& srcRect, |
- GrTexture* texture, |
+ GrTextureProxy* texture, |
Gr1DKernelEffect::Direction direction, |
int radius, |
float sigma, |
@@ -182,7 +184,7 @@ static void convolve_gaussian(GrRenderTargetContext* renderTargetContext, |
namespace SkGpuBlurUtils { |
sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
- GrTexture* origSrc, |
+ GrTextureProxy* origSrc, |
sk_sp<SkColorSpace> colorSpace, |
const SkIRect& dstBounds, |
const SkIRect* srcBounds, |
@@ -216,7 +218,7 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
// setup new clip |
GrFixedClip clip(localDstBounds); |
- sk_sp<GrTexture> srcTexture(sk_ref_sp(origSrc)); |
+ sk_sp<GrTextureProxy> srcTexture(sk_ref_sp(origSrc)); |
SkASSERT(kBGRA_8888_GrPixelConfig == srcTexture->config() || |
kRGBA_8888_GrPixelConfig == srcTexture->config() || |
@@ -229,9 +231,10 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
const int height = dstBounds.height(); |
const GrPixelConfig config = srcTexture->config(); |
- sk_sp<GrRenderTargetContext> dstRenderTargetContext(context->makeRenderTargetContext( |
- fit, width, height, config, colorSpace, 0, kDefault_GrSurfaceOrigin)); |
- if (!dstRenderTargetContext) { |
+ sk_sp<GrRenderTargetContext> dstDeferredRenderTargetContext( |
+ context->makeDeferredRenderTargetContext(fit, width, height, config, colorSpace, |
+ 0, kDefault_GrSurfaceOrigin)); |
+ if (!dstDeferredRenderTargetContext) { |
return nullptr; |
} |
@@ -242,13 +245,13 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
// We shouldn't be scaling because this is a small size blur |
SkASSERT((1 == scaleFactorX) && (1 == scaleFactorY)); |
- convolve_gaussian_2d(dstRenderTargetContext.get(), clip, localDstBounds, srcOffset, |
+ convolve_gaussian_2d(dstDeferredRenderTargetContext.get(), clip, localDstBounds, srcOffset, |
srcTexture.get(), radiusX, radiusY, sigmaX, sigmaY, srcBounds); |
- return dstRenderTargetContext; |
+ return dstDeferredRenderTargetContext; |
} |
- sk_sp<GrRenderTargetContext> tmpRenderTargetContext(context->makeRenderTargetContext( |
+ sk_sp<GrRenderTargetContext> tmpRenderTargetContext(context->makeDeferredRenderTargetContext( |
fit, width, height, config, colorSpace, 0, kDefault_GrSurfaceOrigin)); |
if (!tmpRenderTargetContext) { |
return nullptr; |
@@ -260,7 +263,7 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
for (int i = 1; i < scaleFactorX || i < scaleFactorY; i *= 2) { |
GrPaint paint; |
- paint.setGammaCorrect(dstRenderTargetContext->isGammaCorrect()); |
+ paint.setGammaCorrect(dstDeferredRenderTargetContext->isGammaCorrect()); |
SkMatrix matrix; |
matrix.setIDiv(srcTexture->width(), srcTexture->height()); |
SkIRect dstRect(srcRect); |
@@ -286,13 +289,13 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
paint.setPorterDuffXPFactory(SkBlendMode::kSrc); |
shrink_irect_by_2(&dstRect, i < scaleFactorX, i < scaleFactorY); |
- dstRenderTargetContext->fillRectToRect(clip, paint, SkMatrix::I(), |
- SkRect::Make(dstRect), SkRect::Make(srcRect)); |
+ dstDeferredRenderTargetContext->fillRectToRect(clip, paint, SkMatrix::I(), |
+ SkRect::Make(dstRect), SkRect::Make(srcRect)); |
- srcRenderTargetContext = dstRenderTargetContext; |
+ srcRenderTargetContext = dstDeferredRenderTargetContext; |
srcRect = dstRect; |
- srcTexture = srcRenderTargetContext->asTexture(); |
- dstRenderTargetContext.swap(tmpRenderTargetContext); |
+ srcTexture = sk_ref_sp(srcRenderTargetContext->asDeferredTexture()); |
+ dstDeferredRenderTargetContext.swap(tmpRenderTargetContext); |
localSrcBounds = srcRect; |
} |
@@ -309,13 +312,13 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
srcRenderTargetContext->clear(&clearRect, 0x0, false); |
} |
- convolve_gaussian(dstRenderTargetContext.get(), clip, srcRect, |
+ convolve_gaussian(dstDeferredRenderTargetContext.get(), clip, srcRect, |
srcTexture.get(), Gr1DKernelEffect::kX_Direction, radiusX, sigmaX, |
srcBounds, srcOffset); |
- srcRenderTargetContext = dstRenderTargetContext; |
- srcTexture = srcRenderTargetContext->asTexture(); |
+ srcRenderTargetContext = dstDeferredRenderTargetContext; |
+ srcTexture = sk_ref_sp(srcRenderTargetContext->asDeferredTexture()); |
srcRect.offsetTo(0, 0); |
- dstRenderTargetContext.swap(tmpRenderTargetContext); |
+ dstDeferredRenderTargetContext.swap(tmpRenderTargetContext); |
localSrcBounds = srcRect; |
srcOffset.set(0, 0); |
} |
@@ -331,13 +334,13 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
srcRenderTargetContext->clear(&clearRect, 0x0, false); |
} |
- convolve_gaussian(dstRenderTargetContext.get(), clip, srcRect, |
+ convolve_gaussian(dstDeferredRenderTargetContext.get(), clip, srcRect, |
srcTexture.get(), Gr1DKernelEffect::kY_Direction, radiusY, sigmaY, |
srcBounds, srcOffset); |
- srcRenderTargetContext = dstRenderTargetContext; |
+ srcRenderTargetContext = dstDeferredRenderTargetContext; |
srcRect.offsetTo(0, 0); |
- dstRenderTargetContext.swap(tmpRenderTargetContext); |
+ dstDeferredRenderTargetContext.swap(tmpRenderTargetContext); |
} |
SkASSERT(srcRenderTargetContext); |
@@ -354,22 +357,22 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, |
matrix.setIDiv(srcRenderTargetContext->width(), srcRenderTargetContext->height()); |
GrPaint paint; |
- paint.setGammaCorrect(dstRenderTargetContext->isGammaCorrect()); |
+ paint.setGammaCorrect(dstDeferredRenderTargetContext->isGammaCorrect()); |
// FIXME: this should be mitchell, not bilinear. |
GrTextureParams params(SkShader::kClamp_TileMode, GrTextureParams::kBilerp_FilterMode); |
- sk_sp<GrTexture> tex(srcRenderTargetContext->asTexture()); |
+ sk_sp<GrTextureProxy> tex(srcRenderTargetContext->asDeferredTexture()); |
paint.addColorTextureProcessor(tex.get(), nullptr, matrix, params); |
paint.setPorterDuffXPFactory(SkBlendMode::kSrc); |
SkIRect dstRect(srcRect); |
scale_irect(&dstRect, scaleFactorX, scaleFactorY); |
- dstRenderTargetContext->fillRectToRect(clip, paint, SkMatrix::I(), |
- SkRect::Make(dstRect), SkRect::Make(srcRect)); |
+ dstDeferredRenderTargetContext->fillRectToRect(clip, paint, SkMatrix::I(), |
+ SkRect::Make(dstRect), SkRect::Make(srcRect)); |
- srcRenderTargetContext = dstRenderTargetContext; |
+ srcRenderTargetContext = dstDeferredRenderTargetContext; |
srcRect = dstRect; |
- dstRenderTargetContext.swap(tmpRenderTargetContext); |
+ dstDeferredRenderTargetContext.swap(tmpRenderTargetContext); |
} |
return srcRenderTargetContext; |