今更WindowsでOpenGL ESのAPIトレースをするメモ

3 min read読了の目安(約3000字

EDIT: スクラップにも書いたけど、 RENDERDOC_HOOK_EGL=0 することでPVRVFrame上でも普通にRenderDocが使えてしまったので PVRCarbon をわざわざ使うモチベーションはあんまり無いかもしれない。。

(シェーダはデスクトップOpenGLに変換されてしまうが、他はほぼ1対1対応する。)


ちょっと諸事情でWebGL1を実装しているので、その元になるOpenGL ES2のデバッグ環境を用意したい。というわけで、IMG(PowerVR)のAPIエミュレータであるPVRVFrameと、そのAPIトレーサーであるPVRCarbonの使い方のメモ。

PVRVFrame: OpenGL ESエミュレータ

https://www.imaginationtech.com/developers/powervr-sdk-tools/pvrvframe/

インストールすると C:\Imagination Technologies\PowerVR_Graphics\PowerVR_Tools\PVRVFrame\Library\Windows_x86_64 にDLLがインストールされるのでそれを使えば良い。

DLLに対するヘッダはKhronos標準のものがそのまま使える。

このDLLを使用することでアプリケーションを直接動作させることはできるが、APIトレースを行うには DLLをレコーダーのものに差し替える必要がある

PVRCarbon: APIトレーサ

https://www.imaginationtech.com/developers/powervr-sdk-tools/pvrcarbon/

PVRCarbonはOpenGL ESやVulkanに対応したAPIトレーサで、従来のPVRTraceを置き換えるものと言える。本来はモバイルデバイスで実行しているアプリのトレースを想定したツールだと思うが、当然の権利のようにPC上のアプリケーションもトレースできる。

PVRCarbonのトレーサーは C:\Imagination Technologies\PowerVR_Graphics\PowerVR_Tools\PVRCarbon\Recorder\GLES\Windows_x86_64 に配置される。

このままだとトレースは動作しないため、アプリケーションのディレクトリに pvrcarbon.json のファイル名で設定JSONを配置する必要がある。

{
    "recording":
    {
        "hostLibrary":
        {
            "egl": "C:/Imagination Technologies/PowerVR_Graphics/PowerVR_Tools/PVRVFrame/Library/Windows_x86_64/libEGL.dll",
            "glesv2": "C:/Imagination Technologies/PowerVR_Graphics/PowerVR_Tools/PVRVFrame/Library/Windows_x86_64/libGLESv2.dll"
        },
        "network":
        {
            "enable": true
        }
    }
}

この network.enable = true によって、起動したアプリケーションは PVRCarbonの接続を待ち受けるようになる。

アプリケーションが接続待ちで停止した状態でPVRCarbonを起動して適当にキャプチャすると、APIトレースを参照できる。

(↓ PowerVR SDKのサンプルをキャプチャしてみた)

かんそう

実にかんたんだった。

GPUデバッガとしてのPVRCarbon

キツい(直球)。テキクスチャやバッファのダンプが無かったり不親切で、本当にAPI call historyとバリデーションの機能しかない質実剛健ぶり。2010年ならともかくこれ2020年から提供開始された新作だからなぁ。。

良いニュースと言って良いのかは何ともだが、新規のツールがリリースされるという事は、とりあえずGPUにも投資が続いているわけで生き残ったGPUベンダとしての今後には期待したい。

OpenGL ES 2

スクラップの方に書いた けど、WebGPUが来年に迫る中で今さらWebGL1やGLES2にinvestする意味が有んのかというのはというのは難しい問題だ。。

WebGLのユニバーサルっぷりはOpenGL ES実装としてのANGLEのユニバーサルっぷりでもあり、実際もうANGLE以外のGLES実装は死んでいくんじゃないかと思う。

  • GLOVE( https://github.com/stjordanis/GLOVE-1 )は本家Think-Siliconのサイトから消滅した
  • AppleはGLESを非推奨APIにしている
  • ソフトウェアレンダラのSwiftShaderはGLES実装を削除すると繰り返し警告している(実装としてはVulkan特化としてGLESはANGLEでサポート)

GPU SDKの進化という意味では、QualcommのSDKも2016年くらいから大きな更新が無く、かわりにAndroid側のSDKが充実しつつある(AndroidのVulkan開発環境がGoogleのStadiaにも流用されているという事情もあるのかもしれないが。。)。

...じゃぁOpenGL ES2までしか実装製品の無いTAKUMI( http://www.gshark.com )とかどうすんのかと思ったら何と今年に入ってOpenVGのコンフォーマンス( https://www.khronos.org/conformance/adopters/conformant-products/openvg )を通している。。どういう事なの。。