egl/dri2: set WL_bind_wayland_display in a consistent way
Introduce a helper and use it throughout the platform code. This allows us to reduce the amount of ifdef(s) and (potentially) use kms_swrast_dri.so for !drm platforms (namely wayland and x11). Note: in the future as other platforms (android, surfaceless) support the extension they can reuse the helper. v2: Rebase, check for device_name. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Eric Engestrom <eric@engestrom.ch>
This commit is contained in:
committed by
Emil Velikov
parent
637d001a97
commit
98f5d0106a
@@ -397,4 +397,28 @@ const __DRIconfig *
|
||||
dri2_get_dri_config(struct dri2_egl_config *conf, EGLint surface_type,
|
||||
EGLenum colorspace);
|
||||
|
||||
static inline void
|
||||
dri2_set_WL_bind_wayland_display(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
(void) drv;
|
||||
|
||||
if (dri2_dpy->device_name && dri2_dpy->image) {
|
||||
if (dri2_dpy->image->base.version >= 10 &&
|
||||
dri2_dpy->image->getCapabilities != NULL) {
|
||||
int capabilities;
|
||||
|
||||
capabilities =
|
||||
dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen);
|
||||
disp->Extensions.WL_bind_wayland_display =
|
||||
(capabilities & __DRI_IMAGE_CAP_GLOBAL_NAMES) != 0;
|
||||
} else {
|
||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* EGL_DRI2_INCLUDED */
|
||||
|
||||
@@ -697,21 +697,9 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
if (dri2_dpy->image) {
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd);
|
||||
|
||||
if (dri2_dpy->image->base.version >= 10 &&
|
||||
dri2_dpy->image->getCapabilities != NULL) {
|
||||
int capabilities;
|
||||
|
||||
capabilities =
|
||||
dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen);
|
||||
disp->Extensions.WL_bind_wayland_display =
|
||||
(capabilities & __DRI_IMAGE_CAP_GLOBAL_NAMES) != 0;
|
||||
} else
|
||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||
}
|
||||
dri2_dpy->device_name = loader_get_device_name_for_fd(dri2_dpy->fd);
|
||||
#endif
|
||||
dri2_set_WL_bind_wayland_display(drv, disp);
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
|
||||
@@ -1206,7 +1206,7 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
dri2_add_config(disp, config, i + 1, types, NULL, rgb565_masks);
|
||||
}
|
||||
|
||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||
dri2_set_WL_bind_wayland_display(drv, disp);
|
||||
/* When cannot convert EGLImage to wl_buffer when on a different gpu,
|
||||
* because the buffer of the EGLImage has likely a tiling mode the server
|
||||
* gpu won't support. These is no way to check for now. Thus do not support the
|
||||
|
||||
@@ -1339,10 +1339,7 @@ dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
disp->Extensions.CHROMIUM_sync_control = EGL_TRUE;
|
||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
if (dri2_dpy->device_name)
|
||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||
#endif
|
||||
dri2_set_WL_bind_wayland_display(drv, disp);
|
||||
|
||||
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, false))
|
||||
goto cleanup_configs;
|
||||
@@ -1458,9 +1455,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
disp->Extensions.NV_post_sub_buffer = EGL_TRUE;
|
||||
disp->Extensions.CHROMIUM_sync_control = EGL_TRUE;
|
||||
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||
#endif
|
||||
dri2_set_WL_bind_wayland_display(drv, disp);
|
||||
|
||||
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, true))
|
||||
goto cleanup_configs;
|
||||
|
||||
Reference in New Issue
Block a user