Commit Graph

11834 Commits

Author SHA1 Message Date
Jonas Ådahl
294739db15 monitor-manager: Apply HDR settings before updating the stage
This means we can make use of the HDR configuration of outputs to derive
stage rendering configuration.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3432>
2023-12-01 14:25:08 +00:00
Jonas Ådahl
3561f3c20e monitor-manager: Set up experimental HDR change listener after starting
This means we can fiddle with it during startup without an accidental
reconfigure being sneaked in by the listener.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3432>
2023-12-01 14:25:08 +00:00
Jonas Ådahl
e4badfecb3 monitor-manager: Allow forcing experimental HDR mode with an env var
This makes it possible to test without GNOME Shell and looking glass.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3432>
2023-12-01 14:25:08 +00:00
Jonas Ådahl
be3394646f monitor-manager: Stop leaking experimental HDR setting
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3432>
2023-12-01 14:25:08 +00:00
Carlos Garnacho
9f89421ef5 backends: Attempt a fallback to 'default' cursor on failed lookups
While we should ideally have a sensible cursor theme, handle the
case of cursor themes that lack certain cursor names, and fallback
to the 'default' cursor in those cases.

The 'grey rectangle' fallback is still left, in case we even fail
to load a 'default' cursor.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3295>
2023-11-30 20:38:22 +00:00
Carlos Garnacho
d970c9db1a backends: Use standard cursor names from the CSS specification
This is the preferred name set, and handled by adwaita icon theme.
Use the names from https://www.w3.org/TR/css-ui-4/#cursor, like
GDK does at https://docs.gtk.org/gdk4/ctor.Cursor.new_from_name.html.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3040
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3295>
2023-11-30 20:38:22 +00:00
Pascal Nowack
a2a4067e07 screencast: Add ability to stop streams
When a stream is destroyed by a consumer, mutter won't be able to
recognize that.
For mutter, the stream just paused, but did not disconnect, because the
connection state of a PipeWire stream only represents, whether the
respective PipeWire context is connected to PipeWire.
In addition to that, it may be the case, that the stream consumer just
recreates the stream.
So even if mutter would be able to know, when the stream consumer
destroyed a stream, but not the whole screencast or remote-desktop
session, then mutter would not know, whether the stream will be resumed
eventually or not.

So, add an explicit API call to the screencast interface to stop a
stream.
For virtual streams, this also means, that the respective virtual
monitor is destroyed.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2889
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3307>
2023-11-30 12:22:59 +01:00
Pascal Nowack
d2122a02a3 monitor-manager: Reload monitor manager in idle callback
When a virtual stream is destroyed, its respective virtual monitor is
destroyed too. When the virtual monitor is destroyed, mutter reloads
the monitor manager.
However, at this point, the virtual stream is not completely destroyed
yet. The viewport of the virtual monitor still exists at this point and
when the monitor manager reloads, it will try to fetch the logical
monitor of the now destroyed virtual monitor, which will fail and thus
gnome-shell will run into a segfault.

Fix this situation by reloading the monitor manager in an idle callback.
When the monitor manager reloads, the virtual monitor is completely
gone, since the viewport of the virtual monitor is destroyed after the
virtual monitor itself.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2864
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3307>
2023-11-30 12:22:52 +01:00
Pascal Nowack
e70fa342a9 monitor-manager: Fix minor code style issue
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3307>
2023-11-30 12:13:26 +01:00
Jonas Ådahl
822ea67358 tests/utils: Add helper for waiting for monitor reconfigurations
This is useful after having removed a virtual monitor, which
will soon reconfigure in an idle callback.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3307>
2023-11-30 12:13:26 +01:00
Jonas Ådahl
5dc0824ea9 tests/utils: Raise error if monitors changed while waiting for paint
If it does, the views we are waiting for won't get painted.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3307>
2023-11-30 12:13:26 +01:00
Jonas Ådahl
c3c144f991 color-manager: Don't try to manage virtual monitors
There is no way to set any gamma luts, or do anything other color
management related. Eventually we'll probably want to, but that requires
bringing color management plumbing to PipeWire.

Doing this is also needed when running a headless session, as when
headless, polkit doesn't let us create colord devices without explicit
user permission, meaning we'll spam the session with useless dialogs
each time a session is started.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3423>
2023-11-27 14:21:37 +00:00
Carlos Garnacho
8de30c3b6e core: Disconnect notify::is-grabbed signal when closing display
Given destruction order, the display goes away before the stage, so
this lingering signal connection may trigger unintended crashes.

Fixes: 05eeb684d1 ("window: Postpone focusing until grab ended if uninteractable")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3422>
2023-11-24 13:54:05 +01:00
Daniel van Vugt
8103ebc21a backends/native: Count MetaRenderDeviceEglStream instances externally
`count_mode_setting_devices` was incorrect in both name and in function.
What it was actually doing was counting GPUs that had been registered with
the backend so far (during the `init_gpus` loop). What it was intended to
do was to count the number of `MetaRenderDeviceEglStream` instances, which
is the thing we're limited to only one of. So `count_mode_setting_devices`
would return zero whenever the first GPU initialized happened to be a
`MetaRenderDeviceEglStream`, which would in turn prevent
`MetaRenderDeviceEglStream` from successfully initializing. Seems it only
ever worked in the case of a hybrid system where the first GPU initialized
was GBM-based.

Now we count `MetaRenderDeviceEglStream` instances (zero or one) externally.
This allows initialization to succeed when it happens to be the first (or
only) GPU. And so `MUTTER_DEBUG_FORCE_EGL_STREAM=1` now works.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2905>
2023-11-24 15:07:16 +08:00
Daniel van Vugt
6cb68d39f5 native/render-device-egl-stream: Remove unused variable
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2905>
2023-11-24 15:07:16 +08:00
Michel Dänzer
69e0ce36b1 renderer/native: Try 10 bpc formats for EGL surfaces
For scanout on a secondary GPU, for the time being try only formats
which are guaranteed to be renderable with GLES3, which notably excludes
10 bpc formats without alpha channel.

v2:
* Use separate format array for 10 bpc formats without alpha.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3139>
2023-11-23 20:11:31 +00:00
Michel Dänzer
e1f795ff79 onscreen/native: Add and use choose_onscreen_egl_config helper
If the EGL_KHR_no_config_context extension is supported, use it to
choose a format per onscreen which is compatible with the scanout CRTC
and the GL rendering API used.

Suggested by Jonas Ådahl.

v2:
* Drop code which checked for GLES3 renderability. Makes no sense for
  various reasons, in particular that EGLconfigs are about EGLSurfaces,
  whereas secondary GPU contexts use an FBO for blitting.
