egl/surfaceless: try kms_swrast before swrast

Before commit f7e0cdcf1a, we tried these in order

 - if (!ForceSoftware) surfaceless_probe_device(disp, false);
 - surfaceless_probe_device(disp, true);
 - surfaceless_probe_device_sw(disp);

The commit changed it to

 - surfaceless_probe_device(disp, ForceSoftware);
 - surfaceless_probe_device_sw(disp);

and broke 2D virtio-gpu and vgem when ForceSoftware is false.  This
commit restores the old behavior.

Fixes: f7e0cdcf1a ("egl/surfaceless: simplify dri2_initialize_surfaceless()")
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11992>
(cherry picked from commit 384181921c)
This commit is contained in:
Chia-I Wu 2021-07-20 14:31:46 -07:00 committed by Dylan Baker
parent 98d88943e3
commit 08781845fe
2 changed files with 10 additions and 6 deletions

View file

@ -1147,7 +1147,7 @@
"description": "egl/surfaceless: try kms_swrast before swrast",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "f7e0cdcf1a5b639b4df610be600fa5d8db100289"
},

View file

@ -327,14 +327,18 @@ dri2_initialize_surfaceless(_EGLDisplay *disp)
dri2_dpy->fd = -1;
disp->DriverData = (void *) dri2_dpy;
/* When ForceSoftware is false, we try the HW driver. When ForceSoftware
* is true, we try kms_swrast and swrast in order.
*/
driver_loaded = surfaceless_probe_device(disp, disp->Options.ForceSoftware);
if (!driver_loaded && disp->Options.ForceSoftware) {
_eglLog(_EGL_DEBUG, "Falling back to surfaceless swrast without DRM.");
driver_loaded = surfaceless_probe_device_sw(disp);
}
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;
}
err = "DRI2: failed to load driver";
goto cleanup;
}
if (!dri2_create_screen(disp)) {