backend/drm: implement KMS state snapshot/restore

Following ideas from [1], snapshot the entire KMS state when the VT
is switched away, and restore it when the VT is switched back.

> Well the neat trick is that userspace doesn’t need to be able to
> understand properties to save and restore them - the actual property
> value transport between kernel and userspace is fully generic.

That way, even if another DRM master changes a property we don't
understand like CTM or HDR_OUTPUT_METADATA, we can switch it back
and avoid getting garbage on screen.

[1]: https://blog.ffwll.ch/2016/01/vt-switching-with-atomic-modeset.html
This commit is contained in:
Simon Ser 2022-10-18 18:23:55 +02:00
parent e0b2bf2a6b
commit f0bb53c4ab
7 changed files with 155 additions and 20 deletions

View file

@ -85,6 +85,8 @@ struct wlr_drm_backend {
uint64_t cursor_width, cursor_height;
struct wlr_drm_format_set mgpu_formats;
drmModeAtomicReq *atomic_snapshot;
};
struct wlr_drm_mode {