Commit da2b649c by Jamie Madill Committed by Commit Bot

Texture: Make ImageIndex store layer counts.

Only for 2D array textures. Bug: angleproject:3189 Change-Id: I9958ab60ffa464aa63f5cb321cbbe14b378f3647 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1709109 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com>
parent af80b781
...@@ -3818,7 +3818,7 @@ void Context::copyTexSubImage2D(TextureTarget target, ...@@ -3818,7 +3818,7 @@ void Context::copyTexSubImage2D(TextureTarget target,
Offset destOffset(xoffset, yoffset, 0); Offset destOffset(xoffset, yoffset, 0);
Rectangle sourceArea(x, y, width, height); Rectangle sourceArea(x, y, width, height);
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, 1);
Framebuffer *framebuffer = mState.getReadFramebuffer(); Framebuffer *framebuffer = mState.getReadFramebuffer();
Texture *texture = getTextureByTarget(target); Texture *texture = getTextureByTarget(target);
...@@ -3864,7 +3864,7 @@ void Context::framebufferTexture2D(GLenum target, ...@@ -3864,7 +3864,7 @@ void Context::framebufferTexture2D(GLenum target,
if (texture != 0) if (texture != 0)
{ {
Texture *textureObj = getTexture(texture); Texture *textureObj = getTexture(texture);
ImageIndex index = ImageIndex::MakeFromTarget(textarget, level); ImageIndex index = ImageIndex::MakeFromTarget(textarget, level, 1);
framebuffer->setAttachment(this, GL_TEXTURE, attachment, index, textureObj); framebuffer->setAttachment(this, GL_TEXTURE, attachment, index, textureObj);
} }
else else
......
...@@ -41,7 +41,7 @@ gl::ImageIndex GetImageIndex(EGLenum eglTarget, const egl::AttributeMap &attribs ...@@ -41,7 +41,7 @@ gl::ImageIndex GetImageIndex(EGLenum eglTarget, const egl::AttributeMap &attribs
else else
{ {
ASSERT(layer == 0); ASSERT(layer == 0);
return gl::ImageIndex::MakeFromTarget(target, mip); return gl::ImageIndex::MakeFromTarget(target, mip, 1);
} }
} }
......
...@@ -68,6 +68,18 @@ TextureTarget TextureTypeToTarget(TextureType type, GLint layerIndex) ...@@ -68,6 +68,18 @@ TextureTarget TextureTypeToTarget(TextureType type, GLint layerIndex)
return NonCubeTextureTypeToTarget(type); return NonCubeTextureTypeToTarget(type);
} }
} }
bool IsArrayTarget(TextureTarget target)
{
switch (target)
{
case TextureTarget::_2DArray:
case TextureTarget::_2DMultisampleArray:
return true;
default:
return false;
}
}
} // anonymous namespace } // anonymous namespace
ImageIndex::ImageIndex() ImageIndex::ImageIndex()
...@@ -164,9 +176,10 @@ ImageIndex ImageIndex::Make3D(GLint levelIndex, GLint layerIndex) ...@@ -164,9 +176,10 @@ ImageIndex ImageIndex::Make3D(GLint levelIndex, GLint layerIndex)
return ImageIndex(TextureType::_3D, levelIndex, layerIndex, 1); return ImageIndex(TextureType::_3D, levelIndex, layerIndex, 1);
} }
ImageIndex ImageIndex::MakeFromTarget(TextureTarget target, GLint levelIndex) ImageIndex ImageIndex::MakeFromTarget(TextureTarget target, GLint levelIndex, GLint depth)
{ {
return ImageIndex(TextureTargetToType(target), levelIndex, TextureTargetToLayer(target), 1); return ImageIndex(TextureTargetToType(target), levelIndex, TextureTargetToLayer(target),
IsArrayTarget(target) ? depth : 1);
} }
ImageIndex ImageIndex::MakeFromType(TextureType type, ImageIndex ImageIndex::MakeFromType(TextureType type,
......
...@@ -49,7 +49,7 @@ class ImageIndex ...@@ -49,7 +49,7 @@ class ImageIndex
static ImageIndex Make2DArray(GLint levelIndex, GLint layerIndex = kEntireLevel); static ImageIndex Make2DArray(GLint levelIndex, GLint layerIndex = kEntireLevel);
static ImageIndex Make2DArrayRange(GLint levelIndex, GLint layerIndex, GLint layerCount); static ImageIndex Make2DArrayRange(GLint levelIndex, GLint layerIndex, GLint layerCount);
static ImageIndex Make3D(GLint levelIndex, GLint layerIndex = kEntireLevel); static ImageIndex Make3D(GLint levelIndex, GLint layerIndex = kEntireLevel);
static ImageIndex MakeFromTarget(TextureTarget target, GLint levelIndex); static ImageIndex MakeFromTarget(TextureTarget target, GLint levelIndex, GLint depth);
static ImageIndex MakeFromType(TextureType type, static ImageIndex MakeFromType(TextureType type,
GLint levelIndex, GLint levelIndex,
GLint layerIndex = kEntireLevel, GLint layerIndex = kEntireLevel,
......
...@@ -1021,7 +1021,7 @@ angle::Result Texture::setImage(Context *context, ...@@ -1021,7 +1021,7 @@ angle::Result Texture::setImage(Context *context,
ANGLE_TRY(releaseTexImageInternal(context)); ANGLE_TRY(releaseTexImageInternal(context));
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, size.depth);
ANGLE_TRY(mTexture->setImage(context, index, internalFormat, size, format, type, unpackState, ANGLE_TRY(mTexture->setImage(context, index, internalFormat, size, format, type, unpackState,
pixels)); pixels));
...@@ -1050,7 +1050,7 @@ angle::Result Texture::setSubImage(Context *context, ...@@ -1050,7 +1050,7 @@ angle::Result Texture::setSubImage(Context *context,
ANGLE_TRY(ensureSubImageInitialized(context, target, level, area)); ANGLE_TRY(ensureSubImageInitialized(context, target, level, area));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, area.depth);
ANGLE_TRY(mTexture->setSubImage(context, index, area, format, type, unpackState, unpackBuffer, ANGLE_TRY(mTexture->setSubImage(context, index, area, format, type, unpackState, unpackBuffer,
pixels)); pixels));
...@@ -1077,7 +1077,7 @@ angle::Result Texture::setCompressedImage(Context *context, ...@@ -1077,7 +1077,7 @@ angle::Result Texture::setCompressedImage(Context *context,
ANGLE_TRY(releaseTexImageInternal(context)); ANGLE_TRY(releaseTexImageInternal(context));
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, size.depth);
ANGLE_TRY(mTexture->setCompressedImage(context, index, internalFormat, size, unpackState, ANGLE_TRY(mTexture->setCompressedImage(context, index, internalFormat, size, unpackState,
imageSize, pixels)); imageSize, pixels));
...@@ -1102,7 +1102,7 @@ angle::Result Texture::setCompressedSubImage(const Context *context, ...@@ -1102,7 +1102,7 @@ angle::Result Texture::setCompressedSubImage(const Context *context,
ANGLE_TRY(ensureSubImageInitialized(context, target, level, area)); ANGLE_TRY(ensureSubImageInitialized(context, target, level, area));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, area.depth);
ANGLE_TRY(mTexture->setCompressedSubImage(context, index, area, format, unpackState, imageSize, ANGLE_TRY(mTexture->setCompressedSubImage(context, index, area, format, unpackState, imageSize,
pixels)); pixels));
...@@ -1129,7 +1129,7 @@ angle::Result Texture::copyImage(Context *context, ...@@ -1129,7 +1129,7 @@ angle::Result Texture::copyImage(Context *context,
Box destBox(0, 0, 0, sourceArea.width, sourceArea.height, 1); Box destBox(0, 0, 0, sourceArea.width, sourceArea.height, 1);
ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox)); ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, 1);
ANGLE_TRY(mTexture->copyImage(context, index, sourceArea, internalFormat, source)); ANGLE_TRY(mTexture->copyImage(context, index, sourceArea, internalFormat, source));
...@@ -1190,7 +1190,7 @@ angle::Result Texture::copyTexture(Context *context, ...@@ -1190,7 +1190,7 @@ angle::Result Texture::copyTexture(Context *context,
// Note: we don't have a way to notify which portions of the image changed currently. // Note: we don't have a way to notify which portions of the image changed currently.
ANGLE_TRY(source->ensureInitialized(context)); ANGLE_TRY(source->ensureInitialized(context));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, ImageIndex::kEntireLevel);
ANGLE_TRY(mTexture->copyTexture(context, index, internalFormat, type, sourceLevel, unpackFlipY, ANGLE_TRY(mTexture->copyTexture(context, index, internalFormat, type, sourceLevel, unpackFlipY,
unpackPremultiplyAlpha, unpackUnmultiplyAlpha, source)); unpackPremultiplyAlpha, unpackUnmultiplyAlpha, source));
...@@ -1227,7 +1227,7 @@ angle::Result Texture::copySubTexture(const Context *context, ...@@ -1227,7 +1227,7 @@ angle::Result Texture::copySubTexture(const Context *context,
sourceBox.depth); sourceBox.depth);
ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox)); ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, sourceBox.depth);
ANGLE_TRY(mTexture->copySubTexture(context, index, destOffset, sourceLevel, sourceBox, ANGLE_TRY(mTexture->copySubTexture(context, index, destOffset, sourceLevel, sourceBox,
unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha,
...@@ -1300,7 +1300,7 @@ angle::Result Texture::setImageExternal(Context *context, ...@@ -1300,7 +1300,7 @@ angle::Result Texture::setImageExternal(Context *context,
ANGLE_TRY(releaseTexImageInternal(context)); ANGLE_TRY(releaseTexImageInternal(context));
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
ImageIndex index = ImageIndex::MakeFromTarget(target, level); ImageIndex index = ImageIndex::MakeFromTarget(target, level, size.depth);
ANGLE_TRY(mTexture->setImageExternal(context, index, internalFormat, size, format, type)); ANGLE_TRY(mTexture->setImageExternal(context, index, internalFormat, size, format, type));
...@@ -1807,8 +1807,9 @@ angle::Result Texture::ensureSubImageInitialized(const Context *context, ...@@ -1807,8 +1807,9 @@ angle::Result Texture::ensureSubImageInitialized(const Context *context,
// Pre-initialize the texture contents if necessary. // Pre-initialize the texture contents if necessary.
// TODO(jmadill): Check if area overlaps the entire texture. // TODO(jmadill): Check if area overlaps the entire texture.
ImageIndex imageIndex = ImageIndex::MakeFromTarget(target, static_cast<GLint>(level)); ImageIndex imageIndex =
const auto &desc = mState.getImageDesc(imageIndex); ImageIndex::MakeFromTarget(target, static_cast<GLint>(level), area.depth);
const auto &desc = mState.getImageDesc(imageIndex);
if (desc.initState == InitState::MayNeedInit) if (desc.initState == InitState::MayNeedInit)
{ {
ASSERT(mState.mInitState == InitState::MayNeedInit); ASSERT(mState.mInitState == InitState::MayNeedInit);
......
...@@ -2353,13 +2353,13 @@ angle::Result Renderer11::copyTexture(const gl::Context *context, ...@@ -2353,13 +2353,13 @@ angle::Result Renderer11::copyTexture(const gl::Context *context,
if (srcTarget == gl::TextureTarget::_2D || srcTarget == gl::TextureTarget::_3D) if (srcTarget == gl::TextureTarget::_2D || srcTarget == gl::TextureTarget::_3D)
{ {
gl::ImageIndex sourceIndex = gl::ImageIndex::MakeFromTarget(srcTarget, sourceLevel); gl::ImageIndex sourceIndex = gl::ImageIndex::MakeFromTarget(srcTarget, sourceLevel, 1);
UINT sourceSubresource = 0; UINT sourceSubresource = 0;
ANGLE_TRY( ANGLE_TRY(
sourceStorage11->getSubresourceIndex(context, sourceIndex, &sourceSubresource)); sourceStorage11->getSubresourceIndex(context, sourceIndex, &sourceSubresource));
gl::ImageIndex destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel); gl::ImageIndex destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel, 1);
UINT destSubresource = 0; UINT destSubresource = 0;
ANGLE_TRY(destStorage11->getSubresourceIndex(context, destIndex, &destSubresource)); ANGLE_TRY(destStorage11->getSubresourceIndex(context, destIndex, &destSubresource));
...@@ -2422,7 +2422,7 @@ angle::Result Renderer11::copyTexture(const gl::Context *context, ...@@ -2422,7 +2422,7 @@ angle::Result Renderer11::copyTexture(const gl::Context *context,
if (destTarget == gl::TextureTarget::_2D || destTarget == gl::TextureTarget::_3D || if (destTarget == gl::TextureTarget::_2D || destTarget == gl::TextureTarget::_3D ||
gl::IsCubeMapFaceTarget(destTarget)) gl::IsCubeMapFaceTarget(destTarget))
{ {
destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel); destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel, 1);
} }
else if (destTarget == gl::TextureTarget::_2DArray) else if (destTarget == gl::TextureTarget::_2DArray)
{ {
......
...@@ -333,7 +333,7 @@ angle::Result TextureVk::copyCompressedTexture(const gl::Context *context, ...@@ -333,7 +333,7 @@ angle::Result TextureVk::copyCompressedTexture(const gl::Context *context,
contextVk->getRenderer()->getFormat(internalFormat.sizedInternalFormat); contextVk->getRenderer()->getFormat(internalFormat.sizedInternalFormat);
const gl::Extents size(static_cast<int>(source->getWidth(sourceTarget, sourceLevel)), const gl::Extents size(static_cast<int>(source->getWidth(sourceTarget, sourceLevel)),
static_cast<int>(source->getHeight(sourceTarget, sourceLevel)), 1); static_cast<int>(source->getHeight(sourceTarget, sourceLevel)), 1);
const gl::ImageIndex destIndex = gl::ImageIndex::MakeFromTarget(sourceTarget, destLevel); const gl::ImageIndex destIndex = gl::ImageIndex::MakeFromTarget(sourceTarget, destLevel, 1);
ANGLE_TRY(redefineImage(context, destIndex, vkFormat, size)); ANGLE_TRY(redefineImage(context, destIndex, vkFormat, size));
......
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