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:

committed by
Marge Bot

parent
8994165e92
commit
1242f3ed3a
@@ -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 */
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user