On Mon, Sep 10, 2012 at 03:55:53PM +0300, Ander Conselvan de Oliveira wrote:
> From: Ander Conselvan de Oliveira <[email protected]>
>
> 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 <[email protected]>
> 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
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel