diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 2f78344538c..625a0c1d8e6 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -853,30 +853,6 @@ dri2_create_screen(_EGLDisplay *disp) return EGL_TRUE; } -EGLBoolean -dri2_setup_extensions(_EGLDisplay *disp) -{ - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - -#ifdef HAVE_DRI3_MODIFIERS -#ifdef HAVE_X11_PLATFORM - if (dri2_dpy->conn) { - bool err; - dri2_dpy->multibuffers_available = x11_dri3_check_multibuffer(dri2_dpy->conn, &err); - } -#endif - if (disp->Options.Zink && !disp->Options.ForceSoftware && - !dri2_dpy->multibuffers_available && - /* this is enum _egl_platform_type */ - (disp->Platform == _EGL_PLATFORM_X11 || - disp->Platform == _EGL_PLATFORM_XCB) && - !debug_get_bool_option("LIBGL_KOPPER_DRI2", false)) - return EGL_FALSE; -#endif - - return EGL_TRUE; -} - EGLBoolean dri2_setup_device(_EGLDisplay *disp, EGLBoolean software) { diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index f76a74f67eb..02888c9aab7 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -465,9 +465,6 @@ dri2_setup_swap_interval(_EGLDisplay *disp, int max_swap_interval); EGLBoolean dri2_create_screen(_EGLDisplay *disp); -EGLBoolean -dri2_setup_extensions(_EGLDisplay *disp); - EGLBoolean dri2_setup_device(_EGLDisplay *disp, EGLBoolean software); diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 9cf2e4dc293..017fec6e508 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -1147,11 +1147,6 @@ dri2_initialize_android(_EGLDisplay *disp) dri2_dpy->fd_display_gpu = dri2_dpy->fd_render_gpu; - if (!dri2_setup_extensions(disp)) { - err = "DRI2: failed to setup extensions"; - goto cleanup; - } - if (!dri2_setup_device(disp, false)) { err = "DRI2: failed to setup EGLDevice"; goto cleanup; diff --git a/src/egl/drivers/dri2/platform_device.c b/src/egl/drivers/dri2/platform_device.c index f7676b9a9a3..116131edf7b 100644 --- a/src/egl/drivers/dri2/platform_device.c +++ b/src/egl/drivers/dri2/platform_device.c @@ -364,11 +364,6 @@ dri2_initialize_device(_EGLDisplay *disp) goto cleanup; } - if (!dri2_setup_extensions(disp)) { - err = "DRI2: failed to find required DRI extensions"; - goto cleanup; - } - dri2_setup_screen(disp); #ifdef HAVE_WAYLAND_PLATFORM dri2_dpy->device_name = diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 61906734f20..9bb7ea4b950 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -657,11 +657,6 @@ dri2_initialize_drm(_EGLDisplay *disp) dri2_dpy->gbm_dri->base.v0.surface_release_buffer = release_buffer; dri2_dpy->gbm_dri->base.v0.surface_has_free_buffers = has_free_buffers; - if (!dri2_setup_extensions(disp)) { - err = "DRI2: failed to find required DRI extensions"; - goto cleanup; - } - if (!dri2_setup_device(disp, dri2_dpy->gbm_dri->software)) { err = "DRI2: failed to setup EGLDevice"; goto cleanup; diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index f68988a2553..6deef0aeacc 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -348,11 +348,6 @@ dri2_initialize_surfaceless(_EGLDisplay *disp) goto cleanup; } - if (!dri2_setup_extensions(disp)) { - err = "DRI2: failed to find required DRI extensions"; - goto cleanup; - } - dri2_setup_screen(disp); #ifdef HAVE_WAYLAND_PLATFORM dri2_dpy->device_name = diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index c96fcb0f75a..a8c814c45fb 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -2288,9 +2288,6 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp) if (!dri2_create_screen(disp)) goto cleanup; - if (!dri2_setup_extensions(disp)) - goto cleanup; - if (!dri2_setup_device(disp, false)) { _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to setup EGLDevice"); goto cleanup; @@ -2964,9 +2961,6 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp) if (!dri2_create_screen(disp)) goto cleanup; - if (!dri2_setup_extensions(disp)) - goto cleanup; - if (!dri2_setup_device(disp, true)) { _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to setup EGLDevice"); goto cleanup; diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 31de1d4ad9e..c791a4c8728 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -50,7 +50,7 @@ #include "util/log.h" #include #include - +#include "loader_x11.h" #include "kopper_interface.h" #include "loader.h" #include "platform_x11.h" @@ -1776,6 +1776,29 @@ check_xshm(struct dri2_egl_display *dri2_dpy) return ret; } +static EGLBoolean +dri2_x11_check_multibuffers(_EGLDisplay *disp) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + +#ifdef HAVE_DRI3_MODIFIERS +#ifdef HAVE_X11_PLATFORM + if (dri2_dpy->conn) { + bool err; + dri2_dpy->multibuffers_available = x11_dri3_check_multibuffer(dri2_dpy->conn, &err); + } +#endif + if (disp->Options.Zink && !disp->Options.ForceSoftware && + !dri2_dpy->multibuffers_available && + /* this is enum _egl_platform_type */ + (disp->Platform == _EGL_PLATFORM_X11 || + disp->Platform == _EGL_PLATFORM_XCB) && + !debug_get_bool_option("LIBGL_KOPPER_DRI2", false)) + return EGL_FALSE; +#endif + + return EGL_TRUE; +} static EGLBoolean dri2_initialize_x11_swrast(_EGLDisplay *disp) @@ -1810,7 +1833,7 @@ dri2_initialize_x11_swrast(_EGLDisplay *disp) if (!dri2_create_screen(disp)) goto cleanup; - if (!dri2_setup_extensions(disp)) + if (!dri2_x11_check_multibuffers(disp)) goto cleanup; if (!dri2_setup_device(disp, true)) { @@ -1896,7 +1919,7 @@ dri2_initialize_x11_dri3(_EGLDisplay *disp) if (!dri2_create_screen(disp)) goto cleanup; - if (!dri2_setup_extensions(disp)) + if (!dri2_x11_check_multibuffers(disp)) goto cleanup; if (!dri2_setup_device(disp, false)) { @@ -1999,7 +2022,7 @@ dri2_initialize_x11_dri2(_EGLDisplay *disp) if (!dri2_create_screen(disp)) goto cleanup; - if (!dri2_setup_extensions(disp)) + if (!dri2_x11_check_multibuffers(disp)) goto cleanup; if (!dri2_setup_device(disp, false)) {