[Fix] (SharedImage): a session that writes images publishes every frame boundary as a write

This commit is contained in:
2026-10-03 01:51:25 -04:00
parent 9e7305b885
commit 7fd965ceda
2 changed files with 11 additions and 2 deletions
@@ -18879,7 +18879,12 @@ namespace MobileGL::MG_Backend::DirectGLES {
// producer), nothing it submitted still samples the image.
(void)WaitForCompletion();
}
frame.Tracker.PublishFrame(fence);
// A session that writes images publishes every boundary as a write: an image it rendered
// into must not leave the frame without its generation moving.
if (frame.ImplicitSync)
frame.Tracker.PublishFrameAsWrite(fence);
else
frame.Tracker.PublishFrame(fence);
frame.Id = g_readFrameIds.fetch_add(1, std::memory_order_relaxed) + 1;
}
@@ -637,7 +637,11 @@
}
// No fence (no export on this device): the frame's reads go unpublished - the file
// comment says why that is the choice.
m_sharedImageReads.PublishFrame(fence);
// A session that writes images publishes every boundary as a write (PublishSharedImageAccesses).
if (m_sharedImageImplicitSync)
m_sharedImageReads.PublishFrameAsWrite(fence);
else
m_sharedImageReads.PublishFrame(fence);
}
void VulkanRenderer::AbandonSharedImageReads() {