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");

Reply via email to