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;
}