Magma:概览

背景

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

Magma 是 Fuchsia 的 GPU 驱动程序架构。它包含两个驱动程序组件:一个加载到每个应用的地址空间中的 GPU 特定库;以及用于管理硬件的 Magma 系统驱动程序。

硬件要求

符合 Vulkan 标准的 GPU

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

MMU

DMA 需要一个内存管理单元,该单元允许将系统内存页任意映射到 GPU 地址空间,以便从非连续缓冲区执行 DMA 操作。

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

为了确保系统安全,在 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:设计