From: Erik Faye-Lund Date: Thu, 30 Apr 2020 17:06:51 +0000 (+0200) Subject: zink: load vk_GetMemoryFdKHR while creating screen X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b8fd70eef2cb5936e8ccb4d237e50084d6ff2a7c;p=mesa.git zink: load vk_GetMemoryFdKHR while creating screen We're about to load some more extension-pointers as well, so let's create a separate place for doing this. Part-of: --- diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index e8073b45988..5467fe487b9 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -318,11 +318,6 @@ zink_resource_get_handle(struct pipe_screen *pscreen, } if (whandle->type == WINSYS_HANDLE_TYPE_FD) { - - if (!screen->vk_GetMemoryFdKHR) - screen->vk_GetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)vkGetDeviceProcAddr(screen->dev, "vkGetMemoryFdKHR"); - if (!screen->vk_GetMemoryFdKHR) - return false; fd_info.sType = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR; fd_info.memory = res->mem; fd_info.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 9d751d30eff..fae39c6ec1b 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -704,6 +704,18 @@ zink_flush_frontbuffer(struct pipe_screen *pscreen, winsys->displaytarget_display(winsys, res->dt, winsys_drawable_handle, sub_box); } +static bool +load_device_extensions(struct zink_screen *screen) +{ + if (screen->have_KHR_external_memory_fd) { + screen->vk_GetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)vkGetDeviceProcAddr(screen->dev, "vkGetMemoryFdKHR"); + if (!screen->vk_GetMemoryFdKHR) + return false; + } + + return true; +} + static struct pipe_screen * zink_internal_create_screen(struct sw_winsys *winsys, int fd) { @@ -785,6 +797,9 @@ zink_internal_create_screen(struct sw_winsys *winsys, int fd) if (vkCreateDevice(screen->pdev, &dci, NULL, &screen->dev) != VK_SUCCESS) goto fail; + if (!load_device_extensions(screen)) + goto fail; + screen->winsys = winsys; screen->base.get_name = zink_get_name;