Index: src/gpu/GrContext.cpp |
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp |
index b9cbf3f1a3a97ac044ed210a136ec9a072f5dcfb..6ad98ff0f7a83290094d3217d599c739dc1bd22d 100755 |
--- a/src/gpu/GrContext.cpp |
+++ b/src/gpu/GrContext.cpp |
@@ -470,8 +470,15 @@ GrTexture* GrContext::refScratchTexture(const GrTextureDesc& inDesc, ScratchTexM |
do { |
GrResourceKey key = GrTexturePriv::ComputeScratchKey(*desc); |
- GrGpuResource* resource = fResourceCache2->findAndRefScratchResource(key, |
- calledDuringFlush); |
+ uint32_t scratchFlags = 0; |
+ if (calledDuringFlush) { |
+ scratchFlags = GrResourceCache2::kRequireNoPendingIO_ScratchFlag; |
+ } else if (!(desc->fFlags & kRenderTarget_GrTextureFlagBit)) { |
+ // If it is not a render target then it will most likely be populated by |
+ // writePixels() which will trigger a flush if the texture has pending IO. |
+ scratchFlags = GrResourceCache2::kPreferNoPendingIO_ScratchFlag; |
+ } |
+ GrGpuResource* resource = fResourceCache2->findAndRefScratchResource(key, scratchFlags); |
if (resource) { |
fResourceCache->makeResourceMRU(resource); |
return static_cast<GrTexture*>(resource); |