egl/surfaceless: Fix EGL_DEVICE_EXT implementation
authorRobert Foss <rfoss@kernel.org>
Thu, 9 Nov 2023 14:16:46 +0000 (15:16 +0100)
committerEric Engestrom <eric@engestrom.ch>
Sun, 17 Dec 2023 23:48:01 +0000 (23:48 +0000)
The native_display checks are incorrect and partially never
executed due to native_display always being NULL.

Fixes: 1efaa858890 ("egl: Fix attrib_list[0] == EGL_NONE check")
Signed-off-by: Robert Foss <rfoss@kernel.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26131>
(cherry picked from commit cda9980f9639093cf86897a760e90c89df7b6c0f)

.pick_status.json
src/egl/main/egldisplay.c

index dda50bb..a105cb1 100644 (file)
         "description": "egl/surfaceless: Fix EGL_DEVICE_EXT implementation",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "1efaa85889051978f806c4ea7c6d4997329624e5",
         "notes": null
index dd4926c..4eadb8f 100644 (file)
@@ -642,6 +642,7 @@ _EGLDisplay *
 _eglGetSurfacelessDisplay(void *native_display, const EGLAttrib *attrib_list)
 {
    _EGLDisplay *dpy;
+   _EGLDevice *dev = NULL;
 
    /* Any native display must be an EGLDeviceEXT we know about */
    if (native_display != NULL) {
@@ -657,8 +658,8 @@ _eglGetSurfacelessDisplay(void *native_display, const EGLAttrib *attrib_list)
 
          switch (attrib) {
          case EGL_DEVICE_EXT:
-            if ((native_display && native_display != (void *)value) ||
-                (native_display != _eglLookupDevice(native_display))) {
+            dev = _eglLookupDevice((void *)value);
+            if (!dev) {
                _eglError(EGL_BAD_DEVICE_EXT, "eglGetPlatformDisplay");
                return NULL;
             }
@@ -671,10 +672,9 @@ _eglGetSurfacelessDisplay(void *native_display, const EGLAttrib *attrib_list)
       }
    }
 
-   dpy =
-      _eglFindDisplay(_EGL_PLATFORM_SURFACELESS, native_display, attrib_list);
+   dpy = _eglFindDisplay(_EGL_PLATFORM_SURFACELESS, NULL, attrib_list);
    if (dpy) {
-      dpy->Device = native_display;
+      dpy->Device = dev;
    }
 
    return dpy;