Vulkan: Use global buffer barriers.

This switches from using resource barriers for buffers to using global
barriers. This matches the general advised best practice. It also
allows us to combine multiple barriers into one. On a draw we might
combine all the vertex and index barriers into a single barrier call.

We implement this using a bit of extra state tracking in BufferHelper.

Bug: angleproject:2828
Change-Id: I196b368804ff50e60d085687a643e5566ba1c5b6
Reviewed-on: https://chromium-review.googlesource.com/c/1309977
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index 2a3fd8d..08a70e6 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -428,14 +428,19 @@
         mProgram->getState().getMaxActiveAttribLocation(),
         mVertexArray->getCurrentArrayBufferHandles(), mVertexArray->getCurrentArrayBufferOffsets());
 
-    const auto &arrayBufferResources = mVertexArray->getCurrentArrayBufferResources();
+    const auto &arrayBufferResources = mVertexArray->getCurrentArrayBuffers();
+
+    vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
 
     for (size_t attribIndex : context->getStateCache().getActiveBufferedAttribsMask())
     {
-        if (arrayBufferResources[attribIndex])
-            arrayBufferResources[attribIndex]->addReadDependency(
-                mDrawFramebuffer->getFramebuffer());
+        vk::BufferHelper *arrayBuffer = arrayBufferResources[attribIndex];
+        if (arrayBuffer)
+        {
+            arrayBuffer->onFramebufferRead(framebuffer, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT);
+        }
     }
+
     return angle::Result::Continue();
 }
 
@@ -446,11 +451,11 @@
                                    mVertexArray->getCurrentElementArrayBufferOffset(),
                                    gl_vk::GetIndexType(mCurrentDrawElementsType));
 
-    vk::RecordableGraphResource *elementArrayBufferResource =
-        mVertexArray->getCurrentElementArrayBufferResource();
-    if (elementArrayBufferResource)
+    vk::BufferHelper *elementArrayBuffer = mVertexArray->getCurrentElementArrayBuffer();
+    if (elementArrayBuffer)
     {
-        elementArrayBufferResource->addReadDependency(mDrawFramebuffer->getFramebuffer());
+        vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
+        elementArrayBuffer->onFramebufferRead(framebuffer, VK_ACCESS_INDEX_READ_BIT);
     }
     return angle::Result::Continue();
 }