Skip to content

Latest commit

 

History

History
48 lines (32 loc) · 6.64 KB

wsi.adoc

File metadata and controls

48 lines (32 loc) · 6.64 KB

Window System Integration (WSI)

Vulkan API は結果を表示しなくても使用できるため、オプションの Vulkan 拡張機能 を使用することで WSI を提供しています。ほとんどの実装には WSI の対応が含まれています。WSI の設計は、各プラットフォームのウィンドウメカニズムをコアの Vulkan API から抽象化するために作成されました。

wsi_setup

サーフェス

VkSurfaceKHR オブジェクトはプラットフォームに依存せず、Vulkan API の残りの部分がすべての WSI 操作に使用できるように設計されています。これは VK_KHR_surface という拡張機能を使って有効にします。

Vulkan Surface をサポートする各プラットフォームは、それぞれのプラットフォーム固有の API から VkSurfaceKHR オブジェクトを作成する独自の方法を持っています。

VkSurfaceKHR には、さまざまな機能フォーマット表示モードがあり、それらをクエリすることができます。

スワップチェーン

VkSwapchainKHR オブジェクトは、VkImage オブジェクトの配列を通じてレンダリング結果をサーフェスに表示する機能を提供します。スワップチェーンのさまざまな 表示モードは、表示エンジンがどのように実装されるかを決定します。

wsi_engine

Khronos のサンプルとチュートリアルでは、スワップチェーンを作成する際や表示モードを選択する際に考慮すべきさまざまな点を説明しています。

回転の前にすること

モバイル機器は回転させることができるため、アプリケーションウィンドウの論理的な向きとディスプレイの物理的な向きが一致しないことがあります。アプリケーションは、portraitlandscape の2つのモードで動作できる必要があります。この2つのモードの違いは、単に解像度の変更だけで簡単に説明できます。しかし、ディスプレイサブシステムの中には、常にディスプレイパネルの「ネイティブ」(または「物理的」)な向きで動作するものがあります。デバイスが回転しているので、望ましい効果を得るためには、アプリケーション出力も回転させる必要があります。

Android などのモバイルプラットフォームで Vulkan を最大限に活用するためには、回転の前にすることを実装することが必須となります。スワップチェーンの作成時に方向を指定してサーフェスの回転を処理する方法については、Google のブログ記事に詳細が記載されており、スタンドアロンのサンプルも用意されています。また、Vulkan-Samples には、回転の前にすることがなぜ問題になるのか、またシェーダで解決する方法を示す実行サンプル公開されています。Adreno GPU を搭載したデバイスを使用している場合、クアルコムは VK_QCOM_render_pass_transform 拡張機能を使用して回転の前にすることを実装することを提案しています。