2025-02-04

Zink 再び

Zink は OpenGL over Vulkan ということで、OpenGL 処理を Vulkan 上で走らせるという荒業です。

以前に試した方法は間違っていた

以前にも Zink を試してみたことがあるのですが、なんとその時の方法が間違っていたことに最近になって気づいたのでした。

Zink(OpenGL over Vulkan)を試してみた(失敗)

環境変数に MESA_LOADER_DRIVER_OVERRIDE=zink を指定する点はもちろん間違っていなかったのですが、もう一つの「xserver-xorg-video-amdgpu を削除する」という手順が不要でした。

その代わりに環境変数に LIBGL_KOPPER_DRI2=1 も指定する、というのが正しい手順のようです。

どちらの手順も「Zink を動かすために DRI3 を無効にする」という点では同じなのですが、間違った手順では amdgpu ドライバーが削除され、radeon ドライバーを使うことになるので普段使いに影響が出てしまっていました。


再び試してみた

ということで、環境変数に MESA_LOADER_DRIVER_OVERRIDE=zink、LIBGL_KOPPER_DRI2=1 の二つを指定する方法を試してみました。

Firefox はうまく動きましたが、about:config で gfx.webrender.all = true も指定しないとソフトウェアレンダリングになってしまいました。また、動画のハードウェアデコードは全滅でした。ブラウザーとして使っている分にはそれほど問題なかったと思います。

ということで、ちょっと glxgears で計測してみました。

$ glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
305 frames in 5.0 seconds = 60.854 FPS
301 frames in 5.0 seconds = 60.001 FPS
300 frames in 5.0 seconds = 59.995 FPS
301 frames in 5.0 seconds = 60.001 FPS
301 frames in 5.0 seconds = 60.002 FPS

まずは環境変数を指定しない標準状態です。ディスプレイのリフレッシュレートである 60fps で頭打ちになっています。

$ MESA_LOADER_DRIVER_OVERRIDE=zink LIBGL_KOPPER_DRI2=1 glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
25034 frames in 5.0 seconds = 5006.793 FPS
25145 frames in 5.0 seconds = 5028.913 FPS
25257 frames in 5.0 seconds = 5051.317 FPS
25182 frames in 5.0 seconds = 5036.260 FPS
25200 frames in 5.0 seconds = 5039.856 FPS

続いて Vulkan というか Zink での結果です。なんと 5000fps くらい出ています。

$ vblank_mode=0 glxgears
ATTENTION: default value of option vblank_mode overridden by environment.
69481 frames in 5.0 seconds = 13896.097 FPS
69353 frames in 5.0 seconds = 13870.453 FPS
69828 frames in 5.0 seconds = 13965.407 FPS
67989 frames in 5.0 seconds = 13597.787 FPS
69541 frames in 5.0 seconds = 13908.053 FPS

最後はおまけで vblank_mode=0 だけを付け足したパターンですが、こちらは 13000fps 以上となりました。

 

なんか不思議な結果になりましたね。

使いたいアプリケーションで効果を試してみるのが良さそうです。

 

ちなみに、LMDE ではホームディレクトリ内の .profile に例の二つの環境変数を定義してあげると Cinnamon デスクトップ自体を Zink で動かすことができます。

MESA_LOADER_DRIVER_OVERRIDE=zink
LIBGL_KOPPER_DRI2=1
export MESA_LOADER_DRIVER_OVERRIDE LIBGL_KOPPER_DRI2

たぶんこんな感じで追記すると動きそうです。

ワタシは MESA_LOADER_DRIVER_OVERRIDE=zink だけを .profile に定義して Cinnamon を動かしたのですが、パネルしか正常に表示されずに困ってしまいました。Cinnamon メニューは操作可能だったので一度ログアウトし、Wayland セッションでログインし直したら正常に操作ができました。その状態で .profile に追記した部分を取り除いて復旧となりました。

※この時はまだもう一つの環境変数 LIBGL_KOPPER_DRI2 の指定が必要だと把握していなかったため

たぶん二つの環境変数を指定すれば Cinnamon もキレイに表示できるのではないかと思いますが、まだ試しておりません・・・。