1833 Commits

Author SHA1 Message Date
Jonas Ådahl
d855623fb4 Replace HDR debug toggle with o.g.M.DisplayConfig API
HDR being enabled was controlled by toggling a property on
org.gnome.Mutter.DebugControl, which affected how the color space and
HDR metadata of the output was configured. Replace this with a higher
level MetaMonitor / MetaOutput level "color mode" enum, that is also
reflected in the monitor configuration API.

This enum is then used to derive the color space and HDR metadata at the
lower level where it matters. The ForceHDR debug control property is
still left there, as it only affects the color space and transfer
function of the view related to a monitor.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4192>
2025-02-01 22:46:09 +00:00
Jonas Ådahl
2fa0183a95 kms/connector: Add API to check color mode support
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4192>
2025-02-01 22:46:09 +00:00
Michel Dänzer
a211ed553b onscreen/native: Do not use modifiers if surface should be sharable
Importing a buffer allocated with a modifier into another GPU isn't
handled correctly yet in mutter. We'll want to fix that in the future,
for now just don't use modifiers in this case though, falling back to
GBM_BO_USE_LINEAR, to prevent issues due to mis-matched tiling
parameters.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3791
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4219>
2025-01-17 15:26:02 +00:00
Jonas Ådahl
902ea05fde cursor-renderer/native: Use g_warning() instead of meta_warning()
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4005>
2025-01-16 00:48:42 +00:00
Sebastian Wick
86a16c3cfd backend/native: Set static seat id for headless directly
This also changes the seat it for headless from seat0 to
meta-headless-seat0.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4022>
2025-01-15 22:58:32 +01:00
Sebastian Wick
d42b6fd1e1 backend/native: Set no-libinput seat flag in seat id switch statement
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4022>
2025-01-15 22:58:25 +01:00
Sebastian Wick
1f945691e7 launcher: Get the seat id from logind/dbus and drop fallbacks
The fallbacks were neccesarry for tests but we added some more advanced
logind mocking which will get us the right values from dbus. There is no
point in those fallbacks anymore.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4022>
2025-01-15 22:56:29 +01:00
Bilal Elmoussaoui
358d554a32 backends/virtual-input: Get ClutterSeat from the virtual input
Instead of using the default one from the ClutterBackend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4201>
2025-01-10 16:18:30 +00:00
Robert Mader
377532f2f5 onscreen/native: Set default color encoding and range values
In order to ensure consistent behavior with the composited path as well as across
different KMS drivers. In the future we'll want to use other values as well,
requested by client via the upcoming color representation protocol.

Note that right now KMS drivers default to different values. Most use BT709 and
narrow range, notably Intel and AMD, but some others do not.

BT709/narrow is arguably a much better default than BT601/narrow  as the former is
used for most contemporary video content and the later more for still images.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4204>
2025-01-09 15:28:25 +00:00
Robert Mader
5bb7a0f13e kms: Add support for color encoding and range plane properties
Which are required for correct YUV->RGB conversion. Note that encoding refers
to the matrix coefficients.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4204>
2025-01-09 15:28:25 +00:00
Bilal Elmoussaoui
4ee657e31f cogl/texture: Drop set_auto_mipmap vfunc
As it is only relavant for 2D textures.
Allows getting rid of the is-primitive property which was enforcing only 2D textures
can use the set_auto_mipmap function.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4200>
2025-01-02 18:04:27 +00:00
Gert-dev
dfa3755f55 drm-buffer-gbm: Cache EGLImages created during screen-casting
This consolidates duplicate code in meta_drm_buffer_gbm_blit_to_framebuffer
to use the newly added meta_drm_buffer_gbm_create_native_blit_image, which
also has the side-effect of caching creation of the EGLImage per GBM BO.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4027>
2025-01-02 16:59:00 +00:00
Gert-dev
ada199621c meta/egl-gbm: Use g_autofd to clean up BO FD automatically
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4027>
2025-01-02 16:59:00 +00:00
Gert-dev
ca7345588f meta/egl-gbm: Avoid using fixed size for number of planes
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4027>
2025-01-02 16:59:00 +00:00
Gert-dev
507409f5d0 onscreen/native: Cache created secondary GPU EGLImages in copy path
Creating an EGLImage is rather expensive and is taking the bulk of the
time the secondary GPU copy path is using for each frame. By caching
these per GBM BO we avoid this expensive recreation, which seems to
significantly improve FPS throughput in these scenarios, e.g. an
AMD or Intel iGPU with an NVIDIA dGPU.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4027>
2025-01-02 16:59:00 +00:00
Gert-dev
110bdf0e9f meta/renderer: Split up meta_renderer_native_gles3_blit_shared_bo
Split off meta_create_gbm_bo_egl_image from
meta_renderer_native_gles3_blit_shared_bo.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4027>
2025-01-02 16:59:00 +00:00
Michel Dänzer
23f3c17f0c kms/impl-device: Use deadline timer for all updates
Not with VRR though, because the deadline timer fires at most every 33ms
then.

