Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: src/gpu/gl/GrGpuGL.cpp

Issue 693223002: Revert of Temporary fix to remove drawrect call from GpuGL (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanupcontext
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGpuGL.cpp
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index 76547760c9bf25216012ababfee672c81a54deee..9d08f641eb7d8f4322d7615388fe032710e52ef1 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -2403,8 +2403,11 @@
GrSurface* src,
const SkIRect& srcRect,
const SkIPoint& dstPoint) {
+ bool inheritedCouldCopy = INHERITED::onCanCopySurface(dst, src, srcRect, dstPoint);
bool copied = false;
- if (can_copy_texsubimage(dst, src, this)) {
+ bool wouldNeedTempFBO = false;
+ if (can_copy_texsubimage(dst, src, this, &wouldNeedTempFBO) &&
+ (!wouldNeedTempFBO || !inheritedCouldCopy)) {
GrGLuint srcFBO;
GrGLIRect srcVP;
srcFBO = this->bindSurfaceAsFBO(src, GR_GL_FRAMEBUFFER, &srcVP);
@@ -2436,7 +2439,8 @@
if (srcFBO) {
GL_CALL(DeleteFramebuffers(1, &srcFBO));
}
- } else if (can_blit_framebuffer(dst, src, this)) {
+ } else if (can_blit_framebuffer(dst, src, this, &wouldNeedTempFBO) &&
+ (!wouldNeedTempFBO || !inheritedCouldCopy)) {
SkIRect dstRect = SkIRect::MakeXYWH(dstPoint.fX, dstPoint.fY,
srcRect.width(), srcRect.height());
bool selfOverlap = false;
@@ -2499,6 +2503,10 @@
copied = true;
}
}
+ if (!copied && inheritedCouldCopy) {
+ copied = INHERITED::onCopySurface(dst, src, srcRect, dstPoint);
+ SkASSERT(copied);
+ }
return copied;
}
@@ -2506,14 +2514,11 @@
GrSurface* src,
const SkIRect& srcRect,
const SkIPoint& dstPoint) {
- // This mirrors the logic in onCopySurface. We prefer our base makes the copy if we need to
- // create a temp fbo
- // TODO verify this assumption, it may not be true at all
- bool wouldNeedTempFBO = false;
- if (can_copy_texsubimage(dst, src, this, &wouldNeedTempFBO) && !wouldNeedTempFBO) {
+ // This mirrors the logic in onCopySurface.
+ if (can_copy_texsubimage(dst, src, this)) {
return true;
}
- if (can_blit_framebuffer(dst, src, this, &wouldNeedTempFBO) && !wouldNeedTempFBO) {
+ if (can_blit_framebuffer(dst, src, this)) {
if (dst->surfacePriv().isSameAs(src)) {
SkIRect dstRect = SkIRect::MakeXYWH(dstPoint.fX, dstPoint.fY,
srcRect.width(), srcRect.height());
@@ -2524,7 +2529,7 @@
return true;
}
}
- return false;
+ return INHERITED::onCanCopySurface(dst, src, srcRect, dstPoint);
}
void GrGpuGL::didAddGpuTraceMarker() {
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698