Vulkan 開發

執行階段依附元件

Magma 驅動程式庫和程式庫應內建於完整的 Fuchsia 中 圖片。系統會根據 已選取的 board 建立容器

元件資訊清單

加入以下程式碼以啟用 Vulkan 驅動程式庫的存取權:

CML

針對使用 .cml 資訊清單宣告的元件:

{
  include: [
    "vulkan/client.shard.cml"
  ],
  use: [
      { protocol: "fuchsia.media.ProfileProvider" },
  ],
  ...
}

fuchsia.media.ProfileProvider 能力為選用功能,但建議使用。

所需的能力路徑

使用 Vulkan 的元件必須轉送下列 FIDL 服務:

  • fuchsia.sysmem.Allocator
  • fuchsia.sysmem2.Allocator
  • fuchsia.vulkan.loader.Loader
  • fuchsia.tracing.provider.Registry
  • fuchsia.logger.LogSink
  • fuchsia.scheduler.RoleManager - 選填,但強烈建議使用;在這裡 。如果不是 只有指定時,Vulkan ICD 會使用預設執行緒優先順序執行內部執行緒,這可能會導致 也可能無法達到最佳成效未包含在 vulkan/client.shard.cml 中,因此必須手動 use
  • fuchsia.media.ProfileProvider - 已淘汰;由 fuchsia.scheduler.RoleManager 取代。

測試元件可在 非密封運作範圍

# BUILD.gn

fuchsia_test_component("my_test_component") {
  component_name = "my_test"
  manifest = "meta/my_test.cml"
  deps = [ ":my_test_bin" ]

  # This runs the test in "vulkan-tests" non-hermetic realm.
  test_type = "vulkan"
}
  • 若是 vulkan-test,請將 test_type 標示為 vulkan
  • 若是 system-test,請將 test_type 標示為 system

測試元件可以使用 vulkan_envs 環境,確保這類程式在所有具備 Vulkan 的建構機器人中運作 聯絡。

建構時間依附元件

樹狀結構中的建構作業

樹狀結構中的程式碼應依附於 //src/lib/vulkan,才能加入 vulkan 標頭和 libvulkan.so 連結。

其他實用目標:

  • //src/lib/vulkan:vulkan_validation_layers:必須能夠啟用 Vulkan 驗證層

SDK 用戶端

使用 Bazel SDK 的程式碼應依附於 @fuchsia_sdk//pkg/vulkan

在螢幕上轉譯

顯示轉譯輸出內容的方法有兩種:

  1. 系統合成器

    詳情請參閱景觀說明文件。

  2. 直接顯示在螢幕上

    此方法與具有系統合成器的系統不相容。

您可以使用自訂版本的 WSI 交換鏈

如要進一步瞭解 Fuchsia 自訂功能,請參閱 vkcube 範例。請注意,系統已移除對選項 1 的交換鏈支援。

報表問題

請留意系統記錄,瞭解各種類型的圖形驅動程式庫特定問題,以及在 Magma 專案中提交支援單。 驅動程式應終止與這些問題發生時執行環境相對應的連線。但否則應妥善處理這次失敗

如果之後還是無法解決問題,請一併提報該問題。

GPU 錯誤

如下所示。這可能是因為使用者錯誤或驅動程式庫錯誤。請確認應用程式沒有 Vulkan 驗證層問題。

如果您認為自家應用程式無害,請提交 Magma 票證,並在其中至少附上這份記錄的以下部分資訊,最好是重現問題的方法:

> [WARNING] GPU fault detected
> ---- device dump begin ----
> RELEASE build
> Device id: 0x1916
> RENDER_COMMAND_STREAMER
> sequence_number 0x1003
> active head pointer: 0x1f328
> ENGINE FAULT DETECTED
> engine 0x0 src 0x3 type 0x0 gpu_address 0x1000000
> mapping cache footprint 11.9 MB cap 190.0 MB
> ---- device dump end ----
> [WARNING] resetting render engine

Gpu 懸掛

如果指令緩衝區無法在一定時間內完成,則 GPU 驅動程式庫應偵測該條件,並視為發生故障。

再次提醒,可能是應用程式錯誤或驅動程式庫錯誤。如果您認為自家應用程式無害,請提交 Magma 票證,並在其中至少附上這份記錄的以下部分資訊,最好是重現問題的方法:

> [WARNING] Suspected GPU hang: last submitted sequence number 0x1007 master_interrupt_control 0x80000000
> ---- device dump begin ----
> DEBUG build
> Device id: 0x1916
> RENDER_COMMAND_STREAMER
> sequence_number 0x1006
> active head pointer: 0x20
> No engine faults detected.
> mapping cache footprint 0.0 MB cap 0.0 MB
> ---- device dump end ----
> [WARNING] resetting render engine