[Mesa-dev] [PATCH] st/va: it is valid to release the VABuffer of an exported resource

Christian König deathsimple at vodafone.de
Wed Jun 8 11:56:22 UTC 2016


I'm clearly not deep enough into VA-API to judge if that is correct or 
not, but it sounds sane to me.

So feel free to add an Acked-by: Christian König 
<christian.koenig at amd.com> on the patch.

Cheers,
Christian.

Am 08.06.2016 um 13:13 schrieb Julien Isorce:
> Hi Christian,
>
> Thx for the review.
>
> pipe_resource_reference(&res, NULL)  will decrement reference counting 
> (p_atomic_dec  res->count). But the va surface still has the initial 
> reference since it created that resource.
> So calling vaDestroyImage on a derived image will call VaDestroyBuffer 
> but the decrementation wont't reach 0.
>
> It is just wrong that vlVaDestroyBuffer relies on the export_refcount 
> flag. I also compared with vaapi intel driver and they have same flag 
> and it is not present in their vaDestroyBuffer.
>
> Cheers
> Julien
>
>
> On 8 June 2016 at 09:22, Christian König <deathsimple at vodafone.de 
> <mailto:deathsimple at vodafone.de>> wrote:
>
>     Am 02.06.2016 um 16:03 schrieb Julien Isorce:
>
>         Signed-off-by: Julien Isorce <j.isorce at samsung.com
>         <mailto:j.isorce at samsung.com>>
>
>
>     Actually I'm not sure if that is correct.
>
>     If you release the VABuffer of an exported resource you won't be
>     able to properly close the handle with vlVaReleaseBufferHandle().
>
>     On the other hand the semantic VA requires for
>     vlVaAcquireBufferHandle() and vlVaReleaseBufferHandle() is
>     complete nonsense for DMA-buf handles.
>
>     Christian.
>
>         ---
>           src/gallium/state_trackers/va/buffer.c | 8 +-------
>           1 file changed, 1 insertion(+), 7 deletions(-)
>
>         diff --git a/src/gallium/state_trackers/va/buffer.c
>         b/src/gallium/state_trackers/va/buffer.c
>         index 2fd8661..7d3167b 100644
>         --- a/src/gallium/state_trackers/va/buffer.c
>         +++ b/src/gallium/state_trackers/va/buffer.c
>         @@ -192,14 +192,8 @@ vlVaDestroyBuffer(VADriverContextP ctx,
>         VABufferID buf_id)
>                 return VA_STATUS_ERROR_INVALID_BUFFER;
>              }
>           -   if (buf->derived_surface.resource) {
>         -      if (buf->export_refcount > 0) {
>         -         pipe_mutex_unlock(drv->mutex);
>         -         return VA_STATUS_ERROR_INVALID_BUFFER;
>         -      }
>         -
>         +   if (buf->derived_surface.resource)
>         pipe_resource_reference(&buf->derived_surface.resource, NULL);
>         -   }
>                FREE(buf->data);
>              FREE(buf);
>
>
>     _______________________________________________
>     mesa-dev mailing list
>     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160608/19de933a/attachment.html>


More information about the mesa-dev mailing list