| Index: src/gpu/gl/GrGLGpu.cpp
|
| diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
|
| index 3d7d6918f1ef89e52fee24f7a583bdd29209f716..6d97804fc65ffa52ddf350c58cd9d6f2b0232723 100644
|
| --- a/src/gpu/gl/GrGLGpu.cpp
|
| +++ b/src/gpu/gl/GrGLGpu.cpp
|
| @@ -2787,12 +2787,20 @@ bool GrGLGpu::canCopySurface(const GrSurface* dst,
|
| return false;
|
| }
|
|
|
| -void GrGLGpu::xferBarrier(GrXferBarrierType type) {
|
| +void GrGLGpu::xferBarrier(GrRenderTarget* rt, GrXferBarrierType type) {
|
| switch (type) {
|
| - case kTexture_GrXferBarrierType:
|
| + case kTexture_GrXferBarrierType: {
|
| + GrGLRenderTarget* glrt = static_cast<GrGLRenderTarget*>(rt);
|
| + if (glrt->textureFBOID() != glrt->renderFBOID()) {
|
| + // The render target uses separate storage so no need for glTextureBarrier.
|
| + // FIXME: The render target will resolve automatically when its texture is bound,
|
| + // but we could resolve only the bounds that will be read if we do it here instead.
|
| + return;
|
| + }
|
| SkASSERT(this->caps()->textureBarrierSupport());
|
| GL_CALL(TextureBarrier());
|
| return;
|
| + }
|
| case kBlend_GrXferBarrierType:
|
| SkASSERT(GrDrawTargetCaps::kAdvanced_BlendEquationSupport ==
|
| this->caps()->blendEquationSupport());
|
|
|