Vulkan: Pass CommandGraph when updating serials.

This is in preparation for storing a pointer to a shared resource use
structure.

Bug: angleproject:2464
Change-Id: I8f4ba1c71de6ad6a27ac06fc8012a0e94267cc16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1785988
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 7396836..a040bd8 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -195,11 +195,12 @@
                                         size_t count,
                                         const GLenum *attachments)
 {
-    mFramebuffer.updateQueueSerial(vk::GetImpl(context)->getCurrentQueueSerial());
+    ContextVk *contextVk = vk::GetImpl(context);
+    mFramebuffer.onGraphAccess(contextVk->getCurrentQueueSerial(), contextVk->getCommandGraph());
 
     if (mFramebuffer.valid() && mFramebuffer.hasStartedRenderPass())
     {
-        invalidateImpl(vk::GetImpl(context), count, attachments);
+        invalidateImpl(contextVk, count, attachments);
     }
 
     return angle::Result::Continue;
@@ -210,14 +211,15 @@
                                            const GLenum *attachments,
                                            const gl::Rectangle &area)
 {
-    mFramebuffer.updateQueueSerial(vk::GetImpl(context)->getCurrentQueueSerial());
+    ContextVk *contextVk = vk::GetImpl(context);
+    mFramebuffer.onGraphAccess(contextVk->getCurrentQueueSerial(), contextVk->getCommandGraph());
 
     // RenderPass' storeOp cannot be made conditional to a specific region, so we only apply this
     // hint if the requested area encompasses the render area.
     if (mFramebuffer.valid() && mFramebuffer.hasStartedRenderPass() &&
         area.encloses(mFramebuffer.getRenderPassRenderArea()))
     {
-        invalidateImpl(vk::GetImpl(context), count, attachments);
+        invalidateImpl(contextVk, count, attachments);
     }
 
     return angle::Result::Continue;
@@ -261,7 +263,7 @@
         return angle::Result::Continue;
     }
 
-    mFramebuffer.updateQueueSerial(contextVk->getCurrentQueueSerial());
+    mFramebuffer.onGraphAccess(contextVk->getCurrentQueueSerial(), contextVk->getCommandGraph());
 
     // This function assumes that only enabled attachments are asked to be cleared.
     ASSERT((clearColorBuffers & mState.getEnabledDrawBuffers()) == clearColorBuffers);
@@ -564,7 +566,7 @@
     ASSERT(colorBlit != (depthBlit || stencilBlit));
 
     vk::ImageHelper *srcImage = &readRenderTarget->getImage();
-    vk::ImageHelper *dstImage = drawRenderTarget->getImageForWrite(&mFramebuffer);
+    vk::ImageHelper *dstImage = drawRenderTarget->getImageForWrite(contextVk, &mFramebuffer);
 
     VkImageAspectFlags imageAspectMask = srcImage->getAspectFlags();
     VkImageAspectFlags blitAspectMask  = imageAspectMask;
@@ -589,7 +591,7 @@
     vk::CommandBuffer *commandBuffer = nullptr;
     ANGLE_TRY(mFramebuffer.recordCommands(contextVk, &commandBuffer));
 
-    srcImage->addReadDependency(&mFramebuffer);
+    srcImage->addReadDependency(contextVk, &mFramebuffer);
 
     VkImageBlit blit                   = {};
     blit.srcSubresource.aspectMask     = blitAspectMask;
@@ -921,7 +923,7 @@
     ANGLE_TRY(mFramebuffer.recordCommands(contextVk, &commandBuffer));
 
     // Source's layout change should happen before rendering
-    srcImage->addReadDependency(&mFramebuffer);
+    srcImage->addReadDependency(contextVk, &mFramebuffer);
 
     VkImageResolve resolveRegion                = {};
     resolveRegion.srcSubresource.aspectMask     = VK_IMAGE_ASPECT_COLOR_BIT;
@@ -943,7 +945,7 @@
     for (size_t colorIndexGL : mState.getEnabledDrawBuffers())
     {
         RenderTargetVk *drawRenderTarget = mRenderTargetCache.getColors()[colorIndexGL];
-        vk::ImageHelper *drawImage       = drawRenderTarget->getImageForWrite(&mFramebuffer);
+        vk::ImageHelper *drawImage = drawRenderTarget->getImageForWrite(contextVk, &mFramebuffer);
         drawImage->changeLayout(VK_IMAGE_ASPECT_COLOR_BIT, vk::ImageLayout::TransferDst,
                                 commandBuffer);
 
@@ -1443,8 +1445,8 @@
     ANGLE_TRY(mFramebuffer.recordCommands(contextVk, &commandBuffer));
 
     // Note that although we're reading from the image, we need to update the layout below.
-    vk::ImageHelper *srcImage =
-        renderTarget->getImageForRead(&mFramebuffer, vk::ImageLayout::TransferSrc, commandBuffer);
+    vk::ImageHelper *srcImage = renderTarget->getImageForRead(
+        contextVk, &mFramebuffer, vk::ImageLayout::TransferSrc, commandBuffer);
 
     const angle::Format *readFormat = &srcImage->getFormat().imageFormat();
 
@@ -1483,7 +1485,8 @@
             contextVk, renderer->getMemoryProperties(), gl::Extents(area.width, area.height, 1),
             srcImage->getFormat(),
             VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, 1));
-        resolvedImage.get().updateQueueSerial(contextVk->getCurrentQueueSerial());
+        resolvedImage.get().onGraphAccess(contextVk->getCurrentQueueSerial(),
+                                          contextVk->getCommandGraph());
 
         // Note: resolve only works on color images (not depth/stencil).
         //
@@ -1602,7 +1605,7 @@
     // is too small, we need to start a new one.  The latter can happen if a scissored clear starts
     // a render pass, the scissor is disabled and a draw call is issued to affect the whole
     // framebuffer.
-    mFramebuffer.updateQueueSerial(contextVk->getCurrentQueueSerial());
+    mFramebuffer.onGraphAccess(contextVk->getCurrentQueueSerial(), contextVk->getCommandGraph());
     if (mFramebuffer.hasStartedRenderPass() &&
         !mFramebuffer.getRenderPassRenderArea().encloses(scissoredRenderArea))
     {