diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 23da76c6230..db2f9761879 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -565,16 +565,14 @@ const __DRIimageLookupExtension image_lookup_extension = { .lookupEGLImageValidated = dri2_lookup_egl_image_validated, }; -EGLBoolean -dri2_load_driver(_EGLDisplay *disp) +void +dri2_detect_swrast(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); dri2_dpy->swrast = (disp->Options.ForceSoftware && !dri2_dpy->kopper && strcmp(dri2_dpy->driver_name, "vmwgfx")) || !dri2_dpy->driver_name || strstr(dri2_dpy->driver_name, "swrast"); dri2_dpy->swrast_not_kms = dri2_dpy->swrast && (!dri2_dpy->driver_name || strcmp(dri2_dpy->driver_name, "kms_swrast")); - - return EGL_TRUE; } static const char * diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index ec60340838d..4e13c97d3e2 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -438,8 +438,8 @@ extern const __DRIimageLookupExtension image_lookup_extension; extern const __DRIbackgroundCallableExtension background_callable_extension; extern const __DRIswrastLoaderExtension swrast_pbuffer_loader_extension; -EGLBoolean -dri2_load_driver(_EGLDisplay *disp); +void +dri2_detect_swrast(_EGLDisplay *disp); /* Helper for platforms not using dri2_create_screen */ void diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index aa1fb1017c7..87ae6efee1f 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -1045,9 +1045,7 @@ droid_load_driver(_EGLDisplay *disp, bool swrast) } dri2_dpy->loader_extensions = droid_image_loader_extensions; - if (!dri2_load_driver(disp)) { - goto error; - } + dri2_detect_swrast(disp); return true; @@ -1201,10 +1199,7 @@ dri2_initialize_android(_EGLDisplay *disp) dri2_dpy->loader_extensions = droid_swrast_image_loader_extensions; dri2_dpy->fd_render_gpu = -1; dri2_dpy->pure_swrast = true; - if(!dri2_load_driver(disp)) { - err = "DRI2: Failed to load swrast"; - goto cleanup; - } + dri2_detect_swrast(disp); if (!dri2_create_screen(disp)) { err = "DRI2: Failed to create swrast screen"; diff --git a/src/egl/drivers/dri2/platform_device.c b/src/egl/drivers/dri2/platform_device.c index 0dd6a561301..0394b7c2a8f 100644 --- a/src/egl/drivers/dri2/platform_device.c +++ b/src/egl/drivers/dri2/platform_device.c @@ -294,16 +294,11 @@ device_probe_device(_EGLDisplay *disp) dri2_dpy->driver_name = strdup("kms_swrast"); } - if (!dri2_load_driver(disp)) - goto err_load; + dri2_detect_swrast(disp); dri2_dpy->loader_extensions = image_loader_extensions; return true; -err_load: - free(dri2_dpy->driver_name); - dri2_dpy->driver_name = NULL; - err_name: close(dri2_dpy->fd_render_gpu); dri2_dpy->fd_render_gpu = dri2_dpy->fd_display_gpu = -1; @@ -322,11 +317,7 @@ device_probe_device_sw(_EGLDisplay *disp) return false; /* HACK: should be driver_swrast_null */ - if (!dri2_load_driver(disp)) { - free(dri2_dpy->driver_name); - dri2_dpy->driver_name = NULL; - return false; - } + dri2_detect_swrast(disp); dri2_dpy->loader_extensions = swrast_loader_extensions; return true; diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index bf8221ab821..8cbd7219796 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -632,10 +632,7 @@ dri2_initialize_drm(_EGLDisplay *disp) dri2_dpy->driver_name = strdup(dri2_dpy->gbm_dri->driver_name); - if (!dri2_load_driver(disp)) { - err = "DRI3: failed to load driver"; - goto cleanup; - } + dri2_detect_swrast(disp); dri2_dpy->dri_screen_render_gpu = dri2_dpy->gbm_dri->screen; dri2_dpy->driver_configs = dri2_dpy->gbm_dri->driver_configs; diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index 397c64eea6b..c25acd7e8be 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -268,7 +268,8 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast, bool zink) dri2_dpy->driver_name = driver_name; } - if (dri2_dpy->driver_name && dri2_load_driver(disp)) { + if (dri2_dpy->driver_name) { + dri2_detect_swrast(disp); if (swrast || zink) dri2_dpy->loader_extensions = swrast_loader_extensions; else @@ -336,11 +337,7 @@ surfaceless_probe_device_sw(_EGLDisplay *disp) if (!dri2_dpy->driver_name) return false; - if (!dri2_load_driver(disp)) { - free(dri2_dpy->driver_name); - dri2_dpy->driver_name = NULL; - return false; - } + dri2_detect_swrast(disp); dri2_dpy->loader_extensions = swrast_loader_extensions; diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 42d6bc9a1b6..c5e9acf8b75 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -2313,10 +2313,7 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp) } dri2_dpy->loader_extensions = dri2_loader_extensions; - if (!dri2_load_driver(disp)) { - _eglError(EGL_BAD_ALLOC, "DRI2: failed to load driver"); - goto cleanup; - } + dri2_detect_swrast(disp); if (!dri2_create_screen(disp)) goto cleanup; @@ -3066,8 +3063,7 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp) } dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast"); - if (!dri2_load_driver(disp)) - goto cleanup; + dri2_detect_swrast(disp); dri2_dpy->loader_extensions = disp->Options.Zink ? kopper_swrast_loader_extensions : swrast_loader_extensions; diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 14335e0b504..953f475f973 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -1907,8 +1907,7 @@ dri2_initialize_x11_dri2(_EGLDisplay *disp) if (!dri2_x11_connect(dri2_dpy)) goto cleanup; - if (!dri2_load_driver(disp)) - goto cleanup; + dri2_detect_swrast(disp); if (dri2_dpy->dri2_minor >= 1) dri2_dpy->loader_extensions = dri2_loader_extensions; @@ -2000,8 +1999,7 @@ dri2_initialize_x11(_EGLDisplay *disp, bool *allow_dri2) } } #endif - if (!dri2_load_driver(disp)) - return EGL_FALSE; + dri2_detect_swrast(disp); if (disp->Options.ForceSoftware || dri2_dpy->kopper) return dri2_initialize_x11_swrast(disp);