From 384181921c23fc7630b4a7d373f5b6755d20c8af Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 20 Jul 2021 14:31:46 -0700 Subject: [PATCH] egl/surfaceless: try kms_swrast before swrast Before commit f7e0cdcf1a5, 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: f7e0cdcf1a5 ("egl/surfaceless: simplify dri2_initialize_surfaceless()") Signed-off-by: Chia-I Wu Reviewed-by: Adam Jackson Reviewed-by: Emil Velikov Part-of: --- src/egl/drivers/dri2/platform_surfaceless.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index 2cd909c75a2..a420eb09ff6 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -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)) {