From 04a30c27194c498651832eca80475db6c7ae918f Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Tue, 27 Jan 2026 05:22:35 +0200 Subject: [PATCH] kdrive/fbdev: Allow forcing glamor to create GL/GLES contexts only This brings Xfbdev's glamor code in line with glamor/glamor_egl.c Signed-off-by: stefan11111 --- hw/kdrive/fbdev/fb_glamor.c | 7 +++++-- hw/kdrive/fbdev/fbdev.h | 2 ++ hw/kdrive/fbdev/fbinit.c | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/hw/kdrive/fbdev/fb_glamor.c b/hw/kdrive/fbdev/fb_glamor.c index 6ab1a0ca37..bef9cb7dac 100644 --- a/hw/kdrive/fbdev/fb_glamor.c +++ b/hw/kdrive/fbdev/fb_glamor.c @@ -18,6 +18,9 @@ const char *fbdev_glvnd_provider = "mesa"; +Bool es_allowed = TRUE; +Bool force_es = FALSE; + static void fbdev_glamor_egl_cleanup(FbdevScrPriv *scrpriv) { @@ -310,11 +313,11 @@ fbdev_glamor_egl_try_gles_api(FbdevScrPriv *scrpriv) static Bool fbdev_glamor_bind_gl_api(FbdevScrPriv *scrpriv) { - if (fbdev_glamor_egl_try_big_gl_api(scrpriv)) { + if (!force_es && fbdev_glamor_egl_try_big_gl_api(scrpriv)) { return TRUE; } - return fbdev_glamor_egl_try_gles_api(scrpriv); + return es_allowed && fbdev_glamor_egl_try_gles_api(scrpriv); } static Bool diff --git a/hw/kdrive/fbdev/fbdev.h b/hw/kdrive/fbdev/fbdev.h index d3cbeac2fb..0a5fb1436c 100644 --- a/hw/kdrive/fbdev/fbdev.h +++ b/hw/kdrive/fbdev/fbdev.h @@ -64,6 +64,8 @@ extern Bool fbDisableShadow; #if defined(GLAMOR) && defined(GLXEXT) extern const char *fbdev_glvnd_provider; +extern Bool es_allowed; +extern Bool force_es; #endif Bool fbdevCardInit(KdCardInfo * card); diff --git a/hw/kdrive/fbdev/fbinit.c b/hw/kdrive/fbdev/fbinit.c index 54f23e2dae..36d588a33e 100644 --- a/hw/kdrive/fbdev/fbinit.c +++ b/hw/kdrive/fbdev/fbinit.c @@ -72,6 +72,10 @@ ddxUseMsg(void) ("-noshadow Disable the ShadowFB layer if possible\n"); ErrorF ("-glvendor Suggest what glvnd vendor library should be used\n"); + ErrorF + ("-force-gl Force glamor to only use GL contexts\n"); + ErrorF + ("-force-es Force glamor to only use GLES contexts\n"); ErrorF("\n"); } @@ -101,6 +105,16 @@ ddxProcessArgument(int argc, char **argv, int i) UseMsg(); exit(1); } + + if (!strcmp(argv[i], "-force-gl")) { + es_allowed = FALSE; + return 1; + } + + if (!strcmp(argv[i], "-force-es")) { + force_es = TRUE; + return 1; + } #endif return KdProcessArgument(argc, argv, i);