Index: src/gpu/gl/GrGpuGL.cpp |
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp |
index 5d4bd8b7b74f308aa5fbc1e56670884972e622dc..ebc34572fed1f1660e43246f7601edfd47afdc4c 100644 |
--- a/src/gpu/gl/GrGpuGL.cpp |
+++ b/src/gpu/gl/GrGpuGL.cpp |
@@ -870,6 +870,7 @@ bool GrGpuGL::createRenderTargetObjects(int width, int height, |
width, height)) { |
goto FAILED; |
} |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fRTFBOID)); |
GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
GR_GL_COLOR_ATTACHMENT0, |
@@ -884,6 +885,7 @@ bool GrGpuGL::createRenderTargetObjects(int width, int height, |
fGLContext.caps()->markConfigAsValidColorAttachment(desc->fConfig); |
} |
} |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fTexFBOID)); |
if (this->glCaps().usesImplicitMSAAResolve() && desc->fSampleCnt > 0) { |
@@ -1245,6 +1247,7 @@ bool GrGpuGL::attachStencilBufferToRenderTarget(GrStencilBuffer* sb, GrRenderTar |
GrGLuint rb = glsb->renderbufferID(); |
fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID; |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, fbo)); |
GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
GR_GL_STENCIL_ATTACHMENT, |
@@ -1438,6 +1441,7 @@ void GrGpuGL::discard(GrRenderTarget* renderTarget) { |
GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(renderTarget); |
if (renderTarget->getUniqueID() != fHWBoundRenderTargetUniqueID) { |
fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID; |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, glRT->renderFBOID())); |
} |
switch (this->glCaps().invalidateFBType()) { |
@@ -1601,6 +1605,7 @@ bool GrGpuGL::onReadPixels(GrRenderTarget* target, |
case GrGLRenderTarget::kCanResolve_ResolveType: |
this->onResolveRenderTarget(tgt); |
// we don't track the state of the READ FBO ID. |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER, |
tgt->textureFBOID())); |
break; |
@@ -1698,6 +1703,7 @@ void GrGpuGL::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bound) |
uint32_t rtID = target->getUniqueID(); |
if (fHWBoundRenderTargetUniqueID != rtID) { |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, target->renderFBOID())); |
#ifdef SK_DEBUG |
// don't do this check in Chromium -- this is causing |
@@ -1800,6 +1806,8 @@ void GrGpuGL::onResolveRenderTarget(GrRenderTarget* target) { |
// Some extensions automatically resolves the texture when it is read. |
if (this->glCaps().usesMSAARenderBuffers()) { |
SkASSERT(rt->textureFBOID() != rt->renderFBOID()); |
+ fGPUStats.incRenderTargetBinds(); |
+ fGPUStats.incRenderTargetBinds(); |
GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER, rt->renderFBOID())); |
GL_CALL(BindFramebuffer(GR_GL_DRAW_FRAMEBUFFER, rt->textureFBOID())); |
// make sure we go through flushRenderTarget() since we've modified |
@@ -2363,38 +2371,37 @@ inline bool can_copy_texsubimage(const GrSurface* dst, |
} |
} |
+} |
+ |
// If a temporary FBO was created, its non-zero ID is returned. The viewport that the copy rect is |
// relative to is output. |
-inline GrGLuint bind_surface_as_fbo(const GrGLInterface* gl, |
- GrSurface* surface, |
- GrGLenum fboTarget, |
- GrGLIRect* viewport) { |
+GrGLuint GrGpuGL::bindSurfaceAsFBO(GrSurface* surface, GrGLenum fboTarget, GrGLIRect* viewport) { |
GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(surface->asRenderTarget()); |
GrGLuint tempFBOID; |
if (NULL == rt) { |
SkASSERT(surface->asTexture()); |
GrGLuint texID = static_cast<GrGLTexture*>(surface->asTexture())->textureID(); |
- GR_GL_CALL(gl, GenFramebuffers(1, &tempFBOID)); |
- GR_GL_CALL(gl, BindFramebuffer(fboTarget, tempFBOID)); |
- GR_GL_CALL(gl, FramebufferTexture2D(fboTarget, |
- GR_GL_COLOR_ATTACHMENT0, |
- GR_GL_TEXTURE_2D, |
- texID, |
- 0)); |
+ GR_GL_CALL(this->glInterface(), GenFramebuffers(1, &tempFBOID)); |
+ fGPUStats.incRenderTargetBinds(); |
+ GR_GL_CALL(this->glInterface(), BindFramebuffer(fboTarget, tempFBOID)); |
+ GR_GL_CALL(this->glInterface(), FramebufferTexture2D(fboTarget, |
+ GR_GL_COLOR_ATTACHMENT0, |
+ GR_GL_TEXTURE_2D, |
+ texID, |
+ 0)); |
viewport->fLeft = 0; |
viewport->fBottom = 0; |
viewport->fWidth = surface->width(); |
viewport->fHeight = surface->height(); |
} else { |
tempFBOID = 0; |
- GR_GL_CALL(gl, BindFramebuffer(fboTarget, rt->renderFBOID())); |
+ fGPUStats.incRenderTargetBinds(); |
+ GR_GL_CALL(this->glInterface(), BindFramebuffer(fboTarget, rt->renderFBOID())); |
*viewport = rt->getViewport(); |
} |
return tempFBOID; |
} |
-} |
- |
void GrGpuGL::initCopySurfaceDstDesc(const GrSurface* src, GrTextureDesc* desc) { |
// Check for format issues with glCopyTexSubImage2D |
if (kGLES_GrGLStandard == this->glStandard() && this->glCaps().bgraIsInternalFormat() && |
@@ -2432,7 +2439,7 @@ bool GrGpuGL::onCopySurface(GrSurface* dst, |
(!wouldNeedTempFBO || !inheritedCouldCopy)) { |
GrGLuint srcFBO; |
GrGLIRect srcVP; |
- srcFBO = bind_surface_as_fbo(this->glInterface(), src, GR_GL_FRAMEBUFFER, &srcVP); |
+ srcFBO = this->bindSurfaceAsFBO(src, GR_GL_FRAMEBUFFER, &srcVP); |
GrGLTexture* dstTex = static_cast<GrGLTexture*>(dst->asTexture()); |
SkASSERT(dstTex); |
// We modified the bound FBO |
@@ -2475,8 +2482,8 @@ bool GrGpuGL::onCopySurface(GrSurface* dst, |
GrGLuint srcFBO; |
GrGLIRect dstVP; |
GrGLIRect srcVP; |
- dstFBO = bind_surface_as_fbo(this->glInterface(), dst, GR_GL_DRAW_FRAMEBUFFER, &dstVP); |
- srcFBO = bind_surface_as_fbo(this->glInterface(), src, GR_GL_READ_FRAMEBUFFER, &srcVP); |
+ dstFBO = this->bindSurfaceAsFBO(dst, GR_GL_DRAW_FRAMEBUFFER, &dstVP); |
+ srcFBO = this->bindSurfaceAsFBO(src, GR_GL_READ_FRAMEBUFFER, &srcVP); |
// We modified the bound FBO |
fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID; |
GrGLIRect srcGLRect; |