Module: Mesa Branch: main Commit: e921b889e33319918e877385c96686955c454464 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e921b889e33319918e877385c96686955c454464
Author: Benjamin Cheng <[email protected]> Date: Wed Aug 9 01:32:16 2023 -0400 anv/video: use vk_video_derive_h264_scaling_list Reviewed-by: Hyunjun Ko <[email protected]> Reviewed-by: Dave Airlie <[email protected]> Reviewed-by: Lynne <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24572> --- src/intel/vulkan/genX_video.c | 102 ++++++++++-------------------------------- 1 file changed, 23 insertions(+), 79 deletions(-) diff --git a/src/intel/vulkan/genX_video.c b/src/intel/vulkan/genX_video.c index 788877ee2ed..f00d5d675f4 100644 --- a/src/intel/vulkan/genX_video.c +++ b/src/intel/vulkan/genX_video.c @@ -1022,90 +1022,34 @@ anv_h264_decode_video(struct anv_cmd_buffer *cmd_buffer, avc_img.CurrentPictureFrameNumber = h264_pic_info->pStdPictureInfo->frame_num; } - if (pps->flags.pic_scaling_matrix_present_flag) { - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_4x4_Intra_MATRIX; - for (unsigned m = 0; m < 3; m++) - for (unsigned q = 0; q < 16; q++) - qm.ForwardQuantizerMatrix[m * 16 + q] = pps->pScalingLists->ScalingList4x4[m][q]; - } - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_4x4_Inter_MATRIX; - for (unsigned m = 0; m < 3; m++) - for (unsigned q = 0; q < 16; q++) - qm.ForwardQuantizerMatrix[m * 16 + q] = pps->pScalingLists->ScalingList4x4[m + 3][q]; - } - if (pps->flags.transform_8x8_mode_flag) { - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_8x8_Intra_MATRIX; - for (unsigned q = 0; q < 64; q++) - qm.ForwardQuantizerMatrix[q] = pps->pScalingLists->ScalingList8x8[0][q]; - } - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_8x8_Inter_MATRIX; - for (unsigned q = 0; q < 64; q++) - qm.ForwardQuantizerMatrix[q] = pps->pScalingLists->ScalingList8x8[1][q]; - } - } - } else if (sps->flags.seq_scaling_matrix_present_flag) { - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_4x4_Intra_MATRIX; - for (unsigned m = 0; m < 3; m++) - for (unsigned q = 0; q < 16; q++) - qm.ForwardQuantizerMatrix[m * 16 + q] = sps->pScalingLists->ScalingList4x4[m][q]; - } - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_4x4_Inter_MATRIX; - for (unsigned m = 0; m < 3; m++) - for (unsigned q = 0; q < 16; q++) - qm.ForwardQuantizerMatrix[m * 16 + q] = sps->pScalingLists->ScalingList4x4[m + 3][q]; - } - if (pps->flags.transform_8x8_mode_flag) { - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_8x8_Intra_MATRIX; - for (unsigned q = 0; q < 64; q++) - qm.ForwardQuantizerMatrix[q] = sps->pScalingLists->ScalingList8x8[0][q]; - } - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_8x8_Inter_MATRIX; - for (unsigned q = 0; q < 64; q++) - qm.ForwardQuantizerMatrix[q] = sps->pScalingLists->ScalingList8x8[1][q]; - } - } - } else { + StdVideoH264ScalingLists scaling_lists; + vk_video_derive_h264_scaling_list(sps, pps, &scaling_lists); + anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { + qm.DWordLength = 16; + qm.AVC = AVC_4x4_Intra_MATRIX; + for (unsigned m = 0; m < 3; m++) + for (unsigned q = 0; q < 16; q++) + qm.ForwardQuantizerMatrix[m * 16 + q] = scaling_lists.ScalingList4x4[m][q]; + } + anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { + qm.DWordLength = 16; + qm.AVC = AVC_4x4_Inter_MATRIX; + for (unsigned m = 0; m < 3; m++) + for (unsigned q = 0; q < 16; q++) + qm.ForwardQuantizerMatrix[m * 16 + q] = scaling_lists.ScalingList4x4[m + 3][q]; + } + if (pps->flags.transform_8x8_mode_flag) { anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { qm.DWordLength = 16; - qm.AVC = AVC_4x4_Intra_MATRIX; - for (unsigned q = 0; q < 3 * 16; q++) - qm.ForwardQuantizerMatrix[q] = 0x10; + qm.AVC = AVC_8x8_Intra_MATRIX; + for (unsigned q = 0; q < 64; q++) + qm.ForwardQuantizerMatrix[q] = scaling_lists.ScalingList8x8[0][q]; } anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { qm.DWordLength = 16; - qm.AVC = AVC_4x4_Inter_MATRIX; - for (unsigned q = 0; q < 3 * 16; q++) - qm.ForwardQuantizerMatrix[q] = 0x10; - } - if (pps->flags.transform_8x8_mode_flag) { - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_8x8_Intra_MATRIX; - for (unsigned q = 0; q < 64; q++) - qm.ForwardQuantizerMatrix[q] = 0x10; - } - anv_batch_emit(&cmd_buffer->batch, GENX(MFX_QM_STATE), qm) { - qm.DWordLength = 16; - qm.AVC = AVC_8x8_Inter_MATRIX; - for (unsigned q = 0; q < 64; q++) - qm.ForwardQuantizerMatrix[q] = 0x10; - } + qm.AVC = AVC_8x8_Inter_MATRIX; + for (unsigned q = 0; q < 64; q++) + qm.ForwardQuantizerMatrix[q] = scaling_lists.ScalingList8x8[1][q]; } }
