Magma:總覽

背景

Fuchsia 是 Google 推出的全新開放原始碼微核心作業系統。驅動程式不會在 Zircon 核心內執行,而是特殊權限使用者空間程序。驅動程式是使用穩定版 FDF 建構而成。

Magma 是 Fuchsia 的 GPU 驅動程式庫程式架構,驅動程式庫包含兩個元件:載入每個應用程式位址空間的 GPU 專屬程式庫,以及管理硬體的 Magma 系統驅動程式。

硬體需求

符合 Vulkan 規範的 GPU

Magma 的設計目的是支援 Vulkan,但也可以用來實作 OpenGL 或其他圖形 API。Fuchsia 打算透過 ANGLE 翻譯成 Vulkan,支援使用 OpenGL API 的軟體。

MMU

如要從非連續緩衝區執行 DMA,或將資料傳輸至非連續緩衝區,必須使用記憶體管理單元,將系統記憶體頁面任意對應至 GPU 位址空間。

每個用戶端都有獨立的位址空間

為確保系統安全,請務必在 GPU 網域和 CPU 網域中維持位址空間隔離。

統一記憶體架構 (UMA)

CPU 和 GPU 存取相同的實體系統記憶體。日後可能會放寬這項限制。

建築

與 Linux 上的直接算繪模型類似,有兩個驅動程式元件:載入每個應用程式位址空間的 GPU 專屬程式庫,以及管理硬體的 Magma 系統驅動程式。

Magma 系統驅動程式庫

職責:

  • 正在初始化硬體
  • 設定記憶體空間
  • 設定硬體環境
  • 對應緩衝區
  • 排定指令緩衝區
  • 處理錯誤
  • 管理電源

用戶端程式庫驅動程式庫

職責:

  • 實作 Vulkan 1.0/1.1/1.2 進入點
  • 實作 Fuchsia 擴充功能,匯入及匯出外部記憶體和信號
  • 實作 VK_KHR_display 和/或 VK_KHR_swapchain,直接存取螢幕

傳統用戶端驅動程式會發出 ioctl 系統呼叫,與核心驅動程式庫通訊;Magma 則提供介面,讓用戶端驅動程式透過 IPC 與 Magma 系統驅動程式庫通訊。

如要瞭解 Magma 介面的詳細資料,請參閱「Magma:設計」。