mutter/src/compositor
Dor Askayo 4736f873f2 compositor/native: Add support for direct scanout per view
This uses MetaCompositorViewNative to find a candidate surface for
scanout and to keep track of it separately for each view, effectively
allowing each CRTC to use a different buffer for direct scanout.

There are three parts for potentially assigning a buffer for direct
scanout at the compositor level:
  1. Finding a candidate surface actor on the view (if any)
  2. Attempting to assign the candidate's buffer for direct scanout
  3. Updating references relating to the scanout candidate as needed

The three parts were moved in their entirety from being handled by the
MetaCompositorNative to being handled by the MetaCompositorViewNative.
As part of this transition, the logic was also slightly refactored so
that each of the three parts is handled by its own helper function.
This allowed to avoid the use of "goto" statements and hopefully make
the logic easier to read and follow.

The first part mentioned above was changed in this commit to make use
of the new meta_compositor_view_get_top_window_actor () API to get the
top window actor in the view instead of the top window actor on all
views.

The second part and third parts mentioned above weren't changed other
than being done in the context of a view instead of globally.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2526>
2022-08-01 21:05:04 +00:00
..
plugins default-plugin: Drop default confirm display dialog 2022-05-06 16:13:45 +02:00
clutter-utils.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
clutter-utils.h compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
cogl-utils.c cogl: Remove CoglError wrapper 2019-06-20 18:25:04 +02:00
cogl-utils.h Use a consistent style for enum braces 2019-02-28 09:31:01 +01:00
compositor-private.h compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
compositor.c compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-background-actor-private.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-background-actor.c background-actor: Use MetaBackgroundContent 2020-06-09 17:07:02 -03:00
meta-background-content-private.h Introduce MetaBackgroundContent 2020-06-09 17:07:02 -03:00
meta-background-content.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-background-group.c meta: Make MetaBackgroundGroup derivable 2019-06-24 13:49:31 +00:00
meta-background-image.c background-image: Properly clear the failed to be filled texture pointer 2021-08-31 08:25:32 +00:00
meta-background-private.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-background.c background: Make the final monitor texture RGB instead of RGBA 2021-01-11 15:08:27 +08:00
meta-compositor-native.c compositor/native: Add support for direct scanout per view 2022-08-01 21:05:04 +00:00
meta-compositor-native.h compositor: Get the stage via the backend 2020-06-05 21:39:27 +00:00
meta-compositor-server.c compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-compositor-server.h compositor: Get the stage via the backend 2020-06-05 21:39:27 +00:00
meta-compositor-view-native.c compositor/native: Add support for direct scanout per view 2022-08-01 21:05:04 +00:00
meta-compositor-view-native.h compositor/native: Add support for direct scanout per view 2022-08-01 21:05:04 +00:00
meta-compositor-view.c compositor: Keep track of the top window actor on each view 2022-08-01 21:05:04 +00:00
meta-compositor-view.h compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-compositor-x11.c compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-compositor-x11.h compositor: Get the stage via the backend 2020-06-05 21:39:27 +00:00
meta-cullable.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-cullable.h cullable: Factor out untransformed check into a vfunc 2020-02-08 19:20:41 +01:00
meta-dnd-actor-private.h Use G_DECLARE_DERIVABLE/FINAL_TYPE on some types 2018-12-21 19:48:50 +00:00
meta-dnd-actor.c compositor/dnd-actor: Take geometry scale into account on DnD-cancel 2021-02-05 09:51:56 +00:00
meta-dnd.c compositor/dnd: Fix indentation 2022-04-29 18:58:38 +00:00
meta-feedback-actor-private.h feedback-actor: Add API to set and get geometry scale 2021-02-05 09:51:56 +00:00
meta-feedback-actor.c feedback-actor: Add API to set and get geometry scale 2021-02-05 09:51:56 +00:00
meta-later-private.h laters: Expose MetaLaters publicly 2022-02-07 17:52:05 +00:00
meta-later.c laters: Expose MetaLaters publicly 2022-02-07 17:52:05 +00:00
meta-module.c plugin: Drop version information 2020-10-06 15:14:34 +02:00
meta-module.h Changed obsolete FSF postal address into generic URL. 2014-01-13 11:35:47 -05:00
meta-plugin-manager.c core: Drop the default close dialog implementation 2022-05-06 16:13:45 +02:00
meta-plugin-manager.h compositor/plugin-manager: Split start() from new() 2022-01-25 15:15:13 +01:00
meta-plugin.c compositor: Remove meta_plugin_begin/end_modal 2022-01-29 02:11:37 +01:00
meta-shadow-factory.c src: Stop using GSlice 2021-02-22 13:52:27 +01:00
meta-shaped-texture-private.h shaped-texture: Fix code style issue 2022-01-03 14:11:54 +01:00
meta-shaped-texture.c shaped-texture: Remove mipmap framerate limiting 2022-07-28 12:12:38 +02:00
meta-surface-actor-wayland.c compositor/native: Remove redundant function 2022-08-01 21:05:04 +00:00
meta-surface-actor-wayland.h compositor/native: Remove redundant function 2022-08-01 21:05:04 +00:00
meta-surface-actor-x11.c surface-actor-x11: Fix code style issue 2022-01-03 14:12:01 +01:00
meta-surface-actor-x11.h surface-actor: Remove 'pre-paint' vfunc 2020-07-02 19:36:51 +02:00
meta-surface-actor.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-surface-actor.h surface-actor: Remove get_image() function 2021-08-28 13:59:52 +02:00
meta-sync-ring.c Make meta_* logging utilities not require line break 2020-10-08 16:38:41 +02:00
meta-sync-ring.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-texture-mipmap.c compositor: Add copyrights for recent mipmapping changes 2022-07-27 16:08:46 +08:00
meta-texture-mipmap.h shaped-texture: Move texture mipmap implementation to 'meta-texture-mipmap' 2022-07-26 19:16:50 +00:00
meta-window-actor-private.h tests/wayland: Add more requests to test driver protocol 2022-06-03 09:03:10 +00:00
meta-window-actor-wayland.c window-actor/wayland: Skip unnecessary set_child_at_index() calls 2022-07-11 17:23:10 +00:00
meta-window-actor-wayland.h compositor: Some header cleanups 2022-03-05 14:14:37 +00:00
meta-window-actor-x11.c window-actor/x11: Don't use direct scanout if the window is not opaque 2022-05-17 10:34:20 +00:00
meta-window-actor-x11.h window-actor: Move shapes, shadows and unredirection to X11 sub types 2019-10-16 13:16:55 +02:00
meta-window-actor.c compositor: Keep track of the top window actor on each view 2022-08-01 21:05:04 +00:00
meta-window-group-private.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-window-group.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-window-shape.c src: Stop using GSlice 2021-02-22 13:52:27 +01:00
README Document window and surface actors 2019-01-04 09:32:58 -02:00
region-utils.c region-utils: Fix typo in crop_and_scale() fastpath 2021-03-29 15:17:48 +00:00
region-utils.h region-utils: Make transform util const correct 2020-05-26 13:54:28 +00:00

