[Mesa-dev] [PATCH v2 2/2] egl/surfaceless: Allow DRMless fallback.

Emil Velikov emil.l.velikov at gmail.com
Thu Jul 26 14:30:36 UTC 2018


Hi David,

On 18 July 2018 at 01:12, David Riley <davidriley at chromium.org> wrote:
> 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.
>
> Signed-off-by: David Riley <davidriley at chromium.org>
> ---
>  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 f5fe7119c6..f4618bfa11 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)
> @@ -327,6 +328,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;
> +   }

Using swrast gives you a fairly different feature-set than kms_swrast.
Since you're doing virglrenderer fuzzing, you haven't really noticed it.

Regardless, this patch seems like a hack, alike the ones Tomeu did [1].
There are some ideas, in the comments, how to address this in a better fashion.

If you can give it a try, that'll be appreciated. I don't quite have
the time to pursue it atm.

HTH
Emil

[1]
https://gitlab.collabora.com/tomeu/mesa/commit/4f804ceecd658492234cbf0fa5fb1b156a8fb79c
https://gitlab.collabora.com/tomeu/mesa/commit/54adda6a4d7b5c783d54dfd37d38d1a5a0f3187f


More information about the mesa-dev mailing list