Previously, the deadline timer was used only for cursor-only updates.
Using it for other updates means they pick up the latest cursor position
available at the deadline, resulting in the lowest possible input→output
latency for cursor movement.

TTBOMK this unlocks the full potential of the KMS thread given the
current atomic KMS API.

v2:
* Don't call meta_kms_update_merge_from with twice the same update
  pointer.
v3:
* Don't arm deadline timer if crtc_frame->pending_page_flip is true.
v4:
* Tweak want_deadline_timer indentation per check-code-style CI job.
v5:
* Also check crtc_frame->await_flush for want_deadline_timer.
v6:
* Tweak coding style to keep lines shorter. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Michel Dänzer
315dfaa5d4 kms/impl-device: Simplify meta_kms_impl_device_schedule_process logic
There's no need for a label.

No functional change intended.

v2:
* Keep early returns separate. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Michel Dänzer
0d7752a07d kms/impl-device: Move error handling into ensure_deadline_timer_armed
No functional change intended.

v2:
* Fix coding style per CI.
v3:
* Fix ensure_deadline_timer_armed parameter indentation. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Michel Dänzer
3353962c38 kms/impl-device: Move up ensure_deadline_timer_armed definition
Preparation for next commit, no functional change intended.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Michel Dänzer
37d1a20644 kms/impl-device: Use discard_update for pending_update as well
Previously it was just dropped on the floor with no feedback, which
could result in the main thread waiting for something which never
happens.

Fixes: 0d9fd1ead7a7 ("kms/impl-device: Destroy submitted update in disarm_all_deadline_timers")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Michel Dänzer
f8e8dad0f4 kms/impl-device: Refactor discard_update helper
No functional change intended.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Michel Dänzer
f8524159cc onscreen/native: Move discarded KMS update handling
To swap_buffer_result_feedback from page_flip_feedback_discarded. The
former is where META_KMS_ERROR_DISCARDED from disarm_all_frame_sources
gets handled here.

Fixes: af250506fbe8 ("kms/impl-device: Queue result when discarding submitted update")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3964>
2024-12-23 09:29:07 +00:00
Jonas Ådahl
aad237a04a renderer/native: Don't close DMA buf fds before handing them forward
We closed all the DMA buffer fds after creating the DMA buffer backed
CoglFramebuffer, which meant that the fds we passed to CoglDmaBufHandle
were already closed. This broke screen casting with DMA buffers.

