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);
