ecore_drm: Disable custom tick if we can't wait for vblank
If we fail to schedule a VBlank event, then we should disable custom ticks and fallback to timer-based animators. This patch fixes some issues with Intel Atom based setups where rendering would fail when using custom animators. @fix
This commit is contained in:
parent
da37a41fd1
commit
b5425dc51a
|
@ -36,6 +36,8 @@
|
||||||
static Eina_List *drm_devices;
|
static Eina_List *drm_devices;
|
||||||
static int ticking = 0;
|
static int ticking = 0;
|
||||||
|
|
||||||
|
static void _ecore_drm_tick_source_set(Ecore_Drm_Device *dev);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_drm_tick_schedule(Ecore_Drm_Device *dev)
|
_ecore_drm_tick_schedule(Ecore_Drm_Device *dev)
|
||||||
{
|
{
|
||||||
|
@ -46,7 +48,11 @@ _ecore_drm_tick_schedule(Ecore_Drm_Device *dev)
|
||||||
vbl.request.type = (DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT);
|
vbl.request.type = (DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT);
|
||||||
vbl.request.sequence = 1;
|
vbl.request.sequence = 1;
|
||||||
vbl.request.signal = (unsigned long)dev;
|
vbl.request.signal = (unsigned long)dev;
|
||||||
drmWaitVBlank(dev->drm.fd, &vbl);
|
if (drmWaitVBlank(dev->drm.fd, &vbl) < 0)
|
||||||
|
{
|
||||||
|
WRN("Vblank failed, disabling custom ticks");
|
||||||
|
_ecore_drm_tick_source_set(NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -65,6 +71,13 @@ _ecore_drm_tick_end(void *data EINA_UNUSED)
|
||||||
static void
|
static void
|
||||||
_ecore_drm_tick_source_set(Ecore_Drm_Device *dev)
|
_ecore_drm_tick_source_set(Ecore_Drm_Device *dev)
|
||||||
{
|
{
|
||||||
|
if (!dev)
|
||||||
|
{
|
||||||
|
ecore_animator_custom_source_tick_begin_callback_set(NULL, NULL);
|
||||||
|
ecore_animator_custom_source_tick_end_callback_set(NULL, NULL);
|
||||||
|
ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ecore_animator_custom_source_tick_begin_callback_set
|
ecore_animator_custom_source_tick_begin_callback_set
|
||||||
(_ecore_drm_tick_begin, dev);
|
(_ecore_drm_tick_begin, dev);
|
||||||
ecore_animator_custom_source_tick_end_callback_set
|
ecore_animator_custom_source_tick_end_callback_set
|
||||||
|
|
Loading…
Reference in New Issue