[Mesa-dev] [PATCH v2 30/30] egl/dri2: set WL_bind_wayland_display in a consistent way
Eric Engestrom
eric at engestrom.ch
Sun Sep 25 03:28:13 UTC 2016
On Fri, Sep 16, 2016 at 06:02:11PM +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
>
> 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 at collabora.com>
Patches 13-21 + 23-26 + 30 (v2 for 16, 20, 23, 25 & 30) are:
Reviewed-by: Eric Engestrom <eric at engestrom.ch>
> ---
> src/egl/drivers/dri2/egl_dri2.h | 24 ++++++++++++++++++++++++
> src/egl/drivers/dri2/platform_drm.c | 16 ++--------------
> src/egl/drivers/dri2/platform_wayland.c | 2 +-
> src/egl/drivers/dri2/platform_x11.c | 9 ++-------
> 4 files changed, 29 insertions(+), 22 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
> index fb170a5..bf18646 100644
> --- a/src/egl/drivers/dri2/egl_dri2.h
> +++ b/src/egl/drivers/dri2/egl_dri2.h
> @@ -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 */
> diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
> index 2668dff..bb1515f 100644
> --- a/src/egl/drivers/dri2/platform_drm.c
> +++ b/src/egl/drivers/dri2/platform_drm.c
> @@ -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.
> diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
> index 005d2f3..63edf2e 100644
> --- a/src/egl/drivers/dri2/platform_wayland.c
> +++ b/src/egl/drivers/dri2/platform_wayland.c
> @@ -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
> diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c
> index c27f289..0b1b514 100644
> --- a/src/egl/drivers/dri2/platform_x11.c
> +++ b/src/egl/drivers/dri2/platform_x11.c
> @@ -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;
> --
> 2.9.3
More information about the mesa-dev
mailing list