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

Author: Erik Faye-Lund <[email protected]>
Date:   Wed Jun 23 10:01:25 2021 +0200

zink: pass screen to zink_create_instance

This allows us to pass in some more details, like handles to the
loader-library to avoid a hard dependency.

Reviewed-by: Hoe Hao Cheng <[email protected]>
Reviewed-By: Mike Blumenkrantz <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11550>

---

 src/gallium/drivers/zink/zink_instance.py | 17 +++++++++--------
 src/gallium/drivers/zink/zink_screen.c    |  3 +--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_instance.py 
b/src/gallium/drivers/zink/zink_instance.py
index fdaa83ddb48..4d70bb607a8 100644
--- a/src/gallium/drivers/zink/zink_instance.py
+++ b/src/gallium/drivers/zink/zink_instance.py
@@ -91,8 +91,8 @@ struct zink_instance_info {
 %endfor
 };
 
-VkInstance
-zink_create_instance(struct zink_instance_info *instance_info);
+bool
+zink_create_instance(struct zink_screen *screen);
 
 void
 zink_verify_instance_extensions(struct zink_screen *screen);
@@ -121,9 +121,11 @@ impl_code = """
 #include "zink_instance.h"
 #include "zink_screen.h"
 
-VkInstance
-zink_create_instance(struct zink_instance_info *instance_info)
+bool
+zink_create_instance(struct zink_screen *screen)
 {
+   struct zink_instance_info *instance_info = &screen->instance_info;
+
    /* reserve one slot for MoltenVK */
    const char *layers[${len(layers) + 1}] = {0};
    uint32_t num_layers = 0;
@@ -242,14 +244,13 @@ zink_create_instance(struct zink_instance_info 
*instance_info)
    ici.ppEnabledLayerNames = layers;
    ici.enabledLayerCount = num_layers;
 
-   VkInstance instance = VK_NULL_HANDLE;
-   VkResult err = vkCreateInstance(&ici, NULL, &instance);
+   VkResult err = vkCreateInstance(&ici, NULL, &screen->instance);
    if (err != VK_SUCCESS) {
       mesa_loge("ZINK: vkCreateInstance failed");
-      return VK_NULL_HANDLE;
+      return false;
    }
 
-   return instance;
+   return true;
 }
 
 void
diff --git a/src/gallium/drivers/zink/zink_screen.c 
b/src/gallium/drivers/zink/zink_screen.c
index 7fde06bc438..47c482432a0 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -2056,9 +2056,8 @@ zink_internal_create_screen(const struct 
pipe_screen_config *config)
       screen->instance_info.disable_xcb_surface = 
driQueryOptionb(config->options, "disable_xcb_surface");
    }
 #endif
-   screen->instance = zink_create_instance(&screen->instance_info);
 
-   if (!screen->instance)
+   if (!zink_create_instance(screen))
       goto fail;
 
    vk_instance_dispatch_table_load(&screen->vk.instance, 
&vkGetInstanceProcAddr, screen->instance);

Reply via email to