On Fri, Nov 09, 2012 at 02:19:04PM +0200, Ander Conselvan de Oliveira wrote:
> Let the compositor generic code decide what to do when the buffer goes
> away. We still have a valid reference do the bo, so we can still show
> the client contents until something else triggers a repaint.
> ---
>  src/compositor-drm.c |   11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)
> 
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index 3a7d432..9c9d54a 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -222,7 +222,7 @@ drm_fb_destroy_callback(struct gbm_bo *bo, void *data)
>  }
>  
>  static struct drm_fb *
> -drm_fb_get_from_bo(struct gbm_bo *bo, struct drm_output *output)
> +drm_fb_get_from_bo(struct gbm_bo *bo)
>  {
>       struct drm_fb *fb = gbm_bo_get_user_data(bo);
>       struct drm_compositor *compositor =
> @@ -236,7 +236,6 @@ drm_fb_get_from_bo(struct gbm_bo *bo, struct drm_output 
> *output)
>       fb = malloc(sizeof *fb);
>  
>       fb->bo = bo;
> -     fb->output = output;
>       fb->is_client_buffer = 0;
>       fb->buffer = NULL;
>  
> @@ -265,10 +264,6 @@ fb_handle_buffer_destroy(struct wl_listener *listener, 
> void *data)
>                                        buffer_destroy_listener);
>  
>       fb->buffer = NULL;
> -
> -     if (fb == fb->output->next ||
> -         (fb == fb->output->current && !fb->output->next))
> -             weston_output_schedule_repaint(&fb->output->base);

Excellent... I was looking at this chunk when we talked about this
yesterday and by removing this, Pekka can easily drop in his
weston_buffer_reference function .

>  }
>  
>  static struct weston_plane *
> @@ -303,7 +298,7 @@ drm_output_prepare_scanout_surface(struct weston_output 
> *_output,
>               return NULL;
>       }
>  
> -     output->next = drm_fb_get_from_bo(bo, output);
> +     output->next = drm_fb_get_from_bo(bo);
>       if (!output->next) {
>               gbm_bo_destroy(bo);
>               return NULL;
> @@ -334,7 +329,7 @@ drm_output_render(struct drm_output *output, 
> pixman_region32_t *damage)
>               return;
>       }
>  
> -     output->next = drm_fb_get_from_bo(bo, output);
> +     output->next = drm_fb_get_from_bo(bo);
>       if (!output->next) {
>               weston_log("failed to get drm_fb for bo\n");
>               gbm_surface_release_buffer(output->surface, bo);
> -- 
> 1.7.10.4
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to