Change scratch texture cache behavior to only reuse scratch textures used as render targets if they will be reused as render targets.

The original behavior could sometimes confuse the driver; textures would alternate between being used as render targets and having data uploaded into them.
Review URL: https://codereview.appspot.com/6480049

git-svn-id: http://skia.googlecode.com/svn/trunk@5252 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index f2419ae..6f1e24d 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -391,6 +391,9 @@
     GrTextureDesc desc = inDesc;
     GrCacheData cacheData(GrCacheData::kScratch_CacheID);
 
+    GrAssert((desc.fFlags & kRenderTarget_GrTextureFlagBit) ||
+             !(desc.fFlags & kNoStencil_GrTextureFlagBit));
+
     if (kExact_ScratchTexMatch != match) {
         // bin by pow2 with a reasonable min
         static const int MIN_SIZE = 256;
@@ -413,11 +416,12 @@
         if (NULL != resource || kExact_ScratchTexMatch == match) {
             break;
         }
-        if (!(desc.fFlags & kRenderTarget_GrTextureFlagBit)) {
-            desc.fFlags = desc.fFlags | kRenderTarget_GrTextureFlagBit;
-        } else if (desc.fFlags & kNoStencil_GrTextureFlagBit) {
+        // We no longer try to reuse textures that were previously used as render targets in 
+        // situations where no RT is needed; doing otherwise can confuse the video driver and
+        // cause significant performance problems in some cases.
+        if (desc.fFlags & kNoStencil_GrTextureFlagBit) {
             desc.fFlags = desc.fFlags & ~kNoStencil_GrTextureFlagBit;
-        } else if (!doubledW) {
+        } else if (!doubledW) { 
             desc.fFlags = inDesc.fFlags;
             desc.fWidth *= 2;
             doubledW = true;