From f94681b6e2f815f19ca817382848a878a77b44c9 Mon Sep 17 00:00:00 2001 From: David Riley Date: Tue, 17 Jul 2018 17:12:05 -0700 Subject: [PATCH] egl/surfaceless: Allow DRMless fallback. Allow platform_surfaceless to use swrast even if DRM is not available. To be used to allow a fuzzer for virgl to be run on a jailed VM without hardware GL or DRM support. Reviewed-by: Eric Engestrom Reviewed-by: Chad Versace Signed-off-by: David Riley --- src/egl/drivers/dri2/platform_surfaceless.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index 54bafae..bfc8fb9 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -293,6 +293,7 @@ surfaceless_probe_device(_EGLDisplay *dpy, bool swrast) int fd; int i; + /* Attempt to find DRM device. */ for (i = 0; i < limit; ++i) { char *card_path; if (asprintf(&card_path, DRM_RENDER_DEV_NAME, DRM_DIR_NAME, base + i) < 0) @@ -326,6 +327,24 @@ surfaceless_probe_device(_EGLDisplay *dpy, 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; + } + + if (dri2_load_driver_swrast(dpy)) { + dri2_dpy->loader_extensions = swrast_loader_extensions; + return true; + } + + free(dri2_dpy->driver_name); + dri2_dpy->driver_name = NULL; + } + return false; } -- 2.7.4