summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO2
-rw-r--r--PKGBUILD2
-rw-r--r--mr1441.patch84
3 files changed, 45 insertions, 43 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 244257eeca4e..3e52946438eb 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index 1969403003ac..0dbcfee2af16 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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);