VulkanUnitTests: Call vkDestroyDevice()

The system vulkan driver can get sulky if you don't free memory.

Bug: b/123749916
Change-Id: I9bf2de63a788200c401b41fa3efdfb36f3c15245
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/27772
Presubmit-Ready: Ben Clayton <headlessclayton@gmail.com>
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/tests/VulkanUnitTests/Device.cpp b/tests/VulkanUnitTests/Device.cpp
index fd2ad95..098e736 100644
--- a/tests/VulkanUnitTests/Device.cpp
+++ b/tests/VulkanUnitTests/Device.cpp
@@ -29,10 +29,19 @@
 	  physicalDevice(physicalDevice),
 	  queueFamilyIndex(queueFamilyIndex) {}
 
+Device::~Device()
+{
+	if (device != nullptr)
+	{
+		driver->vkDeviceWaitIdle(device);
+		driver->vkDestroyDevice(device, nullptr);
+	}
+}
+
 bool Device::IsValid() const { return device != nullptr; }
 
 VkResult Device::CreateComputeDevice(
-		Driver const *driver, VkInstance instance, Device *out)
+		Driver const *driver, VkInstance instance, std::unique_ptr<Device> &out)
 {
     VkResult result;
 
@@ -77,13 +86,13 @@
         };
 
         VkDevice device;
-        result = driver->vkCreateDevice(physicalDevice, &deviceCreateInfo, 0, &device);
+        result = driver->vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device);
         if (result != VK_SUCCESS)
         {
             return result;
         }
 
-		*out = Device(driver, device, physicalDevice, static_cast<uint32_t>(queueFamilyIndex));
+		out.reset(new Device(driver, device, physicalDevice, static_cast<uint32_t>(queueFamilyIndex)));
         return VK_SUCCESS;
     }