Module: Mesa Branch: main Commit: e46e9ee46c7dce955a94d603f4282883e826a2d5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e46e9ee46c7dce955a94d603f4282883e826a2d5
Author: Robert Foss <[email protected]> Date: Thu Nov 9 15:22:28 2023 +0100 egl/surfaceless: Don't overwrire disp->Device if using EGL_DEVICE_EXT Make sure that disp->Device is never overwritten during probe function calls. If EGL_DEVICE_EXT is provided, the probing should rather fail than switch the device being used. Signed-off-by: Robert Foss <[email protected]> Reviewed-by: Adam Jackson <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26131> --- src/egl/drivers/dri2/platform_surfaceless.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index 923eb1c919a..8141a110159 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -231,6 +231,10 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast, bool zink) if (!_eglDeviceSupports(dev_list, _EGL_DEVICE_DRM)) goto next; + if (_eglHasAttrib(disp, EGL_DEVICE_EXT) && dev_list != disp->Device) { + goto next; + } + device = _eglDeviceDrm(dev_list); assert(device); @@ -286,9 +290,15 @@ static bool surfaceless_probe_device_sw(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + struct _egl_device *device = _eglFindDevice(dri2_dpy->fd_render_gpu, true); dri2_dpy->fd_render_gpu = -1; - disp->Device = _eglFindDevice(dri2_dpy->fd_render_gpu, true); + + if (_eglHasAttrib(disp, EGL_DEVICE_EXT) && disp->Device != device) { + return false; + } + + disp->Device = device; assert(disp->Device); dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");
