Tearing on a Weston window even with FB_MULTI_BUFFER set as 2

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Tearing on a Weston window even with FB_MULTI_BUFFER set as 2

3,135 Views
HugoOsornio
NXP Employee
NXP Employee

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

Tags (2)
4 Replies

2,549 Views
HugoOsornio
NXP Employee
NXP Employee

richard.rojfors@gmail.com

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

0 Kudos

2,549 Views
HugoOsornio
NXP Employee
NXP Employee

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

0 Kudos

2,549 Views
richard_rojfors
Contributor II

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

2,549 Views
richard_rojfors
Contributor II

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).

--- a/desktop-shell/shell.c 2016-01-12 15:51:44.000000000 +0100

+++ 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..

0 Kudos