From e921b889e33319918e877385c96686955c454464 Mon Sep 17 00:00:00 2001 From: Benjamin Cheng Date: Wed, 9 Aug 2023 01:32:16 -0400 Subject: [PATCH] anv/video: use vk_video_derive_h264_scaling_list Reviewed-by: Hyunjun Ko Reviewed-by: Dave Airlie Reviewed-by: Lynne Part-of: --- 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) { + 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 m = 0; m < 3; m++) - for (unsigned q = 0; q < 16; q++) - qm.ForwardQuantizerMatrix[m * 16 + q] = pps->pScalingLists->ScalingList4x4[m][q]; + 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 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 { - 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; - } - 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]; } }