Mesa (main): zink: slight refactor of load_device_extensions()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 10 20:32:44 UTC 2021


Module: Mesa
Branch: main
Commit: 039078fe9720797f5eaa109a7e9d27841eb6bc73
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=039078fe9720797f5eaa109a7e9d27841eb6bc73

Author: Hoe Hao Cheng <haochengho12907 at gmail.com>
Date:   Fri May 28 03:59:02 2021 +0800

zink: slight refactor of load_device_extensions()

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11036>

---

 src/gallium/drivers/zink/zink_screen.c | 56 +++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 25 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index b25761fa8ab..641f7426752 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -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;



More information about the mesa-commit mailing list