Intro
=====

In general, the compositor splits the window from the contents of
the window from the shape of the window. In other words, a window
has contents, and the contents of the window have a shape. This is
represented by the actor hierarchy:

 +--------------------------------------+
 | MetaWindowActor                      |
 | +----------------------------------+ |
 | | MetaSurfaceActor                 | |
 | | +------------------------------+ | |
 | | | MetaShapedTexture            | | |
 | | |                              | | |
 | | |                              | | |
 | | |                              | | |
 | | |                              | | |
 | | +------------------------------+ | |
 | +----------------------------------+ |
 +--------------------------------------+

Surfaces may also contain subsurfaces. The MetaWindowActor and
MetaSurfaceActor subclasses that will be created depend on the client
type, and the display server type.

## Subsurfaces

Additionally, there is also the case of subsurfaces: surfaces that
are child of other surfaces. That is also represented in the actor
hierarchy by having one or many MetaSurfaceActors (the subsurfaces)
added as children of a parent MetaSurfaceActor. There are no limits
to how many subsurfaces a surface may have. With subsurfaces, the
actor hierarchy looks like this:

 MetaWindowActor
  ↳ MetaSurfaceActor (surface)
     ↳ MetaShapedTexture
     ↳ MetaSurfaceActor (subsurface)
        ↳ MetaShapedTexture
        ↳ MetaSurfaceActor (sub-subsurface)
           ↳ MetaShapedTexture
     ↳ MetaSurfaceActor (subsurface)
        ↳ MetaShapedTexture

In this example, the main surface has 2 subsurfaces. One of these
subsurfaces contains a subsurface as well.

All MetaWindowActors contain at least one MetaSurfaceActor, and all
MetaSurfaceActors contain a MetaShapedTexture.

## Client and compositor

MetaWindowActor and its subclasses represent the client window's
type. A X11 client will have a MetaWindowActorX11 representing it,
and a Wayland client will have a MetaWindowActorWayland.

On the compositor side, the surface where the contents of the window
are drawn into are represented by MetaSurfaceActor subclasses. On a
Wayland session, windows are backed by a MetaSurfaceActorWayland
surface, whereas on X11 sessions, by MetaSurfaceActorX11.

XWayland windows are X11 client windows (MetaWindowActorX11) backed
by Wayland surfaces (MetaWindowActorWayland).


Env Vars
========

MUTTER_DISABLE_MIPMAPS - set to disable use of mipmaped windows.