Make CPU->GPU blur path use texture cache

Review URL: http://codereview.appspot.com/4730041/



git-svn-id: http://skia.googlecode.com/svn/trunk@1860 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrContext.cpp b/gpu/src/GrContext.cpp
index dc4bac8..0606689 100644
--- a/gpu/src/GrContext.cpp
+++ b/gpu/src/GrContext.cpp
@@ -1467,6 +1467,8 @@
     const GrTextureDesc desc = {
         kNone_GrTextureFlags, kNone_GrAALevel, width, height, config
     };
+    GrAutoUnlockTextureEntry aute(this, 
+                                  this->findApproximateKeylessTexture(desc));
     GrTexture* texture = fGpu->createTexture(desc, buffer, stride);
     if (NULL == texture) {
         return;
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 22cbaf0..386b409 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -1076,11 +1076,15 @@
         kAlpha_8_GrPixelConfig
     };
 
-    GrTexture* texture = context->createUncachedTexture(desc, dstM.fImage,
-                                                        dstM.fRowBytes);
+    GrAutoUnlockTextureEntry aute(context,
+                                  context->findApproximateKeylessTexture(desc));
+    GrTexture* texture = aute.texture();
+
     if (NULL == texture) {
         return false;
     }
+    texture->uploadTextureData(0, 0, desc.fWidth, desc.fHeight, 
+                               dstM.fImage, dstM.fRowBytes);
 
     if (grp->hasTextureOrMask() && ivm.invert(&ivm)) {
         grp->preConcatActiveSamplerMatrices(ivm);
@@ -1090,7 +1094,6 @@
     // we assume the last mask index is available for use
     GrAssert(NULL == grp->getMask(MASK_IDX));
     grp->setMask(MASK_IDX, texture);
-    texture->unref();
     grp->getMaskSampler(MASK_IDX)->setClampNoFilter();
 
     GrRect d;
@@ -1101,7 +1104,7 @@
 
     GrMatrix m;
     m.setTranslate(-dstM.fBounds.fLeft, -dstM.fBounds.fTop);
-    m.postIDiv(dstM.fBounds.width(), dstM.fBounds.height());
+    m.postIDiv(texture->width(), texture->height());
     grp->getMaskSampler(MASK_IDX)->setMatrix(m);
     
     context->drawRect(*grp, d);