From: Boyuan Zhang Date: Fri, 20 Jan 2023 04:22:20 +0000 (-0500) Subject: radeonsi/vcn: check fence before destroying dpb X-Git-Tag: upstream/23.3.3~14191 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=843bdd226268880b26629f9605e0217a0b379f48;p=platform%2Fupstream%2Fmesa.git radeonsi/vcn: check fence before destroying dpb Add a fence_wait before destroying dpb buffer in dpg_unref_list to make sure previous decode job has been done. (for DPB_DYNAMIC_TIER_2) Signed-off-by: Boyuan Zhang Reviewed-by: Leo Liu Reviewed-by: Sajeesh Sidharthan Part-of: --- diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c index 33dfc9b..7e52a1e 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c @@ -1871,6 +1871,7 @@ static unsigned rvcn_dec_dynamic_dpb_t2_message(struct radeon_decoder *dec, rvcn } list_for_each_entry_safe(struct rvcn_dec_dynamic_dpb_t2, d, &dec->dpb_unref_list, list) { + dec->ws->fence_wait(dec->ws, dec->prev_fence, PIPE_DEFAULT_DECODER_FEEDBACK_TIMEOUT_NS); list_del(&d->list); si_vid_destroy_buffer(&d->dpb); FREE(d); @@ -2906,6 +2907,7 @@ static void radeon_dec_end_frame(struct pipe_video_codec *decoder, struct pipe_v dec->send_cmd(dec, target, picture); flush(dec, PIPE_FLUSH_ASYNC, picture->fence); + dec->prev_fence = *picture->fence; next_buffer(dec); } diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.h b/src/gallium/drivers/radeonsi/radeon_vcn_dec.h index 41b55f8..b9d2f0d 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.h +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.h @@ -114,6 +114,7 @@ struct radeon_decoder { struct radeon_winsys_ctx **jctx; unsigned cb_idx; unsigned njctx; + struct pipe_fence_handle *prev_fence; }; void send_cmd_dec(struct radeon_decoder *dec, struct pipe_video_buffer *target,