mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 00:40:10 +01:00
egl/wayland: use more registry listeners to better handle device init
this handles globals like dmabuf and wl_drm and also enables creating egl devices with valid fds Acked-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24975>
This commit is contained in:
parent
7ac0dbd73b
commit
1b4e877def
1 changed files with 21 additions and 8 deletions
|
|
@ -2657,6 +2657,16 @@ registry_handle_global_swrast(void *data, struct wl_registry *registry,
|
||||||
if (strcmp(interface, wl_shm_interface.name) == 0) {
|
if (strcmp(interface, wl_shm_interface.name) == 0) {
|
||||||
dri2_dpy->wl_shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
|
dri2_dpy->wl_shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
|
||||||
wl_shm_add_listener(dri2_dpy->wl_shm, &shm_listener, dri2_dpy);
|
wl_shm_add_listener(dri2_dpy->wl_shm, &shm_listener, dri2_dpy);
|
||||||
|
} else if (strcmp(interface, wl_drm_interface.name) == 0) {
|
||||||
|
dri2_dpy->wl_drm_version = MIN2(version, 2);
|
||||||
|
dri2_dpy->wl_drm_name = name;
|
||||||
|
} else if (strcmp(interface, zwp_linux_dmabuf_v1_interface.name) == 0 &&
|
||||||
|
version >= 3) {
|
||||||
|
dri2_dpy->wl_dmabuf = wl_registry_bind(
|
||||||
|
registry, name, &zwp_linux_dmabuf_v1_interface,
|
||||||
|
MIN2(version, ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION));
|
||||||
|
zwp_linux_dmabuf_v1_add_listener(dri2_dpy->wl_dmabuf, &dmabuf_listener,
|
||||||
|
dri2_dpy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2743,14 +2753,6 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp)
|
||||||
dri2_dpy->wl_dpy = disp->PlatformDisplay;
|
dri2_dpy->wl_dpy = disp->PlatformDisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = _eglFindDevice(dri2_dpy->fd_render_gpu, true);
|
|
||||||
if (!dev) {
|
|
||||||
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
disp->Device = dev;
|
|
||||||
|
|
||||||
dri2_dpy->wl_queue = wl_display_create_queue(dri2_dpy->wl_dpy);
|
dri2_dpy->wl_queue = wl_display_create_queue(dri2_dpy->wl_dpy);
|
||||||
|
|
||||||
dri2_dpy->wl_dpy_wrapper = wl_proxy_create_wrapper(dri2_dpy->wl_dpy);
|
dri2_dpy->wl_dpy_wrapper = wl_proxy_create_wrapper(dri2_dpy->wl_dpy);
|
||||||
|
|
@ -2775,6 +2777,17 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp)
|
||||||
dri2_dpy->formats.num_formats))
|
dri2_dpy->formats.num_formats))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (disp->Options.Zink)
|
||||||
|
dri2_initialize_wayland_drm_extensions(dri2_dpy);
|
||||||
|
|
||||||
|
dev = _eglFindDevice(dri2_dpy->fd_render_gpu, true);
|
||||||
|
if (!dev) {
|
||||||
|
_eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
disp->Device = dev;
|
||||||
|
|
||||||
dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");
|
dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");
|
||||||
if (!dri2_load_driver_swrast(disp))
|
if (!dri2_load_driver_swrast(disp))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue