radeonsi/vcn: Avoid copy when resizing bitstream buffer

The copy from old buffer is only needed when appending (when
decode_bitstream is called more than once in one frame).
This avoids map old buffer -> memcpy to new buffer which can get
expensive with large buffers.

Reviewed-by: David (Ming Qiang) Wu <David.Wu3@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29318>
This commit is contained in:
David Rosca
2024-05-22 08:09:34 +02:00
committed by Marge Bot
parent 0954afff5d
commit 103da56fba

View File

@@ -2929,7 +2929,15 @@ static void radeon_dec_decode_bitstream(struct pipe_video_codec *decoder,
if (total_bs_size > buf->res->buf->size) {
dec->ws->buffer_unmap(dec->ws, buf->res->buf);
dec->bs_ptr = NULL;
if (!si_vid_resize_buffer(dec->screen, &dec->cs, buf, total_bs_size, NULL)) {
if (!dec->bs_size) {
struct rvid_buffer old_buf = *buf;
if (!si_vid_create_buffer(dec->screen, buf, total_bs_size, buf->usage)) {
RVID_ERR("Can't create bitstream buffer!");
return;
}
si_vid_destroy_buffer(&old_buf);
} else if (!si_vid_resize_buffer(dec->screen, &dec->cs, buf, total_bs_size, NULL)) {
RVID_ERR("Can't resize bitstream buffer!");
return;
}