Commit 039078fe authored by He Haocheng's avatar He Haocheng Committed by Marge Bot
Browse files

zink: slight refactor of load_device_extensions()


Reviewed-By: Mike Blumenkrantz's avatarMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <!11036>
parent c3608e6a
......@@ -1221,6 +1221,27 @@ zink_screen_init_descriptor_funcs(struct zink_screen *screen, bool fallback)
}
}
static bool
check_have_device_time(struct zink_screen *screen)
{
uint32_t num_domains = 0;
screen->vk_GetPhysicalDeviceCalibrateableTimeDomainsEXT(screen->pdev, &num_domains, NULL);
assert(num_domains > 0);
VkTimeDomainEXT *domains = malloc(sizeof(VkTimeDomainEXT) * num_domains);
screen->vk_GetPhysicalDeviceCalibrateableTimeDomainsEXT(screen->pdev, &num_domains, domains);
/* VK_TIME_DOMAIN_DEVICE_EXT is used for the ctx->get_timestamp hook and is the only one we really need */
for (unsigned i = 0; i < num_domains; i++) {
if (domains[i] == VK_TIME_DOMAIN_DEVICE_EXT) {
return true;
}
}
free(domains);
return false;
}
static bool
load_device_extensions(struct zink_screen *screen)
{
......@@ -1248,24 +1269,6 @@ load_device_extensions(struct zink_screen *screen)
if (screen->info.have_EXT_calibrated_timestamps) {
GET_PROC_ADDR_INSTANCE(GetPhysicalDeviceCalibrateableTimeDomainsEXT);
GET_PROC_ADDR(GetCalibratedTimestampsEXT);
uint32_t num_domains = 0;
screen->vk_GetPhysicalDeviceCalibrateableTimeDomainsEXT(screen->pdev, &num_domains, NULL);
assert(num_domains > 0);
VkTimeDomainEXT *domains = malloc(sizeof(VkTimeDomainEXT) * num_domains);
screen->vk_GetPhysicalDeviceCalibrateableTimeDomainsEXT(screen->pdev, &num_domains, domains);
/* VK_TIME_DOMAIN_DEVICE_EXT is used for the ctx->get_timestamp hook and is the only one we really need */
ASSERTED bool have_device_time = false;
for (unsigned i = 0; i < num_domains; i++) {
if (domains[i] == VK_TIME_DOMAIN_DEVICE_EXT) {
have_device_time = true;
break;
}
}
assert(have_device_time);
free(domains);
}
if (screen->info.have_EXT_extended_dynamic_state) {
GET_PROC_ADDR(CmdSetViewportWithCountEXT);
......@@ -1300,13 +1303,6 @@ load_device_extensions(struct zink_screen *screen)
GET_PROC_ADDR_KHR(UpdateDescriptorSetWithTemplate);
}
screen->have_triangle_fans = true;
#if defined(VK_EXTX_PORTABILITY_SUBSET_EXTENSION_NAME)
if (screen->info.have_EXTX_portability_subset) {
screen->have_triangle_fans = (VK_TRUE == screen->info.portability_subset_extx_feats.triangleFans);
}
#endif // VK_EXTX_PORTABILITY_SUBSET_EXTENSION_NAME
if (screen->info.have_KHR_swapchain) {
GET_PROC_ADDR(CreateSwapchainKHR);
GET_PROC_ADDR(DestroySwapchainKHR);
......@@ -1718,6 +1714,16 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
if (!zink_verify_device_extensions(screen))
goto fail;
if (!check_have_device_time(screen))
goto fail;
screen->have_triangle_fans = true;
#if defined(VK_EXTX_PORTABILITY_SUBSET_EXTENSION_NAME)
if (screen->info.have_EXTX_portability_subset) {
screen->have_triangle_fans = (VK_TRUE == screen->info.portability_subset_extx_feats.triangleFans);
}
#endif // VK_EXTX_PORTABILITY_SUBSET_EXTENSION_NAME
check_base_requirements(screen);
screen->base.get_name = zink_get_name;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment