Commit 6b7440ca by Jamie Madill

Remove TextureStorage::GetActualLevelCount.

TRAC #23978
parent 4cfff5f3
......@@ -336,15 +336,10 @@ int Texture::immutableLevelCount()
GLint Texture::creationLevels(GLsizei width, GLsizei height, GLsizei depth) const
{
// NPOT checks are not required in ES 3.0, NPOT texture support is assumed.
return 0; // Maximum number of levels
}
GLint Texture::creationLevels(GLsizei width, GLsizei height) const
{
if ((isPow2(width) && isPow2(height)) || mRenderer->getNonPower2TextureSupport())
if ((isPow2(width) && isPow2(height) && isPow2(depth)) || mRenderer->getNonPower2TextureSupport())
{
return 0; // Maximum number of levels
// Maximum number of levels
return static_cast<GLint>(log2(std::max(std::max(width, height), depth)));
}
else
{
......@@ -353,14 +348,9 @@ GLint Texture::creationLevels(GLsizei width, GLsizei height) const
}
}
GLint Texture::creationLevels(GLsizei size) const
{
return creationLevels(size, size);
}
int Texture::mipLevels() const
{
return log2(std::max(std::max(getBaseLevelWidth(), getBaseLevelHeight()), getBaseLevelDepth()));
return static_cast<int>(log2(std::max(std::max(getBaseLevelWidth(), getBaseLevelHeight()), getBaseLevelDepth())));
}
Texture2D::Texture2D(rx::Renderer *renderer, GLuint id) : Texture(renderer, id, GL_TEXTURE_2D)
......@@ -845,7 +835,7 @@ rx::TextureStorageInterface2D *Texture2D::createCompleteStorage(bool renderTarge
ASSERT(width > 0 && height > 0);
// use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height));
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, 1));
return new rx::TextureStorageInterface2D(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, width, height);
}
......@@ -1297,7 +1287,7 @@ rx::TextureStorageInterfaceCube *TextureCubeMap::createCompleteStorage(bool rend
ASSERT(size > 0);
// use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(size));
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(size, size, 1));
return new rx::TextureStorageInterfaceCube(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, size);
}
......@@ -2574,7 +2564,7 @@ rx::TextureStorageInterface2DArray *Texture2DArray::createCompleteStorage(bool r
ASSERT(width > 0 && height > 0 && depth > 0);
// use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height));
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, 1));
return new rx::TextureStorageInterface2DArray(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, width, height, depth);
}
......
......@@ -123,8 +123,6 @@ class Texture : public RefCountObject
GLenum sizedInternalFormat, GLenum type, rx::RenderTarget *destRenderTarget);
GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const;
GLint creationLevels(GLsizei width, GLsizei height) const;
GLint creationLevels(GLsizei size) const;
int mipLevels() const;
virtual void initializeStorage(bool renderTarget) = 0;
......
......@@ -67,12 +67,6 @@ int TextureStorageInterface::getMaxLevel() const
return mInstance->getMaxLevel();
}
static unsigned int GetActualLevelCount(GLsizei width, GLsizei height, GLsizei depth, int baseLevel, int maxLevel)
{
int levelCount = maxLevel - baseLevel;
return (levelCount <= 0) ? std::max(std::max(gl::log2(width), gl::log2(height)), gl::log2(depth)) : levelCount;
}
TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapChain *swapchain)
{
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(1);
......@@ -82,10 +76,8 @@ TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapCha
TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{
unsigned int actualLevels = GetActualLevelCount(width, height, 0, baseLevel, maxLevel);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(actualLevels);
mInstance = renderer->createTextureStorage2D(baseLevel, maxLevel, internalformat, renderTarget, width, height);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount()));
}
TextureStorageInterface2D::~TextureStorageInterface2D()
......@@ -109,10 +101,8 @@ unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLint level) const
TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size)
{
unsigned int actualLevels = GetActualLevelCount(size, size, 0, baseLevel, maxLevel);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(actualLevels * 6);
mInstance = renderer->createTextureStorageCube(baseLevel, maxLevel, internalformat, renderTarget, size);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * 6));
}
TextureStorageInterfaceCube::~TextureStorageInterfaceCube()
......@@ -137,10 +127,9 @@ unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target, G
TextureStorageInterface3D::TextureStorageInterface3D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth)
{
mLevels = GetActualLevelCount(width, height, depth, baseLevel, maxLevel);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(mLevels * depth);
mInstance = renderer->createTextureStorage3D(baseLevel, maxLevel, internalformat, renderTarget, width, height, depth);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * depth));
}
TextureStorageInterface3D::~TextureStorageInterface3D()
......@@ -164,16 +153,14 @@ RenderTarget *TextureStorageInterface3D::getRenderTarget(GLint level, GLint laye
unsigned int TextureStorageInterface3D::getRenderTargetSerial(GLint level, GLint layer) const
{
return mFirstRenderTargetSerial + (layer * mLevels) + level;
return mFirstRenderTargetSerial + static_cast<unsigned int>((layer * mInstance->levelCount()) + level);
}
TextureStorageInterface2DArray::TextureStorageInterface2DArray(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth)
{
mLevels = GetActualLevelCount(width, height, 0, baseLevel, maxLevel);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(mLevels * depth);
mInstance = renderer->createTextureStorage2DArray(baseLevel, maxLevel, internalformat, renderTarget, width, height, depth);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * depth));
}
TextureStorageInterface2DArray::~TextureStorageInterface2DArray()
......@@ -192,7 +179,7 @@ RenderTarget *TextureStorageInterface2DArray::getRenderTarget(GLint level, GLint
unsigned int TextureStorageInterface2DArray::getRenderTargetSerial(GLint level, GLint layer) const
{
return mFirstRenderTargetSerial + (layer * mLevels) + level;
return mFirstRenderTargetSerial + static_cast<unsigned int>((layer * mInstance->levelCount()) + level);
}
}
......@@ -31,6 +31,8 @@ class TextureStorage
virtual int getBaseLevel() const = 0;
virtual int getMaxLevel() const = 0;
int levelCount() const { return getMaxLevel() - getBaseLevel(); }
virtual RenderTarget *getRenderTarget(int level) = 0;
virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level) = 0;
virtual RenderTarget *getRenderTargetLayer(int mipLevel, int layer) = 0;
......@@ -121,7 +123,6 @@ class TextureStorageInterface3D : public TextureStorageInterface
private:
DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface3D);
unsigned int mLevels;
unsigned int mFirstRenderTargetSerial;
};
......@@ -140,7 +141,6 @@ class TextureStorageInterface2DArray : public TextureStorageInterface
private:
DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface2DArray);
unsigned int mLevels;
unsigned int mFirstRenderTargetSerial;
};
......
......@@ -266,7 +266,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int baseLevel, int
D3D11_TEXTURE2D_DESC desc;
desc.Width = width; // Compressed texture size constraints?
desc.Height = height;
desc.MipLevels = ((maxLevel > 0) ? (maxLevel + mLodOffset - baseLevel) : 0);
desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mLodOffset) : 0);
desc.ArraySize = 1;
desc.Format = mTextureFormat;
desc.SampleDesc.Count = 1;
......@@ -472,7 +472,7 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int baseLevel,
D3D11_TEXTURE2D_DESC desc;
desc.Width = size;
desc.Height = size;
desc.MipLevels = ((maxLevel > 0) ? (maxLevel + mLodOffset - baseLevel) : 0);
desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mLodOffset) : 0);
desc.ArraySize = 6;
desc.Format = mTextureFormat;
desc.SampleDesc.Count = 1;
......@@ -681,7 +681,7 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int baseLevel, int
desc.Width = width;
desc.Height = height;
desc.Depth = depth;
desc.MipLevels = ((maxLevel > 0) ? (maxLevel + mLodOffset - baseLevel) : 0);
desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mLodOffset) : 0);
desc.Format = mTextureFormat;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = getBindFlags();
......@@ -913,7 +913,7 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int baseL
D3D11_TEXTURE2D_DESC desc;
desc.Width = width;
desc.Height = height;
desc.MipLevels = ((maxLevel > 0) ? (maxLevel + mLodOffset - baseLevel) : 0);
desc.MipLevels = ((levelCount() > 0) ? (levelCount() + mLodOffset) : 0);
desc.ArraySize = depth;
desc.Format = mTextureFormat;
desc.SampleDesc.Count = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment