daemonfreaks.com

PRIME Render Offload on FreeBSD

posted by jun-g at Sat, 08 Mar 2025 11:00 JST

複数グラフィックカードが接続されている環境で、PRIME Render Offloadという機能を使って、普段は非力な内蔵GPUを使いつつ重いアプリケーションだけ強力な外付けGPUを使うといったことができるようになります。

自分も NUC13(Raptor Lake)eGPU(RTX3060) を買ったものの放置していたので試してみました。

環境はFreeBSD 14.2-RELEASEです。

FreeBSDではRaptor Lakeの内蔵GPUは14Rからサポートされるようになったので、 drm-kmod をインストールすればOKですが、 14.2RのErrata に書かれているように、package版はカーネルモジュールのロード時にエラーが出て読み込めないので、portsからインストールしましょう。

# cd /usr/ports/graphics/drm-kmod
# make install clean
# sysrc kld_list+="i915kms"

次に、eGPUを接続して、NVIDIAのドライバをインストールします。

# pkg install nvidia-drm-kmod
# sysrc kld_list+="nvidia-drm"
# echo "hw.nvidiadrm.modeset=1" >> /boot/loader.conf

再起動して、以下のように設定します。

# cat /usr/local/etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
    Identifier "IntelGPU"
    Driver "modesetting"
    BusID "PCI:0:2:0"
EndSection

# cat /usr/local/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
    Identifier "NvidiaGPU"
    Driver "nvidia"
    BusID "PCI:1:0:0"
    Option "AllowExternalGpus" "True"
    Option "AllowEmptyInitialConfiguration" "True"
    Option "PrimaryGPU" "no"
EndSection

# cat /usr/local/etc/X11/xorg.conf.d/40-screen.conf
Section "ServerLayout"
    Identifier "layout"
    Screen 0 "Screen0"
EndSection

Section "Screen"
    Identifier "Screen0"
    Device "IntelGPU"
EndSection

以上の設定でstartxすると、内蔵GPUを使った状態でXが起動します。NVIDIAのGPUを使いたいアプリケーションを起動するときは、以下の環境変数を設定して起動します。

__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia

以下のコマンドで、どちらのGPUが使われているか確認できます。

% glxinfo | grep "OpenGL renderer"
OpenGL renderer string: Mesa Intel(R) Graphics (RPL-P)

% __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep "OpenGL renderer"
OpenGL renderer string: NVIDIA GeForce RTX 3060/PCIe/SSE2

以上でPRIME Render Offloadの設定は完了です。

この記事は上記の設定したFreeBSD上のVimでCopilotに補完してもらいながら書きました。Copilot便利ですね。

Comments / TrackBacks

TrackBack URL for this entry: https://www.daemonfreaks.com/blog/trackback/202503081100








コメントスパム対策の為、各入力項目へのURL記載は全てリジェクトしてます。ごめんなさい。