Make the orientation of a texture accessible from and known by GrSurface.

R=robertphillips@google.com
Review URL: https://codereview.appspot.com/6801044

git-svn-id: http://skia.googlecode.com/svn/branches/gpu_dev@6148 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/gpu/GrRenderTarget.h b/include/gpu/GrRenderTarget.h
index 58a3aa5..2a6e62a 100644
--- a/include/gpu/GrRenderTarget.h
+++ b/include/gpu/GrRenderTarget.h
@@ -40,7 +40,7 @@
 
     // GrSurface overrides
     /**
-     * @return the texture associated with the rendertarget, may be NULL.
+     * @return the texture associated with the render target, may be NULL.
      */
     virtual GrTexture* asTexture() SK_OVERRIDE { return fTexture; }
     virtual const GrTexture* asTexture() const SK_OVERRIDE { return fTexture; }
@@ -75,7 +75,7 @@
     /**
      * If this RT is multisampled, this is the buffer it is resolved to.
      * Otherwise, same as getRenderTargetHandle().
-     * (In GL a separate FBO ID is used for the msaa and resolved buffers)
+     * (In GL a separate FBO ID is used for the MSAA and resolved buffers)
      * @return the 3D API's handle to this object (e.g. FBO ID in OpenGL)
      */
     virtual GrBackendObject getRenderTargetResolvedHandle() const = 0;
@@ -150,15 +150,16 @@
 protected:
     GrRenderTarget(GrGpu* gpu,
                    GrTexture* texture,
-                   const GrTextureDesc& desc)
-        : INHERITED(gpu, desc)
+                   const GrTextureDesc& desc,
+                   Origin origin)
+        : INHERITED(gpu, desc, origin)
         , fStencilBuffer(NULL)
         , fTexture(texture) {
         fResolveRect.setLargestInverted();
     }
 
     friend class GrTexture;
-    // When a texture unrefs an owned rendertarget this func
+    // When a texture unrefs an owned render target this func
     // removes the back pointer. This could be called from
     // texture's destructor but would have to be done in derived
     // classes. By the time of texture base destructor it has already
diff --git a/include/gpu/GrSurface.h b/include/gpu/GrSurface.h
index aa237ae..d7aa267 100644
--- a/include/gpu/GrSurface.h
+++ b/include/gpu/GrSurface.h
@@ -34,6 +34,22 @@
     int height() const { return fDesc.fHeight; }
 
     /**
+     * Some surfaces will be stored such that the upper and left edges of the content meet at the
+     * the origin (in texture coord space) and for other surfaces the lower and left edges meet at
+     * the origin. Render-targets are always consistent with the convention of the underlying
+     * backend API to make it easier to mix native backend rendering with Skia rendering. Wrapped
+     * backend surfaces always use the backend's convention as well.
+     */
+    enum Origin {
+        kTopLeft_Origin,
+        kBottomLeft_Origin,
+    };
+    Origin origin() const {
+        GrAssert(kTopLeft_Origin == fOrigin || kBottomLeft_Origin == fOrigin);
+        return fOrigin;
+    }
+
+    /**
      * Retrieves the pixel config specified when the surface was created.
      * For render targets this can be kUnknown_GrPixelConfig
      * if client asked us to render to a target that has a pixel
@@ -66,7 +82,7 @@
      * @param height        height of rectangle to read in pixels.
      * @param config        the pixel config of the destination buffer
      * @param buffer        memory to read the rectangle into.
-     * @param rowBytes      number of bytes bewtween consecutive rows. Zero means rows are tightly
+     * @param rowBytes      number of bytes between consecutive rows. Zero means rows are tightly
      *                      packed.
      * @param pixelOpsFlags See the GrContext::PixelOpsFlags enum.
      *
@@ -88,7 +104,7 @@
      * @param height        height of rectangle to write in pixels.
      * @param config        the pixel config of the source buffer
      * @param buffer        memory to read the rectangle from.
-     * @param rowBytes      number of bytes bewtween consecutive rows. Zero means rows are tightly
+     * @param rowBytes      number of bytes between consecutive rows. Zero means rows are tightly
      *                      packed.
      * @param pixelOpsFlags See the GrContext::PixelOpsFlags enum.
      */
@@ -99,14 +115,17 @@
                              uint32_t pixelOpsFlags = 0) = 0;
 
 protected:
-    GrTextureDesc fDesc;
-
-    GrSurface(GrGpu* gpu, const GrTextureDesc& desc)
+    GrSurface(GrGpu* gpu, const GrTextureDesc& desc, Origin origin)
     : INHERITED(gpu)
-    , fDesc(desc) {
+    , fDesc(desc)
+    , fOrigin(origin) {
     }
 
+    GrTextureDesc fDesc;
+
 private:
+    Origin fOrigin;
+
     typedef GrResource INHERITED;
 };
 
diff --git a/include/gpu/GrTexture.h b/include/gpu/GrTexture.h
index a8d67e7..65950a6 100644
--- a/include/gpu/GrTexture.h
+++ b/include/gpu/GrTexture.h
@@ -146,8 +146,8 @@
                                    // base class cons sets to NULL
                                    // subclass cons can create and set
 
-    GrTexture(GrGpu* gpu, const GrTextureDesc& desc)
-    : INHERITED(gpu, desc)
+    GrTexture(GrGpu* gpu, const GrTextureDesc& desc, Origin origin)
+    : INHERITED(gpu, desc, origin)
     , fRenderTarget(NULL) {
 
         // only make sense if alloc size is pow2
diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h
index 8bd1f2f..9723868 100644
--- a/include/gpu/GrTypes.h
+++ b/include/gpu/GrTypes.h
@@ -457,7 +457,7 @@
      * applies if the kRenderTarget_GrTextureFlagBit is set. The actual number
      * of samples may not exactly match the request. The request will be rounded
      * up to the next supported sample count, or down if it is larger than the
-     * max supportex count.
+     * max supported count.
      */
     int                    fSampleCnt;
 };