Commit 77c062aa by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Remove emulated clears before mipmap generation

If the image is recreated for mipmap generation, and if the format used is emulated, clears are automatically staged for all levels of the image. Since non-base levels will be completely rendered to (using blit, so not through the staging buffer), there is no point in performing these clears for non-base levels. This change drops those clears. Note that another change will drop the clear for base level if detecting that a future update will supersede it, for example because the base level is being copied from the old image. Bug: angleproject:4551 Change-Id: If2f10cf67e24b44243b29d22bfcf1cb933895cd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2262575 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 5046324e
...@@ -1612,18 +1612,6 @@ angle::Result TextureVk::getAttachmentRenderTarget(const gl::Context *context, ...@@ -1612,18 +1612,6 @@ angle::Result TextureVk::getAttachmentRenderTarget(const gl::Context *context,
angle::Result TextureVk::ensureImageInitialized(ContextVk *contextVk, ImageMipLevels mipLevels) angle::Result TextureVk::ensureImageInitialized(ContextVk *contextVk, ImageMipLevels mipLevels)
{ {
const gl::ImageDesc &baseLevelDesc = mState.getBaseLevelDesc();
const gl::Extents &baseLevelExtents = baseLevelDesc.size;
const uint32_t levelCount = getMipLevelCount(mipLevels);
const vk::Format &format = getBaseLevelFormat(contextVk->getRenderer());
return ensureImageInitializedImpl(contextVk, baseLevelExtents, levelCount, format);
}
angle::Result TextureVk::ensureImageInitializedImpl(ContextVk *contextVk,
const gl::Extents &baseLevelExtents,
uint32_t levelCount,
const vk::Format &format)
{
if (mImage->valid() && !mImage->hasStagedUpdates()) if (mImage->valid() && !mImage->hasStagedUpdates())
{ {
return angle::Result::Continue; return angle::Result::Continue;
...@@ -1633,10 +1621,21 @@ angle::Result TextureVk::ensureImageInitializedImpl(ContextVk *contextVk, ...@@ -1633,10 +1621,21 @@ angle::Result TextureVk::ensureImageInitializedImpl(ContextVk *contextVk,
{ {
ASSERT(!mRedefinedLevels.any()); ASSERT(!mRedefinedLevels.any());
const gl::ImageDesc &baseLevelDesc = mState.getBaseLevelDesc(); const gl::ImageDesc &baseLevelDesc = mState.getBaseLevelDesc();
const gl::Extents &baseLevelExtents = baseLevelDesc.size;
const uint32_t levelCount = getMipLevelCount(mipLevels);
const vk::Format &format = getBaseLevelFormat(contextVk->getRenderer());
ANGLE_TRY(initImage(contextVk, format, baseLevelDesc.format.info->sized, baseLevelExtents, ANGLE_TRY(initImage(contextVk, format, baseLevelDesc.format.info->sized, baseLevelExtents,
levelCount)); levelCount));
if (mipLevels == ImageMipLevels::FullMipChain)
{
// Remove staged updates to non-base mips when generating mipmaps. These can only be
// emulated format init clears that are staged in initImage.
mImage->removeStagedUpdates(contextVk, mState.getEffectiveBaseLevel() + 1,
mState.getMipmapMaxLevel());
}
} }
return flushImageStagedUpdates(contextVk); return flushImageStagedUpdates(contextVk);
......
...@@ -361,11 +361,6 @@ class TextureVk : public TextureImpl, public angle::ObserverInterface ...@@ -361,11 +361,6 @@ class TextureVk : public TextureImpl, public angle::ObserverInterface
size_t layer, size_t layer,
const vk::ImageView **imageViewOut); const vk::ImageView **imageViewOut);
angle::Result ensureImageInitializedImpl(ContextVk *contextVk,
const gl::Extents &baseLevelExtents,
uint32_t levelCount,
const vk::Format &format);
// Flush image's staged updates for all levels and layers. // Flush image's staged updates for all levels and layers.
angle::Result flushImageStagedUpdates(ContextVk *contextVk); angle::Result flushImageStagedUpdates(ContextVk *contextVk);
......
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