[Mesa-dev] [PATCH v2 1/3] egl/sl: split out swrast probe into separate function

Emil Velikov emil.l.velikov at gmail.com
Tue Feb 19 14:08:06 UTC 2019


From: Emil Velikov <emil.velikov at collabora.com>

Make the code a bit easier to read.

As a bonus point this makes it obvious that we forgot to call
_eglAddDevice() for the device - do so.

v2:
 - s/dpy/disp/ (Eric)
 - free(driver_name) on dri2_load_driver_swrast() failure (Eric)

Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom at intel.com>
Reviewed-by: Mathias Fröhlich <Mathias.Froehlich at web.de> (v1)
---
 src/egl/drivers/dri2/platform_surfaceless.c | 43 +++++++++++++--------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c
index 0c018a35234..42bd17e8341 100644
--- a/src/egl/drivers/dri2/platform_surfaceless.c
+++ b/src/egl/drivers/dri2/platform_surfaceless.c
@@ -322,25 +322,30 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast)
       dri2_dpy->loader_extensions = NULL;
    }
 
-   /* No DRM device, so attempt to fall back to software path w/o DRM. */
-   if (swrast) {
-      _eglLog(_EGL_DEBUG, "Falling back to surfaceless swrast without DRM.");
-      dri2_dpy->fd = -1;
-      dri2_dpy->driver_name = strdup("swrast");
-      if (!dri2_dpy->driver_name) {
-         return false;
-      }
+   return false;
+}
 
-      if (dri2_load_driver_swrast(disp)) {
-         dri2_dpy->loader_extensions = swrast_loader_extensions;
-         return true;
-      }
+static bool
+surfaceless_probe_device_sw(_EGLDisplay *disp)
+{
+   struct dri2_egl_display *dri2_dpy = disp->DriverData;
+
+   dri2_dpy->fd = -1;
+   disp->Device = _eglAddDevice(dri2_dpy->fd, true);
+   assert(disp->Device);
+
+   dri2_dpy->driver_name = strdup("swrast");
+   if (!dri2_dpy->driver_name)
+      return false;
 
+   if (!dri2_load_driver_swrast(disp)) {
       free(dri2_dpy->driver_name);
       dri2_dpy->driver_name = NULL;
+      return false;
    }
 
-   return false;
+   dri2_dpy->loader_extensions = swrast_loader_extensions;
+   return true;
 }
 
 EGLBoolean
@@ -364,9 +369,15 @@ dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
                  "No hardware driver found, falling back to software rendering");
    }
 
-   if (!driver_loaded && !surfaceless_probe_device(disp, true)) {
-      err = "DRI2: failed to load driver";
-      goto cleanup;
+   if (!driver_loaded)
+      driver_loaded = surfaceless_probe_device(disp, true);
+
+   if (!driver_loaded) {
+      _eglLog(_EGL_DEBUG, "Falling back to surfaceless swrast without DRM.");
+      if (!surfaceless_probe_device_sw(disp)) {
+         err = "DRI2: failed to load driver";
+         goto cleanup;
+      }
    }
 
    if (!dri2_create_screen(disp)) {
-- 
2.20.1



More information about the mesa-dev mailing list