Mesa (main): zink: introduce vk_dispatch_table

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


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

Author: Hoe Hao Cheng <haochengho12907 at gmail.com>
Date:   Thu May 27 03:10:09 2021 +0800

zink: introduce vk_dispatch_table

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

---

 src/gallium/drivers/zink/meson.build   | 14 +++++++++++++-
 src/gallium/drivers/zink/zink_screen.c | 12 +++++++++---
 src/gallium/drivers/zink/zink_screen.h |  3 +++
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/zink/meson.build b/src/gallium/drivers/zink/meson.build
index 90f743ca6eb..8a7c02e404f 100644
--- a/src/gallium/drivers/zink/meson.build
+++ b/src/gallium/drivers/zink/meson.build
@@ -73,6 +73,18 @@ zink_nir_algebraic_c = custom_target(
   depend_files : nir_algebraic_py,
 )
 
+zink_dispatch_table = custom_target(
+  'zink_dispatch_table.c',
+  input : join_paths(meson.source_root(), 'src/vulkan/util/vk_dispatch_table_gen.py'),
+  output : ['zink_dispatch_table.h', 'zink_dispatch_table.c'],
+  command : [
+    prog_python, '@INPUT@',
+    '--xml', join_paths(meson.source_root(), 'src/vulkan/registry/vk.xml'),
+    '--out-h', '@OUTPUT0@',
+    '--out-c', '@OUTPUT1@',
+  ],
+)
+
 zink_c_args = []
 inc_zink_vk = []
 
@@ -89,7 +101,7 @@ endif
 
 libzink = static_library(
   'zink',
-  [files_libzink, zink_device_info, zink_instance, zink_nir_algebraic_c],
+  [files_libzink, zink_device_info, zink_instance, zink_nir_algebraic_c, zink_dispatch_table],
   gnu_symbol_visibility : 'hidden',
   include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_vulkan_wsi, inc_vulkan_util, inc_zink_vk],
   dependencies: [dep_vulkan, idep_nir_headers, idep_mesautil],
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 6a02e84a172..c6e92d20a38 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -1664,6 +1664,12 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
    if (!screen->instance)
       goto fail;
 
+   vk_instance_dispatch_table_load(&screen->vk.instance, &vkGetInstanceProcAddr, screen->instance);
+   vk_physical_device_dispatch_table_load(&screen->vk.physical_device, &vkGetInstanceProcAddr, screen->instance);
+
+   if (!zink_load_instance_extensions(screen))
+      goto fail;
+
    if (screen->instance_info.have_EXT_debug_utils &&
       (zink_debug & ZINK_DEBUG_VALIDATION) && !create_debug(screen))
       debug_printf("ZINK: failed to setup debug utils\n");
@@ -1679,9 +1685,6 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
    screen->have_D24_UNORM_S8_UINT = zink_is_depth_format_supported(screen,
                                               VK_FORMAT_D24_UNORM_S8_UINT);
 
-   if (!zink_load_instance_extensions(screen))
-      goto fail;
-
    if (!zink_get_physical_device_info(screen)) {
       debug_printf("ZINK: failed to detect features\n");
       goto fail;
@@ -1703,9 +1706,12 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
        screen->info.driver_props.driverID == VK_DRIVER_ID_AMD_PROPRIETARY)
       /* this has bad perf on AMD */
       screen->info.have_KHR_push_descriptor = false;
+
    if (!load_device_extensions(screen))
       goto fail;
 
+   vk_device_dispatch_table_load(&screen->vk.device, &vkGetDeviceProcAddr, screen->dev);
+
    check_base_requirements(screen);
 
    screen->base.get_name = zink_get_name;
diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h
index 1a570c6ceae..aeb6e3c3262 100644
--- a/src/gallium/drivers/zink/zink_screen.h
+++ b/src/gallium/drivers/zink/zink_screen.h
@@ -26,6 +26,7 @@
 
 #include "zink_device_info.h"
 #include "zink_instance.h"
+#include "zink_dispatch_table.h"
 
 #include "util/u_idalloc.h"
 #include "pipe/p_screen.h"
@@ -114,6 +115,8 @@ struct zink_screen {
    bool needs_mesa_wsi;
    bool needs_mesa_flush_wsi;
 
+   struct vk_dispatch_table vk;
+
    PFN_vkGetPhysicalDeviceFeatures2 vk_GetPhysicalDeviceFeatures2;
    PFN_vkGetPhysicalDeviceProperties2 vk_GetPhysicalDeviceProperties2;
    PFN_vkGetPhysicalDeviceFormatProperties2 vk_GetPhysicalDeviceFormatProperties2;



More information about the mesa-commit mailing list