Commit a0633a7e by Geoff Lang

In TextureD3D_2D, don't call Image::redefine directly.

Call the TextureD3D_2D::redefine member which will not make unnecessary modifications to the image and lets the member serve as a callback for redefined images. BUG=angleproject:970 Change-Id: I280c18b993ef4dfac2efe1b28bf28c34aa4b6bcc Reviewed-on: https://chromium-review.googlesource.com/293222Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 61f51dc1
...@@ -707,7 +707,7 @@ gl::Error TextureD3D_2D::setImage(GLenum target, ...@@ -707,7 +707,7 @@ gl::Error TextureD3D_2D::setImage(GLenum target,
bool fastUnpacked = false; bool fastUnpacked = false;
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
redefineImage(level, sizedInternalFormat, size); redefineImage(level, sizedInternalFormat, size, false);
gl::ImageIndex index = gl::ImageIndex::Make2D(level); gl::ImageIndex index = gl::ImageIndex::Make2D(level);
...@@ -797,7 +797,7 @@ gl::Error TextureD3D_2D::setCompressedImage(GLenum target, ...@@ -797,7 +797,7 @@ gl::Error TextureD3D_2D::setCompressedImage(GLenum target,
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
// compressed formats don't have separate sized internal formats-- we can just use the compressed format directly // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
redefineImage(level, internalFormat, size); redefineImage(level, internalFormat, size, false);
return TextureD3D::setCompressedImage(gl::ImageIndex::Make2D(level), unpack, pixels, 0); return TextureD3D::setCompressedImage(gl::ImageIndex::Make2D(level), unpack, pixels, 0);
} }
...@@ -827,7 +827,8 @@ gl::Error TextureD3D_2D::copyImage(GLenum target, ...@@ -827,7 +827,8 @@ gl::Error TextureD3D_2D::copyImage(GLenum target,
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalFormat, GL_UNSIGNED_BYTE); GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalFormat, GL_UNSIGNED_BYTE);
redefineImage(level, sizedInternalFormat, gl::Extents(sourceArea.width, sourceArea.height, 1)); redefineImage(level, sizedInternalFormat, gl::Extents(sourceArea.width, sourceArea.height, 1),
false);
gl::ImageIndex index = gl::ImageIndex::Make2D(level); gl::ImageIndex index = gl::ImageIndex::Make2D(level);
gl::Offset destOffset(0, 0, 0); gl::Offset destOffset(0, 0, 0);
...@@ -931,12 +932,12 @@ gl::Error TextureD3D_2D::setStorage(GLenum target, size_t levels, GLenum interna ...@@ -931,12 +932,12 @@ gl::Error TextureD3D_2D::setStorage(GLenum target, size_t levels, GLenum interna
gl::Extents levelSize(std::max(1, size.width >> level), gl::Extents levelSize(std::max(1, size.width >> level),
std::max(1, size.height >> level), std::max(1, size.height >> level),
1); 1);
mImageArray[level]->redefine(GL_TEXTURE_2D, internalFormat, levelSize, true); redefineImage(level, internalFormat, levelSize, true);
} }
for (size_t level = levels; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (size_t level = levels; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{ {
mImageArray[level]->redefine(GL_TEXTURE_2D, GL_NONE, gl::Extents(0, 0, 0), true); redefineImage(level, GL_NONE, gl::Extents(0, 0, 1), true);
} }
// TODO(geofflang): Verify storage creation had no errors // TODO(geofflang): Verify storage creation had no errors
...@@ -968,7 +969,7 @@ void TextureD3D_2D::bindTexImage(egl::Surface *surface) ...@@ -968,7 +969,7 @@ void TextureD3D_2D::bindTexImage(egl::Surface *surface)
GLenum internalformat = surface->getConfig()->renderTargetFormat; GLenum internalformat = surface->getConfig()->renderTargetFormat;
gl::Extents size(surface->getWidth(), surface->getHeight(), 1); gl::Extents size(surface->getWidth(), surface->getHeight(), 1);
mImageArray[0]->redefine(GL_TEXTURE_2D, internalformat, size, true); redefineImage(0, internalformat, size, true);
if (mTexStorage) if (mTexStorage)
{ {
...@@ -1012,7 +1013,7 @@ void TextureD3D_2D::initMipmapsImages() ...@@ -1012,7 +1013,7 @@ void TextureD3D_2D::initMipmapsImages()
std::max(getBaseLevelHeight() >> level, 1), std::max(getBaseLevelHeight() >> level, 1),
1); 1);
redefineImage(level, getBaseLevelInternalFormat(), levelSize); redefineImage(level, getBaseLevelInternalFormat(), levelSize, false);
} }
} }
...@@ -1222,7 +1223,10 @@ gl::Error TextureD3D_2D::updateStorageLevel(int level) ...@@ -1222,7 +1223,10 @@ gl::Error TextureD3D_2D::updateStorageLevel(int level)
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
void TextureD3D_2D::redefineImage(GLint level, GLenum internalformat, const gl::Extents &size) void TextureD3D_2D::redefineImage(GLint level,
GLenum internalformat,
const gl::Extents &size,
bool forceRelease)
{ {
ASSERT(size.depth == 1); ASSERT(size.depth == 1);
...@@ -1231,7 +1235,7 @@ void TextureD3D_2D::redefineImage(GLint level, GLenum internalformat, const gl:: ...@@ -1231,7 +1235,7 @@ void TextureD3D_2D::redefineImage(GLint level, GLenum internalformat, const gl::
const int storageHeight = std::max(1, getBaseLevelHeight() >> level); const int storageHeight = std::max(1, getBaseLevelHeight() >> level);
const GLenum storageFormat = getBaseLevelInternalFormat(); const GLenum storageFormat = getBaseLevelInternalFormat();
mImageArray[level]->redefine(GL_TEXTURE_2D, internalformat, size, false); mImageArray[level]->redefine(GL_TEXTURE_2D, internalformat, size, forceRelease);
if (mTexStorage) if (mTexStorage)
{ {
......
...@@ -169,7 +169,10 @@ class TextureD3D_2D : public TextureD3D ...@@ -169,7 +169,10 @@ class TextureD3D_2D : public TextureD3D
gl::Error updateStorageLevel(int level); gl::Error updateStorageLevel(int level);
void redefineImage(GLint level, GLenum internalformat, const gl::Extents &size); void redefineImage(GLint level,
GLenum internalformat,
const gl::Extents &size,
bool forceRelease);
ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
......
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