--- A simple fix to the problem described here: <https://lists.freedesktop.org/archives/mesa-dev/2016-September/128076.html>.
With this applied, the driver no longer hangs/crashes when vaSyncSurface() is called in places other than for the first time after an encode operation (including a second call on the same surface). Thanks, - Mark src/gallium/state_trackers/va/surface.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c index 75db650..5e92980 100644 --- a/src/gallium/state_trackers/va/surface.c +++ b/src/gallium/state_trackers/va/surface.c @@ -111,6 +111,12 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target) return VA_STATUS_ERROR_INVALID_SURFACE; } + if (!surf->feedback) { + // No outstanding operation: nothing to do. + pipe_mutex_unlock(drv->mutex); + return VA_STATUS_SUCCESS; + } + context = handle_table_get(drv->htab, surf->ctx); if (!context) { pipe_mutex_unlock(drv->mutex); @@ -126,6 +132,7 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target) if (frame_diff < 2) context->decoder->flush(context->decoder); context->decoder->get_feedback(context->decoder, surf->feedback, &(surf->coded_buf->coded_size)); + surf->feedback = NULL; } pipe_mutex_unlock(drv->mutex); return VA_STATUS_SUCCESS; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev