Vulkan: Refactor GarbageObject.

Instead of allocating a small bundle for deferred deletion, store a
small triple of {Serial,VkHandle,HandleType}. The HandleType can be
used in a generic way to release the VkHandle, without needing to
store a pointer and use a virtual call.

BUG=angleproject:2200

Change-Id: I30925c2f50fd11dafb1b986ced7d279a7dde827b
Reviewed-on: https://chromium-review.googlesource.com/741163
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/TextureVk.cpp b/src/libANGLE/renderer/vulkan/TextureVk.cpp
index 28d9f64..d961981 100644
--- a/src/libANGLE/renderer/vulkan/TextureVk.cpp
+++ b/src/libANGLE/renderer/vulkan/TextureVk.cpp
@@ -31,10 +31,10 @@
     ContextVk *contextVk = GetImplAs<ContextVk>(context);
     RendererVk *renderer = contextVk->getRenderer();
 
-    renderer->enqueueGarbageOrDeleteNow(*this, std::move(mImage));
-    renderer->enqueueGarbageOrDeleteNow(*this, std::move(mDeviceMemory));
-    renderer->enqueueGarbageOrDeleteNow(*this, std::move(mImageView));
-    renderer->enqueueGarbageOrDeleteNow(*this, std::move(mSampler));
+    renderer->releaseResource(*this, &mImage);
+    renderer->releaseResource(*this, &mDeviceMemory);
+    renderer->releaseResource(*this, &mImageView);
+    renderer->releaseResource(*this, &mSampler);
 
     return gl::NoError();
 }
@@ -222,7 +222,7 @@
                                        VK_IMAGE_ASPECT_COLOR_BIT);
 
         // TODO(jmadill): Re-use staging images.
-        renderer->enqueueGarbage(renderer->getCurrentQueueSerial(), std::move(stagingImage));
+        renderer->releaseObject(renderer->getCurrentQueueSerial(), &stagingImage);
     }
 
     return gl::NoError();