[PATCH weston 1/5] compositor-drm: Allow scanning out of opaque ARGB surfaces

Ander Conselvan de Oliveira conselvan2 at gmail.com
Fri Nov 30 07:48:54 PST 2012


Looks like I screwed up git send-email. Sorry for the noise.


On 11/30/2012 04:48 PM, a wrote:
> From: Ander Conselvan de Oliveira <conselvan2 at gmail.com>
>
> ---
>   src/compositor-drm.c |   33 +++++++++++++++++++++++++++++----
>   1 file changed, 29 insertions(+), 4 deletions(-)
>
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index 2066dd4..24a71f1 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -305,6 +305,34 @@ drm_fb_set_buffer(struct drm_fb *fb, struct wl_buffer *buffer)
>   		      &fb->buffer_destroy_listener);
>   }
>
> +static int
> +drm_output_check_scanout_format(struct drm_output *output,
> +				struct weston_surface *es, struct gbm_bo *bo)
> +{
> +	int ret = 0;
> +	uint32_t format;
> +	pixman_region32_t r;
> +
> +	format = gbm_bo_get_format(bo);
> +
> +	if (format == GBM_FORMAT_XRGB8888)
> +		ret = 1;
> +	else if (format == GBM_FORMAT_ARGB8888) {
> +		/* We can only scanout an ARGB buffer if the surface's
> +		 * opaque region covers the whole output */
> +		pixman_region32_init(&r);
> +		pixman_region32_subtract(&r, &output->base.region,
> +					 &es->opaque);
> +
> +		if (!pixman_region32_not_empty(&r))
> +			ret = 1;
> +
> +		pixman_region32_fini(&r);
> +	}
> +
> +	return ret;
> +}
> +
>   static struct weston_plane *
>   drm_output_prepare_scanout_surface(struct weston_output *_output,
>   				   struct weston_surface *es)
> @@ -330,10 +358,7 @@ drm_output_prepare_scanout_surface(struct weston_output *_output,
>   	if (!bo)
>   		return NULL;
>
> -	/* Need to verify output->region contained in surface opaque
> -	 * region.  Or maybe just that format doesn't have alpha.
> -	 * For now, scanout only if format is XRGB8888. */
> -	if (gbm_bo_get_format(bo) != GBM_FORMAT_XRGB8888) {
> +	if (!drm_output_check_scanout_format(output, es, bo)) {
>   		gbm_bo_destroy(bo);
>   		return NULL;
>   	}
>



More information about the wayland-devel mailing list