如题,据说最近 linux 4.x 内核对 amd 驱动改善很大,自己就捣鼓了一番,发现开源驱动也可以实现 vaapi 硬解码,不过经过自己试验发现 设置 vaapi 驱动时好多都可以,自己有点疑惑,具体是:
export LIBVA_DRIVER_NAME=radeonsi vainfo 成功输出
export LIBVA_DRIVER_NAME=r600 vainfo 成功输出
export LIBVA_DRIVER_NAME=vdpau vainfo 成功输出
export LIBVA_DRIVER_NAME=dummy vainfo 成功输出
发现上面都可以硬解码,自己 google 一番,也没搞明白个所以然,不明白 radeonsi、r600、opengl、mesa、vaapi 等这些都是什么个关系,貌似 vdpau 和 vaapi 以及 xvba 是一个层次上的概念,那其他呢,希望有大神基于解惑
这个指的是新驱动 amdgpu,只针对 R9 285 Tonga 及以后的硬件
radeon 开源驱动用 vaapi 不知有什么额外的好处?
我这里 /usr/lib/x86_64-linux-gnu/dri/ 下 r600_drv_video.so 和 radeonsi_drv_video.so 都是 vdpau_drv_video.so 的链接
radeonsi r600g 是两代 radeon 显卡驱动
* r600g supports all TeraScale (VLIW5/4)-based GPUs: R600, R700, HD 5000 (“Evergreen”) and HD 6000 (“Northern Islands”)
* radeonsi supports all Graphics Core Next-based GPUs: HD 7000, HD 8000 and Rx 200 (“Southern Islands” or “Sea Islands”)
Mesa 是 OpenGL 规范的开源实现
XvBA 是 AMD(ATI) 私有驱动 fglrx 提供的硬解 API,实际使用时都要借助 xvba-va-driver(libfglrx-amdxvba1) 转换为 vaapi 使用
参考
en.wikipedia.org/wiki/Free_and_open-source_graphics_device_driver#ATI.2FAMD
xorg.freedesktop.org/wiki/RadeonFeature/
phoronix.com/scan.php?page=search&q=XvBA
phoronix.com/scan.php?page=search&q=RadeonSI
en.wikipedia.org/wiki/Direct_Rendering_Infrastructure
phoronix.com/forums/forum/linux-graphics-x-org-drivers/open-source-amd-linux/41122-r600g-or-radeonsi
学习了,继续研究中,谢谢! :1:
我这里 radeonsi 以及 r600 怎么不是软链接呢?
openSUSE 打包貌似不同,radeonsi_drv_video.so 是由 vaapi-radeonsi-driver 这个包提供的
同理 r600_drv_video.so 是由 vaapi-r600-driver 提供的
libva-vdpau-driver 只含有:
lrwxrwxrwx 1 root root 18 Jan 23 19:18 nvidia_drv_video.so -> vdpau_drv_video.so
lrwxrwxrwx 1 root root 18 Jan 23 19:18 s3g_drv_video.so -> vdpau_drv_video.so
-rwxr-xr-x 1 root root 97232 Jan 23 19:18 vdpau_drv_video.so
也就是说,这个 “VDPAU Backend for Video Acceleration (VA) API.” 只支持 NVIDIA 私有驱动
而且包中提供的 /etc/profile.d 脚本也只针对 NVIDIA 显卡检测:若为 NVIDIA 私有驱动,则 export LIBVA_DRIVER_NAME=vdpau
(猜测的,不一定准确)
具体我不是太懂,猜测 export LIBVA_DRIVER_NAME=vdpau 时,使用的才是所谓的"VDPAU Backend for Video Acceleration (VA) API."
而 export LIBVA_DRIVER_NAME=radeonsi 时,使用的是由 home:gryffus:nine 提供的 vaapi-radeonsi-driver。这是 radeon 开源驱动的原生 vaapi?还是也以 vdpau 为后端?我没搞清楚。deb 系没有这个东西。
(猜测的,不一定准确)
使用 radeonsi 还是 r600 取决于你的硬件。具体见 2 楼
我觉得应该是原生支持的吧,我是看了这篇通讯:
phoronix.com/scan.php?page=news_item&px=Gallium3D-Better-VA
里面说:
“For those using Gallium3D video acceleration via the VA-API or VDPAU acceleration APIs with the RadeonSI/R600g or NVC0, there are some state tracker additions and to the Gallium3D VL code to report on: BOB deinterlacing, NV12 post-processing, the code is now thread-safe to avoid potential crashes with MPV, improvements to the motion adaptive deinterlacer, and other improvements/fixes. ”
另外,我硬件是 radeon mobility hd5470,通过查看硬件,发现用的是 radeon 驱动,而不是 r600?
还有这篇:
phoronix.com/scan.php?page=news_item&px=Mesa-11.1-Features
“- VA-API HEVC video decoding in Gallium3D thanks to AMD. ”
ATI Mobility Radeon HD 5470 属于 Terascale 2,使用 r600g
图中的 Kernel driver in use: radeon 是内核模块,/lib/modules/uname -r
/kernel/drivers/gpu/drm/radeon/radeon.ko
显卡驱动分几个层级:
内核模块:radeon.ko
用户态驱动:radeon_drv.so
OpenGL 相关:r600_dri.so, radeonsi_dri.so 等等
视频硬解:libvdpau_r600.so, libvdpau_radeonsi.so 等等
具体我也不是很懂。
关于 Linux Graphics Stack 这篇文章不错: blog.mecheye.net/2012/06/the-linux-graphics-stack/
另外参考 reddit.com/r/linux/comments/2geoqk/eli5_the_difference_and_relationship_of_gallium3d/
学习了!谢谢。
学习了,以前还真没研究过驱动,总是能用就行。
感觉现在这套平台挺尴尬。以前的开源驱动不支持,必须要安装闭源驱动才能发挥性能。下一代的开源驱动好像也不支持。