[Mesa-dev] [PATCH v3] st/vdpau: only send buffers with B8G8R8A8 format to X

Christian König deathsimple at vodafone.de
Thu Jan 19 09:22:07 UTC 2017


Am 19.01.2017 um 10:07 schrieb Nayan Deshmukh:
> PresentPixmap only works if the pixmap depth matches with the
> window depth, otherwise it returns a BadMatch protocol error.
> Even if the depths match, the result won't look correctly
> if the VDPAU RGB component order doesn't match the X11 one so
> we only allow the X11 format.
> For other buffers we copy them to a buffer which is send to X.
>
> v2: only send buffers with format VDP_RGBA_FORMAT_B8G8R8A8
> v3: reword commit message
>
> Signed-off-by: Nayan Deshmukh <nayan26deshmukh at gmail.com>

I was a bit to late with my response to the last version.

> ---
>   src/gallium/state_trackers/vdpau/output.c        | 2 ++
>   src/gallium/state_trackers/vdpau/presentation.c  | 6 +++---
>   src/gallium/state_trackers/vdpau/vdpau_private.h | 1 +
>   3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
> index 98a8011..e800d2c 100644
> --- a/src/gallium/state_trackers/vdpau/output.c
> +++ b/src/gallium/state_trackers/vdpau/output.c
> @@ -75,6 +75,8 @@ vlVdpOutputSurfaceCreate(VdpDevice device,
>   
>      memset(&res_tmpl, 0, sizeof(res_tmpl));
>   
> +   vlsurface->send_to_X = rgba_format == VDP_RGBA_FORMAT_B8G8R8A8;
> +

I would add the commit message here as code comment as well.

With that fixed the patch is Reviewed-by: Christian König 
<christian.koenig at amd.com>.

If nobody else responses I'm going to make this small change myself and 
commit the result.

Regards,
Christian.

>      res_tmpl.target = PIPE_TEXTURE_2D;
>      res_tmpl.format = VdpFormatRGBAToPipe(rgba_format);
>      res_tmpl.width0 = width;
> diff --git a/src/gallium/state_trackers/vdpau/presentation.c b/src/gallium/state_trackers/vdpau/presentation.c
> index d479369..78cafc8 100644
> --- a/src/gallium/state_trackers/vdpau/presentation.c
> +++ b/src/gallium/state_trackers/vdpau/presentation.c
> @@ -231,7 +231,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
>      vscreen = pq->device->vscreen;
>   
>      pipe_mutex_lock(pq->device->mutex);
> -   if (vscreen->set_back_texture_from_output)
> +   if (vscreen->set_back_texture_from_output && surf->send_to_X)
>         vscreen->set_back_texture_from_output(vscreen, surf->surface->texture, clip_width, clip_height);
>      tex = vscreen->texture_from_drawable(vscreen, (void *)pq->drawable);
>      if (!tex) {
> @@ -239,7 +239,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
>         return VDP_STATUS_INVALID_HANDLE;
>      }
>   
> -   if (!vscreen->set_back_texture_from_output) {
> +   if (!vscreen->set_back_texture_from_output || !surf->send_to_X) {
>         dirty_area = vscreen->get_dirty_area(vscreen);
>   
>         memset(&surf_templ, 0, sizeof(surf_templ));
> @@ -289,7 +289,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
>         framenum++;
>      }
>   
> -   if (!vscreen->set_back_texture_from_output) {
> +   if (!vscreen->set_back_texture_from_output || !surf->send_to_X) {
>         pipe_resource_reference(&tex, NULL);
>         pipe_surface_reference(&surf_draw, NULL);
>      }
> diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h
> index 490a0bd..8356608 100644
> --- a/src/gallium/state_trackers/vdpau/vdpau_private.h
> +++ b/src/gallium/state_trackers/vdpau/vdpau_private.h
> @@ -415,6 +415,7 @@ typedef struct
>      struct pipe_fence_handle *fence;
>      struct vl_compositor_state cstate;
>      struct u_rect dirty_area;
> +   bool send_to_X;
>   } vlVdpOutputSurface;
>   
>   typedef struct




More information about the mesa-dev mailing list