blob: f7b21d85a65150cd8788006fba47ab3d48f1e68b [file] [log] [blame] [view]
Magma: Overview
===============
## Background
Fuchsia is a new open source, micro-kernel-like operating system from Google. Drivers do not execute inside the Zircon kernel, instead they are privileged user-space processes. Drivers are built using a stable [DDK](/docs/concepts/drivers/overview.md).
Magma is the gpu driver architecture for Fuchsia. There are two driver components: a gpu-specific library loaded into each applications address space; and the magma system driver that manages the hardware.
## Hardware requirements
### Vulkan conformant gpu
Magma is designed to support [Vulkan](vulkan.md), though it could be used to implement OpenGL or other graphics api. For legacy codebases Fuchsia intends to support OpenGL via translation to Vulkan using ANGLE.
### MMU
A memory management unit that allows arbitrary mapping of system memory pages into the GPU address space is needed for DMA to/from non-contiguous buffers.
### Per-client independent address space
For system security its important to maintain address space isolation in the gpu domain as well as in the cpu domain.
### Unified memory architecture
This may be relaxed in the future.
## Architecture
Similar to the direct rendering model on Linux, there are two driver components: a gpu-specific library loaded into each applications address space; and the magma system driver that manages the hardware.
### Magma system driver
Responsibilities:
* Initializing hardware
* Setting up memory spaces
* Setting up hardware contexts
* Mapping buffers
* Scheduling command buffers
* Handling faults
* Managing power
### Client library driver
Responsibilities:
* Implementing Vulkan 1.0/1.1 entry points
* Implementing Fuchsia extensions for import and export of external memory and semaphores
* Implementing VK_KHR_display and/or VK_KHR_swapchain for direct display access
Whereas a traditional client driver makes ioctl syscalls to communicate with a kernel driver; magma provides an interface for client drivers to communicate over IPC with the Magma system driver.
Details on the Magma interface are given in [Magma: Design](design.md).