mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 20:10:14 +01:00
egl/x11: split out dri2 init entirely
this will enable simplifying the remaining codepaths with the expectation that dri2 will be ripped out entirely after the next release Acked-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33891>
This commit is contained in:
parent
5466ff3a43
commit
323bad6b18
3 changed files with 34 additions and 15 deletions
|
|
@ -880,6 +880,7 @@ dri2_initialize(_EGLDisplay *disp)
|
||||||
|
|
||||||
loader_set_logger(_eglLog);
|
loader_set_logger(_eglLog);
|
||||||
|
|
||||||
|
bool allow_dri2 = false;
|
||||||
switch (disp->Platform) {
|
switch (disp->Platform) {
|
||||||
case _EGL_PLATFORM_SURFACELESS:
|
case _EGL_PLATFORM_SURFACELESS:
|
||||||
ret = dri2_initialize_surfaceless(disp);
|
ret = dri2_initialize_surfaceless(disp);
|
||||||
|
|
@ -889,7 +890,17 @@ dri2_initialize(_EGLDisplay *disp)
|
||||||
break;
|
break;
|
||||||
case _EGL_PLATFORM_X11:
|
case _EGL_PLATFORM_X11:
|
||||||
case _EGL_PLATFORM_XCB:
|
case _EGL_PLATFORM_XCB:
|
||||||
ret = dri2_initialize_x11(disp);
|
ret = dri2_initialize_x11(disp, &allow_dri2);
|
||||||
|
/* platform_x11 detects dri2 availability */
|
||||||
|
if (!ret && allow_dri2) {
|
||||||
|
/* this is a fallthrough using the same dri2_dpy from dri3,
|
||||||
|
* so the existing one must be destroyed and a new one created
|
||||||
|
* the caller will switch to the new display automatically
|
||||||
|
*/
|
||||||
|
dri2_display_destroy(disp);
|
||||||
|
dri2_display_create(disp);
|
||||||
|
ret = dri2_initialize_x11_dri2(disp);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case _EGL_PLATFORM_DRM:
|
case _EGL_PLATFORM_DRM:
|
||||||
ret = dri2_initialize_drm(disp);
|
ret = dri2_initialize_drm(disp);
|
||||||
|
|
|
||||||
|
|
@ -503,14 +503,21 @@ dri2_create_image_from_dri(_EGLDisplay *disp, struct dri_image *dri_image);
|
||||||
|
|
||||||
#ifdef HAVE_X11_PLATFORM
|
#ifdef HAVE_X11_PLATFORM
|
||||||
EGLBoolean
|
EGLBoolean
|
||||||
dri2_initialize_x11(_EGLDisplay *disp);
|
dri2_initialize_x11_dri2(_EGLDisplay *disp);
|
||||||
|
EGLBoolean
|
||||||
|
dri2_initialize_x11(_EGLDisplay *disp, bool *allow_dri2);
|
||||||
void
|
void
|
||||||
dri2_teardown_x11(struct dri2_egl_display *dri2_dpy);
|
dri2_teardown_x11(struct dri2_egl_display *dri2_dpy);
|
||||||
unsigned int
|
unsigned int
|
||||||
dri2_x11_get_red_mask_for_depth(struct dri2_egl_display *dri2_dpy, int depth);
|
dri2_x11_get_red_mask_for_depth(struct dri2_egl_display *dri2_dpy, int depth);
|
||||||
#else
|
#else
|
||||||
static inline EGLBoolean
|
static inline EGLBoolean
|
||||||
dri2_initialize_x11(_EGLDisplay *disp)
|
dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
||||||
|
{
|
||||||
|
return _eglError(EGL_NOT_INITIALIZED, "X11 platform not built");
|
||||||
|
}
|
||||||
|
static inline EGLBoolean
|
||||||
|
dri2_initialize_x11(_EGLDisplay *disp, bool *allow_dri2)
|
||||||
{
|
{
|
||||||
return _eglError(EGL_NOT_INITIALIZED, "X11 platform not built");
|
return _eglError(EGL_NOT_INITIALIZED, "X11 platform not built");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1948,7 +1948,8 @@ static const __DRIextension *dri2_loader_extensions[] = {
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static EGLBoolean
|
/* don't consolidate any of this, it's a separate codepath */
|
||||||
|
EGLBoolean
|
||||||
dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
||||||
{
|
{
|
||||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||||
|
|
@ -2005,10 +2006,16 @@ dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
||||||
cleanup:
|
cleanup:
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
EGLBoolean
|
||||||
|
dri2_initialize_x11_dri2(_EGLDisplay *disp)
|
||||||
|
{
|
||||||
|
return _eglError(EGL_NOT_INITIALIZED, "legacy-x11 dri2 not built");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EGLBoolean
|
EGLBoolean
|
||||||
dri2_initialize_x11(_EGLDisplay *disp)
|
dri2_initialize_x11(_EGLDisplay *disp, bool *allow_dri2)
|
||||||
{
|
{
|
||||||
enum dri2_egl_driver_fail status = DRI2_EGL_DRIVER_FAILED;
|
enum dri2_egl_driver_fail status = DRI2_EGL_DRIVER_FAILED;
|
||||||
if (disp->Options.ForceSoftware ||
|
if (disp->Options.ForceSoftware ||
|
||||||
|
|
@ -2024,16 +2031,10 @@ dri2_initialize_x11(_EGLDisplay *disp)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_X11_DRI2
|
#ifdef HAVE_X11_DRI2
|
||||||
if (!debug_get_bool_option("LIBGL_DRI2_DISABLE", false) &&
|
*allow_dri2 = !debug_get_bool_option("LIBGL_DRI2_DISABLE", false) &&
|
||||||
status != DRI2_EGL_DRIVER_PREFER_ZINK)
|
status != DRI2_EGL_DRIVER_PREFER_ZINK;
|
||||||
/* this is a fallthrough using the same dri2_dpy from dri3,
|
#else
|
||||||
* so the existing one must be destroyed and a new one created
|
*allow_dri2 = false;
|
||||||
* the caller will switch to the new display automatically
|
|
||||||
*/
|
|
||||||
dri2_display_destroy(disp);
|
|
||||||
dri2_display_create(disp);
|
|
||||||
if (dri2_initialize_x11_dri2(disp))
|
|
||||||
return EGL_TRUE;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue