美文网首页
关于Linux下AMD显卡关闭垂直同步的方法

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

作者: uoy_fo_lla_kcuf | 来源:发表于2018-06-24 14:26 被阅读0次

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

    在写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=1 打开垂直同步
    # 以环境变量 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=/"); 效果是一样的。

    相关文章

      网友评论

          本文标题:关于Linux下AMD显卡关闭垂直同步的方法

          本文链接:https://www.haomeiwen.com/subject/kcojyftx.html