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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user