renderer/native: Discard pending swaps when rebuilding views
It's analogous to discard_pending_page_flips but represents swaps that might become flips after the next frame notification callbacks, thanks to triple buffering. Since the views are being rebuilt and their onscreens are about to be destroyed, turning those swaps into more flips/posts would just lead to unexpected behaviour (like trying to flip on a half-destroyed inactive CRTC). Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441>
This commit is contained in:
parent
c681b6977c
commit
9dec39d92e
@ -1575,6 +1575,26 @@ detach_onscreens (MetaRenderer *renderer)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
discard_pending_swaps (MetaRenderer *renderer)
|
||||||
|
{
|
||||||
|
GList *views = meta_renderer_get_views (renderer);;
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = views; l; l = l->next)
|
||||||
|
{
|
||||||
|
ClutterStageView *stage_view = l->data;
|
||||||
|
CoglFramebuffer *fb = clutter_stage_view_get_onscreen (stage_view);
|
||||||
|
CoglOnscreen *onscreen;
|
||||||
|
|
||||||
|
if (!COGL_IS_ONSCREEN (fb))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
onscreen = COGL_ONSCREEN (fb);
|
||||||
|
meta_onscreen_native_discard_pending_swaps (onscreen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_renderer_native_rebuild_views (MetaRenderer *renderer)
|
meta_renderer_native_rebuild_views (MetaRenderer *renderer)
|
||||||
{
|
{
|
||||||
@ -1585,6 +1605,7 @@ meta_renderer_native_rebuild_views (MetaRenderer *renderer)
|
|||||||
MetaRendererClass *parent_renderer_class =
|
MetaRendererClass *parent_renderer_class =
|
||||||
META_RENDERER_CLASS (meta_renderer_native_parent_class);
|
META_RENDERER_CLASS (meta_renderer_native_parent_class);
|
||||||
|
|
||||||
|
discard_pending_swaps (renderer);
|
||||||
meta_kms_discard_pending_page_flips (kms);
|
meta_kms_discard_pending_page_flips (kms);
|
||||||
g_hash_table_remove_all (renderer_native->mode_set_updates);
|
g_hash_table_remove_all (renderer_native->mode_set_updates);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user