vr_module 構造体リファレンス
#include <
vr.h
>
データ フィールド |
|
struct hw_module_t | common |
void(* | init )(struct vr_module *module) |
void(* | set_vr_mode )(struct vr_module *module, bool enabled) |
void * | 予約済み [8-2] |
詳細な説明
この HAL を実装すると、バーチャル リアリティ(VR)アプリが使用されているときにコールバックを受け取ることができます。VR アプリには、次のような特別なディスプレイとパフォーマンスの要件があります。
- センサーのレイテンシが低い - IMU、加速度計、ジャイロスコープからアプリケーションに表示されるコールバックまでのエンドツーエンドのレイテンシは非常に低くする必要があります(通常は 5 ms 未満)。これは、HIFI センサーのサポートに必要です。
- ディスプレイの低レイテンシ - GPU 描画呼び出しから実際のディスプレイ更新までのエンドツーエンドのレイテンシは、可能な限り低くする必要があります。これは、SurfaceFlinger をシングルバッファ モードで使用し、描画呼び出しがディスプレイ スキャンアウトと正しく同期されるようにすることで実現されます。この動作は、EGL 拡張機能を通じてアプリに公開されます。これに必要な EGL 拡張機能については、下記をご覧ください。
- 低持続時間ディスプレイ - ディスプレイの持続時間の設定は、適度な明るさを維持しながら、できるだけ低く設定する必要があります。60 Hz で動作する一般的なディスプレイの場合、低持続と見なされるには、ピクセルが 3.5 ms 以下照明されている必要があります。これにより、VR 設定での移動中のゴースト現象を回避できます。BRIGHTNESS_MODE_LOW_PERSISTENCE が設定されている場合は、 lights.h HAL から有効にする必要があります。
- GPU と CPU の一貫したパフォーマンス - フレームごとに数回、一定の間隔で作業がバーストする VR アプリケーションの GPU/CPU 混合ワークロードの場合、CPU スケジューリングにより、アプリケーションのレンダリング スレッドの処理がスケジュールされたときから 1 ミリ秒以内に一貫して実行され、描画ウィンドウの終了前に完了するようにする必要があります。そのため、VR モードで現在実行中の VR アプリのレンダリング スレッド専用に 1 つの CPU コアを予約し、「top-app」cpuset で使用できるようにする必要があります。同様に、デバイスがサーマル スロットルされていない VR モードで、 Power.h HAL で POWER_HINT_SUSTAINED_PERFORMANCE フラグが設定されている場合、レンダリング ワークロードが各フレームのレンダリングに割り当てられた時間内に完了するように、適切な CPU、GPU、バスのクロックレートを維持する必要があります。
- 必要な EGL 拡張機能が存在している必要があります。上記の機能を有効にするために必要な GPU 設定(EGL 拡張機能 EGL_ANDROID_create_native_client_buffer、EGL_ANDROID_front_buffer_auto_refresh、EGL_EXT_protected_content、EGL_KHR_mutable_render_buffer、EGL_KHR_reusable_sync、EGL_KHR_wait_sync など)が必要です。
- 正確なサーマル レポート - 正確なサーマル温度と制限は、 thermal.h HAL で報告する必要があります。具体的には、現在の皮膚温度が DEVICE_TEMPERATURE_SKIN で正確に報告され、このデバイスで報告される vr_throttling_threshold が、デバイスのサーマル ガバナーが CPU、GPU、バスのクロックレートを一定のパフォーマンスに必要な最小値未満にスロットリングする温度上限を正確に報告する必要があります(前の箇条書きを参照)。
一般に、この HAL を実装するベンダーは、上記の要件のいずれかに必要な VR 固有のパフォーマンス チューニングを有効にし、VR ディスプレイ モードに最適なデバイス機能を有効にするために、ヒントとして set_vr_mode を使用することを想定しています。上記の要件を満たす最適化が利用できない場合や、最適化が不要な場合は、set_vr_mode 呼び出しが何も行わない場合があります。
この HAL のメソッドは、Android フレームワークから同時に呼び出されることはありません。
フィールドのドキュメント
struct hw_module_t common |
モジュールの一般的なメソッド。この構造体のユーザーは、 hw_module_t が vr_module を参照していることが判明しているコンテキストで、 hw_module_t を vr_module ポインタにキャストする可能性があるため、これは vr_module の最初のメンバーである必要があります。
void(* init)(struct vr_module *module) |
void(* set_vr_mode)(struct vr_module *module, bool enabled) |
この構造体のドキュメントは、次のファイルから生成されました。
- hardware/libhardware/include/hardware/ vr.h