89 lines
3.6 KiB
Diff
89 lines
3.6 KiB
Diff
|
From 9b44ebf3269a7838d2288753dd66d48ebce8f8e2 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||
|
Date: Thu, 13 Feb 2025 17:36:10 +0100
|
||
|
Subject: [PATCH] cursor-renderer/native: Fix crash with
|
||
|
MUTTER_DEBUG_DISABLE_HW_CURSORS=1
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Don't try to realize the cursor sprite for the HW cursor when it's set.
|
||
|
|
||
|
v2:
|
||
|
* Refactor is_hw_cursor_supported helper out of
|
||
|
realize_cursor_sprite_from_wl_buffer_for_crtc. (Jonas Ådahl)
|
||
|
v3:
|
||
|
* Keep meta_crtc_native_is_hw_cursor_supported check in
|
||
|
meta_cursor_renderer_native_update_cursor, to try and avoid
|
||
|
mysterious CI failure.
|
||
|
v4:
|
||
|
* Rename is_hw_cursor_supported → is_hw_cursor_available_for_gpu
|
||
|
and take a MetaGpuKms * parameter.
|
||
|
|
||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4272>
|
||
|
---
|
||
|
.../native/meta-cursor-renderer-native.c | 20 +++++++++++++++----
|
||
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||
|
index 2686e811b4..f0c373e7dc 100644
|
||
|
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||
|
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||
|
@@ -285,6 +285,19 @@ on_cursor_sprite_texture_changed (MetaCursorSprite *cursor_sprite,
|
||
|
invalidate_cursor_gpu_state (cursor_renderer, cursor_sprite);
|
||
|
}
|
||
|
|
||
|
+static gboolean
|
||
|
+is_hw_cursor_available_for_gpu (MetaGpuKms *gpu_kms)
|
||
|
+{
|
||
|
+ MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||
|
+
|
||
|
+ cursor_renderer_gpu_data =
|
||
|
+ meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||
|
+ if (!cursor_renderer_gpu_data || cursor_renderer_gpu_data->hw_cursor_broken)
|
||
|
+ return FALSE;
|
||
|
+
|
||
|
+ return TRUE;
|
||
|
+}
|
||
|
+
|
||
|
static gboolean
|
||
|
meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||
|
MetaCursorSprite *cursor_sprite)
|
||
|
@@ -316,6 +329,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||
|
MetaRendererView *renderer_view = META_RENDERER_VIEW (view);
|
||
|
MetaCrtc *crtc = meta_renderer_view_get_crtc (renderer_view);
|
||
|
MetaCrtcNative *crtc_native = META_CRTC_NATIVE (crtc);
|
||
|
+ MetaGpuKms *gpu_kms = META_GPU_KMS (meta_crtc_get_gpu (crtc));
|
||
|
ClutterColorState *target_color_state =
|
||
|
clutter_stage_view_get_output_color_state (CLUTTER_STAGE_VIEW (view));
|
||
|
CursorStageView *cursor_stage_view = NULL;
|
||
|
@@ -325,6 +339,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||
|
g_assert (cursor_stage_view);
|
||
|
|
||
|
if (!META_IS_CRTC_KMS (crtc) ||
|
||
|
+ !is_hw_cursor_available_for_gpu (gpu_kms) ||
|
||
|
!meta_crtc_native_is_hw_cursor_supported (crtc_native))
|
||
|
{
|
||
|
if (cursor_stage_view->has_hw_cursor)
|
||
|
@@ -1051,16 +1066,13 @@ realize_cursor_sprite_from_wl_buffer_for_crtc (MetaCursorRenderer *renderer
|
||
|
MetaCursorSprite *cursor_sprite = META_CURSOR_SPRITE (sprite_wayland);
|
||
|
MetaGpu *gpu = meta_crtc_get_gpu (META_CRTC (crtc_kms));
|
||
|
MetaGpuKms *gpu_kms = META_GPU_KMS (gpu);
|
||
|
- MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||
|
CoglTexture *texture;
|
||
|
uint width, height;
|
||
|
MetaWaylandBuffer *buffer;
|
||
|
struct wl_resource *buffer_resource;
|
||
|
struct wl_shm_buffer *shm_buffer;
|
||
|
|
||
|
- cursor_renderer_gpu_data =
|
||
|
- meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||
|
- if (!cursor_renderer_gpu_data || cursor_renderer_gpu_data->hw_cursor_broken)
|
||
|
+ if (!is_hw_cursor_available_for_gpu (gpu_kms))
|
||
|
return FALSE;
|
||
|
|
||
|
buffer = meta_cursor_sprite_wayland_get_buffer (sprite_wayland);
|
||
|
--
|
||
|
2.48.1
|
||
|
|