summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Isorce <[email protected]>2016-06-02 15:03:01 +0100
committerJulien Isorce <[email protected]>2016-06-13 09:14:32 +0100
commit6c43e0016e344de3d7e82b098992cdfecbff2ab2 (patch)
tree1ad2c76ec5864df92c00db27a5bbe197a9e8f68c
parent30df78236c14ca9470fd591a0978625490c010b2 (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.c8
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);