summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2016-09-07 22:13:34 -0500
committerDerek Foreman <derekf@osg.samsung.com>2016-09-08 13:55:24 -0500
commit3be2630a3050dab9f73a181324813bda727ed0fd (patch)
tree5dac70ccebb25e54ec3e342af876692416b6e349
parent95a00b8e496839c4976259692fb7c308f7a850dc (diff)
downloadefl-3be2630a3050dab9f73a181324813bda727ed0fd.tar.gz
ecore_drm2: make flip to NULL buffer mean something
When triple buffering we'll have a buffer in ecore_drm2's "next" position. Until now we've had to query it from the engine then try to re post it. Also, when generating ticks we need to flip to the current buffer when no changes have been made to get another callback. Now a NULL fb to fb_flip will either flip to next, if available, or current if there's nothing new to flip to.
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_fb.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/ecore_drm2/ecore_drm2_fb.c b/src/lib/ecore_drm2/ecore_drm2_fb.c
index 36de500870..1c1c94795f 100644
--- a/src/lib/ecore_drm2/ecore_drm2_fb.c
+++ b/src/lib/ecore_drm2/ecore_drm2_fb.c
@@ -228,18 +228,25 @@ ecore_drm2_fb_flip(Ecore_Drm2_Fb *fb, Ecore_Drm2_Output *output)
{
int ret = 0;
- EINA_SAFETY_ON_NULL_RETURN_VAL(fb, -1);
EINA_SAFETY_ON_NULL_RETURN_VAL(output, -1);
EINA_SAFETY_ON_NULL_RETURN_VAL(output->current_mode, -1);
if (!output->enabled) return -1;
+ if (!fb) fb = output->next;
+
+ /* So we can generate a tick by flipping to the current fb */
+ if (!fb) fb = output->current;
+
if (output->next)
{
output->next->busy = EINA_FALSE;
output->next = NULL;
}
+ /* If we don't have an fb to set by now, BAIL! */
+ if (!fb) return -1;
+
if ((!output->current) ||
(output->current->stride != fb->stride))
{