Index: src/gpu/GrXferProcessor.cpp |
diff --git a/src/gpu/GrXferProcessor.cpp b/src/gpu/GrXferProcessor.cpp |
index 61cacac62ee8b6d1188cf3d9083de523d2b415b0..defa884bd2d824e11d5813743ff5808e9c9fc1bb 100644 |
--- a/src/gpu/GrXferProcessor.cpp |
+++ b/src/gpu/GrXferProcessor.cpp |
@@ -32,6 +32,19 @@ void GrXferProcessor::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBu |
this->onGetGLProcessorKey(caps, b); |
} |
+bool GrXferProcessor::willNeedXferBarrier(const GrRenderTarget* rt, |
+ const GrDrawTargetCaps& caps, |
+ GrXferBarrierType* outBarrierType) const { |
+ if (static_cast<const GrSurface*>(rt) == this->getDstCopyTexture()) { |
+ // Texture barriers are required when a shader reads and renders to the same texture. |
+ SkASSERT(rt); |
+ SkASSERT(caps.textureBarrierSupport()); |
+ *outBarrierType = kTexture_GrXferBarrierType; |
+ return true; |
+ } |
+ return false; |
+} |
+ |
/////////////////////////////////////////////////////////////////////////////// |
GrXferProcessor* GrXPFactory::createXferProcessor(const GrProcOptInfo& colorPOI, |