Module: Mesa Branch: master Commit: 480d1436fe965d9519b1943ed47d1bddd4af8c6d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=480d1436fe965d9519b1943ed47d1bddd4af8c6d
Author: Leo Liu <leo....@amd.com> Date: Tue Feb 2 21:22:00 2021 -0500 radeon/vcn: clean the message buffers and their indexes logic So the new buffer and index can be added sequentially. Signed-off-by: Leo Liu <leo....@amd.com> Reviewed-by: Boyuan Zhang <boyuan.zh...@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8851> --- src/gallium/drivers/radeon/radeon_vcn_dec.c | 59 +++++++++++++++-------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.c b/src/gallium/drivers/radeon/radeon_vcn_dec.c index 8a16ea7a092..3a85531fa53 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeon/radeon_vcn_dec.c @@ -1319,44 +1319,41 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, (struct si_texture *)((struct vl_video_buffer *)target)->resources[1]; ASSERTED struct si_screen *sscreen = (struct si_screen *)dec->screen; rvcn_dec_message_header_t *header; - rvcn_dec_message_index_t *index_drm; - rvcn_dec_message_index_t *index; + rvcn_dec_message_index_t *index_codec; + rvcn_dec_message_index_t *index_drm = NULL; rvcn_dec_message_decode_t *decode; unsigned sizes = 0, offset_decode, offset_codec; - unsigned int offset_drm; + unsigned offset_drm = 0; void *codec; rvcn_dec_message_drm_t *drm = NULL; header = dec->msg; sizes += sizeof(rvcn_dec_message_header_t); + + index_codec = (void*)header + sizes; + sizes += sizeof(rvcn_dec_message_index_t); + if (encrypted) { - index_drm = (void*)header + sizeof(rvcn_dec_message_header_t); - sizes += sizeof(rvcn_dec_message_index_t); - index = (void*)index_drm + sizeof(rvcn_dec_message_index_t); - sizes += sizeof(rvcn_dec_message_index_t); - } else { - index = (void*)header + sizeof(rvcn_dec_message_header_t); + index_drm = (void*)header + sizes; sizes += sizeof(rvcn_dec_message_index_t); } + offset_decode = sizes; - decode = (void *)index + sizeof(rvcn_dec_message_index_t); + decode = (void*)header + sizes; sizes += sizeof(rvcn_dec_message_decode_t); + if (encrypted) { offset_drm = sizes; - drm = (void*)decode + sizeof(rvcn_dec_message_decode_t); + drm = (void*)header + sizes; sizes += sizeof(rvcn_dec_message_drm_t); - codec = (void*)drm + sizeof(rvcn_dec_message_drm_t); - } else - codec = (void*)decode + sizeof(rvcn_dec_message_decode_t); + } + offset_codec = sizes; + codec = (void*)header + sizes; memset(dec->msg, 0, sizes); header->header_size = sizeof(rvcn_dec_message_header_t); header->total_size = sizes; - if (encrypted) - header->num_buffers = 3; - else - header->num_buffers = 2; header->msg_type = RDECODE_MSG_DECODE; header->stream_handle = dec->stream_handle; header->status_report_feedback_number = dec->frame_number; @@ -1365,17 +1362,21 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, header->index[0].offset = offset_decode; header->index[0].size = sizeof(rvcn_dec_message_decode_t); header->index[0].filled = 0; + header->num_buffers = 1; + + index_codec->offset = offset_codec; + index_codec->size = sizeof(rvcn_dec_message_avc_t); + index_codec->filled = 0; + ++header->num_buffers; + if (encrypted) { index_drm->message_id = RDECODE_MESSAGE_DRM; index_drm->offset = offset_drm; index_drm->size = sizeof(rvcn_dec_message_drm_t); index_drm->filled = 0; + ++header->num_buffers; } - index->offset = offset_codec; - index->size = sizeof(rvcn_dec_message_avc_t); - index->filled = 0; - decode->stream_type = dec->stream_type; decode->decode_flags = 0; decode->width_in_samples = dec->base.width; @@ -1536,7 +1537,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, case PIPE_VIDEO_FORMAT_MPEG4_AVC: { rvcn_dec_message_avc_t avc = get_h264_msg(dec, (struct pipe_h264_picture_desc *)picture); memcpy(codec, (void *)&avc, sizeof(rvcn_dec_message_avc_t)); - index->message_id = RDECODE_MESSAGE_AVC; + index_codec->message_id = RDECODE_MESSAGE_AVC; break; } case PIPE_VIDEO_FORMAT_HEVC: { @@ -1544,7 +1545,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, get_h265_msg(dec, target, (struct pipe_h265_picture_desc *)picture); memcpy(codec, (void *)&hevc, sizeof(rvcn_dec_message_hevc_t)); - index->message_id = RDECODE_MESSAGE_HEVC; + index_codec->message_id = RDECODE_MESSAGE_HEVC; break; } case PIPE_VIDEO_FORMAT_VC1: { @@ -1556,7 +1557,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, decode->width_in_samples = align(decode->width_in_samples, 16) / 16; decode->height_in_samples = align(decode->height_in_samples, 16) / 16; } - index->message_id = RDECODE_MESSAGE_VC1; + index_codec->message_id = RDECODE_MESSAGE_VC1; break; } case PIPE_VIDEO_FORMAT_MPEG12: { @@ -1564,7 +1565,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, get_mpeg2_msg(dec, (struct pipe_mpeg12_picture_desc *)picture); memcpy(codec, (void *)&mpeg2, sizeof(rvcn_dec_message_mpeg2_vld_t)); - index->message_id = RDECODE_MESSAGE_MPEG2_VLD; + index_codec->message_id = RDECODE_MESSAGE_MPEG2_VLD; break; } case PIPE_VIDEO_FORMAT_MPEG4: { @@ -1572,7 +1573,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, get_mpeg4_msg(dec, (struct pipe_mpeg4_picture_desc *)picture); memcpy(codec, (void *)&mpeg4, sizeof(rvcn_dec_message_mpeg4_asp_vld_t)); - index->message_id = RDECODE_MESSAGE_MPEG4_ASP_VLD; + index_codec->message_id = RDECODE_MESSAGE_MPEG4_ASP_VLD; break; } case PIPE_VIDEO_FORMAT_VP9: { @@ -1580,7 +1581,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, get_vp9_msg(dec, target, (struct pipe_vp9_picture_desc *)picture); memcpy(codec, (void *)&vp9, sizeof(rvcn_dec_message_vp9_t)); - index->message_id = RDECODE_MESSAGE_VP9; + index_codec->message_id = RDECODE_MESSAGE_VP9; break; } case PIPE_VIDEO_FORMAT_AV1: { @@ -1588,7 +1589,7 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, get_av1_msg(dec, target, (struct pipe_av1_picture_desc *)picture); memcpy(codec, (void *)&av1, sizeof(rvcn_dec_message_av1_t)); - index->message_id = RDECODE_MESSAGE_AV1; + index_codec->message_id = RDECODE_MESSAGE_AV1; if (dec->ctx.res == NULL) { unsigned ctx_size = (9 + 4) * align(sizeof(rvcn_av1_hw_frame_context_t), 2048) + _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit