[Decode] Fix for HandBrake transcoding perf with mmc

Move huc copy WL(Clear ccs) to VDBOX main WL
diff --git a/media_driver/agnostic/common/codec/hal/codechal_hw.cpp b/media_driver/agnostic/common/codec/hal/codechal_hw.cpp
index ce896fa..f4e7cea 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_hw.cpp
+++ b/media_driver/agnostic/common/codec/hal/codechal_hw.cpp
@@ -426,7 +426,8 @@
     uint32_t cpCmdsize        = 0;
     uint32_t cpPatchListSize  = 0;
 
-    if (m_hucInterface && (standard == CODECHAL_HEVC || standard == CODECHAL_CENC || standard == CODECHAL_VP9 || standard == CODECHAL_AVC))
+    if (m_hucInterface && (standard == CODECHAL_HEVC || standard == CODECHAL_CENC || standard == CODECHAL_VP9 
+        || standard == CODECHAL_AVC || standard == CODECHAL_MPEG2 || standard == CODECHAL_VC1 || standard == CODECHAL_JPEG))
     {
         CODECHAL_HW_CHK_STATUS_RETURN(m_hucInterface->GetHucStateCommandSize(
             mode, &hucCommandsSize, &hucPatchListSize, params));
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.cpp
index cdc648c..49601b1 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.cpp
@@ -42,6 +42,20 @@
     CODECHAL_DECODE_CHK_NULL_RETURN(settings);
 
     CODECHAL_DECODE_CHK_STATUS_RETURN(CodechalDecodeAvc::AllocateStandard(settings));
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)))
+    {
+        //Add HUC STATE Commands
+        MHW_VDBOX_STATE_CMDSIZE_PARAMS stateCmdSizeParams;
+
+        m_hwInterface->GetHucStateCommandSize(
+            CODECHAL_DECODE_MODE_AVCVLD,
+            &m_HucStateCmdBufferSizeNeeded,
+            &m_HucPatchListSizeNeeded,
+            &stateCmdSizeParams);
+    }
+#endif
 
     if ( MOS_VE_SUPPORTED(m_osInterface))
     {
@@ -162,6 +176,21 @@
     return MOS_STATUS_SUCCESS;
 }
 
+void CodechalDecodeAvcG12::CalcRequestedSpace(
+    uint32_t &requestedSize,
+    uint32_t &additionalSizeNeeded,
+    uint32_t &requestedPatchListSize) 
+{  
+    CODECHAL_DECODE_FUNCTION_ENTER;
+
+    requestedSize          = m_commandBufferSizeNeeded + m_HucStateCmdBufferSizeNeeded +
+                    (m_standardDecodeSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    requestedPatchListSize = m_commandPatchListSizeNeeded + m_HucPatchListSizeNeeded +
+                             (m_standardDecodePatchListSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    additionalSizeNeeded = COMMAND_BUFFER_RESERVED_SPACE;
+
+}
+
 MOS_STATUS CodechalDecodeAvcG12::SetFrameStates()
 {
     MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
@@ -182,25 +211,6 @@
     }
 #endif
 
-#ifdef _MMC_SUPPORTED
-    // To WA invalid aux data caused HW issue when MMC on
-    if (m_mmc && m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
-        m_decodeParams.m_destSurface && !Mos_ResourceIsNull(&m_decodeParams.m_destSurface->OsResource) &&
-        m_decodeParams.m_destSurface->OsResource.bConvertedFromDDIResource)
-    {
-        if (m_secureDecoder && m_secureDecoder->IsAuxDataInvalid(&m_decodeParams.m_destSurface->OsResource))
-        {
-            CODECHAL_DECODE_CHK_STATUS_RETURN(m_secureDecoder->InitAuxSurface(&m_decodeParams.m_destSurface->OsResource, false, true));
-        }
-        else
-        {
-            CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
-            CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
-                this, m_miInterface, &m_decodeParams.m_destSurface->OsResource, m_veState));
-        }
-    }
-#endif
-
     CODECHAL_DECODE_CHK_STATUS_RETURN(CodechalDecodeAvc::SetFrameStates());
 
     if (MOS_VE_SUPPORTED(m_osInterface) && !MOS_VE_CTXBASEDSCHEDULING_SUPPORTED(m_osInterface))
