commit 6b9c5322db4fe8a8ccb3a1d191de7fcd116fd519
Author: Simon McVittie <smcv@debian.org>
Date: Thu Sep 17 14:35:56 2026 +0100
Update changelog
commit 7fb4cf90ae963495eb637e975f0458f738c24588
Merge: 8dbf7b6f 5c3127f4
Author: Simon McVittie <smcv@debian.org>
Date: Thu Sep 17 14:35:27 2026 +0100
Merge tag 'debian/50.5-1' into debian/latest
mutter release 50.5-1 for unstable
[dgit please-upload source=mutter version=50.5-1]
[dgit distro=debian split --quilt=gbp]
[dgit upstream-tag=upstream/50.5 upstream=f832270b4afdce40067d0e5cf61ca5c4d95c800b !pristine-tar=3f94b68f8156b1b74c5c88a6271f7f14c7f289fe]
commit 5c3127f4fba06e006f83598ca25b3166a8cbe115
Author: Simon McVittie <smcv@debian.org>
Date: Thu Sep 17 14:33:10 2026 +0100
Team upload
commit 6ae29bde45a790586bba0c40fb2fa09c88467296
Author: Simon McVittie <smcv@debian.org>
Date: Thu Sep 17 00:37:33 2026 +0100
d/libmutter-18-0.symbols: Update
commit 1c60552278c0fd2ca9fa8777a1c4e997e22728be
Author: Simon McVittie <smcv@debian.org>
Date: Wed Sep 16 23:45:36 2026 +0100
New upstream release
commit 2cedec194351aab14e932170834296f84a6e7a4d
Merge: 981fb3dd f832270b
Author: Simon McVittie <smcv@debian.org>
Date: Wed Sep 16 23:45:36 2026 +0100
Update upstream source from tag 'upstream/50.5'
Update to upstream version '50.5'
with Debian dir fdd9fd14f4148c757f413591cfe4b8e98d3001f9
commit f832270b4afdce40067d0e5cf61ca5c4d95c800b
Merge: 774e9a31 c28623c8
Author: Simon McVittie <smcv@debian.org>
Date: Wed Sep 16 23:45:13 2026 +0100
New upstream version 50.5
commit c28623c8d29c7b61ec744cdfdbec36f5e7faef1c
Author: Florian Müllner <fmuellner@gnome.org>
Date: Tue Sep 15 15:51:27 2026 +0200
Bump version to 50.5
Update NEWS.
commit c145106dcc6230fc18477ed24e1ee60f3375d52a
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Sat Sep 12 21:28:55 2026 +0200
renderer/native: Always mark onscreens as detached when rebuilding views
When rebuilding the views, the views may get freed, meaning if we don't
mark them as detached (unset the view, disconnect signals), they will
still react to e.g. gamma changes, or privacy screen changes etc, where
the handles will try to interact with the now potentially freed view.
For this to happen, the onscreen must be kept alive longer than the
view; this may happen when a hotplug happens while in power save mode,
which will queue a symbolic power save page flip. If something triggers
one of the signals an onscreen listens on before the power save page
flip frees the onscreen, we'll hit the crash.
The added test case triggered this by changing the CRTC gamma before
leaving power save mode.
An example backtrace:
#0 clutter_stage_view_schedule_update ()
...
#5 g_signal_emit ()
#6 meta_crtc_kms_set_gamma_lut ()
#7 meta_crtc_set_gamma_lut ()
#8 set_gamma_lut ()
#9 meta_monitor_mode_foreach_crtc ()
#10 meta_monitor_set_gamma_lut ()
#11 update_white_point ()
#12 do_update ()
#13 in meta_color_device_update ()
#14 update_device_properties ()
#15 in meta_color_manager_monitors_changed ()
#16 ensure_monitor_color_devices ()
#17 meta_monitor_manager_notify_monitors_changed ()
...
#34 g_main_loop_run ()
#35 meta_context_run_main_loop ()
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/5042
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5324>
(cherry picked from commit 8e3870f45792836291fee329ed897da2d6a07c54)
commit 83c465fffad9144c32025c347bebd0904c0f10b6
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Mon Sep 14 16:27:40 2026 +0200
monitor-manager: Move power save setting into helper
This will be useful for tests, which want to set the power save mode
without having to go via D-Bus.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5324>
(cherry picked from commit 9f14039b20a1cb8179b4552291b290cf204ad027)
commit af0c9808d93e5ba3577e3c97250944aa1483a3c6
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Mon Aug 31 19:00:05 2026 +0200
renderer/native: Don't keep around detached onscreens in power saving
clear_detached_onscreens was previously called only from
meta_renderer_native_post_mode_set_updates (and
meta_renderer_native_dispose, which is called only on shutdown), which
isn't called during power saving. This resulted in the
detached_onscreens list and corresponding GPU memory usage growing
unlimited e.g. due to hotplug events during power saving.
Fix it by calling clear_detached_onscreens from
on_power_save_mode_changed when entering power saving, and by bailing
from maybe_detach_onscreens while in power saving. The purpose of the
detached_onscreens list is to avoid drmModeRmFB implicitly turning off
the KMS plane and potentially even CRTC, which isn't necessary during
power saving, since they are intentionally off anyway.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4101
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/5008
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5285>
(cherry picked from commit af926cffa0702d1fbd0f2b87f9adbfcb8be0e9f6)
commit a48766034d6cc8f843e0d439776c94b2879f1dac
Author: Conn O'Griofa <connogriofa@gmail.com>
Date: Sat Aug 29 02:44:04 2026 +0100
stream-source: Set min range of max framerate to variable
!4798 introduced a change that allows negotiation of the PipeWire
session without a maxFramerate parameter, but breaks the possibility
of variable rate (0/1) when streaming to a real or virtual monitor that
does have a refresh rate.
This is relevant for Sunshine game streaming software; when attempting
to negotiate a variable rate, the maxFramerate will be constrained to
the host's refresh rate due to spec->frame_rate being filled via
meta_stream_source_monitor_get_specs() with a non-zero value for
frame_rate, as users will typically be streaming from a real monitor.
The issue with maxFramerate being constrained is that mutter's pacing
is very poor, especially when MESA_VK_WSI_PRESENT_MODE is set to anything
besides fifo (vsync on) on the host, and even if the game itself is
limited to to screen's refresh rate via software. On a 60fps stream,
non-fifo modes show an average incoming framerate closer to 58fps
(with some occasional low drops to the 30-40s), and fifo/vsync mode
remain much closer to the target, but still exhibits some minor stuttering.
I verified that we are not losing buffers by tracking incoming pw seq
metadata - there are no discontinuities, so mutter is simply not pushing
enough frames to reach the target framerate.
By allowing variable rate negotiation, Sunshine's own pacing produces
much smoother capture performance for all conditions (fifo/vsync or
otherwise).
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5278>
(cherry picked from commit a11392612b87e48614fbed9bec8280f825dea2f9)
commit e24ba78cab1a1cf42557672e3f68290b1325d2d3
Author: Pavel Ondračka <pavel.ondracka@gmail.com>
Date: Thu Aug 27 15:25:48 2026 +0200
shaped-texture: Disable blending for opaque regions
The opaque-region path is intended to avoid framebuffer blending, but
commit e5542c3210 removed the explicit no-blend state while changing the
layer combine function to REPLACE. The combine function controls how a
fragment is produced but it does not disable blending. So RGBA window
textures still take the blended path even for client-declared opaque
regions.
Restore the explicit fixed-function blend state while retaining the
simpler REPLACE combine shader.
Performance was measured with RV370/r300 driver at 1920x1080. Five
maximized Wayland windows were created with gnome-shell-perf-helper.
After a warm-up cycle, the overview was shown and hidden repeatedly and
frame presentations were measured (with background rendering disabled to
remove r300-specific unrelated bottleneck). Mean effective presentation
rate over the measured interval improved from 32.2 to 35.8 FPS (+11.1%)
while missed vblanks fell from 72.0 to 60.75 (-15.6%). With llvmpipe and
normal background rendering, delivery was within one frame but Shell
all-thread CPU time was reduced by 8%.
Fixes: e5542c3210 ("shaped-texture: Use the REPLACE combine function on opaque areas")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4995
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5274>
(cherry picked from commit d5e397c2d4f5c35b648fc52edfac2228127e89fd)
commit 13dea059c5c8e831b533838adcdf9bffd9ede15e
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Thu Sep 3 11:53:11 2026 +0200
tests/wayland: Use meta_wait_for_effects in fullscreen reftest
If there are no effects in progress, on_effects_completed may never be
called, resulting in a hang.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5292>
(cherry picked from commit 511f7985cc12b3486a4c919e22523df84924ac01)
commit 7d0de0723686cae57630eca7c9865e012e920b2a
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Sep 2 18:31:22 2026 +0200
tests/wayland: Use meta_wait_for_effects in stable rounding reftest
If there are no effects in progress, on_effects_completed may never be
called, resulting in a hang.
This will hopefully fix the test randomly timing out in the
installed-tests-mutter CI job.
v2:
* Use meta_wait_for_effects. (Jonas Ådahl)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5292>
(cherry picked from commit b75aeee08c926baf6a62abd94b01b7d3d6a689e0)
commit d1c518379736432f6f56ad1b32a09c90f5ae730b
Author: Yella Ramya Krishna <ramya.krishna.yella@intel.com>
Date: Tue Aug 11 15:50:16 2026 +0530
backends/native: Increase fallback mode refresh rate tolerance to 0.5 Hz
The previous 0.1 Hz tolerance was too tight, causing most
supported modes to be filtered out. Widen it to 0.5 Hz so that all
supported fallback resolutions are listed.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4956
Signed-off-by: Yella Ramya Krishna <ramya.krishna.yella@intel.com>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5238>
(cherry picked from commit 92ff60c39ab9bd509017dfd4c82e60c7f13574af)
commit c07b328f90f9af117510057fcd9d68f6b81c20ce
Author: Tyler Schicke <tschicke@nvidia.com>
Date: Tue Aug 11 17:48:21 2026 -0700
compositor-view/native: Move onscreen secondary_gpu check earlier
The secondary gpu check from commit 2853853c09 only depends on the
onscreen_native, not the scanout or surface, so it can be done in
find_scanout_candidate instead. This avoids extra work that would otherwise be
done just to get to meta_onscreen_native_is_buffer_scanout_compatible and
realize that the onscreen doesn't support direct scanout.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5250>
(cherry picked from commit a22902abed8e107cce86ad2c46719d4d24b1a5fa)
commit 699b19f968258c5825408563adcb237e78066948
Author: Tyler Schicke <tschicke@nvidia.com>
Date: Fri Jul 17 20:56:04 2026 -0700
onscreen/native: Handle cross GPU buffer scanout
To test if a buffer can be used for direct scanout, a test commit is done with
the framebuffer ID of the buffer to be checked. This framebuffer ID is scoped to
the DRM device that the framebuffer belongs to, however when doing the test
commit, it is checked on the scanout DRM device. On systems with two GPUs, with
one display plugged into each GPU, it is possible for a buffer rendered on GPU A
to try to be scanned out on GPU B. In this case, the FB ID from GPU A will be
used in the test commit on GPU B, which is invalid. Usually this test commit
will fail and the compositing fallback path will be used, but in the worst case
the FB ID from GPU A collides with an FB ID from GPU B, and the FB ID on GPU B
is able to do direct scanout on GPU B. If this happens, the test commit will
pass for a different surface than was being queried, and the direct scanout path
will be taken, causing an incorrect and unrelated buffer to be scanned out on
GPU B.
Fix this by adding a check to the scanout compatibility test path to check if
the buffer is from a different GPU than the onscreen. Since MetaDrmBuffers for
client buffers are currently always created for the primary GPU, this can be
done by checking if the onscreen is for a secondary GPU.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5219>
(cherry picked from commit 2853853c0923ee878f66f7593dfb951ca417532c)
commit fcfe47c15277f90c28aa9b3bdd8e9da6516016c8
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Wed Aug 5 14:47:02 2026 +0200
tests/cogl/conform: Fix some leaks
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5225>
(cherry picked from commit 3a0d74d9fb6b25351610ec3d04da19210f2c3e21)
commit 7c9072413dffa644f73b31d1c07d53f1322dbaed
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Thu Aug 6 11:07:37 2026 +0200
cogl/context: Don't leak the current and stencil pipelines
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5225>
(cherry picked from commit f44ae9ef9656afe0dd3a07a3d427140a339b3782)
commit 225298b8ff154389951649af7436eba857b2a604
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Wed Aug 5 14:46:10 2026 +0200
cogl/pipeline-cache: Dispose cached pipelines before the cache
This avoids interdependent pipelines to look up each other's cache
entries when the cache entries are already gone.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5225>
(cherry picked from commit a55301ff1cbe96436f2156f350461d93a93e91d8)
commit a57e8830ca327ab90be80f4937588b8af24250c5
Author: Sebastian Keller <skeller@gnome.org>
Date: Sat Feb 28 17:55:05 2026 +0100
cogl/pipeline-layer: Fix big_state leak
The state of `differences` at dispose time is not necessarily indicative
of whether the layer has had a `big_state` allocated in the past.
This can happen due to the various `cogl_pipeline_set_layer_*` functions
that might modify the current layer to stop being the authority for a
given state. This removes the state from `differences`, but does not
remove the `big_state`, so by the time the layer is disposed, the
condition will not cause `big_state` to be freed.
This fixes the leak by checking whether `big_state` has been allocated
rather than whether it was needed for the current state differences.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4934>
(cherry picked from commit df66795009092fd88d3384d261169921c86839d9)
commit a7c911159b4dd4eef4442be295c3ff6373ceedc8
Author: Christian Glombek <c.glombek@cosa.systems>
Date: Mon Jul 6 03:53:49 2026 +0200
color-profile: Plug CdProfile reference leak on finalize
cd_client_find_profile_finish() returns a full reference, so the
profile looked up during finalize in order to be deleted from colord
was leaked.
This went unnoticed so far, but with device profiles now also being
generated for monitors without an EDID, the lookup runs during the
teardown of most tests and makes LeakSanitizer abort otherwise
unrelated ones.
Fixes: cc84a45b56 ("color-profile: Create colord profiles")
Assisted-By: Claude Fable 5
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4961>
(cherry picked from commit bab5fae212a09f0b2cc8f879261e8954a0c6073a)
commit 2a65d1c4b84289c8c917abf42608e18845848821
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed Sep 9 19:55:31 2026 +0200
wayland/color-management: Fix lifetime of ICC image description
Instead of keeping the ICC creator alive for longer than its resource,
we use the MetaWaylandImageDescription that we need to create before the
async process starts anyway.
This requires the ImageDescription object to be ref-counted because both
the resource and the async process can each happen before one another.
That change then also makes it easy to actually set the resource to NULL
when it goes away, which previously would just be dangling pointer.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5313>
(cherry picked from commit 86141ab75b23f10f8b79a2d5fda1d4c1d20c61e2)
commit efe3822e42a16802808d617905ef060744245e55
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed Sep 9 19:50:34 2026 +0200
wayland/color-management: Use a single image desc for ICC creation
Instead of creating two MetaWaylandImageDescription objects, create one,
keep it in the uninitialized state, and then set_ready or set_failed
when we're done with async reading of the ICC file.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5313>
(cherry picked from commit 8459ad1aeac554caa71053d0316af7c69f2f057c)
commit 414da34cfe7864670255fcb9143aee29cbbc5d22
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed Sep 9 19:48:10 2026 +0200
wayland/color-management: Add an initial image description state
The image descriptions (e.g. the ICC one) become ready asynchronously
and exist in this state until they become either ready or failed. This
makes that initial state explicit.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5313>
(cherry picked from commit eead94c544a426ee2bde7c70fec946b42369c054)
commit bd7382a8ba285b6bab7f42dafcfbc74d0fcb2ffe
Author: Sebastian Keller <skeller@gnome.org>
Date: Thu Aug 27 23:10:11 2026 +0200
core/session-manager: Fix hash table leak
The result of `gvdb_hash_table_new()` is transfer full.
976 (96 direct, 880 indirect) bytes in 1 blocks are definitely lost in loss record 19,526 of 20,220
at 0x4875826: malloc (vg_replace_malloc.c:447)
by 0x5034E45: g_malloc (gmem.c:100)
by 0x5016216: g_hash_table_new_full (ghash.c:1029)
by 0x56DD283: gvdb_hash_table_new (gvdb-builder.c:76)
by 0x55EB76B: snapshot_gvdb_recursively (meta-session-manager.c:370)
by 0x55EBBC6: meta_session_data_save (meta-session-manager.c:432)
by 0x55EC2A4: meta_session_manager_save_sync (meta-session-manager.c:535)
by 0x55E4DF3: meta_context_main_finalize (meta-context-main.c:435)
by 0x4F08F33: g_object_unref (gobject.c:4910)
by 0x403A09: main (main.c:731)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5275>
(cherry picked from commit fd613e79b8d35880aa8c134088d822eec4de11a1)
commit 63ab173a224b5bd7dd249a5534a39ccbe2c62d90
Author: muzaffarmhd <mdmuzaffarprof@gmail.com>
Date: Mon Mar 16 10:38:15 2026 +0530
backends: Prevent modifier release from stopping key repeat
- On key release, only cancel the repeat if the released key is the one
currently driving the repeat.
- If the pressed key is non-repeating, return without disturbing the
ongoing repeat.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/4675
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4974>
(cherry picked from commit 3fe9b5fb2b3f14698e1880336ea57af023ec09cf)
commit 49a543dad839b6e8a77020e5466ee987746e4eed
Author: Toluwaleke Ogundipe <anonymoux47@gmail.com>
Date: Sun Aug 9 23:01:23 2026 +0100
stream-source/monitor: Clean up `ensure_blending_pipeline()`
- Remove unused variable.
- Add some whitespace for clarity.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5237>
(cherry picked from commit fdf9e3986331bdd7a9b91e4f478e80d68ecfad52)
commit b409822e2791cedf30e20ff578beaddab685551e
Author: Toluwaleke Ogundipe <anonymoux47@gmail.com>
Date: Sun Aug 9 22:55:15 2026 +0100
stream-source/monitor: Fix framebuffer/pipeline leaks
Do not leak the blending framebuffer and pipeline.
`g_set_object()` takes its own ref, so we must release our own.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5237>
(cherry picked from commit eff67640a892115661e1a13262ffd32728643bac)
commit 817424e85c3c4ae1a242978c34d210c6fc7b4c0c
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Fri Aug 28 15:13:50 2026 +0200
stream-source/monitor: Fix direct scanout handling without dma-buf
before_stage_painted needs to ensure a frame will be recorded, since
stage_painted isn't called with direct scanout.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/3903
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5276>
(cherry picked from commit 2021ac0c71bf395b3248d35854308961cb9aab14)
commit fdf37389dc6c7327884def1dddd2930d99a1f76b
Author: Gamblit <gnome@gamblit.org>
Date: Mon Jul 27 00:12:27 2026 -0500
backend/native Do not keep references to offscreens on detach
Offscreen virtual CRTCs are never scanned out and retaining them creates a VRAM leak.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5197>
(cherry picked from commit 82ad62795fc72ca5262681ffe100f21534348a58)
commit 08dcb448b39797ad03a6381901a6c000b2424efe
Author: Nathan Saslavsky <nathan.saslavsky@shotover.com>
Date: Thu Aug 20 18:02:01 2026 -0600
tests/wayland: Add xdg-foreign imported parent-of destruction test
Unmaps the child surface, destroys the import referencing it, then destroys
the child.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5041>
(cherry picked from commit 6b22394ef3d7717a315d2db1178a0cc0f1637a70)
commit e594b455646133299377a4f5ee8f5292f226db81
Author: Nathan Saslavsky <nathan.saslavsky@shotover.com>
Date: Tue Aug 18 13:19:55 2026 -0600
wayland/xdg-foreign: Disconnect parent-of handler when the child unmaps
imported_parent_of_unmapped() cleared imported->parent_of but left the
handler connected, so the import was freed with it still attached.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5041>
(cherry picked from commit 2a34c964df52fa7e607231763b733bf9cd1c9db6)
commit d0ea1328a9f36e05a21262f12bbd22a351aea545
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Wed Aug 19 14:57:41 2026 +0200
wayland/xdg-shell: Unset the 'resizing' toplevel state when drag ends
Otherwise clients will consider them being in the 'resizing' state until
some other unrelated change sends a new configure event without the said
state included.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4986
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5256>
(cherry picked from commit b235dc839190237a86ef7a85f10c28a439e6c98a)
commit a82a1a0312ec97d1cbec8dff74315db4b4ca27b5
Author: Jonas Ådahl <jadahl@gmail.com>
Date: Wed Aug 19 14:57:13 2026 +0200
window-drag: Add 'is_ending()' state method
This will be true when the drag is ending, which will be useful in the
next commit.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5256>
(cherry picked from commit fd1ce384329680a634144362350e661e5b3e4457)
commit e15724b7951fa20631aab5cceea220512dc722c3
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Aug 19 17:46:34 2026 +0200
onscreen/native: Report buffer device file path if ensure_fb_id fails
If the onscreen is for a secondary GPU, the buffer device differs from
the render device. Reporting the latter was confusing.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5255>
(cherry picked from commit de8aea793f37d0df78b7668c4f379f65f9adb4ec)
commit e534f361dec58717cbad71ac532a741bd395c312
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Aug 19 17:33:44 2026 +0200
onscreen/native: Ensure KMS FB in create_secondary_gpu_buffer
If creating a KMS FB fails, fall back to a different format. If we hit
this later in maybe_post_next_frame, we'd be dead in the water.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4983
v2:
* Use g_autoptr for buffer_gbm. (Jonas Ådahl)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5255>
(cherry picked from commit 7f33dc24dca8f6ec01903a1039381f0c348b834f)
commit 54b57a25e421292735636e275ca5d510ee5188ef
Author: Victor C. <34163765+vicajilau@users.noreply.github.com>
Date: Thu Aug 20 06:37:50 2026 +0200
tests/stage-view: Check offscreen effects across resource scale changes
Move a container holding an offscreen-redirected actor from a 1.5 scaled
view to an unscaled one. The actor's own allocation never changes, so it
never becomes dirty and the effect takes its cached texture path across
the resource scale change, which is what made it paint at the wrong
size.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5233>
(cherry picked from commit 5889d10cad85a0b8026c1c16355a4f34eece80df)
commit dcc9200ec4d2d9ec27c4f8e09662a8462e0f1896
Author: Victor C. <34163765+vicajilau@users.noreply.github.com>
Date: Thu Aug 20 06:37:50 2026 +0200
clutter/offscreen-effect: Invalidate cached fbo on resource scale change
The fbo is sized using the ceiled resource scale in pre_paint(), while
paint_texture() undoes that scaling using the scale current at paint
time. Nothing forces a re-render when the actor's resource scale
changes, and clutter_offscreen_effect_paint() reuses the cached fbo
contents whenever the actor is not dirty, so the cached texture ends up
painted at the wrong size.
An actor can change resource scale without ever becoming dirty, by being
moved by an ancestor across stage views with differing ceiled scales.
A dock sliding out of a 125% monitor into a neighbouring 100% one hits
exactly that: the texture rendered at ceiled scale 2 gets painted with
unscale 1/1, comes out twice its size, and spills back over the monitor
edge until something dirties the actor again.
Add a "real-resource-scale-changed" signal to ClutterActor, emitted for
every change of the resource scale rather than only for those changing
its ceiling, and have ClutterOffscreenEffect drop its offscreen when the
actor it is attached to emits it.
Tracking the unceiled scale also covers the pipeline filter, which is
picked from fmodf (resource_scale, 1.0) and would otherwise keep a stale
value for a clean actor whose scale changed within the same ceiling.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/4958
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5233>
(cherry picked from commit 0f3e15e17150438becd2b91adf1e3bcf96edd736)
commit bd90edfcdaf5846e35a523b4ed5d315d34bd45a5
Author: Boogie61 <muhammetali47961@gmail.com>
Date: Thu Aug 6 22:56:33 2026 +0300
output: Don't declare a mastering display luminance range
Filling in the mastering display metadata was meant to describe the
volume the frames are produced in, and the luminance range came along
with the rest of that description. It turns out to be the part that
hurts. The PQ default range says the content was mastered on a 10000
nit display, and sinks that tone map on their own compress against that
figure. Since 50.4 that shows up as desaturated, low contrast content
with HDR enabled on a GIGABYTE MO34WQC, a Dell U2723QE, a BenQ PD2706UA
and an LG UltraGear, on both AMD and NVIDIA.
The chromaticity is the part that was missing. With the primaries and
the white point kept and both luminance fields left at zero, the panel
from #4937 is still correct here and the BenQ above is correct again,
so nothing seen so far needs a luminance figure. What is left describes
the chromaticity the frames are produced in and claims nothing about how
bright they are.
Fixes: fa6b3575f4e1 ("output: Fill in mastering display metadata for HDR output")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4952
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5230>
(cherry picked from commit 35eda8a55e811aa0086fd2b5a33be9e5da9a0b72)
commit e58c910f23fc40c4ba8b6040be1f022887612aad
Author: liuyingjie <yingjie.liu@spacemit.com>
Date: Thu Aug 6 14:10:50 2026 +0800
backends: Clear is_primary on non-primary logical monitors
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5228>
(cherry picked from commit b59dc860bb7eb0283b576e74a24e61cdd9eba068)
commit 93efa25a3a0b5ebc4b9d47485819054c01bd250f
Author: mohansur <MohanSundaram.R@amd.com>
Date: Tue Aug 4 20:59:04 2026 +0530
kms/impl-device-simple: Report overlay plane assignment as failed
The overlay case in process_plane_assignment() sets error feedback but
returns TRUE. The caller only reads feedback on the FALSE path, so the
feedback leak and the update reports success for a plane
that was never programmed.
Return FALSE, routing the overlay onto the existing failure path where
the caller frees the feedback and honours ALLOW_FAIL plane flag.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/4948
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5222>
(cherry picked from commit 04c916b56262cbe2888e532b7352c8978a3f680a)
commit d4651251582e29d83f71e8e3cb64be07644d6150
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Aug 12 17:44:24 2026 +0200
color-device: Fix colorimetry primaries leak in update_color_state
Noticed in valgrind output:
==1154444== 224 bytes in 7 blocks are definitely lost in loss record 10,990 of 11,290
==1154444== at 0x484B7D8: malloc (vg_replace_malloc.c:447)
==1154444== by 0x4CB3DD1: g_malloc (gmem.c:100)
==1154444== by 0x4A3E04E: get_color_metadata_from_monitor (meta-color-device.c:716)
==1154444== by 0x4A3E262: update_color_state (meta-color-device.c:758)
==1154444== by 0x4A4059A: do_update (meta-color-device.c:1553)
==1154444== by 0x4A40615: meta_color_device_update (meta-color-device.c:1568)
==1154444== by 0x4A410DD: update_device_properties (meta-color-manager.c:266)
==1154444== by 0x4A4111B: meta_color_manager_monitors_changed (meta-color-manager.c:274)
==1154444== by 0x4A75204: ensure_monitor_color_devices (meta-monitor-manager.c:1283)
==1154444== by 0x4A75267: meta_monitor_manager_notify_monitors_changed (meta-monitor-manager.c:1300)
==1154444== by 0x4A7B142: meta_monitor_manager_rebuild (meta-monitor-manager.c:4139)
==1154444== by 0x4BC7F62: meta_monitor_manager_native_apply_monitors_config (meta-monitor-manager-native.c:305)
v2:
* Initialize the colorimetry struct to 0. (Sebastian Wick)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5239>
(cherry picked from commit 41a882845a6b116af12b487bc1b7b235e689af87)
commit fd343c304be32d3fb3cfd634b45af452757d59c7
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Thu Jul 30 01:15:15 2026 +0200
clutter/color-utils: Add clutter_colorimetry_clear and g_auto support
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5208>
(cherry picked from commit 940fcf5361ddeadd439b492b6b733deb4bd8ac58)
commit 7423ae82e3816925da1dc6cd67789668d4e52578
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Fri Jul 31 15:03:23 2026 +0200
DisplayConfig: Document the SDR Native color mode
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5208>
(cherry picked from commit 445b8b8a419773da32e98a6d3fd2c2809d281a7c)
commit 2405a1fb47fc5d014f5ebe0d4d05681cd724f672
Author: Sebastian Wick <sebastian.wick@redhat.com>
Date: Thu Jul 30 20:05:39 2026 +0200
clutter/stage-view: Invalidate viewport when invalidating offscreen
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5208>
(cherry picked from commit 525644ab1950c274dc462b651d35209d93db9776)
commit 260a1bfc0aac963d6d2f31f77fc0a45b497c371b
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Aug 12 12:28:09 2026 +0200
backends/native: Fix MetaPointerConstraintImpl leak
set_pointer_constraint uses g_set_object, which takes a reference on
the MetaPointerConstraintImpl passed in, so
meta_backend_native_set_pointer_constraint needs to drop the original
reference.
Found by inspection, confirmed with valgrind:
==1122581== 256 (128 direct, 128 indirect) bytes in 2 blocks are definitely lost in loss record 11,023 of 11,265
==1122581== at 0x4852DC3: calloc (vg_replace_malloc.c:1616)
==1122581== by 0x4CB2E29: g_malloc0 (gmem.c:133)
==1122581== by 0x4FDF6A5: g_type_create_instance (gtype.c:1882)
==1122581== by 0x4FC351E: g_object_new_internal.part.0 (gobject.c:2671)
==1122581== by 0x4FC4B7D: g_object_new_internal (gobject.c:2668)
==1122581== by 0x4FC4B7D: g_object_new_with_properties (gobject.c:2833)
==1122581== by 0x4FC5AB0: g_object_new (gobject.c:2481)
==1122581== by 0x4BF4E07: meta_pointer_constraint_impl_native_new (meta-pointer-constraint-native.c:700)
==1122581== by 0x4BB0C8D: meta_backend_native_set_pointer_constraint (meta-backend-native.c:407)
==1122581== by 0x4A38181: meta_backend_set_client_pointer_constraint (meta-backend.c:1857)
==1122581== by 0x4B57E73: meta_pointer_confinement_wayland_update (meta-pointer-confinement-wayland.c:87)
==1122581== by 0x4B57FB3: meta_pointer_confinement_wayland_enable (meta-pointer-confinement-wayland.c:137)
==1122581== by 0x4B7F8B8: meta_wayland_pointer_constraint_enable (meta-wayland-pointer-constraints.c:403)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5239>
(cherry picked from commit fb9aabcbf35754077536078938160bcdc3d6f5e9)
commit 3bb5de5963cc2f70c62c6ca38b489cddb340cd8a
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Wed Aug 12 11:53:47 2026 +0200
stream-source-monitor: Fix blending color state leak
clutter_color_state_get_blending transfers the returned
ClutterColorState reference to the caller, so it needs to be disposed
after use.
Found by inspection, confirmed indirectly by attaching gdb and setting a
watchpoint on the GObject::ref_count field of the object returned by
clutter_color_state_get_blending. Without this fix, every
meta_stream_source_monitor_record_to_framebuffer call increments the
reference count. With this fix, the reference count always goes back
down to 1. (This is the case where clutter_color_state_get_blending just
returns a reference to the color state passed to it)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5239>
(cherry picked from commit e271b6c20d299f5249686e8d53ce44c0fb834fcb)
commit 11597d052d88d8dba90b420d95e96e81b0ea4381
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Thu Aug 6 18:27:12 2026 +0200
renderer/native: Don't ensure GPU data when asking for gbm_device
Not necessary anymore, and not desirable, because it would create a
MetaRenderDevice which wouldn't get disposed afterwards for a secondary
GPU with no enabled displays.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5229>
(cherry picked from commit ba571cd542717dbefd8cd5ccf2d8cc045048679f)
commit 3fe3a8b7c491933c67fb98528ab0449221a3cbfb
Author: Michel Dänzer <mdaenzer@redhat.com>
Date: Thu Aug 6 18:16:47 2026 +0200
cursor-renderer/native: Maybe defer HW cursor support initialization
If meta_renderer_native_get_gpu_data returns NULL.
Try again after the monitor configuration changed.
This avoids creating a MetaRenderDevice for a secondary GPU with no
enabled displays from init_hw_cursor_support, which wouldn't get
disposed afterwards.
v2:
* Use hash table for priv->deferred_hw_cursor_init. (Jonas Ådahl)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5229>
(cherry picked from commit 6f93ce2e9fd00c125a326bf0e87c8bce55715d4c)
commit 36174d2833447ce5dc8fae9b31183a8b47462f91
Author: Toluwaleke Ogundipe <anonymoux47@gmail.com>
Date: Sun Aug 9 09:57:44 2026 +0100
clutter/stage-view: Fix offscreen pipeline leak
`g_set_object()` takes its own ref, so we must release our own.
This was missed in 40eb77cb9797aef6c439bc5283a085beb1618b60.
Fixes: a91fd4a72cd1bd0d985b3c12ce020f64d71810af
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5235>
(cherry picked from commit cccc430b3500a79678c50f41191911b3e856ccdd)
Among the 5 debian patches available in version 50.4-1 of the package, we noticed the following issues: