Specifing which GPU for rendering using PRIME GPU offloading commands.
使用情境:Arch Linux當Nvidia主顯示卡,Intel內顯保持啟用。
問題點:我發現VLC在使用Nvidia顯示卡GTX1050Ti的時候播不動8K HEVC編碼影片,不論閉源或開源驅動都一樣,而Intel內顯UHD 630卻可以順暢播放。
經查可能是VAAPI支援度的問題,Nvidia很容易一更新就爆炸。
我想在播放的時候使用Intel,但又維持Nvidia當主顯示卡。
1. 使用DRI_PRIME變數#
經測試可以用DRI_PRIME
變數達成目的。根據
PRIME - Arch Wiki解釋,不論Intel/Nvidia/AM,只要是開源驅動都支援這種方式指定GPU渲染的。
但是、在Nvidia當主顯示卡的時候,必須使用開源nouveau驅動,不可以用閉源驅動。閉源驅動無論怎麼設定都無法叫出Intel。使用閉源驅動的情況下,只能在主顯卡為Intel的情況下用 Nvidia PRIME渲染,無法反過來指定用Intel渲染。
使用DRI_PRIME=0 glxinfo | grep OpenGL
顯示目前使用Nvidia顯示卡渲染
播放8K影片掉幀嚴重
使用DRI_PRIME=1 glxinfo | grep OpenGL
顯示切換至Intel顯示卡
播放8K影片正常。
另外,DRI_PRIME
也可以填寫顯示卡的PCI位址,用lspci -nnk
和ls /sys/bus/pci/devices/
查看,再將冒號轉成底線,例如DRI_PRIME=pci-0000:02:00.0
2. 其他方案#
另一個方案是靠Docker限制容器可以存取的device,或許這樣可以在使用Nvidia閉源驅動的情況下達成DRI_PRIME的效果。
Docker compose的範例:
devices:
- /dev/dri/card0:/dev/dri/card0
- /dev/dri/renderD128:/dev/dri/renderD128