Pass Context to VertexArray and Framebuffer syncstate.

This will enable more Vulkan-friendly idioms like clearing the
vulkan pipeline caches correctly on GL state changes immediately
because we have access to the ContextVk.

BUG=angleproject:1898

Change-Id: I16c848d8abdde8e26a38d384e565cec8548a66d0
Reviewed-on: https://chromium-review.googlesource.com/459079
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 9c60c1f..2e52a54 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -78,22 +78,12 @@
 }
 
 FramebufferVk::FramebufferVk(const gl::FramebufferState &state)
-    : FramebufferImpl(state),
-      mBackbuffer(nullptr),
-      mRenderPass(),
-      mFramebuffer(),
-      mDirtyRenderPass(true),
-      mDirtyFramebuffer(true)
+    : FramebufferImpl(state), mBackbuffer(nullptr), mRenderPass(), mFramebuffer()
 {
 }
 
 FramebufferVk::FramebufferVk(const gl::FramebufferState &state, WindowSurfaceVk *backbuffer)
-    : FramebufferImpl(state),
-      mBackbuffer(backbuffer),
-      mRenderPass(),
-      mFramebuffer(),
-      mDirtyRenderPass(true),
-      mDirtyFramebuffer(true)
+    : FramebufferImpl(state), mBackbuffer(backbuffer), mRenderPass(), mFramebuffer()
 {
 }
 
@@ -348,16 +338,20 @@
     return bool();
 }
 
-void FramebufferVk::syncState(const gl::Framebuffer::DirtyBits &dirtyBits)
+void FramebufferVk::syncState(ContextImpl *contextImpl, const gl::Framebuffer::DirtyBits &dirtyBits)
 {
+    auto contextVk = GetAs<ContextVk>(contextImpl);
+
+    ASSERT(dirtyBits.any());
+
     // TODO(jmadill): Smarter update.
-    mDirtyRenderPass  = true;
-    mDirtyFramebuffer = true;
+    mRenderPass.destroy(contextVk->getDevice());
+    mFramebuffer.destroy(contextVk->getDevice());
 }
 
 gl::ErrorOrResult<vk::RenderPass *> FramebufferVk::getRenderPass(VkDevice device)
 {
-    if (mRenderPass.valid() && !mDirtyRenderPass)
+    if (mRenderPass.valid())
     {
         return &mRenderPass;
     }
@@ -461,15 +455,13 @@
 
     mRenderPass.retain(device, std::move(renderPass));
 
-    mDirtyRenderPass = false;
-
     return &mRenderPass;
 }
 
 gl::ErrorOrResult<vk::Framebuffer *> FramebufferVk::getFramebuffer(VkDevice device)
 {
     // If we've already created our cached Framebuffer, return it.
-    if (mFramebuffer.valid() && !mDirtyFramebuffer)
+    if (mFramebuffer.valid())
     {
         return &mFramebuffer;
     }
@@ -532,8 +524,6 @@
 
     mFramebuffer.retain(device, std::move(framebuffer));
 
-    mDirtyFramebuffer = false;
-
     return &mFramebuffer;
 }