[Mesa-dev] [PATCH 1/3] egl/x11_dri3: disable WL_bind_wayland_display for devices without render nodes
Frank Binns
frank.binns at imgtec.com
Thu Aug 4 14:02:14 UTC 2016
On 20/06/16 12:05, Axel Davy wrote:
> Hi,
>
> The three patches make sense to me.
>
> Reviewed-by: Axel Davy <axel.davy at ens.fr>
Can someone push these patches for me?
Thanks
Frank
>
> On 17/06/2016 19:41, Frank Binns wrote :
>> Up until now, DRI3 was only used for devices that have render nodes,
>> unless
>> overridden via an environment variable, with it falling back to DRI2
>> otherwise.
>> This limitation was there in order to support WL_bind_wayland_display
>> as it
>> requires client opened device node fds to be authenticated, which
>> isn't possible
>> when using DRI3. This is an unfortunate compromise as DRI3 provides
>> security
>> benefits over DRI2.
>>
>> Instead, allow DRI3 to be used for devices without render nodes but
>> don't
>> advertise WL_bind_wayland_display in this case. Applications that
>> need this
>> extension can still be run by disabling DRI3 support via the
>> LIBGL_DRI3_DISABLE
>> environment variable.
>>
>> Signed-off-by: Frank Binns <frank.binns at imgtec.com>
>> ---
>> src/egl/drivers/dri2/platform_x11.c | 3 ++-
>> src/egl/drivers/dri2/platform_x11_dri3.c | 33
>> +++++---------------------------
>> 2 files changed, 7 insertions(+), 29 deletions(-)
>>
>> diff --git a/src/egl/drivers/dri2/platform_x11.c
>> b/src/egl/drivers/dri2/platform_x11.c
>> index c0a4005..1b50889 100644
>> --- a/src/egl/drivers/dri2/platform_x11.c
>> +++ b/src/egl/drivers/dri2/platform_x11.c
>> @@ -1335,7 +1335,8 @@ dri2_initialize_x11_dri3(_EGLDriver *drv,
>> _EGLDisplay *disp)
>> disp->Extensions.EXT_buffer_age = EGL_TRUE;
>> #ifdef HAVE_WAYLAND_PLATFORM
>> - disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
>> + if (dri2_dpy->device_name)
>> + disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
>> #endif
>> if (dri2_dpy->conn) {
>> diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c
>> b/src/egl/drivers/dri2/platform_x11_dri3.c
>> index 9363a8a..b781987 100644
>> --- a/src/egl/drivers/dri2/platform_x11_dri3.c
>> +++ b/src/egl/drivers/dri2/platform_x11_dri3.c
>> @@ -437,29 +437,6 @@ struct dri2_egl_display_vtbl
>> dri3_x11_display_vtbl = {
>> .get_dri_drawable = dri3_get_dri_drawable,
>> };
>> -static char *
>> -dri3_get_device_name(int fd)
>> -{
>> - char *ret = NULL;
>> -
>> - ret = drmGetRenderDeviceNameFromFd(fd);
>> - if (ret)
>> - return ret;
>> -
>> - /* For dri3, render node support is required for
>> WL_bind_wayland_display.
>> - * In order not to regress on older systems without kernel or libdrm
>> - * support, fall back to dri2. User can override it with environment
>> - * variable if they don't need to use that extension.
>> - */
>> - if (getenv("EGL_FORCE_DRI3") == NULL) {
>> - _eglLog(_EGL_WARNING, "Render node support not available,
>> falling back to dri2");
>> - _eglLog(_EGL_WARNING, "If you want to force dri3, set
>> EGL_FORCE_DRI3 environment variable");
>> - } else
>> - ret = loader_get_device_name_for_fd(fd);
>> -
>> - return ret;
>> -}
>> -
>> EGLBoolean
>> dri3_x11_connect(struct dri2_egl_display *dri2_dpy)
>> {
>> @@ -539,11 +516,11 @@ dri3_x11_connect(struct dri2_egl_display
>> *dri2_dpy)
>> return EGL_FALSE;
>> }
>> - dri2_dpy->device_name = dri3_get_device_name(dri2_dpy->fd);
>> - if (!dri2_dpy->device_name) {
>> - close(dri2_dpy->fd);
>> - return EGL_FALSE;
>> - }
>> + /* Only try to get a render device name since it's only needed for
>> + * WL_bind_wayland_display and dri3 doesn't provide a mechanism for
>> + * authenticating client opened device node fds. If this fails then
>> + * don't advertise the extension. */
>> + dri2_dpy->device_name = drmGetRenderDeviceNameFromFd(dri2_dpy->fd);
>> return EGL_TRUE;
>> }
>
More information about the mesa-dev
mailing list