@@ -227,6 +237,25 @@
 
     CODECHAL_DECODE_FUNCTION_ENTER;
 
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
+        m_decodeParams.m_destSurface && !Mos_ResourceIsNull(&m_decodeParams.m_destSurface->OsResource) &&
+        m_decodeParams.m_destSurface->OsResource.bConvertedFromDDIResource)
+    {
+        if (m_secureDecoder && m_secureDecoder->IsAuxDataInvalid(&m_decodeParams.m_destSurface->OsResource))
+        {
+            CODECHAL_DECODE_CHK_STATUS_RETURN(m_secureDecoder->InitAuxSurface(&m_decodeParams.m_destSurface->OsResource, false, true));
+        }
+        else
+        {
+            CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
+            CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
+                this, m_miInterface, &m_decodeParams.m_destSurface->OsResource, m_veState));
+        }
+    }
+#endif
+
     if (m_secureDecoder)
     {
         CODECHAL_DECODE_CHK_STATUS_RETURN(m_secureDecoder->Execute(this));
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.h b/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.h
index 97f48e6..8491ed4 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.h
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_avc_g12.h
@@ -124,6 +124,10 @@
     MOS_STATUS  InitSfcState() override;
 
     MOS_STATUS SetGpuCtxCreatOption(CodechalSetting *settings) override;
+    void CalcRequestedSpace(
+        uint32_t &requestedSize,
+        uint32_t &additionalSizeNeeded,
+        uint32_t &requestedPatchListSize) override;
 
     //!
     //! \brief  Utility function to allocate internal histogram surface
@@ -137,6 +141,10 @@
 
     PMOS_SURFACE m_histogramSurface = nullptr;  //!< Internal histogram buffer
 
+    //! \Huc state level command buffer size is required
+    uint32_t m_HucStateCmdBufferSizeNeeded = 0;
+    //! \Huc state level patch list size is required
+    uint32_t m_HucPatchListSizeNeeded = 0;
 };
 
 #endif  // __CODECHAL_DECODER_AVC_G12_H__
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.cpp
index 05acee4..66d2188 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.cpp
@@ -111,18 +111,6 @@
             &vesetParams));
     }
 
-#ifdef _MMC_SUPPORTED
-    // To WA invalid aux data caused HW issue when MMC on
-    if (m_mmc && m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
-        !Mos_ResourceIsNull(&m_destSurface.OsResource) &&
-        m_destSurface.OsResource.bConvertedFromDDIResource)
-    {
-        CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
-        CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
-            this, m_miInterface, &m_destSurface.OsResource, m_veState));
-    }
-#endif
-
     return eStatus;
 }
 
@@ -131,6 +119,17 @@
     MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
 
     CODECHAL_DECODE_FUNCTION_ENTER;
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
+        !Mos_ResourceIsNull(&m_destSurface.OsResource) &&
+        m_destSurface.OsResource.bConvertedFromDDIResource)
+    {
+        CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
+        CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
+            this, m_miInterface, &m_destSurface.OsResource, m_veState));
+    }
+#endif
 
     MHW_VDBOX_JPEG_DECODE_PIC_STATE jpegPicState;
     jpegPicState.dwOutputFormat = m_decodeParams.m_destSurface->Format;
@@ -566,6 +565,21 @@
 
     CODECHAL_DECODE_CHK_STATUS_RETURN(CodechalDecodeJpeg::AllocateStandard(settings));
 
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)))
+    {
+        //Add HUC STATE Commands
+        MHW_VDBOX_STATE_CMDSIZE_PARAMS stateCmdSizeParams;
+
+        m_hwInterface->GetHucStateCommandSize(
+            CODECHAL_DECODE_MODE_JPEG,
+            &m_HucStateCmdBufferSizeNeeded,
+            &m_HucPatchListSizeNeeded,
+            &stateCmdSizeParams);
+    }
+#endif
+
     if ( MOS_VE_SUPPORTED(m_osInterface))
     {
         static_cast<MhwVdboxMfxInterfaceG12*>(m_mfxInterface)->DisableScalabilitySupport();
@@ -592,3 +606,17 @@
     Mos_CheckVirtualEngineSupported(m_osInterface, true, true);
 }
 