Fixes: 8509b74532 ("Make DMA buffer allocation format and modifier aware")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4177>
2024-12-12 15:38:23 +00:00
Sebastian Wick
42ba494f07 backend/native: Remove meta_backend_native_get_launcher
We can go through MetaBackend to the launcher now and this commit
changes the last user over to it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:30:36 +01:00
Sebastian Wick
a4db61d3e4 backend/native: Remove meta_backend_native_get_seat_id
The last user of it was udev but it now goes through the launcher so we
can remove it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:30:36 +01:00
Sebastian Wick
e68728f151 udev: Create udev in MetaBackend
So we can use it for backlight control in both the native and X11
backends.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:30:35 +01:00
Sebastian Wick
15d4123bd1 udev: Move from backends/native/ to backends/
This makes it possible to use udev even for backends which are not
native. Specifically we want to start controling backlights in mutter
which has to happen for both native and X11.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:27:11 +01:00
Sebastian Wick
11b4de08c4 udev/native: Remove dependencies on the native backend
The generic backend now provides the launcher which is the last native
specific dependency. This makes it possible to move the udev component
to the generic backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:27:11 +01:00
Sebastian Wick
10cbda69e6 backend: Add pause/resume vfuncs to MetaBackend
For now we only pause/resume the rendering in the base class but in the
next few commits, we'll move udev from native to generic and need to
pause/resume it as well.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:26:23 +01:00
Sebastian Wick
30c6104620 backend: Create MetaLauncher in backend and not in backend native
It also adds a vfunc so the MetaBackend subclasses can add more
constraints on what the launcher must support.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:14:39 +01:00
Sebastian Wick
23c2c0853c launcher: Move from backends/native/ to backends/
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
2dd695e65f launcher: Move public functions to the bottom
As per mutter coding style.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
5d8d3df101 launcher: Fix a few formatting issues
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
1651ac8f2c launcher: Allow creating the launcher without taking session control
Currently only the native backend uses the launcher and it requires
being the session controler, so this commit should not change anything.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
9169ffade0 launcher: Add session-active property to decouple from backend native
By connecting to changes of the new property in backend native itself.
This removes the dependency on the native backend and allows us to move
it to the generic backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
6c5f552088 launcher: Turn MetaLauncher into a GObject
This will be useful later when refactoring MetaLauncher.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
9eb29974f1 launcher: Remove unused includes
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
15ca9a09b5 launcher: Use native char type and fix formatting
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Sebastian Wick
8e2e986eeb dbus-utils: Move from the backends/native/ to backends/
We will move the launcher to backends/ which has a dependency on
dbus-utils so let's also just move dbus-utils there.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
2024-12-12 15:12:36 +01:00
Jonas Ådahl
8fc1bddf3b cursor-renderer/native: Handle early cursor texture changes
We create the cursor view data when we update the cursor, but allow the
texture to be realized earlier than that. The texture change listener
invalidates the hw cursor validity state, but since it's initialized to
invalid, the hardware cursor will still be correctly handled.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3859>
2024-12-11 16:22:57 +00:00
Robert Mader
19669a3d9d cursor-renderer/native: Add support for viewports
[jadahl] Rework hotspot calculations

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3859>
2024-12-11 16:22:57 +00:00
Michel Dänzer
1e5a79451c kms/impl-device: Call drmModeFreePlaneResources
Fixes leak:

==9634== 60 (16 direct, 44 indirect) bytes in 1 blocks are definitely lost in loss record 8,198 of 13,049
==9634==    at 0x48489F3: calloc (vg_replace_malloc.c:1340)
==9634==    by 0x5DDCD29: drmModeGetPlaneResources (xf86drmMode.c:1243)
==9634==    by 0x4AD94C9: init_planes (meta-kms-impl-device.c:1010)
==9634==    by 0x4ADC7B5: meta_kms_impl_device_init_mode_setting (meta-kms-impl-device.c:2350)
==9634==    by 0x4AD27BC: meta_kms_impl_device_atomic_initable_init (meta-kms-impl-device-atomic.c:1416)
==9634==    by 0x4DD3B32: g_initable_new_valist (ginitable.c:249)
==9634==    by 0x4DD3C19: g_initable_new (ginitable.c:163)
==9634==    by 0x4ACEAE8: meta_create_kms_impl_device (meta-kms-device.c:662)
==9634==    by 0x4ACECD1: create_impl_device_in_impl (meta-kms-device.c:722)
==9634==    by 0x4B01837: meta_thread_impl_dispatch (meta-thread-impl.c:542)
==9634==    by 0x4B00D06: impl_source_dispatch (meta-thread-impl.c:175)
==9634==    by 0x4C5C81E: g_main_dispatch (gmain.c:3357)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4149>
2024-12-06 16:49:34 +00:00
Michel Dänzer
2c56c9a1da backends: Improve MetaCrtcMode lifetime management
The same MetaCrtcMode objects can be reached via the
MetaOutputInfo::modes array & MetaMonitorMode::crtc_modes arrays and via
the MetaGpuPrivate::modes list, so all of them need to hold their own
references.

