<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, Jul 26, 2018 at 7:30 AM Emil Velikov <<a href="mailto:emil.l.velikov@gmail.com">emil.l.velikov@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi David,<br>
<br></blockquote><div>Hi Emil,</div><div><br>Thanks for the comments.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 18 July 2018 at 01:12, David Riley <<a href="mailto:davidriley@chromium.org" target="_blank">davidriley@chromium.org</a>> wrote:<br>
> Allow platform_surfaceless to use swrast even if DRM is not available.<br>
> To be used to allow a fuzzer for virgl to be run on a jailed VM without<br>
> hardware GL or DRM support.<br>
><br>
> Signed-off-by: David Riley <<a href="mailto:davidriley@chromium.org" target="_blank">davidriley@chromium.org</a>><br>
> ---<br>
>  src/egl/drivers/dri2/platform_surfaceless.c | 19 +++++++++++++++++++<br>
>  1 file changed, 19 insertions(+)<br>
><br>
> diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c<br>
> index f5fe7119c6..f4618bfa11 100644<br>
> --- a/src/egl/drivers/dri2/platform_surfaceless.c<br>
> +++ b/src/egl/drivers/dri2/platform_surfaceless.c<br>
> @@ -293,6 +293,7 @@ surfaceless_probe_device(_EGLDisplay *dpy, bool swrast)<br>
>     int fd;<br>
>     int i;<br>
><br>
> +   /* Attempt to find DRM device. */<br>
>     for (i = 0; i < limit; ++i) {<br>
>        char *card_path;<br>
>        if (asprintf(&card_path, DRM_RENDER_DEV_NAME, DRM_DIR_NAME, base + i) < 0)<br>
> @@ -327,6 +328,24 @@ surfaceless_probe_device(_EGLDisplay *dpy, bool swrast)<br>
>        dri2_dpy->loader_extensions = NULL;<br>
>     }<br>
><br>
> +   /* No DRM device, so attempt to fall back to software path w/o DRM. */<br>
> +   if (swrast) {<br>
> +      _eglLog(_EGL_DEBUG, "Falling back to surfaceless swrast without DRM.");<br>
> +      dri2_dpy->fd = -1;<br>
> +      dri2_dpy->driver_name = strdup("swrast");<br>
> +      if (!dri2_dpy->driver_name) {<br>
> +         return false;<br>
> +      }<br>
> +<br>
> +      if (dri2_load_driver_swrast(dpy)) {<br>
> +         dri2_dpy->loader_extensions = swrast_loader_extensions;<br>
> +         return true;<br>
> +      }<br>
> +<br>
> +      free(dri2_dpy->driver_name);<br>
> +      dri2_dpy->driver_name = NULL;<br>
> +   }<br>
<br>
Using swrast gives you a fairly different feature-set than kms_swrast.<br>
Since you're doing virglrenderer fuzzing, you haven't really noticed it.<br>
<br></blockquote><div>Yes, the main goal is to be able to get coverage of the virgl APIs and thus the required GL APIs.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Regardless, this patch seems like a hack, alike the ones Tomeu did [1].<br>
There are some ideas, in the comments, how to address this in a better fashion.<br>
<br>
If you can give it a try, that'll be appreciated. I don't quite have<br>
the time to pursue it atm.<br></blockquote><div><br></div><div>I understand and agree with your comments about kms_swrast requiring KMS and not wanting to change those semantics.</div><div><br></div><div>I'm not quite sure I follow all the rest of your suggestions (new to this entire code base).  You're suggesting that surfaceless move away from kms_swrast entirely?  Or just for the fallback path like I've got in these changes?</div><div><br></div><div>With regards to your other suggestion I also don't follow. Are you're suggesting that createNewScreen3 for swrast should dispatch between dri2_init_screen/drisw_init_screen/dri_kms_init_screen based on some enum instead of a driver that has been loaded and it's vtable?<br><br>I'm hoping to make some more targeted changes than major refactoring of code that I'm quite unfamiliar with.</div><div><br></div><div>Thanks,</div><div>David</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
HTH<br>
Emil<br>
<br>
[1]<br>
<a href="https://gitlab.collabora.com/tomeu/mesa/commit/4f804ceecd658492234cbf0fa5fb1b156a8fb79c" rel="noreferrer" target="_blank">https://gitlab.collabora.com/tomeu/mesa/commit/4f804ceecd658492234cbf0fa5fb1b156a8fb79c</a><br>
<a href="https://gitlab.collabora.com/tomeu/mesa/commit/54adda6a4d7b5c783d54dfd37d38d1a5a0f3187f" rel="noreferrer" target="_blank">https://gitlab.collabora.com/tomeu/mesa/commit/54adda6a4d7b5c783d54dfd37d38d1a5a0f3187f</a><br>
</blockquote></div></div>