kms: Post pending updates per device
Instead of a "post all pending updates", pass an update specific to a single device. This gets rid of the awkward "combine feedback" function, and makes it possible to queue updates to a multiple devices without always posting them together. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
This commit is contained in:
@ -544,7 +544,6 @@ update_hw_cursor (MetaCursorRendererNative *native,
|
||||
GList *l;
|
||||
graphene_rect_t rect;
|
||||
gboolean painted = FALSE;
|
||||
g_autoptr (MetaKmsFeedback) feedback = NULL;
|
||||
|
||||
if (cursor_sprite)
|
||||
rect = meta_cursor_renderer_calculate_rect (renderer, cursor_sprite);
|
||||
@ -589,23 +588,36 @@ update_hw_cursor (MetaCursorRendererNative *native,
|
||||
painted = painted || data.out_painted;
|
||||
}
|
||||
|
||||
feedback = meta_kms_post_pending_updates_sync (kms);
|
||||
if (meta_kms_feedback_get_result (feedback) != META_KMS_FEEDBACK_PASSED)
|
||||
for (l = meta_kms_get_devices (kms); l; l = l->next)
|
||||
{
|
||||
for (l = meta_kms_feedback_get_failed_planes (feedback); l; l = l->next)
|
||||
MetaKmsDevice *kms_device = l->data;
|
||||
MetaKmsUpdate *kms_update;
|
||||
g_autoptr (MetaKmsFeedback) feedback = NULL;
|
||||
|
||||
kms_update = meta_kms_get_pending_update (kms, kms_device);
|
||||
if (!kms_update)
|
||||
continue;
|
||||
|
||||
feedback = meta_kms_post_pending_update_sync (kms, kms_device);
|
||||
if (meta_kms_feedback_get_result (feedback) != META_KMS_FEEDBACK_PASSED)
|
||||
{
|
||||
MetaKmsPlaneFeedback *plane_feedback = l->data;
|
||||
GList *k;
|
||||
|
||||
if (!g_error_matches (plane_feedback->error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_PERMISSION_DENIED))
|
||||
for (k = meta_kms_feedback_get_failed_planes (feedback); k; k = k->next)
|
||||
{
|
||||
disable_hw_cursor_for_crtc (plane_feedback->crtc,
|
||||
plane_feedback->error);
|
||||
}
|
||||
}
|
||||
MetaKmsPlaneFeedback *plane_feedback = k->data;
|
||||
|
||||
priv->has_hw_cursor = FALSE;
|
||||
if (!g_error_matches (plane_feedback->error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_PERMISSION_DENIED))
|
||||
{
|
||||
disable_hw_cursor_for_crtc (plane_feedback->crtc,
|
||||
plane_feedback->error);
|
||||
}
|
||||
}
|
||||
|
||||
priv->has_hw_cursor = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
priv->hw_state_invalidated = FALSE;
|
||||
|
Reference in New Issue
Block a user