diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c index 234b368386..3f16087c56 100644 --- a/glamor/glamor_egl.c +++ b/glamor/glamor_egl.c @@ -1597,6 +1597,24 @@ glamor_egl_set_glvnd_vendor(ScreenPtr screen) return; } +/** + * If we're on nvidia and the user didn't request a particular gl vendor, set it to nvidia. + * See: https://github.com/X11Libre/xserver/pull/2847 + */ +#ifdef WITH_LIBDRM + if (glamor_egl->fd >= 0) { + drmVersionPtr version = drmGetVersion(glamor_egl->fd); + if (version) { + if (version->name && !strcmp(version->name, "nvidia-drm")) { + drmFreeVersion(version); + glamor_set_glvnd_vendor(screen, "nvidia"); + return; + } + drmFreeVersion(version); + } + } +#endif + #ifdef GLAMOR_HAS_GBM if (glamor_egl->gbm) { const char *gbm_backend_name; @@ -2218,6 +2236,22 @@ glamor_egl_init_display(glamor_egl_priv_t *glamor_egl, int *dri_fd, int *out_pla #define EGL_PLATFORM_GBM_KHR 0x31D7 #endif +/** + * If we're on nvidia and the user didn't request a particular gl vendor, set it to nvidia. + * See: https://github.com/X11Libre/xserver/pull/2847 + */ +#ifdef WITH_LIBDRM + if (!glamor_egl->glvnd_vendor && (glamor_egl->fd >= 0)) { + drmVersionPtr version = drmGetVersion(glamor_egl->fd); + if (version) { + if (version->name && !strcmp(version->name, "nvidia-drm")) { + glamor_egl->glvnd_vendor = strdup("nvidia"); + } + drmFreeVersion(version); + } + } +#endif + /** * If the user didn't give us a GL driver/library name, * we populate it with what we queried