Fix managed texturestorage textures

Trac #19259
Issue=268

managed textures need to be set on the images so they can be updated
properly and to avoid the additional system memory copy of the surfaces.
Also make sure track the managed state properly.

Signed-off-by: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/trunk@915 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 99bff4f..8706f18 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -123,6 +123,7 @@
 
     mSurface = newSurface;
     mDirty = false;
+    mManaged = false;
 }
 
 HRESULT Image::lock(D3DLOCKED_RECT *lockedRect, const RECT *rect)
@@ -1987,6 +1988,17 @@
     {
         mImageArray[level].redefine(GL_NONE, 0, 0, GL_UNSIGNED_BYTE, true);
     }
+
+    if (mTexture->isManaged())
+    {
+        int levels = levelCount();
+
+        for (int level = 0; level < levels; level++)
+        {
+            IDirect3DSurface9 *surface = mTexture->getSurfaceLevel(level);
+            mImageArray[level].setManagedSurface(surface);
+        }
+    }
 }
 
 // Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85.
@@ -2612,7 +2624,7 @@
             }
         }
     }
-    
+
     mDirtyImages = true;
 }
 
@@ -2836,7 +2848,7 @@
     mTexture = new TextureStorageCubeMap(levels, d3dfmt, size, mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
     mImmutable = true;
 
-    for (int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
+    for (int level = 0; level < levels; level++)
     {
         for (int face = 0; face < 6; face++)
         {
@@ -2852,6 +2864,20 @@
             mImageArray[face][level].redefine(GL_NONE, 0, 0, GL_UNSIGNED_BYTE, true);
         }
     }
+
+    if (mTexture->isManaged())
+    {
+        int levels = levelCount();
+
+        for (int face = 0; face < 6; face++)
+        {
+            for (int level = 0; level < levels; level++)
+            {
+                IDirect3DSurface9 *surface = mTexture->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level);
+                mImageArray[face][level].setManagedSurface(surface);
+            }
+        }
+    }
 }
 
 void TextureCubeMap::generateMipmaps()