Amazon Fireタブレット(2015) でMali Graphics Debuggerする

Maliなデバイスを入れ替。普通にAmazonで購入。標準のカバーは何故かかなり高価だが、横と縦の両方で立てることができる。ただしフタを閉じても自動でスリープにならない
UIはAndroid標準のものにかなり近付いた。個人的には旧Kindle Fire時代のスライダーUIの方が良いと思うけど、FireOSは5以降独自路線を捨ててほぼAndroidになっている。FireOS SDKは既に存在せず、Amazonのサービス向けにAndroidとの統合SDK( https://developer.amazon.com/public/resources/development-tools/sdk )が提供されている。

これで都合4台目のAmazon端末になった。。

2015年版のAmazon Fireタブレットは(統合シェーダでない)Mali450を搭載しているため、AmazonのFireOS製品群で唯一VTF(Vertex Texture Fetch)を持たない。そのくらい統一して欲しいんだけど。。
ついでに言うとこのモデルだけMiracastも無いため画面のストリーミングを行う方法が無い。従来のFireタブレットHDMIポートが有ったり、MHLをサポートしている等外部出力が有ったが、2015年のリフレッシュでMiracastだけになった。(まぁFireTVが有るし。。)

Mali Graphics Debugger(MGD)の統合


GPUがMaliなので当然の権利のようにMali Graphics Debugger(MGD)が動作する。
IntelnVidiaのデバッガと異なり、MGDはOpenGL/EGL APIをキャプチャするためのインターセプタを別途インストールする必要がある。MGDは/systemパーティションAPIインターセプタをインストールするようにデザインされているが、最近のバージョンではnon-rootな端末向けに単体で動作するインターセプタ(libMGD.so)を提供している。
libMGD.soをdlopenすると自動的にアプリケーションをパッチしてくれる。が、以下の細かい不具合がある:
LD_LIBRARY_PATHが無いとパスを解決しない。このため、SDL2のように起動時に libGLESv2.so や libEGL.soをロードするライブラリは正常にインターセプトできない。https://github.com/okuoku/grpcore0/issues/1
パッチの挙動が変。GLESやEGLの関数をdlsym()して関数ポインタ経由で呼び出すとクラッシュすることがある。このため、SDL2のGL呼び出しを全部関数ポインタ経由でない呼び出しに手で置き換える必要があった。

@@ -608,7 +623,7 @@ SDL_EGL_CreateSurface(_THIS, NativeWindowType nw)
     }
 #endif

-    return _this->egl_data->eglCreateWindowSurface(
+    return eglCreateWindowSurface(
             _this->egl_data->egl_display,
             _this->egl_data->egl_config,
             nw, NULL);

yuniでもスクリプトからOpenGLAPIを呼び出すときはこのようにしてトラップできるようにしようと思っていたので、この要求は地味につらい。。