edfd1880c9
Let's try to consolidate our documentation in doc/ in the repo. This includes some documentation from README.md, the HACKING.md coding style and the gitlab wiki. The README.md file now links to all top-level topics (i.e. not reachable via other topics). This also includes a few small changes to make things more consistent. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3465>
135 lines
4.2 KiB
Markdown
135 lines
4.2 KiB
Markdown
# Compositor stage and hardware relationships
|
|
|
|
## Brief description of components
|
|
|
|
- `MetaLogicalMonitor` is one monitor or more monitor occupying the same region of the compositor space. E.g. when mirroring two monitors, both belong to the same logical monitor.
|
|
- `MetaMonitor` is a single physical monitor, but it can sometimes consist of more than one separate panel (for instance, 5K tiled monitors which literally require 2 cables due to lack of bandwidth)
|
|
- `MetaOuptut` is a connector e.g. a DisplayPort connector or HDMI connector.
|
|
- `MetaCrtc` represents a component on the display hardware that channels video memory to connectors.
|
|
|
|
## Entity relationship diagram
|
|
|
|
```mermaid
|
|
erDiagram
|
|
MetaBackend ||--|| MetaMonitorManager : owns
|
|
MetaBackend ||--|{ MetaGpu : owns
|
|
MetaBackend ||--|| ClutterStage : owns
|
|
MetaGpu ||--|{ MetaCrtc : owns
|
|
MetaGpu ||--|{ MetaOutput : owns
|
|
MetaCrtc |o..o{ MetaOutput : assigned
|
|
MetaBackend ||--|{ MetaVirtualMonitor : owns
|
|
MetaVirtualMonitor ||--|| MetaCrtc : owns
|
|
MetaVirtualMonitor ||--|| MetaOutput : owns
|
|
MetaMonitorManager ||--|{ MetaMonitor : owns
|
|
MetaMonitorManager ||--|{ MetaLogicalMonitor : owns
|
|
MetaLogicalMonitor ||..|{ MetaMonitor : has
|
|
MetaMonitor ||..|{ MetaOutput : has
|
|
ClutterStage ||--|{ ClutterStageView : has
|
|
ClutterStageView ||..|| MetaCrtc : corresponds
|
|
ClutterStageView ||--|| ClutterFrameClock : owns
|
|
ClutterStageView ||..|| MetaLogicalMonitor : derive-scale
|
|
```
|
|
|
|
## Class diagrams
|
|
|
|
`MetaBackend`, `MetaGpu` and `MetaMonitorManager` class diagrams.
|
|
|
|
```mermaid
|
|
classDiagram
|
|
MetaBackend <-- MetaBackendNative
|
|
MetaBackend <-- MetaBackendX11
|
|
class MetaBackend{
|
|
MetaMonitorManager monitor_manager
|
|
List~MetaGpu~ gpus
|
|
}
|
|
MetaGpu <-- MetaGpuKms
|
|
MetaGpu <-- MetaGpuXrandr
|
|
class MetaGpu{
|
|
List~MetaOutput~
|
|
List~MetaCrtc~
|
|
}
|
|
MetaMonitorManager <-- MetaMonitorManagerNative
|
|
MetaMonitorManager <-- MetaMonitorManagerXrandr
|
|
class MetaMonitorManager{
|
|
List~MetaMonitor~ monitors
|
|
List~MetaLogicalMonitor~ logical_monitors
|
|
}
|
|
```
|
|
|
|
`MetaLogicalMonitor`, `MetaMonitor`, `MetaOutput` and `MetaCrtc` class diagrams.
|
|
|
|
```mermaid
|
|
classDiagram
|
|
MetaLogicalMonitor
|
|
class MetaLogicalMonitor{
|
|
List~MetaMonitor~
|
|
}
|
|
MetaMonitor <-- MetaMonitorNormal
|
|
MetaMonitor <-- MetaMonitorTiled
|
|
class MetaMonitorNormal{
|
|
MetaOutput output
|
|
}
|
|
class MetaMonitorTiled{
|
|
List~MetaOutput~ output
|
|
}
|
|
MetaOutput <-- MetaOutputNative
|
|
MetaOutputNative <-- MetaOutputKms
|
|
MetaOutputNative <-- MetaOutputVirtual
|
|
MetaOutput <-- MetaOutputXrandr
|
|
MetaCrtc <-- MetaCrtcNative
|
|
MetaCrtcNative <-- MetaCrtcKms
|
|
MetaCrtcNative <-- MetaCrtcVirtual
|
|
MetaCrtc <-- MetarCrtcXrandr
|
|
```
|
|
|
|
`ClutterStage` and `ClutterStageView` class diagram when using the Wayland session.
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class ClutterStage{
|
|
List~ClutterStageView~
|
|
}
|
|
class ClutterStageView{
|
|
MetaCrtc crtc
|
|
}
|
|
```
|
|
|
|
`MetaKms` class diagram.
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class MetaKms{
|
|
List~MetaKmsDevice~ devices
|
|
}
|
|
class MetaKmsDevice{
|
|
List~MetaKmsConnector~
|
|
List~MetaKmsCrtc~
|
|
List~MetaKmsPlane~
|
|
MetaKmsImplDevice impl_device
|
|
}
|
|
MetaKms "many" --> MetaKmsDevice : Owns
|
|
MetaKmsDevice --> MetaKmsImplDevice : Owns
|
|
MetaKmsImplDevice <-- MetaKmsImplDeviceAtomic
|
|
MetaKmsImplDevice <-- MetaKmsImplDeviceSimple
|
|
```
|
|
|
|
## Native backend and mode setting
|
|
|
|
* `MetaGpuKms`, `MetaCrtcKms` and `MetaOutputKms` are used for configuration.
|
|
* `MetaKmsDevice`, `MetaKmsCrtc`, `MetaKmsConnector` and `MetaKmsPlane` are abstractions on top of kernel mode setting concepts.
|
|
|
|
```mermaid
|
|
erDiagram
|
|
MetaBackendNative ||--|{ MetaGpuKms : owns
|
|
MetaBackendNative ||--|| MetaKms : owns
|
|
MetaKms ||--|{ MetaKmsDevice : owns
|
|
MetaKmsDevice ||--|{ MetaKmsCrtc : owns
|
|
MetaKmsDevice ||--|{ MetaKmsConnector : owns
|
|
MetaKmsDevice ||--|{ MetaKmsPlane : owns
|
|
MetaGpuKms ||--|{ MetaCrtcKms : owns
|
|
MetaGpuKms ||--|{ MetaOutputKms : owns
|
|
MetaCrtcKms |o..o{ MetaOutputKms : assigned
|
|
MetaGpuKms |o..o| MetaKmsDevice : associated
|
|
MetaCrtcKms |o..o| MetaKmsCrtc : associated
|
|
MetaOutputKms |o..o| MetaKmsConnector : associated
|
|
```
|