Revert "Revert of Move copy-surface-as-draw fallback to GrGLGpu. (patchset #12 id:220001 of https://codereview.chromium.org/1144433002/)"
This reverts commit 404b3b264b833eb7cffdc833c7e2ebbd708e123a.
Review URL: https://codereview.chromium.org/1161063003
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 71b5674..ee668f0 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -104,13 +104,10 @@
return false;
}
SkIPoint dstPoint = {0, 0};
- if (this->copySurface(copy, rt, copyRect, dstPoint)) {
- dstTexture->setTexture(copy);
- dstTexture->setOffset(copyRect.fLeft, copyRect.fTop);
- return true;
- } else {
- return false;
- }
+ this->copySurface(copy, rt, copyRect, dstPoint);
+ dstTexture->setTexture(copy);
+ dstTexture->setOffset(copyRect.fLeft, copyRect.fTop);
+ return true;
}
void GrDrawTarget::flush() {
@@ -433,7 +430,7 @@
}
}
-bool GrDrawTarget::copySurface(GrSurface* dst,
+void GrDrawTarget::copySurface(GrSurface* dst,
GrSurface* src,
const SkIRect& srcRect,
const SkIPoint& dstPoint) {
@@ -449,56 +446,10 @@
dstPoint,
&clippedSrcRect,
&clippedDstPoint)) {
- return true;
+ return;
}
- if (this->getGpu()->canCopySurface(dst, src, clippedSrcRect, clippedDstPoint)) {
- this->onCopySurface(dst, src, clippedSrcRect, clippedDstPoint);
- return true;
- }
-
- GrRenderTarget* rt = dst->asRenderTarget();
- GrTexture* tex = src->asTexture();
-
- if ((dst == src) || !rt || !tex) {
- return false;
- }
-
- GrPipelineBuilder pipelineBuilder;
- pipelineBuilder.setRenderTarget(rt);
- SkMatrix matrix;
- matrix.setTranslate(SkIntToScalar(clippedSrcRect.fLeft - clippedDstPoint.fX),
- SkIntToScalar(clippedSrcRect.fTop - clippedDstPoint.fY));
- matrix.postIDiv(tex->width(), tex->height());
- pipelineBuilder.addColorTextureProcessor(tex, matrix);
- SkIRect dstRect = SkIRect::MakeXYWH(clippedDstPoint.fX,
- clippedDstPoint.fY,
- clippedSrcRect.width(),
- clippedSrcRect.height());
- this->drawSimpleRect(&pipelineBuilder, GrColor_WHITE, SkMatrix::I(), dstRect);
- return true;
-}
-
-bool GrDrawTarget::canCopySurface(const GrSurface* dst,
- const GrSurface* src,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) {
- SkASSERT(dst);
- SkASSERT(src);
-
- SkIRect clippedSrcRect;
- SkIPoint clippedDstPoint;
- // If the rect is outside the src or dst then we're guaranteed success
- if (!clip_srcrect_and_dstpoint(dst,
- src,
- srcRect,
- dstPoint,
- &clippedSrcRect,
- &clippedDstPoint)) {
- return true;
- }
- return ((dst != src) && dst->asRenderTarget() && src->asTexture()) ||
- this->getGpu()->canCopySurface(dst, src, clippedSrcRect, clippedDstPoint);
+ this->onCopySurface(dst, src, clippedSrcRect, clippedDstPoint);
}
void GrDrawTarget::setupPipeline(const PipelineInfo& pipelineInfo,