Roadmap
Roadmap
This is the high level roadmap for mutter. It's not a complete list of things that will happen, but an attempt to document various things we'd like to see happening. It'll grow dynamically as time goes by, and things might change. The order of the listed items do not dictate the priority.
Cogl
-
Migrate from CoglObject to GObject -
CoglFramebuffer / CoglOnscreen / CoglOffscreen (!1496 (merged), !1514 (merged)) -
CoglFramebufferDriver (!1514 (merged)) -
CoglTexture / CoglTexture* (!3193 (merged)) -
CoglBuffer / Cogl*Buffer (!3193 (merged)) -
CoglAtlas / CoglAttribute (!3193 (merged)) -
CoglBitmap (!3193 (merged)) -
CoglContext (!3193 (merged)) -
CoglDisplay (!3193 (merged)) -
CoglFrameInfo (!3193 (merged)) -
CoglIndices (!3193 (merged)) -
CoglJournal (!3193 (merged)) -
CoglMatrixStack (!3193 (merged)) -
CoglNode (!3193 (merged)) -
CoglOnscreenTemplate (!3193 (merged)) -
CoglOutput (X11 only) (!3193 (merged)) -
CoglPipeline / CoglPipelineLayer (!3193 (merged)) -
CoglPrimitive (!3193 (merged)) -
CoglMatrixEntry (!3193 (merged)) -
CoglRenderer (!3193 (merged)) -
CoglShader (!3193 (merged)) -
CoglProgram (!3193 (merged)) -
CoglSnippet (!3193 (merged)) -
CoglSwapChain (!3193 (merged))
-
-
Vulkan -
Multi GPU support
Clutter
-
Move from ClutterActor::paint() to paint nodes -
Introduce a snapshot-like API to collect paint nodes
-
-
Rounded corner clipping -
Make ClutterBackend a GInterface -
Derive scanout candidates (actors) from scene graph -
Support "robustness" (recover from lost GPU state) -
Allow separate shared EGL contexts per ClutterStageView -
Allow separate non-shared (different GPUs) EGL contexts per ClutterStageView -
Support multiple stages (for lock screen-only interaction for hybrid remote desktop sessions) -
Extend and improve ClutterGestureAction framework
Backend (native)
-
Modularizing native backend's renderer code. Make the Cogl interface implementations (CoglOnscreen, CoglRenderer, ...) smaller by implementing the needed functionality in dedicated classes. Eventually the end goal is making meta-renderer-native.c and meta-onscreen-native.c more manageable and maintainable. -
Introduce MetaRenderDevice (!1854 (merged)) (takes ownership of gbm_device and related state) -
Introduce MetaRenderSurface (takes ownership of buffer state management) (#2089)
-
-
Multi threading -
Input thread (!1403 (merged)) -
Multi threaded readiness page flipping (#2088) -
KMS thread -
Buffer readiness aware page flipping / triple-buffering
-
-
-
Client buffer unredirection -
KMS primary plane unredirection (!1959 (merged), !2146 (merged)) -
KMS overlay plane unredirection (#61, !2660)
-
-
Input grab rearchitecture -
Introduce ClutterGrab (!2068 (merged), !2099 (merged), !2100 (merged)) -
Replace still existing grab mechanisms with ClutterGrab -
MetaWaylandPointerGrab (!3420 (merged)) -
MetaWaylandKeyboardGrab (!3420 (merged)) -
MetaWaylandDragGrab (!3420 (merged)) -
MetaWaylandPoupGrab (!3420 (merged)) -
meta_display_begin_grab_op() (!2683 (merged))
-
-
-
Driver preferred output pixel format (!1756 (closed)) -
Color management -
Migrate existing color management from gnome-settings-daemon to mutter (!2141 (merged), !2164 (merged), !2165 (merged), !2166 (merged)) -
Implement color space capable linear compositing -
HDR Support (#2134) -
Support opportunistic KMS based color management unredirection
-
-
Latched painting for tiled monitors to avoid tearing -
Multi GPU compositing (composite using the GPU the stage view CRTC targets) -
VRR (Variable Refresh Rate) support (!1154 (merged))
Backend (X11)
-
Make X11 backend optional at build time (#2272)
Compositing
-
Painting of YUV buffers (!2191 (merged))
Wayland
-
DRM lease support (#1743) -
Client buffer readiness aware compositing (!1880 (merged)) -
Synchronized xdg_popup repositioining (!1342) -
Add color management support -
Hi-res scroll (!1962 (merged)) -
Per wl_surface idle inhibit (!111 (closed)) !3145 (merged)
X11 (client support)
-
Port to GTK4 -
Dedicated client for window frames (!2175 (merged)) -
Drop GTK3 dependency from Mutter core -
Move tests away from GDK3
-
-
Make X11 client support optional at build time
Screencasting
-
Implement zero copy virtual monitor screen casting -
Add implicit DMA buffer format modifier support (!1939 (merged)) -
Add explicit DMA buffer format modifier support (!2110 (closed)) -
Blit from onscreen instead of repainting (#2679)
Remote Desktop
-
Hybrid headless/headfull mode. Meaning a session can go between being headless (monitors turned off, no physical input events) and headfull (monitors turning on, receive physical input events, practically what a normal session is today) -
Managed by a remote desktop service via D-Bus
Other
-
Implement EIS Emulated Input Server support (!1436 (closed)). Intended to be used for remote desktop, testing, as well as for applicationsy like Barrier. -
Add an "SDK" replacing the nested backend for easier development and testing (!1949)
Testing
-
Wayland conformance testing - whenever there is a cross compositor testing framework that is suitable for adoption, we should integrate it into the test suite. -
Testing inside KVM -
KMS testing using vkms (!2151 (merged)) -
Input testing using uinput -
KVM testing in CI (!2152 (merged))
-
-
Migrate away from using the nested backend in testing -
Port monitor configuration tests to the headless backend. -
Port the clutter tests away from to the headless backend. -
Port the unit tests to the headless backend. -
Port the stage view tests to the headless backend. -
Port the test-runner tests to the headless backend. -
Split up the unit tests to multiple tests executables.
-
-
Add a "test environment" D-Bus API mode allowing external test suites (e.g. gtk, openqa, gnome-shell extension testing)
This is a high level issue to document the roadmap. Since it's intended to be long lived and edited over time, comments are closed. This doesn't mean the roadmap is not up for discussion, but it's better done in the linked issues, merge requests, or Discourse so that this issue doesn't explode.
Edited by Carlos Garnacho