kdrive/fbdev: Don't try to accelerate rendering with glamor with a sw driver

It will likely be slower that unaccelerated rendering.
Command-line flags were added for overriding this.

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
This commit is contained in:
stefan11111
2026-01-27 06:11:39 +02:00
committed by Enrico Weigelt
parent f3c5b41161
commit 5adae6c3b3
5 changed files with 136 additions and 96 deletions

View File

@@ -24,6 +24,8 @@ char *fbdev_glvnd_provider = NULL;
Bool es_allowed = TRUE;
Bool force_es = FALSE;
Bool fbGlamorAllowed = TRUE;
Bool fbForceGlamor = FALSE;
Bool fbXVAllowed = TRUE;
static void
@@ -97,7 +99,19 @@ fbdevInitAccel(ScreenPtr pScreen)
return FALSE;
}
if (!glamor_init(pScreen, GLAMOR_USE_EGL_SCREEN | GLAMOR_NO_DRI3)) {
int flags = GLAMOR_USE_EGL_SCREEN | GLAMOR_NO_DRI3;
if (!fbGlamorAllowed) {
flags |= GLAMOR_NO_RENDER_ACCEL;
} else if (!fbForceGlamor){
const char *renderer = (const char*)glGetString(GL_RENDERER);
if (!renderer ||
strstr(renderer, "softpipe") ||
strstr(renderer, "llvmpipe")) {
flags |= GLAMOR_NO_RENDER_ACCEL;
}
}
if (!glamor_init(pScreen, flags)) {
fbdev_glamor_egl_cleanup(scrpriv);
return FALSE;
}
@@ -112,7 +126,8 @@ fbdevInitAccel(ScreenPtr pScreen)
#endif
#ifdef XV
if (fbXVAllowed) {
/* X-Video needs glamor render accel */
if (fbXVAllowed && !(flags & GLAMOR_NO_RENDER_ACCEL)) {
kd_glamor_xv_init(pScreen);
}
#endif

View File

@@ -66,6 +66,8 @@ extern Bool fbDisableShadow;
extern char *fbdev_glvnd_provider;
extern Bool es_allowed;
extern Bool force_es;
extern Bool fbGlamorAllowed;
extern Bool fbForceGlamor;
#ifdef XV
extern Bool fbXVAllowed;
#endif

View File

@@ -72,6 +72,10 @@ ddxUseMsg(void)
("-fb path Framebuffer device to use. Defaults to /dev/fb0\n");
ErrorF
("-noshadow Disable the ShadowFB layer if possible\n");
ErrorF
("-glamor Force enable glamor render acceleration if possible\n");
ErrorF
("-noglamor Force disable glamor render acceleration\n");
ErrorF
("-glvendor Suggest what glvnd vendor library should be used\n");
ErrorF
@@ -101,6 +105,16 @@ ddxProcessArgument(int argc, char **argv, int i)
}
#ifdef GLAMOR
if (!strcmp(argv[i], "-glamor")) {
fbForceGlamor = TRUE;
return 1;
}
if (!strcmp(argv[i], "-noglamor")) {
fbGlamorAllowed = FALSE;
return 1;
}
if (!strcmp(argv[i], "-glvendor")) {
if (i + 1 < argc) {
fbdev_glvnd_provider = strdup(argv[i + 1]);