Commit f4e794ec 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: I511310ebfd4d6133219bbef82c53747f9454aee0 Reviewed-on: https://chromium-review.googlesource.com/293904Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 87d3fe04
......@@ -707,7 +707,7 @@ gl::Error TextureD3D_2D::setImage(GLenum target,
bool fastUnpacked = false;
GLint level = static_cast<GLint>(imageLevel);
redefineImage(level, sizedInternalFormat, size);
redefineImage(level, sizedInternalFormat, size, false);
gl::ImageIndex index = gl::ImageIndex::Make2D(level);
......@@ -797,7 +797,7 @@ gl::Error TextureD3D_2D::setCompressedImage(GLenum target,
GLint level = static_cast<GLint>(imageLevel);
// 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);
}
......@@ -827,7 +827,8 @@ gl::Error TextureD3D_2D::copyImage(GLenum target,
GLint level = static_cast<GLint>(imageLevel);
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::Offset destOffset(0, 0, 0);
......@@ -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),
std::max(1, size.height >> level),
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++)
{
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
......@@ -968,7 +969,7 @@ void TextureD3D_2D::bindTexImage(egl::Surface *surface)
GLenum internalformat = surface->getConfig()->renderTargetFormat;
gl::Extents size(surface->getWidth(), surface->getHeight(), 1);
mImageArray[0]->redefine(GL_TEXTURE_2D, internalformat, size, true);
redefineImage(0, internalformat, size, true);
if (mTexStorage)
{
......@@ -1012,7 +1013,7 @@ void TextureD3D_2D::initMipmapsImages()
std::max(getBaseLevelHeight() >> level, 1),
1);
redefineImage(level, getBaseLevelInternalFormat(), levelSize);
redefineImage(level, getBaseLevelInternalFormat(), levelSize, false);
}
}
......@@ -1222,7 +1223,10 @@ gl::Error TextureD3D_2D::updateStorageLevel(int level)
return gl::Error(GL_NO_ERROR);
}
void TextureD3D_2D::redefineImage(GLint level, GLenum internalformat, const gl::Extents &size)
void TextureD3D_2D::redefineImage(size_t level,
GLenum internalformat,
const gl::Extents &size,
bool forceRelease)
{
ASSERT(size.depth == 1);
......@@ -1231,18 +1235,18 @@ void TextureD3D_2D::redefineImage(GLint level, GLenum internalformat, const gl::
const int storageHeight = std::max(1, getBaseLevelHeight() >> level);
const GLenum storageFormat = getBaseLevelInternalFormat();
mImageArray[level]->redefine(GL_TEXTURE_2D, internalformat, size, false);
mImageArray[level]->redefine(GL_TEXTURE_2D, internalformat, size, forceRelease);
if (mTexStorage)
{
const int storageLevels = mTexStorage->getLevelCount();
const size_t storageLevels = mTexStorage->getLevelCount();
if ((level >= storageLevels && storageLevels != 0) ||
size.width != storageWidth ||
size.height != storageHeight ||
internalformat != storageFormat) // Discard mismatched storage
{
for (int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
for (size_t i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{
mImageArray[i]->markDirty();
}
......
......@@ -169,7 +169,10 @@ class TextureD3D_2D : public TextureD3D
gl::Error updateStorageLevel(int level);
void redefineImage(GLint level, GLenum internalformat, const gl::Extents &size);
void redefineImage(size_t level,
GLenum internalformat,
const gl::Extents &size,
bool forceRelease);
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