diff options
author | Julien Isorce <[email protected]> | 2016-06-02 15:03:01 +0100 |
---|---|---|
committer | Julien Isorce <[email protected]> | 2016-06-13 09:14:32 +0100 |
commit | 6c43e0016e344de3d7e82b098992cdfecbff2ab2 (patch) | |
tree | 1ad2c76ec5864df92c00db27a5bbe197a9e8f68c | |
parent | 30df78236c14ca9470fd591a0978625490c010b2 (diff) |
st/va: it is valid to release the VABuffer of an exported resource
pipe_resource_reference(&res, NULL) will decrement reference counting,
i.e. p_atomic_dec(res->count). But the va surface still has the initial
reference since it has created the resource. So calling vaDestroyImage
on a derived image calls VaDestroyBuffer but the decrementation won't
reach 0. It is just wrong for vlVaDestroyBuffer to rely on the
export_refcount flag. Finally the vaapi intel driver has the same logic.
Signed-off-by: Julien Isorce <[email protected]>
Reviewed-by: Christian König <[email protected]>
-rw-r--r-- | src/gallium/state_trackers/va/buffer.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/src/gallium/state_trackers/va/buffer.c b/src/gallium/state_trackers/va/buffer.c index 2fd86612e9a..7d3167b2ce2 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); |