メインコンテンツへスキップ

Termuxでvirglrendererを使いGPU 3Dハードウェアアクセラレーションを有効化する

·
カテゴリー スマートフォン Termuxチュートリアル
タグ VirGL Wine Vulkan
目次

virglrenderer(VirGL)はQEMU仮想マシン向けの表示技術で、仮想マシンに3Dハードウェアアクセラレーションを提供できます。例えばLinux PCでQEMUを使ってAndroid-x86仮想マシンを動かす場合、virglrendererで仮想マシンの3Dグラフィック性能を改善できます。

Androidスマホでは、Termuxからvirglrendererサーバーを実行することで同じような効果を得られます。TermuxのLinux環境でグラフィック性能が低い問題を解決できます。

これでTermuxのProot Linux環境でも4K60p動画を見たり、3Dゲームを遊んだりできます。proot環境とchroot環境の両方に対応しています。

SuperTuxKart, Glxgears

文章で説明するより、まずは動画で実際の効果を見たほうが分かりやすいでしょう。

  • テスト端末:Sony Xperia 5 II、システムバージョンAndroid 12、プロセッサSnapdragon 865、GPU Adreno 650、RAM 8GB。

1. TermuxとTermux X11をインストールする
#

Termuxをインストールし、さらにTermux X11をインストールします。

理論上はXSDLやVNCでも使えますが、私はグラフィック環境の表示にTermux X11を使うほうが好みです。

2. Prootディストリビューションをインストールする
#

Prootディストリビューションを1つインストールし、デスクトップ環境を設定します。個人的にはDebianのインストールをおすすめします。

3. virglrendererをインストールする
#

どちらか一方を選びます。まずはvirglrenderer-androidを試すことをおすすめします。

方法1:virglrenderer-androidをインストールする
#

virglrenderer-androidはAndroid GL/ESを使用し、ほとんどのAndroidデバイスに適しています。

構成:Android GL/ES → Termux VirGL renderer server → proot / chroot virpipe MESA gallium driver

  1. virglrenderer-androidをインストールする
pkg install virglrenderer-android
  1. Virglサーバーを実行する:
virgl_test_server_android &

方法2:virglrenderer-zinkをインストールする
#

ZinkはVulkanを模擬するドライバーで、上のvirlglrenderer-androidより性能がよい可能性があります。Qualcommプロセッサ搭載のAndroidデバイスのみ対応します。

  1. Zinkを含むvirglrendererはtur-repoからインストールできます:
pkg install tur-repo
pkg update -y && pkg upgrade -y
pkg install mesa-zink virglrenderer-mesa-zink vulkan-loader-android
  1. Virglサーバーを起動するには、以下のコマンドを実行します。下のprootでGALLIUM_DRIVER変数を使うときは、virpipezinkに置き換えます。
MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink ZINK_DESCRIPTORS=lazy virgl_test_server --use-egl-surfaceless --use-gles &

4. virglrendererの使い方
#

Termux本体はvirglrendererサーバーを実行するために使います。ただしTermuxにはvirglrendererを活用できるプログラムがほとんどないため、prootまたはchrootを使う必要があります。

4.1. Prootでvirglを使ってプログラムを実行する
#

  1. Termuxでvirglサーバーを起動します。

  2. Termux X11アプリを起動します。Termuxに戻り、Termux X11を実行します。

export DISPLAY=:0
termux-x11 :0 &
  1. 画面左側からスワイプして、New Sessionを押して2つ目のターミナルを開きます。通常ユーザーuserでproot-distroにログインし、TermuxのtmpディレクトリをProot-distroへマウントします。
proot-distro login debian --user user --shared-tmp
  1. XFCE4デスクトップ環境を起動します。
export DISPLAY=:0
dbus-launch --exit-with-session startxfce4 &
  1. Termux X11の画面でターミナルを開きます。プログラム実行前にGALLIUM_DRIVER=virpipeまたはGALLIUM_DRIVER=virglを付けると、virglハードウェアアクセラレーションが有効になります。付けない場合、システムはCPUレンダリングのllvmpipeに戻ります。一部のプログラムはMESA_GL_VERSION_OVERRIDE=4.0を付けると起動できないため、自分でテストしてください。

  2. 例えばブロックゲームMinetestを実行する場合:

GALLIUM_DRIVER=virpipe MESA_GL_VERSION_OVERRIDE=4.0 minetest

virpipeでは、glxgearsのFPSがllvimpipeより少し高くなります。

llvmpipeとvirpipeを比較すると、MinetestのFPSは10FPSから最大20FPSまで伸びました。

VLCやMPVはvirpipeを有効化すると4K60p動画も再生できるようになりました。ただし基本的には全力でレンダリングしている状態なので、録画など別のプログラムが動画プレーヤーとリソースを取り合うと画面が乱れます。

レースゲームSueprTuxKartの伸びが最も明らかです。llvmpipeモードではスライドショー状態でしたが、virpipeを使うと普通に遊べるようになりました。

Firefoxでabout:configからWebGLを強制有効化すると、WebGL AquariumのFPSが倍増しました。

GALIIUM_DRIVER=virpipe startxfce4というコマンドでデスクトップ環境を起動し、全プログラムがデフォルトでvirpipeレンダリングを使うようにして、デスクトップ環境の滑らかさを上げる方法もあります。virpipeを有効化するとクラッシュするプログラムがある場合は、GALIIUM_DRIVER=llvmpipe <プログラム名>でCPUレンダリングへ戻します。

4.2. chrootでvirglを使ってプログラムを実行する
#

  1. XFCE4デスクトップのchroot Ubuntu with XFCE4を設定します。

  2. SELinuxをPermissiveに設定します。

sudo setenforce 0
  1. Termux X11アプリを起動し、Termuxへ戻って実行します:
XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac &
  1. Termuxのtmpをchrootのtmpへマウントします。
export CHROOT_DIR=/data/local/tmp/chrootubuntu
sudo busybox mount --bind $PREFIX/tmp $CHROOT_DIR/tmp
  1. chrootへログインし、XFCE4を起動します。
sudo chmod -R 777 /tmp
export DISPLAY=:0 PULSE_SERVER=tcp:127.0.0.1:4713
dbus-launch --exit-with-session startxfce4 &
  1. virglでアプリケーションを起動する
GALLIUM_DRIVER=virpipe MESA_GL_VERSION_OVERRIDE=4.0 minetest

4.3. Windowsゲームを実行する
#

先にBox86 + Wineをインストールしてください。

Termuxでvirglサーバーを起動します。

exeを実行する前にも同じようにGALLIUM_DRIVERパラメータを付けます。例:

GALLIUM_DRIVER=virpipe MESA_GL_VERSION_OVERRIDE=4.0 box86 wine AIR.exe

virglを使うと、Tobyfox制作の『Undertale』など、ハードウェアアクセラレーションを必要とする一部のWindowsゲームを正常に実行できます。

また、Key制作のビジュアルノベル『Air』も動作します。別途日本語フォントのインストールが必要です。

参考資料
#

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。