Move some work from backend onClear to base class clear
BUG=skia:
Review URL: https://codereview.chromium.org/1275543005
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 0049767..2171f1e 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -309,14 +309,25 @@
GrColor color,
bool canIgnoreRect,
GrRenderTarget* renderTarget) {
+ SkIRect rtRect = SkIRect::MakeWH(renderTarget->width(), renderTarget->height());
+ SkIRect clippedRect;
+ if (!rect ||
+ (canIgnoreRect && this->caps()->fullClearIsFree()) ||
+ rect->contains(rtRect)) {
+ rect = &rtRect;
+ } else {
+ clippedRect = *rect;
+ if (!clippedRect.intersect(rtRect)) {
+ return;
+ }
+ rect = &clippedRect;
+ }
+
if (fCaps->useDrawInsteadOfClear()) {
// This works around a driver bug with clear by drawing a rect instead.
// The driver will ignore a clear if it is the only thing rendered to a
// target before the target is read.
- SkIRect rtRect = SkIRect::MakeWH(renderTarget->width(), renderTarget->height());
- if (NULL == rect || canIgnoreRect || rect->contains(rtRect)) {
- rect = &rtRect;
- // We first issue a discard() since that may help tilers.
+ if (rect == &rtRect) {
this->discard(renderTarget);
}
@@ -325,7 +336,7 @@
this->drawSimpleRect(pipelineBuilder, color, SkMatrix::I(), *rect);
} else {
- this->onClear(rect, color, canIgnoreRect, renderTarget);
+ this->onClear(*rect, color, renderTarget);
}
}