Remove max level from texture storage.

BUG=angle:596

Change-Id: I174e3b73c0cb675b5c9aea5722a7051a34639831
Reviewed-on: https://chromium-review.googlesource.com/192340
Tested-by: Nicolas Capens <nicolascapens@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d11/Renderer11.cpp b/src/libGLESv2/renderer/d3d11/Renderer11.cpp
index f3a7027..3ba36d0 100644
--- a/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+++ b/src/libGLESv2/renderer/d3d11/Renderer11.cpp
@@ -3295,24 +3295,24 @@
     return new TextureStorage11_2D(this, swapChain11);
 }
 
-TextureStorage *Renderer11::createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
+TextureStorage *Renderer11::createTextureStorage2D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels)
 {
-    return new TextureStorage11_2D(this, maxLevel, internalformat, renderTarget, width, height);
+    return new TextureStorage11_2D(this, internalformat, renderTarget, width, height, levels);
 }
 
-TextureStorage *Renderer11::createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size)
+TextureStorage *Renderer11::createTextureStorageCube(GLenum internalformat, bool renderTarget, int size, int levels)
 {
-    return new TextureStorage11_Cube(this, maxLevel, internalformat, renderTarget, size);
+    return new TextureStorage11_Cube(this, internalformat, renderTarget, size, levels);
 }
 
-TextureStorage *Renderer11::createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
+TextureStorage *Renderer11::createTextureStorage3D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels)
 {
-    return new TextureStorage11_3D(this, maxLevel, internalformat, renderTarget, width, height, depth);
+    return new TextureStorage11_3D(this, internalformat, renderTarget, width, height, depth, levels);
 }
 
-TextureStorage *Renderer11::createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
+TextureStorage *Renderer11::createTextureStorage2DArray(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels)
 {
-    return new TextureStorage11_2DArray(this, maxLevel, internalformat, renderTarget, width, height, depth);
+    return new TextureStorage11_2DArray(this, internalformat, renderTarget, width, height, depth, levels);
 }
 
 void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResource, const gl::Rectangle &area,
diff --git a/src/libGLESv2/renderer/d3d11/Renderer11.h b/src/libGLESv2/renderer/d3d11/Renderer11.h
index 8be7e7c..5fa4dae 100644
--- a/src/libGLESv2/renderer/d3d11/Renderer11.h
+++ b/src/libGLESv2/renderer/d3d11/Renderer11.h
@@ -202,10 +202,10 @@
     virtual Image *createImage();
     virtual void generateMipmap(Image *dest, Image *source);
     virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
-    virtual TextureStorage *createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
-    virtual TextureStorage *createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size);
-    virtual TextureStorage *createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
-    virtual TextureStorage *createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
+    virtual TextureStorage *createTextureStorage2D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
+    virtual TextureStorage *createTextureStorageCube(GLenum internalformat, bool renderTarget, int size, int levels);
+    virtual TextureStorage *createTextureStorage3D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels);
+    virtual TextureStorage *createTextureStorage2DArray(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels);
 
     // Buffer creation
     virtual VertexBuffer *createVertexBuffer();
diff --git a/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp b/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
index ad493bd..0d634df 100644
--- a/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
+++ b/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
@@ -111,7 +111,7 @@
     return false;
 }
 
-int TextureStorage11::getMaxLevel() const
+int TextureStorage11::getLevelCount() const
 {
     return mMipLevels - mTopLevel;
 }
@@ -144,7 +144,7 @@
 void TextureStorage11::generateSwizzles(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha)
 {
     SwizzleCacheValue swizzleTarget(swizzleRed, swizzleGreen, swizzleBlue, swizzleAlpha);
-    for (int level = mTopLevel; level < getMaxLevel(); level++)
+    for (int level = 0; level < getLevelCount(); level++)
     {
         // Check if the swizzle for this level is out of date
         if (mSwizzleCache[level] != swizzleTarget)
@@ -315,7 +315,7 @@
     mDepthStencilFormat = DXGI_FORMAT_UNKNOWN;
 }
 
-TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
+TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels)
     : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
 {
     mTexture = NULL;
@@ -352,7 +352,7 @@
         D3D11_TEXTURE2D_DESC desc;
         desc.Width = width;      // Compressed texture size constraints?
         desc.Height = height;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = ((levels > 0) ? (mTopLevel + levels) : 0);
         desc.ArraySize = 1;
         desc.Format = mTextureFormat;
         desc.SampleDesc.Count = 1;
@@ -417,7 +417,7 @@
 
 RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
 {
-    if (level >= 0 && level < getMaxLevel())
+    if (level >= 0 && level < getLevelCount())
     {
         if (!mRenderTarget[level])
         {
@@ -543,7 +543,7 @@
         D3D11_TEXTURE2D_DESC desc;
         desc.Width = mTextureWidth;
         desc.Height = mTextureHeight;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = mMipLevels;
         desc.ArraySize = 1;
         desc.Format = mSwizzleTextureFormat;
         desc.SampleDesc.Count = 1;
@@ -567,7 +567,7 @@
 
 ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mSwizzleRenderTargets[mipLevel])
         {
@@ -597,7 +597,7 @@
 
 ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mLevelSRVs[mipLevel])
         {
@@ -632,7 +632,7 @@
     return 1;
 }
 
-TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size)
+TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels)
     : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
 {
     mTexture = NULL;
@@ -673,7 +673,7 @@
         D3D11_TEXTURE2D_DESC desc;
         desc.Width = size;
         desc.Height = size;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = ((levels > 0) ? (mTopLevel + levels) : 0);
         desc.ArraySize = 6;
         desc.Format = mTextureFormat;
         desc.SampleDesc.Count = 1;
@@ -735,7 +735,7 @@
 
 RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int level)
 {
-    if (level >= 0 && level < getMaxLevel())
+    if (level >= 0 && level < getLevelCount())
     {
         int faceIndex = gl::TextureCubeMap::targetToIndex(faceTarget);
         if (!mRenderTarget[faceIndex][level])
@@ -893,7 +893,7 @@
         D3D11_TEXTURE2D_DESC desc;
         desc.Width = mTextureWidth;
         desc.Height = mTextureHeight;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = mMipLevels;
         desc.ArraySize = 6;
         desc.Format = mSwizzleTextureFormat;
         desc.SampleDesc.Count = 1;
@@ -917,7 +917,7 @@
 
 ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mSwizzleRenderTargets[mipLevel])
         {
@@ -949,7 +949,7 @@
 
 ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mLevelSRVs[mipLevel])
         {
@@ -986,8 +986,8 @@
     return 6;
 }
 
-TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
-                                         GLsizei width, GLsizei height, GLsizei depth)
+TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, GLenum internalformat, bool renderTarget,
+                                         GLsizei width, GLsizei height, GLsizei depth, int levels)
     : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
 {
     mTexture = NULL;
@@ -1025,7 +1025,7 @@
         desc.Width = width;
         desc.Height = height;
         desc.Depth = depth;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = ((levels > 0) ? (mTopLevel + levels) : 0);
         desc.Format = mTextureFormat;
         desc.Usage = D3D11_USAGE_DEFAULT;
         desc.BindFlags = getBindFlags();
@@ -1128,7 +1128,7 @@
 
 RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mLevelRenderTargets[mipLevel])
         {
@@ -1180,7 +1180,7 @@
 
 RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         LevelLayerKey key(mipLevel, layer);
         if (mLevelLayerRenderTargets.find(key) == mLevelLayerRenderTargets.end())
@@ -1250,7 +1250,7 @@
         desc.Width = mTextureWidth;
         desc.Height = mTextureHeight;
         desc.Depth = mTextureDepth;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = mMipLevels;
         desc.Format = mSwizzleTextureFormat;
         desc.Usage = D3D11_USAGE_DEFAULT;
         desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
@@ -1271,7 +1271,7 @@
 
 ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mSwizzleRenderTargets[mipLevel])
         {
@@ -1303,7 +1303,7 @@
 
 ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mLevelSRVs[mipLevel])
         {
@@ -1339,8 +1339,8 @@
 }
 
 
-TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
-                                                   GLsizei width, GLsizei height, GLsizei depth)
+TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, GLenum internalformat, bool renderTarget,
+                                                   GLsizei width, GLsizei height, GLsizei depth, int levels)
     : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
 {
     mTexture = NULL;
@@ -1376,7 +1376,7 @@
         D3D11_TEXTURE2D_DESC desc;
         desc.Width = width;
         desc.Height = height;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = ((levels > 0) ? (mTopLevel + levels) : 0);
         desc.ArraySize = depth;
         desc.Format = mTextureFormat;
         desc.SampleDesc.Count = 1;
@@ -1483,7 +1483,7 @@
 
 RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int layer)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         LevelLayerKey key(mipLevel, layer);
         if (mRenderTargets.find(key) == mRenderTargets.end())
@@ -1569,7 +1569,7 @@
         D3D11_TEXTURE2D_DESC desc;
         desc.Width = mTextureWidth;
         desc.Height = mTextureHeight;
-        desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mTopLevel) : 0);
+        desc.MipLevels = mMipLevels;
         desc.ArraySize = mTextureDepth;
         desc.Format = mSwizzleTextureFormat;
         desc.SampleDesc.Count = 1;
@@ -1593,7 +1593,7 @@
 
 ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mSwizzleRenderTargets[mipLevel])
         {
@@ -1625,7 +1625,7 @@
 
 ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel)
 {
-    if (mipLevel >= 0 && mipLevel < getMaxLevel())
+    if (mipLevel >= 0 && mipLevel < getLevelCount())
     {
         if (!mLevelSRVs[mipLevel])
         {
diff --git a/src/libGLESv2/renderer/d3d11/TextureStorage11.h b/src/libGLESv2/renderer/d3d11/TextureStorage11.h
index 77c3734..7d2c503 100644
--- a/src/libGLESv2/renderer/d3d11/TextureStorage11.h
+++ b/src/libGLESv2/renderer/d3d11/TextureStorage11.h
@@ -44,7 +44,7 @@
     virtual int getTopLevel() const;
     virtual bool isRenderTarget() const;
     virtual bool isManaged() const;
-    virtual int getMaxLevel() const;
+    virtual int getLevelCount() const;
     UINT getSubresourceIndex(int mipLevel, int layerTarget) const;
 
     void generateSwizzles(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha);
@@ -109,7 +109,7 @@
 {
   public:
     TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain);
-    TextureStorage11_2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
+    TextureStorage11_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
     virtual ~TextureStorage11_2D();
 
     static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage);
@@ -144,7 +144,7 @@
 class TextureStorage11_Cube : public TextureStorage11
 {
   public:
-    TextureStorage11_Cube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size);
+    TextureStorage11_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels);
     virtual ~TextureStorage11_Cube();
 
     static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage);
@@ -179,8 +179,8 @@
 class TextureStorage11_3D : public TextureStorage11
 {
   public:
-    TextureStorage11_3D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
-                        GLsizei width, GLsizei height, GLsizei depth);
+    TextureStorage11_3D(Renderer *renderer, GLenum internalformat, bool renderTarget,
+                        GLsizei width, GLsizei height, GLsizei depth, int levels);
     virtual ~TextureStorage11_3D();
 
     static TextureStorage11_3D *makeTextureStorage11_3D(TextureStorage *storage);
@@ -220,8 +220,8 @@
 class TextureStorage11_2DArray : public TextureStorage11
 {
   public:
-    TextureStorage11_2DArray(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
-                             GLsizei width, GLsizei height, GLsizei depth);
+    TextureStorage11_2DArray(Renderer *renderer, GLenum internalformat, bool renderTarget,
+                             GLsizei width, GLsizei height, GLsizei depth, int levels);
     virtual ~TextureStorage11_2DArray();
 
     static TextureStorage11_2DArray *makeTextureStorage11_2DArray(TextureStorage *storage);