In turn, those references need to dropped in meta_output_info_unref and
meta_monitor_mode_free. (meta_gpu_finalize is already dropping the
MetaGpuPrivate::modes list references)

Fixes leak:

==4092== 123 (32 direct, 91 indirect) bytes in 1 blocks are definitely lost in loss record 11,396 of 13,056
==4092==    at 0x4F81D57: g_type_create_instance (gtype.c:1929)
==4092==    by 0x4F64ABF: g_object_new_internal.part.0 (gobject.c:2606)
==4092==    by 0x4F676BA: g_object_new_internal (gobject.c:2923)
==4092==    by 0x4F676BA: g_object_new_valist (gobject.c:2945)
==4092==    by 0x4F67A0C: g_object_new (gobject.c:2418)
==4092==    by 0x4AB578B: meta_crtc_mode_virtual_new (meta-crtc-mode-virtual.c:51)
==4092==    by 0x4B081BB: meta_virtual_monitor_native_new (meta-virtual-monitor-native.c:83)
==4092==    by 0x4AC58CC: meta_monitor_manager_native_create_virtual_monitor (meta-monitor-manager-native.c:603)
==4092==    by 0x496803B: meta_monitor_manager_create_virtual_monitor (meta-monitor-manager.c:621)
==4092==    by 0x4A4A204: create_virtual_monitor (meta-screen-cast-virtual-stream-src.c:625)
==4092==    by 0x4A4A39D: ensure_virtual_monitor (meta-screen-cast-virtual-stream-src.c:663)
==4092==    by 0x4A4A461: meta_screen_cast_virtual_stream_src_notify_params_updated (meta-screen-cast-virtual-stream-src.c:684)
==4092==    by 0x4A568C5: on_stream_param_changed (meta-screen-cast-stream-src.c:1565)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4149>
2024-12-06 16:49:34 +00:00
José Expósito
64847aa50f onscreen/native: Simplify get_supported_kms_modifiers()
This code doesn't work like the comment suggest, it simply creates a
copy of the modifiers.

Remove the unused code.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4168>
2024-12-06 11:43:46 +00:00
Jonas Ådahl
8f557cdb29 renderer/native: Also request high priority secondary EGL context
We request a high priority context for the Cogl managed EGL context,
lets do the same for the one used for secondary GPU blits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2973>
2024-12-06 09:47:06 +00:00
Jonas Ådahl
c3cc1338ec renderer/native: Change an explicit unref to autoptr
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3900>
2024-12-05 19:12:09 +00:00
Jonas Ådahl
2205181da8 cogl/renderer: Add API to get the implicit modifier
This allows avoiding having to depend on libdrm in places that are
otherwise independent of the backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3900>
2024-12-05 19:12:09 +00:00
Jonas Ådahl
01dcec31b0 cogl/renderer: Add way to filter modifiers by external-only
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3900>
2024-12-05 19:12:09 +00:00
Jonas Ådahl
4bf04585d2 render-device/gdm: Make query format modifier filter loop more generic
This will allow adding more filters more easily.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3900>
2024-12-05 19:12:09 +00:00