Commit 6948e301 by Jamie Madill

Use immutable level count in gl::Texture.

Instead of storing a binary flag indicating if we've created immutable storage, store a level count. This indicates if or if not we've created immutable storage, as well as avoiding the call to the native storage to return the level count. BUG=angle:781 Change-Id: I08a6bd086d00ddf3255262a7711628be5212b4b7 Reviewed-on: https://chromium-review.googlesource.com/222921Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org>
parent 88d3b8cb
...@@ -51,7 +51,7 @@ Texture::Texture(rx::TextureImpl *impl, GLuint id, GLenum target) ...@@ -51,7 +51,7 @@ Texture::Texture(rx::TextureImpl *impl, GLuint id, GLenum target)
: RefCountObject(id), : RefCountObject(id),
mTexture(impl), mTexture(impl),
mUsage(GL_NONE), mUsage(GL_NONE),
mImmutable(false), mImmutableLevelCount(0),
mTarget(target) mTarget(target)
{ {
} }
...@@ -162,12 +162,12 @@ unsigned int Texture::getTextureSerial() ...@@ -162,12 +162,12 @@ unsigned int Texture::getTextureSerial()
bool Texture::isImmutable() const bool Texture::isImmutable() const
{ {
return mImmutable; return (mImmutableLevelCount > 0);
} }
int Texture::immutableLevelCount() int Texture::immutableLevelCount()
{ {
return (mImmutable ? getNativeTexture()->getLevelCount() : 0); return mImmutableLevelCount;
} }
int Texture::mipLevels() const int Texture::mipLevels() const
...@@ -290,7 +290,7 @@ Error Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, G ...@@ -290,7 +290,7 @@ Error Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, G
return error; return error;
} }
mImmutable = true; mImmutableLevelCount = levels;
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
...@@ -551,7 +551,7 @@ Error TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei siz ...@@ -551,7 +551,7 @@ Error TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei siz
return error; return error;
} }
mImmutable = true; mImmutableLevelCount = levels;
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
...@@ -760,7 +760,7 @@ Error Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, G ...@@ -760,7 +760,7 @@ Error Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, G
return error; return error;
} }
mImmutable = true; mImmutableLevelCount = levels;
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
...@@ -927,7 +927,7 @@ Error Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei wid ...@@ -927,7 +927,7 @@ Error Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei wid
return error; return error;
} }
mImmutable = true; mImmutableLevelCount = levels;
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
......
...@@ -77,7 +77,7 @@ class Texture : public RefCountObject ...@@ -77,7 +77,7 @@ class Texture : public RefCountObject
unsigned int getTextureSerial(); unsigned int getTextureSerial();
bool isImmutable() const; bool isImmutable() const;
int immutableLevelCount(); GLsizei immutableLevelCount();
rx::TextureImpl *getImplementation() { return mTexture; } rx::TextureImpl *getImplementation() { return mTexture; }
const rx::TextureImpl *getImplementation() const { return mTexture; } const rx::TextureImpl *getImplementation() const { return mTexture; }
...@@ -92,7 +92,7 @@ class Texture : public RefCountObject ...@@ -92,7 +92,7 @@ class Texture : public RefCountObject
SamplerState mSamplerState; SamplerState mSamplerState;
GLenum mUsage; GLenum mUsage;
bool mImmutable; GLsizei mImmutableLevelCount;
GLenum mTarget; GLenum mTarget;
......
...@@ -3165,7 +3165,7 @@ void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) ...@@ -3165,7 +3165,7 @@ void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
context->recordError(gl::Error(GL_INVALID_ENUM)); context->recordError(gl::Error(GL_INVALID_ENUM));
return; return;
} }
*params = texture->immutableLevelCount(); *params = static_cast<GLint>(texture->immutableLevelCount());
break; break;
case GL_TEXTURE_USAGE_ANGLE: case GL_TEXTURE_USAGE_ANGLE:
*params = texture->getUsage(); *params = texture->getUsage();
......
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