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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>