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);