diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c index 632f2f28c..88b1e8e93 100644 --- a/glamor/glamor_egl.c +++ b/glamor/glamor_egl.c @@ -59,7 +59,7 @@ struct glamor_egl_screen_private { int fd; struct gbm_device *gbm; int dmabuf_capable; - Bool force_vendor; /* if GLVND vendor is forced from options */ + char *glvnd_vendor; /* GLVND vendor if forced from options or NULL otherwise */ CloseScreenProcPtr saved_close_screen; DestroyPixmapProcPtr saved_destroy_pixmap; @@ -917,11 +917,13 @@ glamor_egl_screen_init(ScreenPtr screen, struct glamor_context *glamor_ctx) glamor_ctx->make_current = glamor_egl_make_current; /* Use dynamic logic only if vendor is not forced via xorg.conf */ - if (!glamor_egl->force_vendor) { + if (!glamor_egl->glvnd_vendor) { gbm_backend_name = gbm_device_get_backend_name(glamor_egl->gbm); /* Mesa uses "drm" as backend name, in that case, just do nothing */ if (gbm_backend_name && strcmp(gbm_backend_name, "drm") != 0) glamor_set_glvnd_vendor(screen, gbm_backend_name); + } else { + glamor_set_glvnd_vendor(screen, glamor_egl->glvnd_vendor); } #ifdef DRI3 /* Tell the core that we have the interfaces for import/export @@ -972,6 +974,7 @@ static void glamor_egl_cleanup(struct glamor_egl_screen_private *glamor_egl) if (glamor_egl->gbm) gbm_device_destroy(glamor_egl->gbm); free(glamor_egl->device_path); + free(glamor_egl->glvnd_vendor); free(glamor_egl); } @@ -1108,10 +1111,9 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) memcpy(options, GlamorEGLOptions, sizeof(GlamorEGLOptions)); xf86ProcessOptions(scrn->scrnIndex, scrn->options, options); glvnd_vendor = xf86GetOptValString(options, GLAMOREGLOPT_VENDOR_LIBRARY); - if (glvnd_vendor) { - glamor_set_glvnd_vendor(xf86ScrnToScreen(scrn), glvnd_vendor); - glamor_egl->force_vendor = TRUE; - } + if (glvnd_vendor) + glamor_egl->glvnd_vendor = XNFstrdup(glvnd_vendor); + api = xf86GetOptValString(options, GLAMOREGLOPT_RENDERING_API); if (api && !strncasecmp(api, "es", 2)) force_es = TRUE;