zink: Factor out winsys awareness from zink_internal_create_screen

Magic parameters are gross, this makes zink_internal_create_screen a bit
more reusable.

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Hoe Hao Cheng <haochengho12907@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8019>
This commit is contained in:
Adam Jackson
2020-12-02 15:38:35 -05:00
committed by Marge Bot
parent a2f1354bdc
commit 5f7a8f6fc1
+18 -12
View File
@@ -925,8 +925,8 @@ check_device_needs_mesa_wsi(struct zink_screen *screen)
}
}
static struct pipe_screen *
zink_internal_create_screen(struct sw_winsys *winsys, int fd, const struct pipe_screen_config *config)
static struct zink_screen *
zink_internal_create_screen(const struct pipe_screen_config *config)
{
struct zink_screen *screen = CALLOC_STRUCT(zink_screen);
if (!screen)
@@ -966,11 +966,6 @@ zink_internal_create_screen(struct sw_winsys *winsys, int fd, const struct pipe_
zink_internal_setup_moltenvk(screen);
#endif
if (fd >= 0 && !screen->info.have_KHR_external_memory_fd) {
debug_printf("ZINK: KHR_external_memory_fd required!\n");
goto fail;
}
VkDeviceQueueCreateInfo qci = {};
float dummy = 0.0f;
qci.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
@@ -1000,8 +995,6 @@ zink_internal_create_screen(struct sw_winsys *winsys, int fd, const struct pipe_
if (!load_device_extensions(screen))
goto fail;
screen->winsys = winsys;
screen->base.get_name = zink_get_name;
screen->base.get_vendor = zink_get_vendor;
screen->base.get_device_vendor = zink_get_device_vendor;
@@ -1019,7 +1012,7 @@ zink_internal_create_screen(struct sw_winsys *winsys, int fd, const struct pipe_
slab_create_parent(&screen->transfer_pool, sizeof(struct zink_transfer), 16);
return &screen->base;
return screen;
fail:
FREE(screen);
@@ -1029,11 +1022,24 @@ fail:
struct pipe_screen *
zink_create_screen(struct sw_winsys *winsys)
{
return zink_internal_create_screen(winsys, -1, NULL);
struct zink_screen *ret = zink_internal_create_screen(NULL);
if (ret)
ret->winsys = winsys;
return &ret->base;
}
struct pipe_screen *
zink_drm_create_screen(int fd, const struct pipe_screen_config *config)
{
return zink_internal_create_screen(NULL, fd, config);
struct zink_screen *ret = zink_internal_create_screen(config);
if (ret && !ret->info.have_KHR_external_memory_fd) {
debug_printf("ZINK: KHR_external_memory_fd required!\n");
free(ret);
return NULL;
}
return &ret->base;
}