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