A customer reported that:
If I run with very few surfaces and for instance gstreamer like this: (I have an own shell, without any other views).
gst-launch-1.0 videotestsrc ! imxeglvivsink
I get tearing and it seems like the opengl part is not finished with the buffer even though commit is called. (surface_commit in compositor.c)
If a put a small usleep in the gal2d-renderer, for instance in repaint_views, like 15ms, then the tearing disappears and it looks fine.
So it really looks like the egl surface either not double buffering or commit is not syncronised.
Is that something that's known, maybe you have a work around?
I run weston with double buffering (FB_MULTI_BUFFER=2)
This is not visible with the standard shell of weston, I think that is because it has quite a few views that are drawn before the gstreamer surface...
I will take care of the issue but will use a community thread to keep a public accessible resolution.
Cheers,
Hugo
Thanks a lot for the reproduction steps Richard.
I am working to reproduce this as we speak on the 3.14.52 BSP.
Cheers,
Hugo
Hello richard.rojfors@gmail.com
For clarification, the issue you are seeing is on 3.14.28 and Weston 1.6.0
I am preparing an appropiate Yocto image, as mine does not have the imxeglvivsink element.
Cheers,
Hugo
Hi,
This is with weston 1.8.0, all based on the jethro branch of yocto. The kernel is a .28, but the gfx driver is picked up from the meta-fsl-arm, so matching p7.1, which I guess is in your .38 kernel.
Thanks,
Richard
A way to reproduce the issue with desktop-shell;
First apply this patch (tell mapped windows to scale up and be put att 0x0, which will be the gst-window).
+++ b/desktop-shell/shell.c 2016-01-12 15:51:49.000000000 +0100
@@ -5516,9 +5516,9 @@
if (range_y > 0)
dy += random() % range_y;
- x = target_output->x + dx;
- y = target_output->y + dy;
-
+ /* ---- CHANGE: set to 0,0 on the output*/
+ x = target_output->x;
+ y = target_output->y;
weston_view_set_position(view, x, y);
}
@@ -5625,6 +5625,11 @@
break;
}
}
+
+ if (shsurf->resource)
+ wl_shell_surface_send_configure(shsurf->resource,
+ WL_SHELL_SURFACE_RESIZE_NONE,
+ shsurf->output->width, shsurf->output->height);
}
static void
Start weston (fb0 is HDMI@1920x1080):
FB_MULTI_BUFFER=2 XDG_RUNTIME_DIR=/tmp /usr/bin/weston --tty=1 --use-gal2d=1 --use-gl=0 --device=/dev/fb0
Start gstreamer:
XDG_RUNTIME_DIR=/
tmp gst-launch-1.0 videotestsrc ! imxeglvivsink
Now you will see the tearing..