9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows WSL + VcXsrv で OpenGL 2 アプリを GPU accelerated させて動かす

Last updated at Posted at 2020-05-09

背景

  • WSL 経由の Linux プログラムで, GUI を imgui など OpenGL 系で描画したい.
  • 機械学習などで, 3D 形状データを可視化したい.
  • レイトレーシングなど, CPU intensive な計算をする(then 結果画像を GUI で表示)ので, CPU リソースを無駄に使いたくないので GUI の描画を GPU で行いたい.

NVIDIA GPU で OpenGL 2 は動きました. OpenGL 3.x はだめでしたが, データ可視化などでは GL 3 の機能を使う必要もなさそうな気がしますから, GL 2 でよさそうです.

手順

WSL+ubuntu18.04+VcXsrv+OpenAI Gym 動くまでのメモ(修正)
https://qiita.com/antimon2/items/b1611dca09edcf93db03

あたりを参考にします.

Windows 側には, GPU ベンダー(NVIDIA, AMD, Intel)のドライバが入っているものとします.

VcXsrv 起動時に, Native opengl にチェックを入れておきます.

WSL 側で, DISPLAY 環境変数(通常は DISPLAY=:0.0 でいける)と, LIBGL_ALWAYS_INDIRECT=1 を設定しておきます.

LIBGL_ALWAYS_INDIRECT=1 で, WSL(Linux)側アプリの OpenGL コマンドを, Windows(VcXsrv)側に転送し, VcXsrv が Windows 側の OpenGL(GPU)を使って HW 描画する仕組みのようです.

imgui glfw3 + opengl2 サンプルが, 60 fps + CPU リソース使わずに描画できているのを確認しました :tada:

問題点

こちらの環境だと, glxgears はアニメーションせずに止まったままでした. vsync 周りの問題でしょうか.

OpenGL 3.x コンテキストは生成できませんでした

macOS の場合は昨今(10.6 くらいから?), OpenGL のコンテキストは最低 3.3 が生成されるようになりましたので, Linux/macOS で共通して動かしたい場合は 2.0, 3.x 両方を考慮して OpenGL コードを書く必要があります.

このあたりは X server の出来次第かと思いますので, Xming で $10 払うバージョンだともしかしたら OpenGL 3.x 使えるかもしれません.

CPU 描画

XvcSrv で Native opengl off, もしくは WSL で LIBGL_ALWAYS_INDIRECT を定義しなければ, llvmpile での描画が行われます.
i9 9900K だと, 40% ほど描画に CPU リソースを取られました(GPU も 20% くらい負荷が発生していたので, 一部 GPU 処理されているのかもしれません)

CPU 描画だと, 処理が重くなければ GUI のレスポンスは良いので(i9 9900K で imgui sample で 200 fps くらい), 開発中などは CPU 描画する手もありそうです. llvmpipe の GL version は 3.3 でしたので, imgui OpenGL3 サンプルも動きました.

今後

WSL で GPU 対応(GPU 仮想化(?)がアナウンスされました.

Windows 10、WSL 2でGUIアプリケーションとGPUベース機械学習に対応
https://news.mynavi.jp/article/20200520-1039322/

来年あたりには, 特になにも考えずに, WSL 経由で GPU(OpenGL) で GUI 描画できるかもですね.

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?