diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.cpp b/src/libANGLE/renderer/vulkan/vk_helpers.cpp index 672ca4d92a..b1f987b0c0 100644 --- a/src/libANGLE/renderer/vulkan/vk_helpers.cpp +++ b/src/libANGLE/renderer/vulkan/vk_helpers.cpp @@ -5796,6 +5796,16 @@ angle::Result ImageHelper::initExternal(ErrorContext *context, ASSERT(!IsAnySubresourceContentDefined(mVkImageContentDefined)); ASSERT(!IsAnySubresourceContentDefined(mVkImageStencilContentDefined)); + if (mCurrentSingleClearValue.valid()) + { + fprintf(stderr, + "[POC-TRACE] ImageHelper::initExternal(this=%p) allocating FRESH VkImage " + "extents=%ux%ux%u layers=%u; mCurrentSingleClearValue STILL VALID from old " + "image (level=%d) -> RRI clear may be dropped\n", + (void *)this, extents.width, extents.height, extents.depth, layerCount, + mCurrentSingleClearValue.value().levelIndex); + } + Renderer *renderer = context->getRenderer(); mImageType = gl_vk::GetImageType(textureType); @@ -6071,6 +6081,13 @@ void ImageHelper::deriveExternalImageTiling(const void *createInfoChain) void ImageHelper::releaseImage(Renderer *renderer) { + if (mImage.valid() && mCurrentSingleClearValue.valid()) + { + fprintf(stderr, + "[POC-TRACE] ImageHelper::releaseImage(this=%p) freeing VkImage; " + "mCurrentSingleClearValue STILL VALID (level=%d) -> stale cache survives\n", + (void *)this, mCurrentSingleClearValue.value().levelIndex); + } if (mImage.valid()) { GarbageObjects garbageObjects; @@ -8305,6 +8322,11 @@ void ImageHelper::removeStagedUpdates(ErrorContext *context, gl::LevelIndex levelGLStart, gl::LevelIndex levelGLEnd) { + fprintf(stderr, + "[POC-TRACE] ImageHelper::removeStagedUpdates(this=%p, levels=[%d,%d]) " + "mCurrentSingleClearValue.valid()=%d <-- cache NOT reset here\n", + (void *)this, levelGLStart.get(), levelGLEnd.get(), + (int)mCurrentSingleClearValue.valid()); assertSubresourceUpdateRefCountsConsistent(); // Remove all updates to levels [start, end]. @@ -10195,6 +10217,12 @@ angle::Result ImageHelper::flushStagedUpdatesImpl(ContextVk *contextVk, // is the GL level. mCurrentSingleClearValue = update.data.clear; mCurrentSingleClearValue.value().levelIndex = updateMipLevelGL.get(); + fprintf(stderr, + "[POC-TRACE] flushStagedUpdatesImpl(this=%p) PRIMED " + "mCurrentSingleClearValue level=%d layer=%u count=%u " + "extents=%ux%ux%u\n", + (void *)this, updateMipLevelGL.get(), updateBaseLayer, + updateLayerCount, mExtents.width, mExtents.height, mExtents.depth); // Do not call onWrite as it removes mCurrentSingleClearValue, but instead call // setContentDefined directly. @@ -10357,6 +10385,12 @@ angle::Result ImageHelper::flushStagedUpdates(ContextVk *contextVk, if (IsClearOfAllChannels(update.updateSource) && mCurrentSingleClearValue.value() == update.data.clear) { + fprintf(stderr, + "[POC-TRACE] *** flushStagedUpdates(this=%p) DROPPING clear on " + "level=%d (cached==staged); current VkImage extents=%ux%ux%u " + "layers=%u ***\n", + (void *)this, clearLevel.get(), mExtents.width, mExtents.height, + mExtents.depth, mLayerCount); ANGLE_VK_PERF_WARNING(contextVk, GL_DEBUG_SEVERITY_LOW, "Repeated Clear on framebuffer attachment dropped"); update.release(renderer);