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>
This commit is contained in:
Adam Jackson
2020-12-08 17:11:19 -05:00
committed by Marge Bot
parent aa93673d9d
commit 0781808935
+34 -24
View 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))