diff options
-rw-r--r-- | .SRCINFO | 2 | ||||
-rw-r--r-- | PKGBUILD | 2 | ||||
-rw-r--r-- | mr1441.patch | 84 |
3 files changed, 45 insertions, 43 deletions
@@ -73,7 +73,7 @@ pkgbase = mutter-dynamic-buffering source = mutter-dynamic-buffering::git+https://gitlab.gnome.org/GNOME/mutter.git#tag=46.1 source = mr1441.patch b2sums = 4acd4a192455890b12b2fc9b6553ed65bd2176307cd6c6683fc2ab476b7fa88f4b5e507a1209b3e900c68d94768f3cf749b4f5d87d25300b33a112182c8a62a7 - b2sums = b85b4129a7e3c79a076650b804c01f801bdb89ce896546bdedb97e445b289ec2784f11bfd9a29d78e8830769938d42d108e7bdca9c97ec6fc867c2be53867a24 + b2sums = 1730136643b4158d6e0a0f642aa5976854017104cade4b8b64f6b94f7c9e1d20dbe8d5daee0178a9af8880d05e724c40d8615b67d265079d443777bff224724c pkgname = mutter-dynamic-buffering provides = mutter @@ -93,7 +93,7 @@ source=( 'mr1441.patch' ) b2sums=('4acd4a192455890b12b2fc9b6553ed65bd2176307cd6c6683fc2ab476b7fa88f4b5e507a1209b3e900c68d94768f3cf749b4f5d87d25300b33a112182c8a62a7' - 'b85b4129a7e3c79a076650b804c01f801bdb89ce896546bdedb97e445b289ec2784f11bfd9a29d78e8830769938d42d108e7bdca9c97ec6fc867c2be53867a24') + '1730136643b4158d6e0a0f642aa5976854017104cade4b8b64f6b94f7c9e1d20dbe8d5daee0178a9af8880d05e724c40d8615b67d265079d443777bff224724c') prepare() { cd "$srcdir/$pkgname" diff --git a/mr1441.patch b/mr1441.patch index 084815576a26..78cee91cce66 100644 --- a/mr1441.patch +++ b/mr1441.patch @@ -1,7 +1,7 @@ Author: Daniel van Vugt <daniel.van.vugt@canonical.com> Source: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441 -Commit: da8a124878f5549c253c9efcfa0a29d9d352688f -Rebase: Mon Mar 18 13:45:52 2024 +0800 +Commit: 745d25c4fc20e8bf474e00756fa93a0c63d3b816 +Rebase: Wed Apr 17 18:30:51 2024 +0800 diff --git a/clutter/clutter/clutter-frame-clock.c b/clutter/clutter/clutter-frame-clock.c index 93e4c93290..a6c7ecea21 100644 @@ -767,10 +767,10 @@ index 959a60533b..86d8ea2d5f 100644 +COGL_EXPORT unsigned int +cogl_onscreen_count_pending_frames (CoglOnscreen *onscreen); diff --git a/cogl/cogl/cogl-onscreen.c b/cogl/cogl/cogl-onscreen.c -index f4b460a83f..3e3f73a69f 100644 +index afb648bcd8..086be7ed7a 100644 --- a/cogl/cogl/cogl-onscreen.c +++ b/cogl/cogl/cogl-onscreen.c -@@ -511,6 +511,14 @@ cogl_onscreen_pop_head_frame_info (CoglOnscreen *onscreen) +@@ -515,6 +515,14 @@ cogl_onscreen_pop_head_frame_info (CoglOnscreen *onscreen) return g_queue_pop_head (&priv->pending_frame_infos); } @@ -863,10 +863,10 @@ index 7434014063..f6b19520be 100644 MetaKmsFlags flags, GError **error); diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c -index e40b03f3ea..9617d00161 100644 +index 1a31f04a16..9836663d0c 100644 --- a/src/backends/native/meta-onscreen-native.c +++ b/src/backends/native/meta-onscreen-native.c -@@ -75,7 +75,7 @@ typedef struct _MetaOnscreenNativeSecondaryGpuState +@@ -76,7 +76,7 @@ typedef struct _MetaOnscreenNativeSecondaryGpuState struct { MetaDrmBufferDumb *current_dumb_fb; @@ -875,7 +875,7 @@ index e40b03f3ea..9617d00161 100644 } cpu; gboolean noted_primary_gpu_copy_ok; -@@ -97,9 +97,13 @@ struct _MetaOnscreenNative +@@ -98,9 +98,13 @@ struct _MetaOnscreenNative struct { struct gbm_surface *surface; MetaDrmBuffer *current_fb; @@ -889,7 +889,7 @@ index e40b03f3ea..9617d00161 100644 } gbm; #ifdef HAVE_EGL_DEVICE -@@ -124,6 +128,16 @@ struct _MetaOnscreenNative +@@ -125,6 +129,16 @@ struct _MetaOnscreenNative gulong privacy_screen_changed_handler_id; gulong color_space_changed_handler_id; gulong hdr_metadata_changed_handler_id; @@ -906,7 +906,7 @@ index e40b03f3ea..9617d00161 100644 }; G_DEFINE_TYPE (MetaOnscreenNative, meta_onscreen_native, -@@ -131,44 +145,42 @@ G_DEFINE_TYPE (MetaOnscreenNative, meta_onscreen_native, +@@ -132,44 +146,42 @@ G_DEFINE_TYPE (MetaOnscreenNative, meta_onscreen_native, static GQuark blit_source_quark = 0; @@ -967,7 +967,7 @@ index e40b03f3ea..9617d00161 100644 } static void -@@ -206,7 +218,7 @@ meta_onscreen_native_notify_frame_complete (CoglOnscreen *onscreen) +@@ -207,7 +219,7 @@ meta_onscreen_native_notify_frame_complete (CoglOnscreen *onscreen) info = cogl_onscreen_pop_head_frame_info (onscreen); @@ -976,7 +976,7 @@ index e40b03f3ea..9617d00161 100644 _cogl_onscreen_notify_frame_sync (onscreen, info); _cogl_onscreen_notify_complete (onscreen, info); -@@ -242,6 +254,7 @@ notify_view_crtc_presented (MetaRendererView *view, +@@ -243,6 +255,7 @@ notify_view_crtc_presented (MetaRendererView *view, meta_onscreen_native_notify_frame_complete (onscreen); meta_onscreen_native_swap_drm_fb (onscreen); @@ -984,7 +984,7 @@ index e40b03f3ea..9617d00161 100644 } static void -@@ -291,15 +304,13 @@ page_flip_feedback_ready (MetaKmsCrtc *kms_crtc, +@@ -292,15 +305,13 @@ page_flip_feedback_ready (MetaKmsCrtc *kms_crtc, CoglFramebuffer *framebuffer = clutter_stage_view_get_onscreen (CLUTTER_STAGE_VIEW (view)); CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer); @@ -1001,7 +1001,7 @@ index e40b03f3ea..9617d00161 100644 } static void -@@ -349,7 +360,8 @@ page_flip_feedback_discarded (MetaKmsCrtc *kms_crtc, +@@ -350,7 +361,8 @@ page_flip_feedback_discarded (MetaKmsCrtc *kms_crtc, frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC; meta_onscreen_native_notify_frame_complete (onscreen); @@ -1011,7 +1011,7 @@ index e40b03f3ea..9617d00161 100644 } static const MetaKmsPageFlipListenerVtable page_flip_listener_vtable = { -@@ -410,18 +422,41 @@ custom_egl_stream_page_flip (gpointer custom_page_flip_data, +@@ -411,18 +423,41 @@ custom_egl_stream_page_flip (gpointer custom_page_flip_data, } #endif /* HAVE_EGL_DEVICE */ @@ -1057,9 +1057,9 @@ index e40b03f3ea..9617d00161 100644 apply_transform (MetaCrtcKms *crtc_kms, MetaKmsPlaneAssignment *kms_plane_assignment, @@ -521,13 +556,21 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen, - graphene_rect_t src_rect; - MtkRectangle dst_rect; - + switch (renderer_gpu_data->mode) + { + case META_RENDERER_NATIVE_MODE_GBM: - buffer = onscreen_native->gbm.next_fb; + g_set_object (&onscreen_native->gbm.posted_fb, + onscreen_native->gbm.next_fb); @@ -1082,7 +1082,7 @@ index e40b03f3ea..9617d00161 100644 &dst_rect); } else -@@ -915,12 +958,17 @@ static MetaDrmBufferDumb * +@@ -918,12 +961,17 @@ static MetaDrmBufferDumb * secondary_gpu_get_next_dumb_buffer (MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state) { MetaDrmBufferDumb *current_dumb_fb; @@ -1104,7 +1104,7 @@ index e40b03f3ea..9617d00161 100644 } static MetaDrmBuffer * -@@ -1253,10 +1301,17 @@ swap_buffer_result_feedback (const MetaKmsFeedback *kms_feedback, +@@ -1255,10 +1303,17 @@ swap_buffer_result_feedback (const MetaKmsFeedback *kms_feedback, g_warning ("Page flip failed: %s", error->message); frame_info = cogl_onscreen_peek_head_frame_info (onscreen); @@ -1125,7 +1125,7 @@ index e40b03f3ea..9617d00161 100644 } static const MetaKmsResultListenerVtable swap_buffer_result_listener_vtable = { -@@ -1277,30 +1332,35 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1279,32 +1334,37 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys; MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform; MetaRendererNative *renderer_native = renderer_gpu_data->renderer_native; @@ -1134,12 +1134,14 @@ index e40b03f3ea..9617d00161 100644 - MetaMonitorManager *monitor_manager = - meta_backend_get_monitor_manager (backend); MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); + MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state; MetaGpuKms *render_gpu = onscreen_native->render_gpu; MetaDeviceFile *render_device_file; ClutterFrame *frame = user_data; - MetaFrameNative *frame_native = meta_frame_native_from_frame (frame); - MetaKmsUpdate *kms_update; CoglOnscreenClass *parent_class; + gboolean create_timestamp_query = TRUE; gboolean egl_context_changed = FALSE; - MetaPowerSave power_save_mode; g_autoptr (GError) error = NULL; @@ -1170,7 +1172,7 @@ index e40b03f3ea..9617d00161 100644 secondary_gpu_fb = update_secondary_gpu_state_pre_swap_buffers (onscreen, rectangles, -@@ -1359,7 +1419,17 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1379,7 +1439,17 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, switch (renderer_gpu_data->mode) { case META_RENDERER_NATIVE_MODE_GBM: @@ -1189,7 +1191,7 @@ index e40b03f3ea..9617d00161 100644 if (onscreen_native->secondary_gpu_state) g_set_object (&onscreen_native->gbm.next_fb, secondary_gpu_fb); else -@@ -1373,6 +1443,9 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1404,6 +1474,9 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, #endif } @@ -1199,7 +1201,7 @@ index e40b03f3ea..9617d00161 100644 /* * If we changed EGL context, cogl will have the wrong idea about what is * current, making it fail to set it when it needs to. Avoid that by making -@@ -1382,12 +1455,78 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1413,12 +1486,78 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, if (egl_context_changed) _cogl_winsys_egl_ensure_current (cogl_display); @@ -1280,7 +1282,7 @@ index e40b03f3ea..9617d00161 100644 kms_update = meta_frame_native_ensure_kms_update (frame_native, kms_device); meta_kms_update_add_result_listener (kms_update, -@@ -1402,15 +1541,13 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1433,15 +1572,13 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, onscreen_native->crtc, kms_update, META_KMS_ASSIGN_PLANE_FLAG_NONE, @@ -1298,7 +1300,7 @@ index e40b03f3ea..9617d00161 100644 return; } -@@ -1430,8 +1567,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1461,8 +1598,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, kms_update = meta_frame_native_steal_kms_update (frame_native); meta_renderer_native_queue_mode_set_update (renderer_native, kms_update); @@ -1307,7 +1309,7 @@ index e40b03f3ea..9617d00161 100644 return; } else if (meta_renderer_native_has_pending_mode_set (renderer_native)) -@@ -1445,8 +1580,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1476,8 +1611,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, meta_frame_native_steal_kms_update (frame_native); meta_renderer_native_post_mode_set_updates (renderer_native); @@ -1316,7 +1318,7 @@ index e40b03f3ea..9617d00161 100644 return; } break; -@@ -1462,8 +1595,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1493,8 +1626,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, kms_update); meta_renderer_native_post_mode_set_updates (renderer_native); @@ -1325,7 +1327,7 @@ index e40b03f3ea..9617d00161 100644 return; } break; -@@ -1478,7 +1609,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1509,7 +1640,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, kms_update = meta_frame_native_steal_kms_update (frame_native); meta_kms_device_post_update (kms_device, kms_update, META_KMS_UPDATE_FLAG_NONE); @@ -1333,7 +1335,7 @@ index e40b03f3ea..9617d00161 100644 } gboolean -@@ -1549,7 +1679,7 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, +@@ -1580,7 +1710,7 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, g_warning ("Direct scanout page flip failed: %s", error->message); @@ -1342,7 +1344,7 @@ index e40b03f3ea..9617d00161 100644 onscreen); clutter_stage_view_add_redraw_clip (view, NULL); clutter_stage_view_schedule_update_now (view); -@@ -1559,7 +1689,7 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, +@@ -1590,7 +1720,7 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC; meta_onscreen_native_notify_frame_complete (onscreen); @@ -1351,7 +1353,7 @@ index e40b03f3ea..9617d00161 100644 } static const MetaKmsResultListenerVtable scanout_result_listener_vtable = { -@@ -1611,6 +1741,18 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, +@@ -1642,6 +1772,18 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, return FALSE; } @@ -1370,7 +1372,7 @@ index e40b03f3ea..9617d00161 100644 renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native, render_gpu); -@@ -1726,11 +1868,7 @@ meta_onscreen_native_before_redraw (CoglOnscreen *onscreen, +@@ -1757,11 +1899,7 @@ meta_onscreen_native_before_redraw (CoglOnscreen *onscreen, ClutterFrame *frame) { MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); @@ -1382,7 +1384,7 @@ index e40b03f3ea..9617d00161 100644 maybe_update_frame_sync (onscreen_native, frame); } -@@ -1846,22 +1984,79 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, +@@ -1877,22 +2015,79 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, MetaKmsDevice *kms_device = meta_kms_crtc_get_device (kms_crtc); MetaFrameNative *frame_native = meta_frame_native_from_frame (frame); MetaKmsUpdate *kms_update; @@ -1470,7 +1472,7 @@ index e40b03f3ea..9617d00161 100644 meta_kms_update_add_result_listener (kms_update, &finish_frame_result_listener_vtable, NULL, -@@ -1884,7 +2079,19 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, +@@ -1915,7 +2110,19 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, meta_kms_update_set_flushing (kms_update, kms_crtc); meta_kms_device_post_update (kms_device, kms_update, META_KMS_UPDATE_FLAG_NONE); @@ -1491,7 +1493,7 @@ index e40b03f3ea..9617d00161 100644 } static gboolean -@@ -2790,8 +2997,11 @@ meta_onscreen_native_dispose (GObject *object) +@@ -2830,8 +3037,11 @@ meta_onscreen_native_dispose (GObject *object) { case META_RENDERER_NATIVE_MODE_GBM: g_clear_object (&onscreen_native->gbm.next_fb); @@ -1504,7 +1506,7 @@ index e40b03f3ea..9617d00161 100644 break; case META_RENDERER_NATIVE_MODE_SURFACELESS: g_assert_not_reached (); -@@ -2825,6 +3035,10 @@ meta_onscreen_native_dispose (GObject *object) +@@ -2865,6 +3075,10 @@ meta_onscreen_native_dispose (GObject *object) g_clear_object (&onscreen_native->output); g_clear_object (&onscreen_native->crtc); @@ -1529,10 +1531,10 @@ index 0e1193325a..e30357d19d 100644 MetaRendererView *view); diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c -index 7b64ff3f46..c32a6caa62 100644 +index aa76d018ca..3c22b4e86a 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c -@@ -726,12 +726,18 @@ static gboolean +@@ -731,12 +731,18 @@ static gboolean dummy_power_save_page_flip_cb (gpointer user_data) { MetaRendererNative *renderer_native = user_data; @@ -1553,7 +1555,7 @@ index 7b64ff3f46..c32a6caa62 100644 renderer_native->power_save_page_flip_source_id = 0; return G_SOURCE_REMOVE; -@@ -743,6 +749,9 @@ meta_renderer_native_queue_power_save_page_flip (MetaRendererNative *renderer_na +@@ -748,6 +754,9 @@ meta_renderer_native_queue_power_save_page_flip (MetaRendererNative *renderer_na { const unsigned int timeout_ms = 100; @@ -1563,7 +1565,7 @@ index 7b64ff3f46..c32a6caa62 100644 if (!renderer_native->power_save_page_flip_source_id) { renderer_native->power_save_page_flip_source_id = -@@ -1524,6 +1533,26 @@ detach_onscreens (MetaRenderer *renderer) +@@ -1529,6 +1538,26 @@ detach_onscreens (MetaRenderer *renderer) } } @@ -1590,7 +1592,7 @@ index 7b64ff3f46..c32a6caa62 100644 static void meta_renderer_native_rebuild_views (MetaRenderer *renderer) { -@@ -1534,6 +1563,7 @@ meta_renderer_native_rebuild_views (MetaRenderer *renderer) +@@ -1539,6 +1568,7 @@ meta_renderer_native_rebuild_views (MetaRenderer *renderer) MetaRendererClass *parent_renderer_class = META_RENDERER_CLASS (meta_renderer_native_parent_class); |