+void CodechalDecodeJpegG12::CalcRequestedSpace(
+    uint32_t &requestedSize,
+    uint32_t &additionalSizeNeeded,
+    uint32_t &requestedPatchListSize)
+{
+    CODECHAL_DECODE_FUNCTION_ENTER;
+
+    requestedSize = m_commandBufferSizeNeeded + m_HucStateCmdBufferSizeNeeded +
+                    (m_standardDecodeSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    requestedPatchListSize = m_commandPatchListSizeNeeded + m_HucPatchListSizeNeeded +
+                             (m_standardDecodePatchListSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    additionalSizeNeeded = COMMAND_BUFFER_RESERVED_SPACE;
+}
+
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.h b/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.h
index 34dd54f..e1da35b 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.h
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_jpeg_g12.h
@@ -82,6 +82,10 @@
     MOS_STATUS  DecodePrimitiveLevel() override;
 
     MOS_STATUS  InitMmcState() override;
+    void CalcRequestedSpace(
+        uint32_t &requestedSize,
+        uint32_t &additionalSizeNeeded,
+        uint32_t &requestedPatchListSize) override;
 
 #ifdef _DECODE_PROCESSING_SUPPORTED
     MOS_STATUS  InitSfcState() override;
@@ -91,6 +95,10 @@
 
 private:
     PCODECHAL_DECODE_SINGLEPIPE_VIRTUALENGINE_STATE m_veState = nullptr;  //!< single pipe virtual engine state
+    //! \Huc state level command buffer size is required
+    uint32_t m_HucStateCmdBufferSizeNeeded = 0;
+    //! \Huc state level patch list size is required
+    uint32_t m_HucPatchListSizeNeeded = 0;
 };
 
 #endif  // __CODECHAL_DECODER_JPEG_G12_H__
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.cpp
index dca1232..d53124f 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.cpp
@@ -97,18 +97,6 @@
         CODECHAL_DECODE_CHK_STATUS_RETURN(CodecHalDecodeSinglePipeVE_SetHintParams(m_veState, &vesetParams));
     }
 
-#ifdef _MMC_SUPPORTED
-    // To WA invalid aux data caused HW issue when MMC on
-    if (m_mmc && m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
-        !Mos_ResourceIsNull(&m_destSurface.OsResource) &&
-        m_destSurface.OsResource.bConvertedFromDDIResource)
-    {
-        CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
-        CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
-            this, m_miInterface, &m_destSurface.OsResource, m_veState));
-    }
-#endif
-
     return eStatus;
 }
 
@@ -117,6 +105,17 @@
     MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
 
     CODECHAL_DECODE_FUNCTION_ENTER;
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
+        !Mos_ResourceIsNull(&m_destSurface.OsResource) &&
+        m_destSurface.OsResource.bConvertedFromDDIResource)
+    {
+        CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
+        CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
+            this, m_miInterface, &m_destSurface.OsResource, m_veState));
+    }
+#endif
 
     uint8_t fwdRefIdx = (uint8_t)m_picParams->m_forwardRefIdx;
     uint8_t bwdRefIdx = (uint8_t)m_picParams->m_backwardRefIdx;
@@ -634,6 +633,21 @@
     CODECHAL_DECODE_CHK_STATUS_RETURN(CodechalDecodeMpeg2::AllocateStandard(
         settings));
 
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)))
+    {
+        MHW_VDBOX_STATE_CMDSIZE_PARAMS stateCmdSizeParams;
+
+        //Add HUC STATE Commands
+        m_hwInterface->GetHucStateCommandSize(
+            CODECHAL_DECODE_MODE_MPEG2VLD,
+            &m_HucStateCmdBufferSizeNeeded,
+            &m_HucPatchListSizeNeeded,
+            &stateCmdSizeParams);
+    }
+#endif
+
     if ( MOS_VE_SUPPORTED(m_osInterface))
     {
         static_cast<MhwVdboxMfxInterfaceG12*>(m_mfxInterface)->DisableScalabilitySupport();
@@ -660,3 +674,17 @@
     Mos_CheckVirtualEngineSupported(m_osInterface, true, true);
 }
 
+void CodechalDecodeMpeg2G12::CalcRequestedSpace(
+    uint32_t &requestedSize,
+    uint32_t &additionalSizeNeeded,
+    uint32_t &requestedPatchListSize)
+{
+    CODECHAL_DECODE_FUNCTION_ENTER;
+
+    requestedSize = m_commandBufferSizeNeeded + m_HucStateCmdBufferSizeNeeded +
+                    (m_standardDecodeSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    requestedPatchListSize = m_commandPatchListSizeNeeded + m_HucPatchListSizeNeeded +
+                             (m_standardDecodePatchListSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    additionalSizeNeeded = COMMAND_BUFFER_RESERVED_SPACE;
+}
+
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.h b/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.h
index 0094dad..3154255 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.h
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_mpeg2_g12.h
@@ -84,11 +84,20 @@
 
     MOS_STATUS  InitMmcState() override;
 
+    void CalcRequestedSpace(
+        uint32_t &requestedSize,
+        uint32_t &additionalSizeNeeded,
+        uint32_t &requestedPatchListSize) override;
+
 protected:
     MOS_STATUS SetGpuCtxCreatOption(CodechalSetting *settings) override;
 
 private:
     PCODECHAL_DECODE_SINGLEPIPE_VIRTUALENGINE_STATE m_veState = nullptr;  //!< single pipe virtual engine state
+    //! \Huc state level command buffer size is required
+    uint32_t m_HucStateCmdBufferSizeNeeded = 0;
+    //! \Huc state level patch list size is required
+    uint32_t m_HucPatchListSizeNeeded = 0;
 };
 
 #endif  // __CODECHAL_DECODER_MPEG2_G11_H__
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.cpp
index e3a1ead..9917ea8 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.cpp
@@ -59,6 +59,21 @@
 
     CODECHAL_DECODE_CHK_STATUS_RETURN(CodechalDecodeVc1::AllocateStandard(settings));
 
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)))
+    {
+        //Add HUC STATE Commands
+        MHW_VDBOX_STATE_CMDSIZE_PARAMS stateCmdSizeParams;
+
+        m_hwInterface->GetHucStateCommandSize(
+            CODECHAL_DECODE_MODE_VC1VLD,
+            &m_HucStateCmdBufferSizeNeeded,
+            &m_HucPatchListSizeNeeded,
+            &stateCmdSizeParams);
+    }
+#endif
+
     if ( MOS_VE_SUPPORTED(m_osInterface))
     {
         static_cast<MhwVdboxMfxInterfaceG12*>(m_mfxInterface)->DisableScalabilitySupport();
@@ -118,16 +133,6 @@
     }
 
 #ifdef _MMC_SUPPORTED
-    // To WA invalid aux data caused HW issue when MMC on
-    if (m_mmc && m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
-        !Mos_ResourceIsNull(&m_destSurface.OsResource) &&
-        m_destSurface.OsResource.bConvertedFromDDIResource)
-    {
-        CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
-        CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
-            this, m_miInterface, &m_destSurface.OsResource, m_veState));
-    }
-
     bool isBPicture = m_mfxInterface->IsVc1BPicture(
                         m_vc1PicParams->CurrPic,
                         m_vc1PicParams->picture_fields.is_first_field,
@@ -161,6 +166,18 @@
     MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
 
     CODECHAL_DECODE_FUNCTION_ENTER;
+#ifdef _MMC_SUPPORTED
+    // To WA invalid aux data caused HW issue when MMC on
+    if (m_mmc->IsMmcEnabled() && (MEDIA_IS_WA(m_waTable, Wa_1408785368) || MEDIA_IS_WA(m_waTable, Wa_22010493002)) &&
+        !Mos_ResourceIsNull(&m_destSurface.OsResource) && m_destSurface.OsResource.bConvertedFromDDIResource &&
+        !(!CodecHal_PictureIsField(m_vc1PicParams->CurrPic) &&
+            m_vc1PicParams->picture_fields.picture_type == vc1SkippedFrame))
+    {
+        CODECHAL_DECODE_VERBOSEMESSAGE("Clear CCS by VE resolve before frame %d submission", m_frameNum);
+        CODECHAL_DECODE_CHK_STATUS_RETURN(static_cast<CodecHalMmcStateG12 *>(m_mmc)->ClearAuxSurf(
+            this, m_miInterface, &m_destSurface.OsResource, m_veState));
+    }
+#endif
 
     PCODEC_REF_LIST     *vc1RefList;
     vc1RefList = &(m_vc1RefList[0]);
@@ -1609,3 +1626,17 @@
         m_veState = nullptr;
     }
 }
+
+void CodechalDecodeVc1G12::CalcRequestedSpace(
+    uint32_t &requestedSize,
+    uint32_t &additionalSizeNeeded,
+    uint32_t &requestedPatchListSize)
+{
+    CODECHAL_DECODE_FUNCTION_ENTER;
+
+    requestedSize = m_commandBufferSizeNeeded + m_HucStateCmdBufferSizeNeeded +
+                    (m_standardDecodeSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    requestedPatchListSize = m_commandPatchListSizeNeeded + m_HucPatchListSizeNeeded +
+                             (m_standardDecodePatchListSizeNeeded * (m_decodeParams.m_numSlices + 1));
+    additionalSizeNeeded = COMMAND_BUFFER_RESERVED_SPACE;
+}
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.h b/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.h
index 405b14c..f30f72f 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.h
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_vc1_g12.h
@@ -83,6 +83,10 @@
     MOS_STATUS DecodePrimitiveLevelIT() override;
 
     MOS_STATUS InitMmcState() override;
+    void CalcRequestedSpace(
+        uint32_t &requestedSize,
+        uint32_t &additionalSizeNeeded,
+        uint32_t &requestedPatchListSize) override;
 
 protected:
     MOS_STATUS HandleSkipFrame() override;
@@ -92,5 +96,9 @@
     MOS_STATUS SetGpuCtxCreatOption(CodechalSetting *settings) override;
 
     PCODECHAL_DECODE_SINGLEPIPE_VIRTUALENGINE_STATE m_veState = nullptr;  //!< Sinlge pipe VirtualEngine
+    //! \Huc state level command buffer size is required
+    uint32_t m_HucStateCmdBufferSizeNeeded = 0;
+    //! \Huc state level patch list size is required
+    uint32_t m_HucPatchListSizeNeeded = 0;
 };
 #endif  // __CODECHAL_DECODER_VC1_G12_H__
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_mmc_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_mmc_g12.cpp
index 8998d09..c23de37 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_mmc_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_mmc_g12.cpp
@@ -243,6 +243,7 @@
     return MOS_STATUS_SUCCESS;
 }
 
+//Program Huc Copy related command to clear aux table, not sumbit
 MOS_STATUS CodecHalMmcStateG12::ClearAuxSurf(
     CodechalDecode*                                 m_decoder,
     MhwMiInterface *                                miInterface,
@@ -313,26 +314,8 @@
         0,                // u32CopyInputOffset
         auxSurfOffset));  // u32CopyOutputOffset
 
-    MOS_ZeroMemory(&flushDwParams, sizeof(flushDwParams));
-    CODECHAL_HW_CHK_STATUS_RETURN(miInterface->AddMiFlushDwCmd(
-        &cmdBuffer,
-        &flushDwParams));
-
-    CODECHAL_HW_CHK_STATUS_RETURN(miInterface->AddMiBatchBufferEnd(
-        &cmdBuffer,
-        nullptr));
-
     m_osInterface->pfnReturnCommandBuffer(m_osInterface, &cmdBuffer, 0);
 
-    if (MOS_VE_SUPPORTED(m_osInterface))
-    {
-        CodecHalDecodeSinglePipeVE_PopulateHintParams(m_veState, &cmdBuffer, false);
-    }
-
-    CODECHAL_HW_CHK_STATUS_RETURN(m_osInterface->pfnSubmitCommandBuffer(m_osInterface, &cmdBuffer, false));
-
-    CODECHAL_HW_CHK_STATUS_RETURN(m_osInterface->pfnSetGpuContext(m_osInterface, m_decoder->GetVideoContext()));
-
     return eStatus;
 }