總覽
Escher 是 C++/Vulkan 程式庫,主要由 View 實作使用,不會由 Fuchsia SDK 公開。它提供以下公用程式:
運用 Vulkan 抽象及最佳化簡單的作業,例如:
- 管道重複使用
- 記憶體頻寬較少的色彩校正
- 在 Escher 中,子傳遞 (和轉譯通道一般) 的規格比原始 Vulkan 要稍微簡單一點,但概念大致相同,不太明顯。
- 舉例來說,Escher 支援單一 Vulkan 算繪傳遞中的子傳遞。也就是說,第二個次票證須存取相同位置的像素時,就會在快取資料內部執行轉換作業,而不會離開 GPU 記憶體階層。
- 更新緩衝區並直接傳送繪圖指令
- 資源生命週期管理
- 舉例來說,如果您提交使用紋理算繪的 Vulkan 指令緩衝區,然後在算繪完成前刪除紋理,則結果為未定義,很可能導致當機。除非任何有效的指令緩衝區參照紋理 (或緩衝區),否則 Escher 不會刪除該紋理 (或緩衝區)。
適用於風景的較高層級網域專用轉譯器,例如:
a.
RectangleCompositor
是 Flatland 的VkRenderer
用來將顯示清單內容載入的單一輸出圖片,稱為「Framebuffer」- RectangleCompositor 運用了:
- 扁平地專屬的色彩校正 Vertex 和 Fragment 著色器,可在使用 Vulkan 執行畫面色彩校正時使用
- 扁平地專用的 Vertex 和 Fragment 著色器,用於將色彩校正委派給顯示驅動程式庫或完全不必要時使用
- 如要瞭解如何使用 RectangleCompositor,請參閱
rainfall
範例。
b.
PaperRenderer
是 Gfx 使用的已淘汰合成器,用於建構用於執行高效率 3D 使用者體驗運算的抽象化機制。請參閱waterfall
範例,瞭解如何使用 PaperRenderer。- RectangleCompositor 運用了:
這些程式庫共同支援快速疊代和資源生命週期管理,效果超越單獨使用 Vulkan 可實現的做法。
跨平台支援
除了少數例外情況,Escher 則因平台而異。舉例來說,在 Linux 上也可以執行 Escher 範例。這麼做有兩項主要優點:
- 加快開發中的疊代速度。在 Linux 上重新編譯 Escher 並執行偵錯,比 Fuchsia 快多了。
- 在其他平台上,Vulkan 生態系統提供 Fuchsia 所沒有的多種開發工具。舉例來說,RenderDoc 圖形偵錯工具在開發 Escher 時相當實用。
GLSL 支援
Vulkan 只接受 SPIR-V 格式的著色器原始碼。Escher 可視需要支援使用 GLSL (人類可讀的格式),然後呼叫 shaderc::Compiler
將其編譯為 SPIR-V,然後再載入 Vulkan。
原始碼
原始碼位於 //src/ui/lib/escher/。