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))
{