背景
Fuchsia 是 Google 開發的全新開放原始碼微型作業系統,驅動程式不會在 Zircon 核心中執行,而是具有特殊權限的使用者空間程序。驅動程式是以穩定的 FDF 建構而成。
Magma 是 Fuchsia 的 GPU 驅動程式庫架構。驅動程式分為兩種:每個應用程式位址空間載入的 GPU 專屬程式庫,以及管理硬體的放大鏡系統驅動程式庫。
硬體需求
符合 Vulkan 標準的 GPU
Magma 設計為支援 Vulkan,但這可用於實作 OpenGL 或其他圖形 API。Fuchsia 的目標是透過 ANGLE,支援使用 OpenGL API 將 OpenGL API 轉譯至 Vulkan 的軟體。
MMU
一個記憶體管理單元,允許將系統記憶體頁面任意對應至 GPU 位址空間,讓 DMA 與非連續緩衝區。
個別用戶端的獨立位址空間
以系統安全性來說,在 GPU 和 CPU 網域中維持位址空間隔離至關重要。
統一的記憶體架構
這可能會在日後放鬆。
架構
與 Linux 的直接算繪模型類似,有兩個驅動程式元件:一個已載入至每個應用程式位址空間的 GPU 專屬程式庫,以及管理硬體的 Mama 系統驅動程式。
Magma 系統驅動程式庫
職責:
- 正在初始化硬體
- 設定記憶體空間
- 設定硬體內容
- 對應緩衝區
- 排程指令緩衝區
- 處理錯誤
- 管理電力
用戶端程式庫驅動程式庫
職責:
- 實作 Vulkan 1.0/1.1/1.2 進入點
- 實作 Fuchsia 擴充功能,用於匯入及匯出外部記憶體和 Semaphor
- 實作 VK_KHR_display 和/或 VK_KHR_swapchain,以便直接存取螢幕
傳統用戶端驅動程式會執行 ioctl syscall,與核心驅動程式庫進行通訊;Magma 提供的介面可讓用戶端驅動程式透過 Magma 系統驅動程式庫進行 IPC 通訊。
如要進一步瞭解 Magma 介面,請參閱 Magma: Design。