Revise WSI setup.

- Set up present queue creation correctly.
- Move WSI functions to VulkanTestContext.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1899213002

Review URL: https://codereview.chromium.org/1899213002
diff --git a/src/gpu/vk/GrVkBackendContext.cpp b/src/gpu/vk/GrVkBackendContext.cpp
index 30e7669..3d3e983 100644
--- a/src/gpu/vk/GrVkBackendContext.cpp
+++ b/src/gpu/vk/GrVkBackendContext.cpp
@@ -35,7 +35,8 @@
 const uint32_t kGrVkMinimumVersion = VK_MAKE_VERSION(1, 0, 8);
 
 // Create the base Vulkan objects needed by the GrVkGpu object
-const GrVkBackendContext* GrVkBackendContext::Create() {
+const GrVkBackendContext* GrVkBackendContext::Create(uint32_t* presentQueueIndexPtr,
+                             bool(*canPresent)(VkInstance, VkPhysicalDevice, uint32_t queueIndex)) {
     VkPhysicalDevice physDev;
     VkDevice device;
     VkInstance inst;
@@ -141,7 +142,7 @@
     vkGetPhysicalDeviceQueueFamilyProperties(physDev, &queueCount, queueProps);
 
     // iterate to find the graphics queue
-    uint32_t graphicsQueueIndex = -1;
+    uint32_t graphicsQueueIndex = queueCount;
     for (uint32_t i = 0; i < queueCount; i++) {
         if (queueProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
             graphicsQueueIndex = i;
@@ -150,6 +151,19 @@
     }
     SkASSERT(graphicsQueueIndex < queueCount);
 
+    // iterate to find the present queue, if needed
+    uint32_t presentQueueIndex = graphicsQueueIndex;
+    if (presentQueueIndexPtr && canPresent) {
+        for (uint32_t i = 0; i < queueCount; i++) {
+            if (canPresent(inst, physDev, i)) {
+                presentQueueIndex = i;
+                break;
+            }
+        }
+        SkASSERT(presentQueueIndex < queueCount);
+        *presentQueueIndexPtr = presentQueueIndex;
+    }
+
     extensions.initDevice(kGrVkMinimumVersion, inst, physDev);
 
     SkTArray<const char*> deviceLayerNames;
@@ -191,20 +205,32 @@
     float queuePriorities[1] = { 0.0 };
     // Here we assume no need for swapchain queue
     // If one is needed, the client will need its own setup code
-    const VkDeviceQueueCreateInfo queueInfo = {
-        VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
-        nullptr,                                    // pNext
-        0,                                          // VkDeviceQueueCreateFlags
-        graphicsQueueIndex,                         // queueFamilyIndex
-        1,                                          // queueCount
-        queuePriorities,                            // pQueuePriorities
+    const VkDeviceQueueCreateInfo queueInfo[2] = {
+        {
+            VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
+            nullptr,                                    // pNext
+            0,                                          // VkDeviceQueueCreateFlags
+            graphicsQueueIndex,                         // queueFamilyIndex
+            1,                                          // queueCount
+            queuePriorities,                            // pQueuePriorities
+        },
+        {
+            VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
+            nullptr,                                    // pNext
+            0,                                          // VkDeviceQueueCreateFlags
+            presentQueueIndex,                          // queueFamilyIndex
+            1,                                          // queueCount
+            queuePriorities,                            // pQueuePriorities
+        }
     };
+    uint32_t queueInfoCount = (presentQueueIndex != graphicsQueueIndex) ? 2 : 1;
+
     const VkDeviceCreateInfo deviceInfo = {
         VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,    // sType
         nullptr,                                 // pNext
         0,                                       // VkDeviceCreateFlags
-        1,                                       // queueCreateInfoCount
-        &queueInfo,                              // pQueueCreateInfos
+        queueInfoCount,                          // queueCreateInfoCount
+        queueInfo,                               // pQueueCreateInfos
         (uint32_t) deviceLayerNames.count(),     // layerCount
         deviceLayerNames.begin(),                // ppEnabledLayerNames
         (uint32_t) deviceExtensionNames.count(), // extensionCount
@@ -227,7 +253,7 @@
     ctx->fPhysicalDevice = physDev;
     ctx->fDevice = device;
     ctx->fQueue = queue;
-    ctx->fQueueFamilyIndex = graphicsQueueIndex;
+    ctx->fGraphicsQueueIndex = graphicsQueueIndex;
     ctx->fMinAPIVersion = kGrVkMinimumVersion;
     ctx->fExtensions = extensionFlags;
     ctx->fFeatures = featureFlags;
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 040912e..eebb589 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -120,7 +120,7 @@
         VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, // sType
         nullptr,                                    // pNext
         VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,       // CmdPoolCreateFlags
-        backendCtx->fQueueFamilyIndex,              // queueFamilyIndex
+        backendCtx->fGraphicsQueueIndex,            // queueFamilyIndex
     };
     GR_VK_CALL_ERRCHECK(this->vkInterface(), CreateCommandPool(fDevice, &cmdPoolInfo, nullptr,
                                                                &fCmdPool));
diff --git a/src/gpu/vk/GrVkInterface.cpp b/src/gpu/vk/GrVkInterface.cpp
index 37e3570..17b254e 100644
--- a/src/gpu/vk/GrVkInterface.cpp
+++ b/src/gpu/vk/GrVkInterface.cpp
@@ -157,45 +157,6 @@
     GET_DEV_PROC(CmdNextSubpass);
     GET_DEV_PROC(CmdEndRenderPass);
     GET_DEV_PROC(CmdExecuteCommands);
-    if (extensionFlags & kKHR_surface_GrVkExtensionFlag) {
-        GET_PROC(DestroySurfaceKHR);
-        GET_PROC(GetPhysicalDeviceSurfaceSupportKHR);
-        GET_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR);
-        GET_PROC(GetPhysicalDeviceSurfaceFormatsKHR);
-        GET_PROC(GetPhysicalDeviceSurfacePresentModesKHR);
-    }
-    if (extensionFlags & kKHR_surface_GrVkExtensionFlag) {
-        GET_DEV_PROC(CreateSwapchainKHR);
-        GET_DEV_PROC(DestroySwapchainKHR);
-        GET_DEV_PROC(GetSwapchainImagesKHR);
-        GET_DEV_PROC(AcquireNextImageKHR);
-        GET_DEV_PROC(QueuePresentKHR);
-    }
-#if defined(VK_USE_PLATFORM_WIN32_KHR)
-    if (extensionFlags & kKHR_win32_surface_GrVkExtensionFlag) {
-        GET_PROC(CreateWin32SurfaceKHR);
-        GET_PROC(GetPhysicalDeviceWin32PresentationSupportKHR);
-    }
-#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
-    if (extensionFlags & kKHR_android_surface_GrVkExtensionFlag) {
-        GET_PROC(CreateAndroidSurfaceKHR);
-    }
-#elif defined(VK_USE_PLATFORM_XLIB_KHR)
-    if (extensionFlags & kKHR_xlib_surface_GrVkExtensionFlag) {
-        GET_PROC(CreateXlibSurfaceKHR);
-        GET_PROC(GetPhysicalDeviceXlibPresentationSupportKHR);
-    }
-#endif
-
-    // We probably don't care about these, they're for consoles
-    //GET_PROC(GetPhysicalDeviceDisplayPropertiesKHR);
-    //GET_PROC(GetPhysicalDeviceDisplayPlanePropertiesKHR);
-    //GET_PROC(GetDisplayPlaneSupportedDisplaysKHR);
-    //GET_PROC(GetDisplayModePropertiesKHR);
-    //GET_PROC(CreateDisplayModeKHR);
-    //GET_PROC(GetDisplayPlaneCapabilitiesKHR);
-    //GET_PROC(CreateDisplayPlaneSurfaceKHR);
-    //GET_DEV_PROC(CreateSharedSwapchainsKHR);
 
     if (extensionFlags & kEXT_debug_report_GrVkExtensionFlag) {
         GET_PROC(CreateDebugReportCallbackEXT);
@@ -347,24 +308,6 @@
         NULL == fFunctions.fCmdNextSubpass ||
         NULL == fFunctions.fCmdEndRenderPass ||
         NULL == fFunctions.fCmdExecuteCommands ||
-        NULL == fFunctions.fDestroySurfaceKHR ||
-        NULL == fFunctions.fGetPhysicalDeviceSurfaceSupportKHR ||
-        NULL == fFunctions.fGetPhysicalDeviceSurfaceCapabilitiesKHR ||
-        NULL == fFunctions.fGetPhysicalDeviceSurfaceFormatsKHR ||
-        NULL == fFunctions.fGetPhysicalDeviceSurfacePresentModesKHR ||
-        NULL == fFunctions.fCreateSwapchainKHR ||
-        NULL == fFunctions.fDestroySwapchainKHR ||
-        NULL == fFunctions.fGetSwapchainImagesKHR ||
-        NULL == fFunctions.fAcquireNextImageKHR ||
-        NULL == fFunctions.fQueuePresentKHR ||
-        //NULL == fFunctions.fGetPhysicalDeviceDisplayPropertiesKHR ||
-        //NULL == fFunctions.fGetPhysicalDeviceDisplayPlanePropertiesKHR ||
-        //NULL == fFunctions.fGetDisplayPlaneSupportedDisplaysKHR ||
-        //NULL == fFunctions.fGetDisplayModePropertiesKHR ||
-        //NULL == fFunctions.fCreateDisplayModeKHR ||
-        //NULL == fFunctions.fGetDisplayPlaneCapabilitiesKHR ||
-        //NULL == fFunctions.fCreateDisplayPlaneSurfaceKHR ||
-        //NULL == fFunctions.fCreateSharedSwapchainsKHR ||
         NULL == fFunctions.fCreateDebugReportCallbackEXT ||
         NULL == fFunctions.fDebugReportMessageEXT ||
         NULL == fFunctions.fDestroyDebugReportCallbackEXT) {
diff --git a/src/gpu/vk/GrVkMemory.cpp b/src/gpu/vk/GrVkMemory.cpp
index 30a3806..c9663ed 100644
--- a/src/gpu/vk/GrVkMemory.cpp
+++ b/src/gpu/vk/GrVkMemory.cpp
@@ -68,7 +68,6 @@
     VkMemoryRequirements memReqs;
     GR_VK_CALL(iface, GetBufferMemoryRequirements(device, buffer, &memReqs));
 
-
     if (!alloc_device_memory(gpu, &memReqs, flags, memory)) {
         return false;
     }