Commit 2fa5e0af authored by Kenneth Graunke's avatar Kenneth Graunke
Browse files

modesetting: Use EGL_MESA_query_driver to select DRI driver if possible

New now ask Glamor to use EGL_MESA_query_driver to obtain the DRI driver
name; if successful, we use that as the DRI driver name.  Since this is
a generic GL-based video driver, we also pair it with the "va_gl" VDPAU
driver.

This allows us to bypass the PCI ID lists in xserver and centralize the
driver selection mechanism inside Mesa.  The hope is that we no longer
have to update these lists for any future hardware.
parent 9c0fdb83
Pipeline #82770 passed with stages
in 5 minutes and 46 seconds
......@@ -74,7 +74,7 @@
* mask is 0xFFFF0000.
*/
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(24, 0)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(24, 1)
#define ABI_XINPUT_VERSION SET_ABI_VERSION(24, 1)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(10, 0)
......
......@@ -1033,6 +1033,7 @@ ms_dri2_screen_init(ScreenPtr screen)
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
modesettingPtr ms = modesettingPTR(scrn);
DRI2InfoRec info;
const char *driver_names[2] = { NULL, NULL };
if (!glamor_supports_pixmap_import_export(screen)) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
......@@ -1071,9 +1072,30 @@ ms_dri2_screen_init(ScreenPtr screen)
info.DestroyBuffer2 = ms_dri2_destroy_buffer2;
info.CopyRegion2 = ms_dri2_copy_region2;
/* These two will be filled in by dri2.c */
info.numDrivers = 0;
info.driverNames = NULL;
/* Ask Glamor to obtain the DRI driver name via EGL_MESA_query_driver. */
driver_names[0] = glamor_egl_get_driver_name(screen);
if (driver_names[0]) {
/* There is no VDPAU driver for Intel, fallback to the generic
* OpenGL/VAAPI va_gl backend to emulate VDPAU. Otherwise,
* guess that the DRI and VDPAU drivers have the same name.
*/
if (strcmp(driver_names[0], "i965") == 0 ||
strcmp(driver_names[0], "iris") == 0) {
driver_names[1] = "va_gl";
} else {
driver_names[1] = driver_names[0];
}
info.numDrivers = 2;
info.driverNames = driver_names;
} else {
/* EGL_MESA_query_driver was unavailable; let dri2.c select the
* driver and fill in these fields for us.
*/
info.numDrivers = 0;
info.driverNames = NULL;
}
return DRI2ScreenInit(screen, &info);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment