2024-02-25

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

Mesa 24.1 から Zink がデフォルトになる?という噂を聞きつけ、Zink で OpenGL 処理を動かしてみることにしました。

アプリケーションは従来どおりに OpenGL API を発行するものの、それを受け取るドライバー側で Vulkan API にすり替えるというのが Zink です。パッと見はネイティブな OpenGL 処理よりもオーバーヘッドがあって遅そうなんですが、Zink ドライバーがデフォルトで有効化されるということはだいぶパフォーマンスが向上してきた、ということなんでしょうか。

 

とりあえずやってみた

$ MESA_LOADER_DRIVER_OVERRIDE=zink glxinfo -B
name of display: :0
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink
Error: couldn't find RGB GLX visual or fbconfig
DRI3 not available
failed to load driver: zink
DRI3 not available
failed to load driver: zink

はい、失敗です。

ん〜、なんでですかね?

エラーメッセージを元に対応方法を調べてみると、どうやら xserver-xorg-video-amdgpu  というパッケージを削除するといいらしいです。

ホントかしら?


再びやってみた

片足を突っ込んでいるので突き進んでみました。

$ MESA_LOADER_DRIVER_OVERRIDE=zink glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Mesa (0x1002)
    Device: zink Vulkan 1.3(AMD Radeon Graphics (RADV RENOIR) (MESA_RADV)) (0x1638)
    Version: 23.3.5
    Accelerated: yes
    Video memory: 13431MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 13362 MB, largest block: 13362 MB
    VBO free aux. memory - total: 6713 MB, largest block: 6713 MB
    Texture free memory - total: 13362 MB, largest block: 13362 MB
    Texture free aux. memory - total: 6713 MB, largest block: 6713 MB
    Renderbuffer free memory - total: 13362 MB, largest block: 13362 MB
    Renderbuffer free aux. memory - total: 6713 MB, largest block: 6713 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 13431 MB
    Total available memory: 20147 MB
    Currently available dedicated video memory: 13362 MB
OpenGL vendor string: Mesa
OpenGL renderer string: zink Vulkan 1.3(AMD Radeon Graphics (RADV RENOIR) (MESA_RADV))
OpenGL core profile version string: 4.6 (Core Profile) Mesa 23.3.5-1
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6 (Compatibility Profile) Mesa 23.3.5-1
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 23.3.5-1
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

おお、成功しましたよ。Zink で動いてますね。

 

いよいよ本丸

ここまでくれば勝ったも同然です。実アプリケーションでも試すということで Firefox を Zink で動かしてみます。

WebRender が Software に・・・

Zink で動いたものの WebRender が Software モードになってしまい、GPU を使ってくれません。CPU ががんばっています。Vulkan はどこへやら、です。


というわけで、最終的にはいつもの負け戦で終わってしまいました。