diff --git a/src/image/SkImage_Gpu.h b/src/image/SkImage_Gpu.h
index 7b38e60..972cd3c 100644
--- a/src/image/SkImage_Gpu.h
+++ b/src/image/SkImage_Gpu.h
@@ -19,32 +19,38 @@
 public:
     SK_DECLARE_INST_COUNT(SkImage_Gpu)
 
-    SkImage_Gpu(const SkBitmap&, int sampleCountForNewSurfaces, SkSurface::Budgeted);
-
-    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override;
-    GrTexture* onGetTexture() const override;
-    bool getROPixels(SkBitmap*) const override;
-
-    GrTexture* getTexture() const { return fBitmap.getTexture(); }
-
-    SkShader* onNewShader(SkShader::TileMode,
-                                  SkShader::TileMode,
-                                  const SkMatrix* localMatrix) const override;
-
-    bool isOpaque() const override;
+    /**
+     *  An "image" can be a subset/window into a larger texture, so we explicit take the
+     *  width and height.
+     */
+    SkImage_Gpu(int w, int h, SkAlphaType, GrTexture*, int sampleCountForNewSurfaces,
+                SkSurface::Budgeted);
 
     void applyBudgetDecision() const {
+        GrTexture* tex = this->getTexture();
+        SkASSERT(tex);
         if (fBudgeted) {
-            fBitmap.getTexture()->resourcePriv().makeBudgeted();
+            tex->resourcePriv().makeBudgeted();
         } else {
-            fBitmap.getTexture()->resourcePriv().makeUnbudgeted();
+            tex->resourcePriv().makeUnbudgeted();
         }
     }
 
+    bool getROPixels(SkBitmap*) const override;
+    GrTexture* onGetTexture() const override { return fTexture; }
+    SkShader* onNewShader(SkShader::TileMode,
+                          SkShader::TileMode,
+                          const SkMatrix* localMatrix) const override;
+    bool isOpaque() const override;
+    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override;
+    bool onReadPixels(const SkImageInfo&, void* dstPixels, size_t dstRowBytes,
+                      int srcX, int srcY) const override;
+
 private:
-    SkBitmap            fBitmap;
-    const int           fSampleCountForNewSurfaces;   // 0 if we don't know
-    SkSurface::Budgeted fBudgeted;
+    SkAutoTUnref<GrTexture> fTexture;
+    const int               fSampleCountForNewSurfaces;   // 0 if we don't know
+    const SkAlphaType       fAlphaType;
+    SkSurface::Budgeted     fBudgeted;
 
     typedef SkImage_Base INHERITED;
 };
