mirror of
https://github.com/X11Libre/xserver.git
synced 2026-11-15 05:23:40 +00:00
kdrive/fbdev: Implement -noaccel flag
Similar to `-dumb`, but allows disabling acceleration for a single screen, as oposed to the whole server Signed-off-by: stefan11111 <stefan11111github@gmail.com>
This commit is contained in:
parent
b477959552
commit
a330e82f6e
4 changed files with 31 additions and 1 deletions
|
|
@ -45,6 +45,9 @@ tells the X server to enable master permissions on the dri fd it uses
|
|||
disables the ShadowFB layer on supported hw, may slightly increase performance.
|
||||
May also lead to flickering.
|
||||
.TP 8
|
||||
.B -noaccel
|
||||
disables hw acceleration (similar to -dumb, but only for a single screen).
|
||||
.TP 8
|
||||
.B -glamor
|
||||
force enables glamor render acceleration (even on top of sw renderers like softpipe/llvmpipe).
|
||||
.TP 8
|
||||
|
|
|
|||
|
|
@ -32,6 +32,11 @@ fbdevInitAccel(ScreenPtr pScreen)
|
|||
FbdevScrPriv *scrpriv = screen->driver;
|
||||
FbScreenConf *config = screen->card->closure;
|
||||
|
||||
if (config->fbNoAccel) {
|
||||
/* Only disable accel for this screen */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (config->fbdev_dri_path) {
|
||||
scrpriv->dri_fd = open(config->fbdev_dri_path, O_RDWR);
|
||||
if (scrpriv->dri_fd >= 0) {
|
||||
|
|
@ -113,6 +118,10 @@ fbdevEnableAccel(ScreenPtr pScreen)
|
|||
FbdevScrPriv *scrpriv = screen->driver;
|
||||
FbScreenConf *config = screen->card->closure;
|
||||
|
||||
if (config->fbNoAccel) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (config->fbdev_drm_master && scrpriv->dri_fd >= 0) {
|
||||
drmSetMaster(scrpriv->dri_fd);
|
||||
}
|
||||
|
|
@ -128,6 +137,10 @@ fbdevDisableAccel(ScreenPtr pScreen)
|
|||
FbdevScrPriv *scrpriv = screen->driver;
|
||||
FbScreenConf *config = screen->card->closure;
|
||||
|
||||
if (config->fbNoAccel) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (config->fbdev_drm_master && scrpriv->dri_fd >= 0) {
|
||||
drmDropMaster(scrpriv->dri_fd);
|
||||
}
|
||||
|
|
@ -140,6 +153,11 @@ fbdevFiniAccel(ScreenPtr pScreen)
|
|||
KdScreenPriv(pScreen);
|
||||
KdScreenInfo *screen = pScreenPriv->screen;
|
||||
FbdevScrPriv *scrpriv = screen->driver;
|
||||
FbScreenConf *config = screen->card->closure;
|
||||
|
||||
if (config->fbNoAccel) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (scrpriv->dri_fd >= 0) {
|
||||
close(scrpriv->dri_fd);
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ typedef struct _fbdevScrPriv {
|
|||
typedef struct _fbScreenConf {
|
||||
const char *fbdevDevicePath;
|
||||
Bool fbDisableShadow;
|
||||
|
||||
bool fbNoAccel;
|
||||
#ifdef GLAMOR
|
||||
char *fbdev_glvnd_provider;
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,8 @@ fbdevLogScreenInfo(FbScreenConf *config, int screen_num)
|
|||
config->fbdevDevicePath ? config->fbdevDevicePath : "not passed");
|
||||
LogMessage(X_INFO, "Xfbdev(%d): ShadowFB %s\n", screen_num,
|
||||
config->fbDisableShadow ? "disabled" : "enabled");
|
||||
LogMessage(X_INFO, "Xfbdev(%d): HW Acceleration %s\n", screen_num,
|
||||
config->fbNoAccel ? "disabled" : "enabled");
|
||||
#ifdef GLAMOR
|
||||
LogMessage(X_INFO, "Xfbdev(%d): glvnd library: %s\n", screen_num,
|
||||
config->fbdev_glvnd_provider ? config->fbdev_glvnd_provider : "not passed");
|
||||
|
|
@ -167,6 +169,8 @@ ddxUseMsg(void)
|
|||
("-drm-master Enable master permissions on the fd used for dri\n");
|
||||
ErrorF
|
||||
("-noshadow Disable the ShadowFB layer if possible\n");
|
||||
ErrorF
|
||||
("-noaccel Disable hw acceleration (per screen)\n");
|
||||
ErrorF
|
||||
("-glamor Force enable glamor render acceleration if possible\n");
|
||||
ErrorF
|
||||
|
|
@ -215,6 +219,11 @@ ddxProcessArgument(int argc, char **argv, int i)
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[i], "-noaccel")) {
|
||||
fbCurrScreen->fbNoAccel = TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef GLAMOR
|
||||
if (!strcmp(argv[i], "-glamor")) {
|
||||
fbCurrScreen->fbForceGlamor = TRUE;
|
||||
|
|
|
|||
Loading…
Reference in a new issue