glx: unhackify inferring zink from dri3

this still needs to be broken up more

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30375>
This commit is contained in:
Mike Blumenkrantz
2024-07-19 10:17:07 -04:00
committed by Marge Bot
parent 8994165e92
commit 1242f3ed3a
3 changed files with 15 additions and 11 deletions

View File

@@ -786,7 +786,7 @@ static const struct glx_screen_vtable dri3_screen_vtable = {
*/
struct glx_screen *
dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_inferred)
dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_inferred, bool *return_zink)
{
xcb_connection_t *c = XGetXCBConnection(priv->dpy);
const __DRIconfig **driver_configs;
@@ -795,7 +795,7 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in
__GLXDRIscreen *psp;
struct glx_config *configs = NULL, *visuals = NULL;
char *driverName, *driverNameDisplayGPU, *tmp;
bool return_zink = false;
*return_zink = false;
psc = calloc(1, sizeof *psc);
if (psc == NULL)
@@ -832,7 +832,7 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in
}
if (!strcmp(driverName, "zink") && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) {
return_zink = true;
*return_zink = true;
goto handle_error;
}
@@ -1012,7 +1012,7 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in
return &psc->base;
handle_error:
if (!return_zink)
if (!*return_zink)
CriticalErrorMessageF("failed to load driver: %s\n", driverName ? driverName : "(null)");
if (configs)
@@ -1034,7 +1034,7 @@ handle_error:
glx_screen_cleanup(&psc->base);
free(psc);
return return_zink ? GLX_LOADER_USE_ZINK : NULL;
return NULL;
}
#endif /* GLX_DIRECT_RENDERING */

View File

@@ -78,8 +78,6 @@ typedef struct __GLXDRIdisplay __GLXDRIdisplay;
typedef struct __GLXDRIscreenRec __GLXDRIscreen;
typedef struct __GLXDRIdrawableRec __GLXDRIdrawable;
#define GLX_LOADER_USE_ZINK ((struct glx_screen *)(uintptr_t)-1)
struct __GLXDRIscreenRec {
void (*destroyScreen)(struct glx_screen *psc);
@@ -146,7 +144,7 @@ extern __GLXDRIdisplay *driwindowsCreateDisplay(Display * dpy);
#if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE))
#ifdef HAVE_DRI3
struct glx_screen *dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_inferred);
struct glx_screen *dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_inferred, bool *return_zink);
void dri3_destroy_display(__GLXDRIdisplay * dpy);
#endif

View File

@@ -769,7 +769,13 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, enum glx_dr
#if defined(GLX_USE_DRM)
#if defined(HAVE_DRI3)
if (glx_driver & GLX_DRIVER_DRI3) {
psc = dri3_create_screen(i, priv, driver_name_is_inferred);
bool use_zink;
psc = dri3_create_screen(i, priv, driver_name_is_inferred, &use_zink);
if (use_zink) {
glx_driver |= GLX_DRIVER_ZINK_YES;
zink = true;
driver_name_is_inferred = false;
}
}
#endif /* HAVE_DRI3 */
#if defined(HAVE_X11_DRI2)
@@ -789,9 +795,9 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, enum glx_dr
#endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */
#if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE))
if ((psc == GLX_LOADER_USE_ZINK || psc == NULL) &&
if (psc == NULL &&
(glx_driver & GLX_DRIVER_SW || zink)) {
psc = driswCreateScreen(i, priv, glx_driver, psc == GLX_LOADER_USE_ZINK ? false : driver_name_is_inferred);
psc = driswCreateScreen(i, priv, glx_driver, driver_name_is_inferred);
}
#endif