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];
       }
    }
 

Reply via email to