vr_module 構造体のリファレンス
vr_module 構造体のリファレンス
#include < vr.h >
データフィールド | |
構造体hw_module_t | 一般 |
空所(* | init )(struct vr_module *モジュール) |
空所(* | set_vr_mode )(struct vr_module *モジュール、ブール値が有効) |
空所 * | 予約済み[8-2] |
詳細な説明
仮想現実 (VR) アプリケーションの使用時にコールバックを受信するには、この HAL を実装します。 VR アプリケーションには、次のような多くの特別な表示およびパフォーマンス要件があるという特徴があります。
- 低いセンサー遅延 - IMU、加速度計、ジャイロからアプリケーションに表示されるコールバックまでのエンドツーエンドの合計遅延は、非常に低くなければなりません (通常 5ms 未満)。これは HIFI センサーのサポートに必要です。
- 低い表示遅延 - GPU 描画呼び出しから実際の表示更新までの合計のエンドツーエンド遅延は、可能な限り短くする必要があります。これは、SurfaceFlinger をシングル バッファ モードで使用し、描画呼び出しがディスプレイ スキャンアウトと正しく同期していることを保証することによって実現されます。この動作は、EGL 拡張機能を介してアプリケーションに公開されます。これに必要な EGL 拡張機能については、以下を参照してください。
- 低持続性ディスプレイ - 適切な明るさを維持しながら、ディスプレイ持続性設定を可能な限り低く設定する必要があります。 60Hz で動作する一般的なディスプレイの場合、持続性が低いとみなされるには、ピクセルが 3.5ms 未満点灯する必要があります。これにより、VR 設定での移動中のゴーストが回避され、BRIGHTNESS_MODE_LOW_PERSISTENCE が設定されている場合は、 lights.h HAL から有効にする必要があります。
- GPU と CPU の一貫したパフォーマンス - VR アプリケーションに GPU/CPU 混合ワークロードがあり、フレームごとに一定の間隔で作業が数回発生する場合、CPU スケジューリングにより、アプリケーションのレンダリング スレッド作業が 1 ミリ秒以内に一貫して実行されるようにする必要があります。スケジュールされ、描画ウィンドウの終了前に完了しました。この目的を達成するには、VR モード中に現在実行中の VR アプリケーションのレンダリング スレッド専用に 1 つの CPU コアを予約し、「トップアプリ」の CPU セットで使用できるようにする必要があります。同様に、デバイスが VR モードで POWER_HINT_SUSTAINED_PERFORMANCE フラグがpower.h HAL に設定されている場合、各フレームのレンダリングに割り当てられた時間内にレンダリング ワークロードが確実に終了するように、適切な CPU、GPU、バス クロック レートを維持する必要があります。サーマルスロットリングされていないこと。
- 必要な EGL 拡張機能が存在する必要があります - 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) を含む、上記の機能を許可するために必要な GPU 設定がすべて必要です。
- 正確な温度レポート - 正確な温度と制限は、 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共通 |
void(* init)(struct vr_module *module) |
void(* set_vr_mode)(struct vr_module *モジュール、ブール値が有効) |
この構造体のドキュメントは次のファイルから生成されました。
- ハードウェア/libhardware/include/hardware/vr.h