summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <ofourdan@redhat.com>2021-10-04 09:36:23 +0200
committerOlivier Fourdan <ofourdan@redhat.com>2021-10-18 14:17:28 +0200
commit21e3dc3b5a576d38b549716bda0a6b34612e1f1f (patch)
tree5cab47617fd1537a20e2a8167bc2c63c9eb3ab92
parentab1c873f9d2445d7ed46d71c3589b4c448a6cc12 (diff)
downloadxserver-21e3dc3b5a576d38b549716bda0a6b34612e1f1f.tar.gz
xwayland: Set GLVND driver based on GBM backend name
With the GBM backend becoming usable with different drivers such as NVIDIA, set the GLVND vendor to the same value as the GBM backend name. Mesa implementation however returns "drm" so we need to special case this value - Basically, for anything other than "drm" we simply assume that the GBM backend name is the same as the vendor. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: James Jones <jajones@nvidia.com> Tested-by: James Jones <jajones@nvidia.com> (cherry picked from commit 5daf42b48924b1e93d4fe40e600c42ae9835712f)
-rw-r--r--hw/xwayland/xwayland-glamor-gbm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c
index 386266a4e..466a1b052 100644
--- a/hw/xwayland/xwayland-glamor-gbm.c
+++ b/hw/xwayland/xwayland-glamor-gbm.c
@@ -938,6 +938,7 @@ xwl_glamor_gbm_init_egl(struct xwl_screen *xwl_screen)
struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
EGLint major, minor;
const GLubyte *renderer;
+ const char *gbm_backend_name;
if (!xwl_gbm->fd_render_node && !xwl_gbm->drm_authenticated) {
ErrorF("Failed to get wl_drm, disabling Glamor and DRI3\n");
@@ -989,6 +990,11 @@ xwl_glamor_gbm_init_egl(struct xwl_screen *xwl_screen)
"EXT_image_dma_buf_import_modifiers"))
xwl_gbm->dmabuf_capable = TRUE;
+ gbm_backend_name = gbm_device_get_backend_name(xwl_gbm->gbm);
+ /* Mesa uses "drm" as backend name, in that case, just do nothing */
+ if (gbm_backend_name && strcmp(gbm_backend_name, "drm") != 0)
+ xwl_screen->glvnd_vendor = gbm_backend_name;
+
return TRUE;
error:
if (xwl_screen->egl_display != EGL_NO_DISPLAY) {