Context: Release surface first in onDestroy.
This works around a bug in Vulkan where the VertexArrayVk still
had resources in use when the Context was being destroyed. An
alternative approach is to call finish() from Context::onDestroy,
but this seems heavyweight. We might have to adopt something like
this eventually though.
Bug: angleproject:2389
Change-Id: Id99ca00404972a0b857c0e7e36f37b8ac4fd5c5e
Reviewed-on: https://chromium-review.googlesource.com/997743
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 7b901c4..268384f 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -432,6 +432,11 @@
egl::Error Context::onDestroy(const egl::Display *display)
{
+ // Delete the Surface first to trigger a finish() in Vulkan.
+ SafeDelete(mSurfacelessFramebuffer);
+
+ ANGLE_TRY(releaseSurface(display));
+
for (auto fence : mFenceNVMap)
{
SafeDelete(fence.second);
@@ -474,9 +479,6 @@
}
}
- SafeDelete(mSurfacelessFramebuffer);
-
- ANGLE_TRY(releaseSurface(display));
releaseShaderCompiler();
mGLState.reset(this);