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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4835>
This commit is contained in:

committed by
Marge Bot

parent
c668bdf05c
commit
b8fd70eef2
@@ -318,11 +318,6 @@ zink_resource_get_handle(struct pipe_screen *pscreen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (whandle->type == WINSYS_HANDLE_TYPE_FD) {
|
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.sType = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR;
|
||||||
fd_info.memory = res->mem;
|
fd_info.memory = res->mem;
|
||||||
fd_info.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT;
|
fd_info.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT;
|
||||||
|
@@ -704,6 +704,18 @@ zink_flush_frontbuffer(struct pipe_screen *pscreen,
|
|||||||
winsys->displaytarget_display(winsys, res->dt, winsys_drawable_handle, sub_box);
|
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 *
|
static struct pipe_screen *
|
||||||
zink_internal_create_screen(struct sw_winsys *winsys, int fd)
|
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)
|
if (vkCreateDevice(screen->pdev, &dci, NULL, &screen->dev) != VK_SUCCESS)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
if (!load_device_extensions(screen))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
screen->winsys = winsys;
|
screen->winsys = winsys;
|
||||||
|
|
||||||
screen->base.get_name = zink_get_name;
|
screen->base.get_name = zink_get_name;
|
||||||
|
Reference in New Issue
Block a user