| Index: src/gpu/GrContext.cpp
|
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
|
| index 4a2b2b022862dfab775c0d5eca0fbb40e94194af..4cb90c658e1b3346d9220812a202332d7970a6f2 100644
|
| --- a/src/gpu/GrContext.cpp
|
| +++ b/src/gpu/GrContext.cpp
|
| @@ -437,21 +437,20 @@ bool GrContext::readSurfacePixels(GrSurface* src,
|
| SkAutoTUnref<GrSurface> surfaceToRead(SkRef(src));
|
| bool didTempDraw = false;
|
| if (GrGpu::kNoDraw_DrawPreference != drawPreference) {
|
| - if (tempDrawInfo.fUseExactScratch) {
|
| + if (SkBackingFit::kExact == tempDrawInfo.fTempSurfaceFit) {
|
| // We only respect this when the entire src is being read. Otherwise we can trigger too
|
| // many odd ball texture sizes and trash the cache.
|
| if (width != src->width() || height != src->height()) {
|
| - tempDrawInfo.fUseExactScratch = false;
|
| + tempDrawInfo.fTempSurfaceFit= SkBackingFit::kApprox;
|
| }
|
| }
|
| - SkAutoTUnref<GrTexture> temp;
|
| - if (tempDrawInfo.fUseExactScratch) {
|
| - temp.reset(this->textureProvider()->createTexture(tempDrawInfo.fTempSurfaceDesc,
|
| - SkBudgeted::kYes));
|
| - } else {
|
| - temp.reset(this->textureProvider()->createApproxTexture(tempDrawInfo.fTempSurfaceDesc));
|
| - }
|
| - if (temp) {
|
| + sk_sp<GrDrawContext> tempDC = this->newDrawContext(tempDrawInfo.fTempSurfaceFit,
|
| + tempDrawInfo.fTempSurfaceDesc.fWidth,
|
| + tempDrawInfo.fTempSurfaceDesc.fHeight,
|
| + tempDrawInfo.fTempSurfaceDesc.fConfig,
|
| + tempDrawInfo.fTempSurfaceDesc.fSampleCnt,
|
| + tempDrawInfo.fTempSurfaceDesc.fOrigin);
|
| + if (tempDC) {
|
| SkMatrix textureMatrix;
|
| textureMatrix.setTranslate(SkIntToScalar(left), SkIntToScalar(top));
|
| textureMatrix.postIDiv(src->width(), src->height());
|
| @@ -464,10 +463,10 @@ bool GrContext::readSurfacePixels(GrSurface* src,
|
| } else if (GrGpu::kCallerPrefersDraw_DrawPreference == drawPreference) {
|
| // We only wanted to do the draw in order to perform the unpremul so don't
|
| // bother.
|
| - temp.reset(nullptr);
|
| + tempDC.reset(nullptr);
|
| }
|
| }
|
| - if (!fp && temp) {
|
| + if (!fp && tempDC) {
|
| fp = GrConfigConversionEffect::Make(src->asTexture(), tempDrawInfo.fSwizzle,
|
| GrConfigConversionEffect::kNone_PMConversion,
|
| textureMatrix);
|
| @@ -478,10 +477,8 @@ bool GrContext::readSurfacePixels(GrSurface* src,
|
| paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode);
|
| paint.setAllowSRGBInputs(true);
|
| SkRect rect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height));
|
| - sk_sp<GrDrawContext> drawContext(
|
| - this->drawContext(sk_ref_sp(temp->asRenderTarget())));
|
| - drawContext->drawRect(GrNoClip(), paint, SkMatrix::I(), rect, nullptr);
|
| - surfaceToRead.reset(SkRef(temp.get()));
|
| + tempDC->drawRect(GrNoClip(), paint, SkMatrix::I(), rect, nullptr);
|
| + surfaceToRead.reset(tempDC->asTexture().release());
|
| left = 0;
|
| top = 0;
|
| didTempDraw = true;
|
|
|