* Use error parameter directly for meta_renderer_native_choose_gbm_format
  call (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3139>
2023-11-23 20:11:31 +00:00
Michel Dänzer
4c42eab358 renderer/native: Refactor meta_renderer_native_choose_gbm_format helper
Preparation for the following commits, no functional change intended.

v2:
* Pass through MetaEgl pointer
v3:
* Make it return gboolean (Robert Mader)
v4:
* Add debug logging and corresponding purpose parameter
v5:
* Fix excessive function parameter indentation (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3139>
2023-11-23 20:11:31 +00:00
Sebastian Wick
3897bf68f7 tests/wayland-unit-tests: Order unit test categories alphabetically
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3394>
2023-11-22 13:56:48 +00:00
Sebastian Wick
c0952f02e7 tests/wayland-unit-tests: Use the same naming convention for all tests
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3394>
2023-11-22 13:56:48 +00:00
Sebastian Wick
e1812dbf86 tests/wayland: Order test clients and add missing dependencies
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3394>
2023-11-22 13:56:48 +00:00
Sebastian Wick
97c1d19017 wayland-buffer: Use MetaFormatInfo to find supported formats
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3280>
2023-11-22 12:11:38 +00:00
Sebastian Wick
dbdc821ca7 multi-texture-format: Expose immutable fields directly
Split the struct into mutable and immutable parts. Access the mutable
parts via getters and the immutable parts via a single struct. This
avoids copying around the immutable parts.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3280>
2023-11-22 12:11:38 +00:00
Sebastian Wick
6f1edfc776 common/drm-formats: Rename to MetaFormatInfo and simplify API
Every format kind has it's own function to search for a MetaFormatInfo
from which contains all the information.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3280>
2023-11-22 12:11:38 +00:00
Ivan Molodetskikh
2d1fc65b3a Adjust COGL_TRACE names to improve automatic processing
In profilers with a timeline or flame graph views it is a very common
scenario that a span name must be displayed in an area too short to fit
it. In this case, profilers may implement automatic shortening to show
the most important part of the span name in the available area. This
makes it easier to tell what's going on without having to zoom all the
way in.

The current trace span names in Mutter don't really follow any system
and cannot really be shortened automatically.

The Tracy profiler shortens with C++ in mind. Consider an example C++
name:

SomeNamespace::SomeClass::some_method(args)

The method name is the most important part, and the arguments with the
class name will be cut if necessary in the order of importance.

This logic makes sence for other languages too, like Rust. I can see it
being implemented in other profilers like Sysprof, since it's generally
useful.

Hence, this commit adjusts our trace names to look like C++ and arrange
the parts of the name in the respective order of importance.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3402>
2023-11-22 11:46:07 +00:00
Georges Basile Stavracas Neto
f96d6b0afe screen-cast/monitor-src: Bring back blitting
Now that the monitor screencast records to DMA-BUF buffers immediately
(since bc2f1145d8), and we know which phase of the paint rountines we
are (since last commit), we have the opportunity to bring back the
blitting technique.

Bring back blitting. This time, instead of simply failing if the blit
fails, add a fallback path that does a stage paint if something goes
wrong. Unlike the previous implementation of blitting, this one only
blits the current view - it does not blit all views that intersect
with the screencasted monitor.

Embedded cursors should still be fine because hardware cursor is
inhibited while embedded cursor screencasts are running.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3406>
2023-11-22 07:55:04 +00:00
Georges Basile Stavracas Neto
91bdb2b692 screen-cast/src: Track paint phase
Track where we are in terms of the paint cycle. Do this through an
enumeration that is passed through the paint vfuncs of screencast
sources.

Right now, this information is not used by any one of the sources,
but next patch will use it to prevent blitting when detached from
the paint cycle.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3406>
2023-11-22 07:55:04 +00:00
Robert Mader
9ddb0371c6 cursor-renderer/native: Disable HW cursor when inhibited by backend
We need to disable the hardware cursor in some situations, notably when
doing a screencast with clients that require an embedded cursor.

While a API to do so is in place already, until now we didn't actually
make use of it. Do so.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7007

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3412>
2023-11-20 22:51:57 +01:00
Jonas Ådahl
8d3696f39a monitor-manager/x11: Ignore errors when creating tiled monitors
The error is most likely a race where the tiled outputs disappeared
before we had the chance to turn them into a whole monitor. Ignoring the
error should be harmless, as we should be receive another RANDR event
where we'd eventually fix things up.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7120
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3335>
2023-11-18 10:33:23 +00:00
Carlos Garnacho
571acf57d1 backends/native: Make tablet devices "floating"
With the existing ClutterInputMode terminology (inherited from XI2),
hardware devices may be "physical" (i.e. attached to a logical device),
or "floating" (i.e. detached from all logical devices).

In the native backend, tablet devices are closer to "floating" than
"physical", since they do not emit events relative to the ClutterSeat
pointer logical device, nor drive the MetaCursorTracker sprite. This
is in contrast to X11 where all tablet devices drive the Virtual
Core Pointer by default, along with every other pointing device.

Change this mode in the Wayland backend to be more coherent. The
existing checks on the ClutterInputMode along Mutter seem appropriate
for handling these as floating devices, since they mainly care about
logical vs non-logical.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3393>
2023-11-17 20:49:18 +00:00
Mike Gorse
c1feb2dc40 screen-cast/window-stream: Mark as configured
This is needed for the pointer to be exposed to an existing libei session.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3403>
2023-11-17 19:43:48 +00:00
Sebastian Wick
63c6fe11fb window-actor/wayland: Keep track of when the geometry needs to be synced
The window actor can be mapped every frame, e.g. when it is dragged in
the overview. This commit keeps track when the geometry changed and we
didn't managed to sync the geometry yet and need to sync it at a later
time.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
Sebastian Wick
9e036bfd23 window-actor/wayland: Map the window before trying to sync geometry
We need to chain up to the parent class to make sure the
WindowActorWayland is actually mapped which is required for the
sync_geometry_internal function to succeed.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
Sebastian Wick
2dbfc1c23d window-actor/wayland: Move map method to a more appropriate place
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
Sebastian Wick
ee7f13fd84 window-actor/wayland: Return success status from syncing geometry
We do this by  moving it to a helper function. We will use this to keep
track of when syncing the geometry is actually needed in a later commit.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
Sebastian Wick
90d27e7b2e window-actor: Adjust sync_geometry
At the end of the sync_actor_geometry function the window buffer_rect
and the WindowActor position and size are the same and consistent.

Call the virtual method at the end and let the implementations look at
either the buffer_rect or the actor position/size itself.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
Sebastian Wick
976bcef3d5 window-actor/wayland: Sync geometry only when window is mapped
In some cases the window is not mapped when the geometry changes.
Without the mapped window the surfaces are not mapped either and don't
have a sensible allocation.

This patch makes sure we abort syncing the geometry if the window is not
mapped and also make sure we sync geometry when the actor eventually
does get mapped.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3152
Fixes: 8f4ab53bd ("window-actor/wayland: Ensure to use allocation for black background check")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3401>
2023-11-15 17:03:45 +01:00
Ivan Molodetskikh
47814fab71 Remove COGL_TRACE_BEGIN in favor of BEGIN_SCOPED
Scoped traces are less error prone, and they can still be ended
prematurely if needed (this commit makes that work). The only case this
doesn't support is starting a trace inside a scope but ending outside,
but this is pretty unusual, plus we have anchored traces for a limited
variation of that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3396>
2023-11-15 13:57:43 +00:00
Bilal Elmoussaoui
371d28a766 cleanup: Stop allowing deprecated Cogl API usage
Allow only specific files to use those deprecated APIs making
it easier to find where deprecated APIs are still in use
and avoid introducing new usages without being noticed

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3400>
2023-11-15 13:13:00 +01:00
Bilal Elmoussaoui
da2771e293 tests/cleanup: Stop allowing deprecated GLib API usage
We only use one deprecated API, so allow only that file to contain
deprecated APIs

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3400>
2023-11-15 13:12:13 +01:00
Bilal Elmoussaoui
7de0707dfa clutter/cleanup: Stop disabling deprecated API usage warnings
As we have stopped using the deprecated APIs all over clutter, so let us
enforce that newly introduced code doesn't use code that gets depreccated
in the future

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3400>
2023-11-15 13:12:13 +01:00
Bilal Elmoussaoui
f5dac3a5d9 build: One config file to rule them all
Group all the three config files from clutter/cogl/meta into one
and also remove unnused configurations and replace duplicated ones

This also fixes Cogl usage of HAS_X11/HAS_XLIB to match the expected
build options

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3368>
2023-11-15 12:00:19 +00:00
Michel Dänzer
ca5bf847ee wayland/surface: Rename output/protocol_state to applied/committed_state
This is more consistent with Wayland protocol spec language.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3395>
2023-11-15 10:55:21 +00:00
Ivan Molodetskikh
31c5525382 wayland/dma-buf: Name readiness source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
Ivan Molodetskikh
a1b2725238 thread: Name callback source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
Ivan Molodetskikh
6c2383d625 thread: Name wrapper source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
Ivan Molodetskikh
a6e23dc9e2 thread/impl: Correct task source name
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
Ivan Molodetskikh
be81296fb2 eis: Name event source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
Bilal Elmoussaoui
306ff81004 clutter: Drop ClutterUnits
As nothing uses it now that ClutterScript was dropped

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3354>
2023-11-14 16:13:19 +01:00
Bilal Elmoussaoui
8a3181f741 clutter: Make json-glib a debug only dependency
Currently, json-glib is used for two things:
- For loading scripts, nothing seems to use that in real life other
than some tests
- For debugging paint nodes

For now, the PR drops the first use case and only require json-glib
if it is a debug build

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3354>
2023-11-14 16:13:18 +01:00