Vulkan: Implement very basic textures.

This is a quick implementation which supports only one backing Image
and one type of ImageView at a time, for 2D texture only.

It also implements a helper class for finding compatible memory pools.
It's possible we can keep a cache of memory pool indexes given the
guarantees the Vulkan spec has on compatible memory types (see the
documentation for VkMemoryRequirements).

BUG=angleproject:2167

Change-Id: I1d7a8eaec90f240273ad75194e23430d6d4c5dc1
Reviewed-on: https://chromium-review.googlesource.com/680000
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 07559c3..9a2b6ab 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -283,7 +283,8 @@
     vk::Image *readImage = renderTarget->image;
     vk::StagingImage stagingImage;
     ANGLE_TRY(renderer->createStagingImage(TextureDimension::TEX_2D, *renderTarget->format,
-                                           renderTarget->extents, &stagingImage));
+                                           renderTarget->extents, vk::StagingUsage::Read,
+                                           &stagingImage));
 
     vk::CommandBuffer *commandBuffer = nullptr;
     ANGLE_TRY(contextVk->getStartedCommandBuffer(&commandBuffer));
@@ -332,10 +333,6 @@
     stagingImage.getDeviceMemory().unmap(device);
     renderer->enqueueGarbage(renderer->getCurrentQueueSerial(), std::move(stagingImage));
 
-    stagingImage.getImage().destroy(renderer->getDevice());
-
-    stagingImage.destroy(device);
-
     return vk::NoError();
 }