伴侶

總覽

Escher 是 C++/Vulkan 程式庫,主要供 View 實作使用,並未由 Fuchsia SDK 公開。可提供下列公用程式:

  1. 使用 Vulkan 抽象化及最佳化簡單的作業,例如:

    • 管道重複使用
    • 使用較少記憶體頻寬來校正色彩
      • 相較於原始 Vulkan,在 Escher 中指定子傳遞 (一般和算繪通道) 比原始 Vulkan 方便許多,但這其實是相同點子,沒有大幅簡化。
      • 例如,Escher 支援單一 Vulkan 算繪通道中的子傳遞。也就是說,當第二個子傳遞作業需要存取相同位置的像素時,系統會在快取資料內執行轉換,而不會離開 GPU 記憶體階層。
    • 更新緩衝區並直接傳送繪圖指令
    • 資源生命週期管理
      • 舉例來說,如果您提交使用紋理進行算繪的 Vulkan 指令緩衝區,並在算繪完成前刪除紋理,系統會未定義結果,因此可能會當機。Escher 不會刪除紋理 (或緩衝區),直到所有使用中的指令緩衝區不再參照該紋理。
  2. View 專用的更高層級網域專屬轉譯器,例如:

    a. RectangleCompositor,是 Flatland 的 VkRenderer 使用的簡易合成器,可將顯示清單內容載入單一輸出圖片,稱為 framebuffer

    • RectangleCompositor 會使用:
      • Flatland 專屬的色彩校正 Vertex 和 Fragment 著色器,適用於透過 Vulkan 執行色彩校正的情況
      • 平坦區域專屬的 Vertex 和 Fragment 著色器,適用於將色彩校正委派給顯示驅動程式庫或完全不必要時使用
    • 如要瞭解如何使用 RectangleCompositor,請參閱 rainfall 範例

    b. PaperRenderer,這是 Gfx 使用的淘汰合成器,用於建構執行當下所預想,有效 3D 使用者體驗運算的抽象層。請參閱 waterfall 範例,瞭解如何使用 PaperRenderer。

只要搭配使用這些程式庫,就能實現快速疊代和資源生命週期管理,即使單獨使用 Vulkan 也能達成永續經營目標。

支援多種平台

除了少數例外情況,Escher 與平台無關,舉例來說,Escher 範例也可以在 Linux 和 MacOS 上執行。這麼做有兩大優點:

  • 加快開發疊代速度。在 Linux 上重新編譯 Escher 並執行偵錯,比在 Fuchsia 上更快。
  • 在其他平台上,Vulkan 生態系統提供了 Fuchsia 所沒有的各種開發工具。舉例來說,在 Escher 開發期間,RenderDoc 圖形偵錯工具非常有用。

支援 GLSL

Vulkan 只接受 SPIR-V 格式的著色器原始碼。Escher 可選擇使用使用者可理解的格式 GLSL,然後呼叫 shaderc::Compiler 將其編譯為 SPIR-V,然後再載入 Vulkan。

原始碼

原始碼位於 //src/ui/lib/escher/ 中。