Magma:概览

背景

Fuchsia 是 Google 推出的一款类似于微内核的新型开源操作系统。驱动程序不是在 Zircon 内核中执行,而是在特权用户空间进程中执行。驱动程序使用稳定的 FDF 构建。

Magma 是 Fuchsia 的 GPU 驱动程序架构。有两个驱动程序组件:一个是加载到每个应用地址空间的 GPU 专用库;另一个是管理硬件的 magma 系统驱动程序。

硬件要求

符合 Vulkan 标准的 GPU

Magma 旨在支持 Vulkan,但也可用于实现 OpenGL 或其他图形 API。Fuchsia 打算支持软件使用 OpenGL API,即使用 ANGLE 转换为 Vulkan。

移动营销经理

DMA 与不连续缓冲区之间是需要内存管理单元,以允许将系统内存页面任意映射到 GPU 地址空间。

每个客户端的独立地址空间

出于系统安全考虑,在 GPU 域和 CPU 域中保持地址空间隔离非常重要。

统一的内存架构

这在将来可能会放宽。

架构

与 Linux 上的直接渲染模型类似,有两个驱动程序组件:加载到每个应用地址空间的特定于 GPU 的库;以及用于管理硬件的 magma 系统驱动程序。

Magma 系统驱动程序

工作职责:

  • 正在初始化硬件
  • 设置内存空间
  • 设置硬件上下文
  • 映射缓冲区
  • 调度命令缓冲区
  • 处理故障
  • 管理电源

客户端库驱动程序

工作职责:

  • 实现 Vulkan 1.0/1.1/1.2 入口点
  • 实现 Fuchsia 扩展,以便导入和导出外部内存和信号量
  • 实现 VK_KHR_display 和/或 VK_KHR_swapchain 可直接访问显示设备

传统的客户端驱动程序通过 ioctl 系统调用与内核驱动程序进行通信;而 magma 则提供了一个接口,让客户端驱动程序通过 IPC 与 Magma 系统驱动程序进行通信。

如需详细了解 Magma 界面,请参阅 Magma:设计