diff options
author | Adam Jackson <ajax@redhat.com> | 2020-12-08 17:11:19 -0500 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-12-15 17:20:13 +0000 |
commit | 0781808935e161b1731da944ffe8e2a4c681f9d6 (patch) | |
tree | 971c169f3233a300044856d2dfe0018db1b04269 | |
parent | aa93673d9d174a6fdeeff51398bfa4b98a0c441e (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.c | 58 |
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)) |