tree: 878b6e00a5d132e7c6f2abfe3ba181d65f941729 [path history] [tgz]
  1. bin/
  2. docs/
  3. drivers/
  4. lib/
  5. testing/
  7. METADATA.textproto

The Fuchsia display stack

The code here is responsible for driving the display engine hardware in the systems supported by Fuchsia.

The Display hardware overview document introduces many terms needed to understand display code, and is a good background reading.

Stack overview

The FIDL interface for display clients

The official entry point to the display driver stack is the fuchsia.hardware.display/Coordinator FIDL interface. This FIDL interface will eventually become a part of the Fuchsia System Interface, and will be covered by ABI stability guarantees.

The interface's consumers are called display clients. This is a reference to the fact that consumers use FIDL clients for the Coordinator interface.

This interface is currently only exposed inside the Fuchsia platform source tree. The existing consumers of the interface are Scenic, virtcon, and the recovery UI. The last two consumers use the Carnelian library. There are no plans of supporting any new consumers.

The Display Coordinator

The Display Coordinator maintains the state needed to multiplex the display engine hardware across multiple display clients. The Coordinator's design aims to allow for multiple display clients and multiple display engine drivers, but this goal was sacrificed in a few places, in the name of expediency.

Whenever possible, data processing is implemented in the Coordinator, reducing the implementation complexity of hardware-specific display drivers. For example, the Coordinator parses EDID (Extended Display Identification Data), and the display drivers are only responsible for reading the EDID bytes from the display hardware.

The Coordinator implements the fuchsia.hardware.display/Coordinator FIDL interface, described above, to serve requests from display clients such as Scenic.

The Display Coordinator is currently implemented as the coordinator driver in the Fuchsia platform source tree. The fuchsia.hardware.display/Coordinator FIDL interface is currently served under the display-coordinator class in devfs.

The FIDL and Banjo interfaces for display engine drivers

The Coordinator will soon use the fuchsia.hardware.display.engine/Engine FIDL interface to communicate with hardware-specific display drivers. This FIDL interface will soon become a part of the Fuchsia System Interface, and will be covered by API stability guarantees.

The Coordinator currently also uses the fuchsia.hardware.display.controller/DisplayControllerImpl Banjo interface to communicate with display engine drivers. This interface is associated with the DISPLAY_CONTROLLER_IMPL protocol identifier. This Banjo interface will be removed when DFv1 (Driver Framework v1) support is removed from the display stack.

Display engine drivers

Display engine drivers contain hardware-specific logic for driving a display engine.

All new display drivers shall be built on top of DFv2 (Driver Framework v2). Each DFv2 driver exposes an implementation of the fuchsia.hardware.display.engine/Engine FIDL interface to integrate with the rest of the display stack. Each driver uses the DFv2 (Driver Framework v2) FIDL interface to communicate with the Driver Framework.

At the time of this writing, existing display drivers are built on top of DFv1. These drivers will be migrated to DFv2 or removed from the Fuchsia platform source tree.