diff --git a/src/compositor/meta-compositor-view-native.c b/src/compositor/meta-compositor-view-native.c --- a/src/compositor/meta-compositor-view-native.c +++ b/src/compositor/meta-compositor-view-native.c @@ -289,9 +289,11 @@ find_scanout_candidate (MetaCompositorView *compositor_view, return FALSE; if (!meta_stage_view_is_cursor_overlay_inhibited (view) && + !meta_onscreen_native_is_tearing_enabled ( + META_ONSCREEN_NATIVE (framebuffer)) && surface_actor_has_overlapping_cursor_overlays (compositor, compositor_view, surface_actor)) { meta_topic (META_DEBUG_RENDER, "No direct scanout candidate: overlapping software cursors"); diff --git a/src/meson.build b/src/meson.build --- a/src/meson.build +++ b/src/meson.build @@ -1077,5 +1077,6 @@ wayland_protocols = [ ['single-pixel-buffer', 'staging', 1, ], ['tablet', 'stable', 2, ], + ['tearing-control', 'staging', 1, ], ['text-input-unstable-v3', 'private', ], ['viewporter', 'stable', ], ['xdg-activation', 'staging', 1, ], diff --git a/src/wayland/meta-wayland-dma-buf.c b/src/wayland/meta-wayland-dma-buf.c --- a/src/wayland/meta-wayland-dma-buf.c +++ b/src/wayland/meta-wayland-dma-buf.c @@ -630,11 +630,22 @@ has_modifier (GArray *modifiers, } #ifdef HAVE_NATIVE_BACKEND +static gboolean +async_supports_modifier (MetaKmsPlane *plane, + uint32_t drm_format, + uint64_t drm_modifier) +{ + GArray *async_modifiers = + meta_kms_plane_get_async_modifiers_for_format (plane, drm_format); + return async_modifiers && has_modifier (async_modifiers, drm_modifier); +} + static gboolean crtc_supports_modifier (MetaCrtcKms *crtc_kms, uint32_t drm_format, - uint64_t drm_modifier) + uint64_t drm_modifier, + gboolean is_async) { MetaKmsPlane *plane = meta_crtc_kms_get_assigned_primary_plane (crtc_kms); GArray *crtc_modifiers;