[PATCH v2] simple-egl: Set the opaque region if windowed and -o is passed

Kristian Høgsberg hoegsberg at gmail.com
Fri Sep 14 10:57:41 PDT 2012


On Mon, Sep 10, 2012 at 03:55:53PM +0300, Ander Conselvan de Oliveira wrote:
> From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
> 
> Since commit 6a615d262141de7cf094788203d9c044dfb9f08d [1], the opaque
> region would be set only when running fullscreen. Having it set
> properly for the windowed case is helpful to test the overlay path in
> compositor-drm.
> 
> What this patch does is:
> 
>  - reverts the above commit;
>  - remove the "if fullscreen make the window opaque" conditional, that
>    should have been removed when -o was introduced and was actually the
>    cause for the bug solved in [1];
>  - sets the opaque region when running fullscreen, regardless of the -o
>    switch.
> 
> [1] commit 6a615d262141de7cf094788203d9c044dfb9f08d
>     Author: Scott Moreau <oreaus at gmail.com>
>     Date:   Thu Aug 30 14:44:16 2012 -0600
> 
>         simple-egl: Only set alpha_size=0 when -o is passed.
> 
> v2: - Clarify in the commit message that this does not regress the bug
>       solved in [1].
>     - Use the correct sha1 for the reverted commit.

Thanks, I just noticed the flicker when we move simple-egl into an
overlay.  Since we weren't setting the opaque region, the compositor
would repaint the primary fb where the surface used to be.  That
triggered the flicker bug, where KMS is too slow to turn the sprite on
and we get a frame without sprite and a primary fb without the
simple-egl surface in it.

Kristian

> ---
>  clients/simple-egl.c |   13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
> 
> diff --git a/clients/simple-egl.c b/clients/simple-egl.c
> index 808c2ee..a67ce2f 100644
> --- a/clients/simple-egl.c
> +++ b/clients/simple-egl.c
> @@ -280,12 +280,10 @@ toggle_fullscreen(struct window *window, int fullscreen)
>  	window->configured = 0;
>  
>  	if (fullscreen) {
> -		window->opaque = 1;
>  		wl_shell_surface_set_fullscreen(window->shell_surface,
>  						WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT,
>  						0, NULL);
>  	} else {
> -		window->opaque = 0;
>  		wl_shell_surface_set_toplevel(window->shell_surface);
>  		handle_configure(window, window->shell_surface, 0,
>  				 window->window_size.width,
> @@ -403,7 +401,7 @@ redraw(void *data, struct wl_callback *callback, uint32_t time)
>  
>  	eglSwapBuffers(window->display->egl.dpy, window->egl_surface);
>  
> -	if (window->opaque) {
> +	if (window->opaque || window->fullscreen) {
>  		region = wl_compositor_create_region(window->display->compositor);
>  		wl_region_add(region, 0, 0,
>  			      window->window_size.width,
> @@ -594,7 +592,7 @@ main(int argc, char **argv)
>  	struct sigaction sigint;
>  	struct display display = { 0 };
>  	struct window  window  = { 0 };
> -	int i, opaque = 0;
> +	int i;
>  
>  	window.display = &display;
>  	display.window = &window;
> @@ -605,7 +603,7 @@ main(int argc, char **argv)
>  		if (strcmp("-f", argv[i]) == 0)
>  			window.fullscreen = 1;
>  		else if (strcmp("-o", argv[i]) == 0)
> -			opaque = 1;
> +			window.opaque = 1;
>  		else if (strcmp("-h", argv[i]) == 0)
>  			usage(EXIT_SUCCESS);
>  		else
> @@ -621,10 +619,7 @@ main(int argc, char **argv)
>  	wl_display_get_fd(display.display, event_mask_update, &display);
>  	wl_display_iterate(display.display, WL_DISPLAY_READABLE);
>  
> -	if (window.fullscreen)
> -		window.opaque = 1;
> -
> -	init_egl(&display, opaque);
> +	init_egl(&display, window.opaque);
>  	create_surface(&window);
>  	init_gl(&window);
>  
> -- 
> 1.7.9.5
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list