[PATCH weston 18/68] compositor-drm: Drop output from release_fb

Armin Krezović krezovic.armin at gmail.com
Fri Dec 9 21:08:44 UTC 2016


On 09.12.2016 20:57, Daniel Stone wrote:
> We only need it for the GBM surface the FB was originally created
> against; a mismatch here is very bad indeed, so no reason to pass it in
> explictly every time rather than store it.
> 
> Differential Revision: https://phabricator.freedesktop.org/D1490
> 
> Signed-off-by: Daniel Stone <daniels at collabora.com>

Makes sense.

Reviewed-by: Armin Krezović <krezovic.armin at gmail.com>

> ---
>  libweston/compositor-drm.c | 20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
> index 7dbfc6b..eb735b2 100644
> --- a/libweston/compositor-drm.c
> +++ b/libweston/compositor-drm.c
> @@ -148,6 +148,7 @@ struct drm_fb {
>  
>  	/* Used by gbm fbs */
>  	struct gbm_bo *bo;
> +	struct gbm_surface *gbm_surface;
>  
>  	/* Used by dumb fbs */
>  	void *map;
> @@ -466,7 +467,7 @@ drm_fb_set_buffer(struct drm_fb *fb, struct weston_buffer *buffer)
>  }
>  
>  static void
> -drm_output_release_fb(struct drm_output *output, struct drm_fb *fb)
> +drm_fb_unref(struct drm_fb *fb)
>  {
>  	if (!fb)
>  		return;
> @@ -479,7 +480,7 @@ drm_output_release_fb(struct drm_output *output, struct drm_fb *fb)
>  		gbm_bo_destroy(fb->bo);
>  		break;
>  	case BUFFER_GBM_SURFACE:
> -		gbm_surface_release_buffer(output->gbm_surface, fb->bo);
> +		gbm_surface_release_buffer(fb->gbm_surface, fb->bo);
>  		break;
>  	default:
>  		assert(NULL);
> @@ -615,6 +616,7 @@ drm_output_render_gl(struct drm_output *output, pixman_region32_t *damage)
>  		gbm_surface_release_buffer(output->gbm_surface, bo);
>  		return;
>  	}
> +	output->next->gbm_surface = output->gbm_surface;
>  }
>  
>  static void
> @@ -798,7 +800,7 @@ drm_output_repaint(struct weston_output *output_base,
>  err_pageflip:
>  	output->cursor_view = NULL;
>  	if (output->next) {
> -		drm_output_release_fb(output, output->next);
> +		drm_fb_unref(output->next);
>  		output->next = NULL;
>  	}
>  
> @@ -900,7 +902,7 @@ vblank_handler(int fd, unsigned int frame, unsigned int sec, unsigned int usec,
>  	drm_output_update_msc(output, frame);
>  	output->vblank_pending = 0;
>  
> -	drm_output_release_fb(output, s->current);
> +	drm_fb_unref(s->current);
>  	s->current = s->next;
>  	s->next = NULL;
>  
> @@ -930,7 +932,7 @@ page_flip_handler(int fd, unsigned int frame,
>  	 * we just want to page flip to the current buffer to get an accurate
>  	 * timestamp */
>  	if (output->page_flip_pending) {
> -		drm_output_release_fb(output, output->current);
> +		drm_fb_unref(output->current);
>  		output->current = output->next;
>  		output->next = NULL;
>  	}
> @@ -1452,8 +1454,8 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
>  		WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
>  
>  	/* reset rendering stuff. */
> -	drm_output_release_fb(output, output->current);
> -	drm_output_release_fb(output, output->next);
> +	drm_fb_unref(output->current);
> +	drm_fb_unref(output->next);
>  	output->current = output->next = NULL;
>  
>  	if (b->use_pixman) {
> @@ -2672,8 +2674,8 @@ destroy_sprites(struct drm_backend *backend)
>  				sprite->plane_id,
>  				output->crtc_id, 0, 0,
>  				0, 0, 0, 0, 0, 0, 0, 0);
> -		drm_output_release_fb(output, sprite->current);
> -		drm_output_release_fb(output, sprite->next);
> +		drm_fb_unref(sprite->current);
> +		drm_fb_unref(sprite->next);
>  		weston_plane_release(&sprite->plane);
>  		free(sprite);
>  	}
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 870 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20161209/123c2d29/attachment.sig>


More information about the wayland-devel mailing list