Commit 6b7440ca by Jamie Madill

Remove TextureStorage::GetActualLevelCount.

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