Move generateMipmap to storage interface base class.

Using a little bit more of code repetition allows us to move the
implementation of the mipmaps to a simple virtual interface in
TextureStorage.

BUG=angle:741

Change-Id: I7661d0cc3bdb02b646da0802cba285650d7832b2
Reviewed-on: https://chromium-review.googlesource.com/218314
Reviewed-by: Brandon Jones <bajones@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/libGLESv2/renderer/d3d/TextureD3D.cpp
index f0a1bf5..f18eeca 100644
--- a/src/libGLESv2/renderer/d3d/TextureD3D.cpp
+++ b/src/libGLESv2/renderer/d3d/TextureD3D.cpp
@@ -501,10 +501,9 @@
 
     if (mTexStorage && mTexStorage->isRenderTarget())
     {
+        mTexStorage->getStorageInstance()->generateMipmaps();
         for (int level = 1; level < levelCount; level++)
         {
-            mTexStorage->generateMipmap(level);
-
             mImageArray[level]->markClean();
         }
     }
@@ -1000,12 +999,12 @@
 
     if (mTexStorage && mTexStorage->isRenderTarget())
     {
+        mTexStorage->getStorageInstance()->generateMipmaps();
+
         for (int faceIndex = 0; faceIndex < 6; faceIndex++)
         {
             for (int level = 1; level < levelCount; level++)
             {
-                mTexStorage->generateMipmap(faceIndex, level);
-
                 mImageArray[faceIndex][level]->markClean();
             }
         }
@@ -1498,10 +1497,10 @@
 
     if (mTexStorage && mTexStorage->isRenderTarget())
     {
+        mTexStorage->getStorageInstance()->generateMipmaps();
+
         for (int level = 1; level < levelCount; level++)
         {
-            mTexStorage->generateMipmap(level);
-
             mImageArray[level]->markClean();
         }
     }
@@ -1982,10 +1981,10 @@
 
     if (mTexStorage && mTexStorage->isRenderTarget())
     {
+        mTexStorage->getStorageInstance()->generateMipmaps();
+
         for (int level = 1; level < levelCount; level++)
         {
-            mTexStorage->generateMipmap(level);
-
             for (int layer = 0; layer < mLayerCounts[level]; layer++)
             {
                 mImageArray[level][layer]->markClean();