关于Linux下AMD显卡关闭垂直同步的方法

2018-06-24  本文已影响0人  uoy_fo_lla_kcuf

为什么会想到修改垂直同步

在写OpenGL代码的时候发现帧率只有60fps左右,非常无语,我的RX470D怎么着也不可能才跑这么点,连特么核显都不如啊。想想一定是开了垂直同步。那就想辙关闭呗。

查找关闭的方法

由于用的是 SDL2 + OpenGL,首先想到的是 SDL2 中有没有相关的接口去关闭。

google了一下,果然有一个:

SDL_GL_SetSwapInterval(0);

然而事情肯定没这么简单。果然,运行程序依然60fps。

接着google如何关闭 AMD的垂直同步,找到方案1
编辑 /usr/share/X11/xorg.conf.d/10-radeon.conf

Section "OutputClass"
    Identifier "Radeon"
    MatchDriver "radeon"
    Driver "radeon"
EndSection

在其中加上如下:

Option "TearFree" "on"

尝试了一下,问题依然,甚至重启后桌面环境都起不来了。

继续google, 在AMD官网找到方案2

Enabling/Disabling AMD FreeSync

In order to enable FreeSync, please run the following terminal command:

DISPLAY=:0 xrandr --output DisplayPort-# --set "freesync" 1
where # is your display's number (e.g., DisplayPort-0).
In order to disable FreeSync, please run the following terminal command:

DISPLAY=:0 xrandr --output DisplayPort-# --set "freesync" 0
where # is your display's number (e.g., DisplayPort-0).

我用的 DVI 接口所以执行如下命令:

DISPLAY=:0 xrandr --output DVI-D-0-# --set "freesync" 0
DISPLAY=:0 xrandr --output DVI-D-0-# --set "tearsync" "off"

也还是不工作

继续google,最后在 Youtube 上发现方案3
使用环境变量 vblank_mode

# 以环境变量 vblank_mode=0 启动程序
vblank_mode=0 ./OpenGL程序

注意: vblank_mode=0 后 SDL2 中的 SDL_GL_SetSwapInterval(0); 仍然需要,这样才能在程序中打开垂直同步。

竟然可以了,帧率飙升到 6000fps,神奇的东西。

在此还学到个东西:如何以指定环境变量运行程序

OLDPWD=/ cd -

这个命令将 环境变量 OLDPWD=/ 传递给 cd -, 这个设定不会改变 cd 父进程的 OLDPWD环境变量。
这个和在 cd 中执行 putenv("OLDPWD=/"); 效果是一样的。

上一篇下一篇

猜你喜欢

热点阅读