summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2020-12-08 17:11:19 -0500
committerMarge Bot <eric+marge@anholt.net>2020-12-15 17:20:13 +0000
commit0781808935e161b1731da944ffe8e2a4c681f9d6 (patch)
tree971c169f3233a300044856d2dfe0018db1b04269
parentaa93673d9d174a6fdeeff51398bfa4b98a0c441e (diff)
zink: Factor out zink_create_logical_device
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>
-rw-r--r--src/gallium/drivers/zink/zink_screen.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 2d2c0aa0a2e..b39bae6de97 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -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))