zink: Factor out zink_create_logical_device
authorAdam Jackson <ajax@redhat.com>
Tue, 8 Dec 2020 22:11:19 +0000 (17:11 -0500)
committerMarge Bot <eric+marge@anholt.net>
Tue, 15 Dec 2020 17:20:13 +0000 (17:20 +0000)
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Hoe Hao Cheng <haochengho12907@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8019>

src/gallium/drivers/zink/zink_screen.c

index 2d2c0aa..b39bae6 100644 (file)
@@ -943,6 +943,38 @@ zink_get_loader_version(void)
    return loader_version;
 }
 
+static VkDevice
+zink_create_logical_device(struct zink_screen *screen)
+{
+   VkDevice dev = VK_NULL_HANDLE;
+
+   VkDeviceQueueCreateInfo qci = {};
+   float dummy = 0.0f;
+   qci.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
+   qci.queueFamilyIndex = screen->gfx_queue;
+   qci.queueCount = 1;
+   qci.pQueuePriorities = &dummy;
+
+   VkDeviceCreateInfo dci = {};
+   dci.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
+   dci.queueCreateInfoCount = 1;
+   dci.pQueueCreateInfos = &qci;
+   /* extensions don't have bool members in pEnabledFeatures.
+    * this requires us to pass the whole VkPhysicalDeviceFeatures2 struct
+    */
+   if (screen->info.feats.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2) {
+      dci.pNext = &screen->info.feats;
+   } else {
+      dci.pEnabledFeatures = &screen->info.feats.features;
+   }
+
+   dci.ppEnabledExtensionNames = screen->info.extensions;
+   dci.enabledExtensionCount = screen->info.num_extensions;
+
+   vkCreateDevice(screen->pdev, &dci, NULL, &dev);
+   return dev;
+}
+
 static struct zink_screen *
 zink_internal_create_screen(const struct pipe_screen_config *config)
 {
@@ -985,30 +1017,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
    zink_internal_setup_moltenvk(screen);
 #endif
 
-   VkDeviceQueueCreateInfo qci = {};
-   float dummy = 0.0f;
-   qci.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
-   qci.queueFamilyIndex = screen->gfx_queue;
-   qci.queueCount = 1;
-   qci.pQueuePriorities = &dummy;
-
-   VkDeviceCreateInfo dci = {};
-   dci.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
-   dci.queueCreateInfoCount = 1;
-   dci.pQueueCreateInfos = &qci;
-   /* extensions don't have bool members in pEnabledFeatures.
-    * this requires us to pass the whole VkPhysicalDeviceFeatures2 struct
-    */
-   if (screen->info.feats.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2) {
-      dci.pNext = &screen->info.feats;
-   } else {
-      dci.pEnabledFeatures = &screen->info.feats.features;
-   }
-
-   dci.ppEnabledExtensionNames = screen->info.extensions;
-   dci.enabledExtensionCount = screen->info.num_extensions;
-
-   if (vkCreateDevice(screen->pdev, &dci, NULL, &screen->dev) != VK_SUCCESS)
+   screen->dev = zink_create_logical_device(screen);
+   if (!screen->dev)
       goto fail;
 
    if (!load_device_extensions(screen))