diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c index bd146e28ae3cdc75b936e2d14880575591c12a13..da372383d9ffc5063ea8811c54e8782b7576758b 100644 --- a/src/backends/native/meta-kms-impl-device.c +++ b/src/backends/native/meta-kms-impl-device.c @@ -98,7 +98,7 @@ typedef struct _MetaKmsImplDevicePrivate GHashTable *crtc_frames; - gboolean deadline_timer_failed; + gboolean deadline_timer_inhibited; } MetaKmsImplDevicePrivate; static void @@ -1345,7 +1345,7 @@ is_using_deadline_timer (MetaKmsImplDevice *impl_device) MetaKmsImplDevicePrivate *priv = meta_kms_impl_device_get_instance_private (impl_device); - if (priv->deadline_timer_failed) + if (priv->deadline_timer_inhibited) { return FALSE; } @@ -1568,7 +1568,7 @@ meta_kms_impl_device_schedule_process (MetaKmsImplDevice *impl_device, g_warning ("Failed to determine deadline: %s", error->message); priv = meta_kms_impl_device_get_instance_private (impl_device); - priv->deadline_timer_failed = TRUE; + priv->deadline_timer_inhibited = TRUE; needs_flush: meta_kms_device_set_needs_flush (meta_kms_crtc_get_device (crtc), crtc); @@ -1882,6 +1882,26 @@ get_driver_info (int fd, return TRUE; } +static void +maybe_inhibit_deadline_timer (MetaKmsImplDevice *impl_device) +{ + MetaKmsImplDevicePrivate *priv = + meta_kms_impl_device_get_instance_private (impl_device); + static const char *deadline_timer_deny_list[] = { + "vc4", + }; + int i; + + for (i = 0; i < G_N_ELEMENTS (deadline_timer_deny_list); i++) + { + if (g_strcmp0 (deadline_timer_deny_list[i], priv->driver_name) == 0) + { + priv->deadline_timer_inhibited = TRUE; + break; + } + } +} + static gboolean meta_kms_impl_device_initable_init (GInitable *initable, GCancellable *cancellable, @@ -1907,6 +1927,8 @@ meta_kms_impl_device_initable_init (GInitable *initable, priv->driver_description = g_strdup ("Unknown"); } + maybe_inhibit_deadline_timer (impl_device); + priv->crtc_frames = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) crtc_frame_free);