[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