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,
Offset destOffset(xoffset, yoffset, 0);
Rectangle sourceArea(x, y, width, height);
ImageIndex index = ImageIndex::MakeFromTarget(target, level);
ImageIndex index = ImageIndex::MakeFromTarget(target, level, 1);
Framebuffer *framebuffer = mState.getReadFramebuffer();
Texture *texture = getTextureByTarget(target);
......@@ -3864,7 +3864,7 @@ void Context::framebufferTexture2D(GLenum target,
if (texture != 0)
{
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);
}
else
......
......@@ -41,7 +41,7 @@ gl::ImageIndex GetImageIndex(EGLenum eglTarget, const egl::AttributeMap &attribs
else
{
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)
return NonCubeTextureTypeToTarget(type);
}
}
bool IsArrayTarget(TextureTarget target)
{
switch (target)
{
case TextureTarget::_2DArray:
case TextureTarget::_2DMultisampleArray:
return true;
default:
return false;
}
}
} // anonymous namespace
ImageIndex::ImageIndex()
......@@ -164,9 +176,10 @@ ImageIndex ImageIndex::Make3D(GLint levelIndex, GLint layerIndex)
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,
......
......@@ -49,7 +49,7 @@ class ImageIndex
static ImageIndex Make2DArray(GLint levelIndex, GLint layerIndex = kEntireLevel);
static ImageIndex Make2DArrayRange(GLint levelIndex, GLint layerIndex, GLint layerCount);
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,
GLint levelIndex,
GLint layerIndex = kEntireLevel,
......
......@@ -1021,7 +1021,7 @@ angle::Result Texture::setImage(Context *context,
ANGLE_TRY(releaseTexImageInternal(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,
pixels));
......@@ -1050,7 +1050,7 @@ angle::Result Texture::setSubImage(Context *context,
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,
pixels));
......@@ -1077,7 +1077,7 @@ angle::Result Texture::setCompressedImage(Context *context,
ANGLE_TRY(releaseTexImageInternal(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,
imageSize, pixels));
......@@ -1102,7 +1102,7 @@ angle::Result Texture::setCompressedSubImage(const Context *context,
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,
pixels));
......@@ -1129,7 +1129,7 @@ angle::Result Texture::copyImage(Context *context,
Box destBox(0, 0, 0, sourceArea.width, sourceArea.height, 1);
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));
......@@ -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.
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,
unpackPremultiplyAlpha, unpackUnmultiplyAlpha, source));
......@@ -1227,7 +1227,7 @@ angle::Result Texture::copySubTexture(const Context *context,
sourceBox.depth);
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,
unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha,
......@@ -1300,7 +1300,7 @@ angle::Result Texture::setImageExternal(Context *context,
ANGLE_TRY(releaseTexImageInternal(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));
......@@ -1807,8 +1807,9 @@ angle::Result Texture::ensureSubImageInitialized(const Context *context,
// Pre-initialize the texture contents if necessary.
// TODO(jmadill): Check if area overlaps the entire texture.
ImageIndex imageIndex = ImageIndex::MakeFromTarget(target, static_cast<GLint>(level));
const auto &desc = mState.getImageDesc(imageIndex);
ImageIndex imageIndex =
ImageIndex::MakeFromTarget(target, static_cast<GLint>(level), area.depth);
const auto &desc = mState.getImageDesc(imageIndex);
if (desc.initState == InitState::MayNeedInit)
{
ASSERT(mState.mInitState == InitState::MayNeedInit);
......
......@@ -2353,13 +2353,13 @@ angle::Result Renderer11::copyTexture(const gl::Context *context,
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;
ANGLE_TRY(
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;
ANGLE_TRY(destStorage11->getSubresourceIndex(context, destIndex, &destSubresource));
......@@ -2422,7 +2422,7 @@ angle::Result Renderer11::copyTexture(const gl::Context *context,
if (destTarget == gl::TextureTarget::_2D || destTarget == gl::TextureTarget::_3D ||
gl::IsCubeMapFaceTarget(destTarget))
{
destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel);
destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel, 1);
}
else if (destTarget == gl::TextureTarget::_2DArray)
{
......
......@@ -333,7 +333,7 @@ angle::Result TextureVk::copyCompressedTexture(const gl::Context *context,
contextVk->getRenderer()->getFormat(internalFormat.sizedInternalFormat);
const gl::Extents size(static_cast<int>(source->getWidth(sourceTarget, sourceLevel)),
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));
......
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