diff --git a/media_driver/agnostic/common/vp/hal/vphal_render_vebox_base.cpp b/media_driver/agnostic/common/vp/hal/vphal_render_vebox_base.cpp
index a0ec85c..bde7eaa 100644
--- a/media_driver/agnostic/common/vp/hal/vphal_render_vebox_base.cpp
+++ b/media_driver/agnostic/common/vp/hal/vphal_render_vebox_base.cpp
@@ -346,7 +346,7 @@
     pVeboxState->SetRenderDisableFlag( pSettings->disableDnDi == false ? false : true );
 
     // Enable/Disable kernel Copy/Update for VEBox
-    pVeboxState->dwKernelUpdate = pSettings->kernelUpdate;
+    pVeboxState->dwKernelUpdate       = pSettings->kernelUpdate;
 
     // Setup Same Sample Threshold for VEBOX
     pVeboxState->iSameSampleThreshold = pSettings->sameSampleThreshold;
diff --git a/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.cpp b/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.cpp
index 1ae755c..63c08da 100644
--- a/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.cpp
+++ b/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.cpp
@@ -260,9 +260,6 @@
         m_renderHal,
         &m_bindingTable));
 
-    // Reset a new Binding index from start
-    m_bindingTableEntry = 0;
-
     // load kernels before packet submit PipeLine to load kernel
 
     return MOS_STATUS_SUCCESS;
@@ -355,6 +352,7 @@
 
 uint32_t RenderCmdPacket::SetSurfaceForHwAccess(PMOS_SURFACE surface, PRENDERHAL_SURFACE_NEXT pRenderSurface, PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams, bool bWrite)
 {
+
     PMOS_INTERFACE                  pOsInterface;
     PRENDERHAL_SURFACE_STATE_ENTRY  pSurfaceEntries[MHW_MAX_SURFACE_PLANES];
     int32_t                         iSurfaceEntries;
@@ -425,133 +423,6 @@
     return iBTEntry;
 }
 
-uint32_t RenderCmdPacket::SetSurfaceForHwAccess(
-    PMOS_SURFACE                    surface, 
-    PRENDERHAL_SURFACE_NEXT         pRenderSurface, 
-    PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams, 
-    uint32_t                        bindingIndex, 
-    bool                            bWrite)
-{
-    PMOS_INTERFACE                  pOsInterface;
-    PRENDERHAL_SURFACE_STATE_ENTRY  pSurfaceEntries[MHW_MAX_SURFACE_PLANES];
-    int32_t                         iSurfaceEntries;
-    int32_t                         i;
-    MOS_STATUS                      eStatus;
-    RENDERHAL_SURFACE_STATE_PARAMS  surfaceParams;
-
-    // Initialize Variables
-    eStatus = MOS_STATUS_SUCCESS;
-    pOsInterface = m_osInterface;
-
-    RENDER_PACKET_CHK_NULL_RETURN(pRenderSurface);
-    RENDER_PACKET_CHK_NULL_RETURN(pOsInterface);
-
-    // Register surfaces for rendering (GfxAddress/Allocation index)
-    // Register resource
-    RENDER_PACKET_CHK_STATUS_RETURN(m_osInterface->pfnRegisterResource(
-        m_osInterface,
-        &surface->OsResource,
-        bWrite,
-        true));
-
-    if (!pSurfaceParams)
-    {
-        MOS_ZeroMemory(&surfaceParams, sizeof(RENDERHAL_SURFACE_STATE_PARAMS));
-        pSurfaceParams = &surfaceParams;
-    }
-
-    pSurfaceParams->Type = m_renderHal->SurfaceTypeDefault;
-
-    RENDER_PACKET_CHK_STATUS_RETURN(InitRenderHalSurface(
-        *surface,
-        pRenderSurface));
-
-    if (bWrite)
-    {
-        pRenderSurface->SurfType = RENDERHAL_SURF_OUT_RENDERTARGET;
-    }
-
-    // Setup surface states-----------------------------------------------------
-    RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pfnSetupSurfaceState(
-        m_renderHal,
-        pRenderSurface,
-        pSurfaceParams,
-        &iSurfaceEntries,  // for most cases, surface entry should only take 1 entry, need align with kerenl design
-        pSurfaceEntries,
-        nullptr));
-
-    uint32_t iBTEntry = bindingIndex;
-    // Bind surface states------------------------------------------------------
-    for (i = 0; i < iSurfaceEntries; i++, iBTEntry++)
-    {
-        RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pfnBindSurfaceState(
-            m_renderHal,
-            m_bindingTable,
-            iBTEntry,
-            pSurfaceEntries[i]));
-
-        pRenderSurface->Index = iBTEntry;
-    }
-
-    return bindingIndex;
-}
-
-uint32_t RenderCmdPacket::SetBufferForHwAccess(PMOS_SURFACE buffer, PRENDERHAL_SURFACE_NEXT pRenderSurface, PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams, bool bWrite)
-{
-    RENDERHAL_SURFACE                   RenderHalSurface;
-    RENDERHAL_SURFACE_STATE_PARAMS      SurfaceParam;
-    PRENDERHAL_SURFACE_STATE_ENTRY      pSurfaceEntry;
-
-    RENDER_PACKET_CHK_NULL_RETURN(m_osInterface);
-    RENDER_PACKET_CHK_NULL_RETURN(m_osInterface->osCpInterface);
-    RENDER_PACKET_CHK_NULL_RETURN(buffer);
-
-    MOS_ZeroMemory(&RenderHalSurface, sizeof(RenderHalSurface));
-
-    // not support CP yet
-    if (m_osInterface->osCpInterface->IsHMEnabled())
-    {
-        RENDER_PACKET_ASSERTMESSAGE("ERROR, need to use VpHal_CommonSetBufferSurfaceForHwAccess if under CP HM.");
-    }
-
-    // Register surfaces for rendering (GfxAddress/Allocation index)
-    // Register resource
-    RENDER_PACKET_CHK_STATUS_RETURN(m_osInterface->pfnRegisterResource(
-        m_osInterface,
-        &buffer->OsResource,
-        bWrite,
-        true));
-
-    // Setup Buffer surface-----------------------------------------------------
-    if (pSurfaceParams == nullptr)
-    {
-        MOS_ZeroMemory(&SurfaceParam, sizeof(SurfaceParam));
-        pSurfaceParams = &SurfaceParam;
-    }
-
-    RENDER_PACKET_CHK_STATUS_RETURN(InitRenderHalSurface(
-        *buffer,
-        &RenderHalSurface));
-
-    RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pfnSetupBufferSurfaceState(
-        m_renderHal,
-        &RenderHalSurface,
-        pSurfaceParams,
-        &pSurfaceEntry));
-
-    // Bind surface state-------------------------------------------------------
-    RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pfnBindSurfaceState(
-        m_renderHal,
-        m_bindingTable,
-        m_bindingTableEntry,
-        pSurfaceEntry));
-
-    pRenderSurface->Index = m_bindingTableEntry;
-
-    m_bindingTableEntry++;
-    return pRenderSurface->Index;
-}
-
 uint32_t RenderCmdPacket::SetBufferForHwAccess(MOS_BUFFER buffer, PRENDERHAL_SURFACE_NEXT pRenderSurface, PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams, bool bWrite)
 {
     RENDERHAL_SURFACE                   RenderHalSurface;
@@ -561,8 +432,6 @@
     RENDER_PACKET_CHK_NULL_RETURN(m_osInterface);
     RENDER_PACKET_CHK_NULL_RETURN(m_osInterface->osCpInterface);
 
-    MOS_ZeroMemory(&RenderHalSurface, sizeof(RenderHalSurface));
-
     // not support CP yet
     if (m_osInterface->osCpInterface->IsHMEnabled())
     {
@@ -822,17 +691,18 @@
     {
         pRenderSurface->OsSurface = surface;
     }
-
     return MOS_STATUS_SUCCESS;
 }
 
-MOS_STATUS RenderCmdPacket::InitRenderHalBuffer(MOS_BUFFER surface, PRENDERHAL_SURFACE pRenderSurface)
+MOS_STATUS RenderCmdPacket::InitRenderHalBuffer(MOS_BUFFER pSurface, PRENDERHAL_SURFACE pRenderSurface)
 {
     RENDER_PACKET_CHK_NULL_RETURN(pRenderSurface);
-    pRenderSurface->OsSurface.OsResource         = surface.OsResource;
-    pRenderSurface->OsSurface.dwWidth            = surface.size;
+    pRenderSurface->OsSurface.OsResource = pSurface.OsResource;
+
+    pRenderSurface->OsSurface.OsResource         = pSurface.OsResource;
+    pRenderSurface->OsSurface.dwWidth            = pSurface.size;
     pRenderSurface->OsSurface.dwHeight           = 1;
-    pRenderSurface->OsSurface.dwPitch            = surface.size;
+    pRenderSurface->OsSurface.dwPitch            = pSurface.size;
     pRenderSurface->OsSurface.Format             = Format_RAW;
 
     return MOS_STATUS_SUCCESS;
diff --git a/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.h b/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.h
index 952da4d..0bc3c28 100644
--- a/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.h
+++ b/media_driver/media_driver_next/agnostic/common/shared/packet/media_render_cmd_packet.h
@@ -146,7 +146,6 @@
     // 2 VEBOX KERNELS
     VeboxSecureBlockCopy,
     VeboxUpdateDnState,
-    VeboxKernelMax,
 
     // User Ptr
     UserPtr,
@@ -194,20 +193,6 @@
         PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams,
         bool                            bWrite);
 
-    // Step3: RSS Setup with fixed binding index, return index insert in binding table
-    virtual uint32_t SetSurfaceForHwAccess(
-        PMOS_SURFACE                     surface,
-        PRENDERHAL_SURFACE_NEXT         pRenderSurface,
-        PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams,
-        uint32_t                        bindingIndex,
-        bool                            bWrite);
-
-    virtual uint32_t SetBufferForHwAccess(
-        PMOS_SURFACE                        buffer,
-        PRENDERHAL_SURFACE_NEXT             pRenderSurface,
-        PRENDERHAL_SURFACE_STATE_PARAMS     pSurfaceParams,
-        bool                                bWrite);
-
     virtual uint32_t SetBufferForHwAccess(
         MOS_BUFFER                          buffer,
         PRENDERHAL_SURFACE_NEXT             pRenderSurface,
@@ -222,10 +207,7 @@
         uint32_t  maximumNumberofThreads = 0);
 
     // Step6: different kernel have different media walker settings
-    virtual MOS_STATUS SetupMediaWalker()
-    {
-        return MOS_STATUS_SUCCESS;
-    }
+    virtual MOS_STATUS SetupMediaWalker() = 0;
 
     MOS_STATUS PrepareMediaWalkerParams(KERNEL_WALKER_PARAMS params, MHW_WALKER_PARAMS& mediaWalker);
 
@@ -238,11 +220,11 @@
 
     // for VPP usage, there are more data need to updated, create as virtual for future inplemention in VPP
     virtual MOS_STATUS InitRenderHalSurface(
-        MOS_SURFACE        surface,
+        MOS_SURFACE        pSurface,
         PRENDERHAL_SURFACE pRenderSurface);
 
     virtual MOS_STATUS InitRenderHalBuffer(
-        MOS_BUFFER         surface,
+        MOS_BUFFER         pSurface,
         PRENDERHAL_SURFACE pRenderSurface);
 
     MOS_STATUS InitKernelEntry();
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp
index 0071d3f..0be2b08 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp
@@ -434,8 +434,7 @@
     {
         // VP_SURFACE should always be allocated by interface in VpAllocator,
         // which will ensure nullptr != surface->osSurface.
-        VP_PUBLIC_NORMALMESSAGE("Surfaces already been deleted, return status!");
-        return status;
+        VP_PUBLIC_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
     }
 
     if (surface->isResourceOwner)
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp
index 9fdba55..1217c54 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp
@@ -319,7 +319,7 @@
 {
     surfSetting.Clean();
 
-    if (caps.bVebox || caps.bDnKernelUpdate)
+    if (caps.bVebox)
     {
         // Create Vebox Resources
         VP_PUBLIC_CHK_STATUS_RETURN(AssignVeboxResource(caps, inputSurface, outputSurface, pastSurface, futureSurface, resHint, surfSetting));
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp
index d009a44..18ecfc3 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp
@@ -168,29 +168,5 @@
 
 MOS_STATUS HwFilterRender::SetPacketParams(VpCmdPacket &packet)
 {
-    bool bRet = true;
-
-    PVPHAL_SURFACE pSrcSurface    = nullptr;
-    PVPHAL_SURFACE pOutputSurface = nullptr;
-
-    // Remove dependence on vphal surface later.
-    VP_PUBLIC_CHK_NULL_RETURN(m_swFilterPipe);
-    VP_SURFACE* inputSurf  = m_swFilterPipe->GetSurface(true, 0);
-    VP_SURFACE* outputSurf = m_swFilterPipe->GetSurface(false, 0);
-    // previousSurf can be nullptr;
-    VP_SURFACE* previousSurf = m_swFilterPipe->GetPastSurface(0);
-    auto& surfSetting        = m_swFilterPipe->GetSurfacesSetting();
-    VP_PUBLIC_CHK_NULL_RETURN(inputSurf);
-    VP_PUBLIC_CHK_NULL_RETURN(outputSurf);
-    VP_PUBLIC_CHK_STATUS_RETURN(packet.PacketInit(inputSurf, outputSurf,
-        previousSurf, surfSetting, m_vpExecuteCaps));
-
-    for (auto handler : m_Params.Params)
-    {
-        if (handler)
-        {
-            bRet = handler->SetPacketParam(&packet) && bRet;
-        }
-    }
-    return bRet ? MOS_STATUS_SUCCESS : MOS_STATUS_UNKNOWN;
+    return MOS_STATUS_SUCCESS;
 }
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.cpp
index a7df810..d75813b 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.cpp
@@ -1146,20 +1146,7 @@
         auto it = m_RenderFeatureHandlers.begin();
         for (; it != m_RenderFeatureHandlers.end(); ++it)
         {
-            if ((*(it->second)).IsFeatureEnabled(caps))
-            {
-                HwFilterParameter* pHwFilterParam = (*(it->second)).CreateHwFilterParam(caps, *params.executedFilters, m_vpInterface.GetHwInterface());
 
-                if (pHwFilterParam)
-                {
-                    params.Params.push_back(pHwFilterParam);
-                }
-                else
-                {
-                    VP_PUBLIC_ASSERTMESSAGE("Create HW Filter Failed, Return Error");
-                    return MOS_STATUS_NO_SPACE;
-                }
-            }
         }
     }
 
@@ -1306,10 +1293,6 @@
             VP_PUBLIC_CHK_STATUS_RETURN(params.executedFilters->AddSurface(surfOutput, false, 0));
         }
     }
-    else if (featurePipe.GetSecureProcessFlag())
-    {
-        VP_PUBLIC_CHK_STATUS_RETURN(UpdateSecureExecuteResource(featurePipe, caps, params));
-    }
     else
     {
         VP_PUBLIC_ASSERTMESSAGE("Output is not empty, featurePipe.IsPrimaryEmpty() = %d", featurePipe.IsPrimaryEmpty());
@@ -1441,8 +1424,8 @@
         return false;
     }
 
-    if (!m_vpInterface.GetHwInterface()->m_osInterface ||
-        !m_vpInterface.GetHwInterface()->m_osInterface->osCpInterface)
+    if (!(m_vpInterface.GetHwInterface()->m_osInterface &&
+          m_vpInterface.GetHwInterface()->m_osInterface->osCpInterface))
     {
         VP_PUBLIC_ASSERTMESSAGE("No CP Interface Available");
         return false;
@@ -1453,14 +1436,10 @@
     // Place holder: DDI can also have conditions for Kernel resource using
     if (!featurePipe.GetSecureProcessFlag() && caps.bVebox && cpInterface->IsHMEnabled())
     {
+        featurePipe.SetSecureProcessFlag(true);
         return true;
     }
 
-    if (featurePipe.GetSecureProcessFlag())
-    {
-        featurePipe.SetSecureProcessFlag(false);
-    }
-
     return false;
 }
 
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.h b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.h
index bdf5525..bcca409 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/policy.h
@@ -115,10 +115,6 @@
     MOS_STATUS AssignExecuteResource(VP_EXECUTE_CAPS& caps, HW_FILTER_PARAMS& params);
 
     bool IsVeboxSecurePathEnabled(SwFilterPipe& subSwFilterPipe, VP_EXECUTE_CAPS& caps);
-    virtual MOS_STATUS UpdateSecureExecuteResource(SwFilterPipe& featurePipe, VP_EXECUTE_CAPS& caps, HW_FILTER_PARAMS& params)
-    {
-        return MOS_STATUS_SUCCESS;
-    }
 
     std::map<FeatureType, PolicyFeatureHandler*> m_VeboxSfcFeatureHandlers;
     std::map<FeatureType, PolicyFeatureHandler*> m_RenderFeatureHandlers;
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/sw_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/sw_filter.h
index e4a87f6..a615366 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/sw_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/sw_filter.h
@@ -59,8 +59,7 @@
     FeatureTypeSteOnVebox,
     FeatureTypeAce              = 0x700,
     FeatureTypeAceOnVebox,
-    FeatureTypeVeboxUpdate      = 0x800,
-    FeatureTypeVeboxUpdateOnRender,
+    FeatureTypeSecureVeboxUpdate = 0x800,
     FeatureTypeTcc              = 0x900,
     FeatureTypeTccOnVebox,
     FeatureTypeProcamp          = 0xA00,
@@ -73,8 +72,6 @@
     FeatureTypeFD               = 0xD00,
     FeatureTypeFLD              = 0xE00,
     FeatureTypeFB               = 0xF00,
-    FeatureTypeSecureCopy      = 0x1000,
-    FeatureTypeSecureCopyOnRender,
     // ...
     NumOfFeatureType
 };
@@ -184,7 +181,7 @@
         return MOS_STATUS_UNIMPLEMENTED;
     }
 
-    virtual MOS_STATUS Configure(SwFilter& swFilter, VP_EXECUTE_CAPS caps)
+    virtual MOS_STATUS Configure(SwFilter* swFilter, VP_EXECUTE_CAPS caps)
     {
         return MOS_STATUS_UNIMPLEMENTED;
     }
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/vp_kernelset.h b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/vp_kernelset.h
index 705715d..356df8e 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/vp_kernelset.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/vp_kernelset.h
@@ -44,14 +44,11 @@
 struct RENDER_KERNEL_PARAMS
 {
     std::map<SurfaceType, VP_SURFACE*> *surfacesGroup;
-    std::vector<uint32_t>* kernelId;
+    std::vector<KernelId>* kernelId;
 };
 
 typedef std::map<KernelId, VpRenderKernelObj*> KERNEL_OBJECTS;
 
-typedef std::map<KernelId, void*> KERNEL_CONFIGS;
-typedef std::map<KernelId, KERNEL_PACKET_RENDER_DATA> KERNEL_RENDER_DATA;
-
 class VpKernelSet
 {
 public:
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h
index 815e560..a7c8fc0 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h
@@ -245,6 +245,14 @@
     uint32_t                        chromaDownSamplingHorizontalCoef;            // Chroma DownSampling Horizontal Coeff
 };
 
+struct _VEBOX_UPDATE_PARAMS
+{
+    bool                            bSecureCopyVeboxState;
+    bool                            bDnEnabled;
+    bool                            bAutoDetect;
+    VPHAL_NOISELEVEL                NoiseLevel;
+};
+
 struct _VEBOX_HDR_PARAMS
 {
     uint32_t                        uiMaxDisplayLum;       //!< Maximum Display Luminance
@@ -277,14 +285,6 @@
 using PVEBOX_PROCAMP_PARAMS = VEBOX_PROCAMP_PARAMS *;
 using VEBOX_CSC_PARAMS      = _VEBOX_CSC_PARAMS;
 using PVEBOX_CSC_PARAMS     = VEBOX_CSC_PARAMS *;
-
-struct _VEBOX_UPDATE_PARAMS
-{
-    VEBOX_DN_PARAMS                 denoiseParams;
-    VP_EXECUTE_CAPS                 veboxExecuteCaps;
-    std::vector<uint32_t>           kernelGroup;
-};
-
 using VEBOX_UPDATE_PARAMS      = _VEBOX_UPDATE_PARAMS;
 using PVEBOX_UPDATE_PARAMS     = VEBOX_UPDATE_PARAMS *;
 using VEBOX_HDR_PARAMS      = _VEBOX_HDR_PARAMS;
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_cmd_packet.h b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_cmd_packet.h
index 3727c67..38ece2c 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_cmd_packet.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_cmd_packet.h
@@ -63,11 +63,6 @@
         return MOS_STATUS_SUCCESS;
     };
 
-    virtual MOS_STATUS PrepareState()
-    {
-        return MOS_STATUS_SUCCESS;
-    };
-
     PacketType GetPacketId()
     {
         return m_PacketId;
@@ -101,10 +96,9 @@
     PacketType                  m_PacketId = VP_PIPELINE_PACKET_UNINITIALIZED;
     VP_PACKET_SHARED_CONTEXT*   m_packetSharedContext = nullptr;
     VP_SURFACE_SETTING          m_surfSetting;
-    bool                        m_packetResourcesdPrepared = false;
 
 private:
-    MediaScalability *          m_scalability = nullptr;
+    MediaScalability *m_scalability = nullptr;
 };
 }
 #endif // !__VP_CMD_PACKET_H__
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_packet_pipe.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_packet_pipe.cpp
index 81cbdec..87286ce 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_packet_pipe.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_packet_pipe.cpp
@@ -220,13 +220,6 @@
 
 MOS_STATUS PacketPipe::Execute(MediaStatusReport *statusReport, MediaScalability *&scalability, MediaContext *mediaContext, bool bEnableVirtualEngine, uint8_t numVebox)
 {
-    // PrePare Packet in case any packet resources shared
-    for (std::vector<VpCmdPacket*>::reverse_iterator it = m_Pipe.rbegin(); it != m_Pipe.rend(); ++it)
-    {
-        VpCmdPacket* packet = *it;
-        VP_PUBLIC_CHK_STATUS_RETURN(packet->PrepareState());
-    }
-
     for (std::vector<VpCmdPacket *>::iterator it = m_Pipe.begin(); it != m_Pipe.end(); ++it)
     {
         VpCmdPacket *pPacket = *it;
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp
index 7ac011a..3025a53 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp
@@ -68,12 +68,6 @@
     VP_RENDER_CHK_NULL_RETURN(m_hwInterface);
     VP_RENDER_CHK_NULL_RETURN(m_hwInterface->m_vpPlatformInterface);
 
-    if (m_packetResourcesdPrepared)
-    {
-        VP_RENDER_NORMALMESSAGE("Resource Prepared, skip this time");
-        return MOS_STATUS_SUCCESS;
-    }
-
     m_PacketId = VP_PIPELINE_PACKET_RENDER;
 
     //m_kernelCount = IDR_VP_TOTAL_NUM_KERNELS;
@@ -87,25 +81,16 @@
     // for multi-kernel prepare together
     for (auto it = m_kernelObjs.begin(); it != m_kernelObjs.end(); it++)
     {
-        void* kernelParams = nullptr;
-        KernelId kernelExecuteID = it->first;
-        m_kernel                 = it->second;
+        m_kernel = it->second;
 
         VP_RENDER_CHK_NULL_RETURN(m_kernel);
 
-        if (m_kernelConfigs.find(kernelExecuteID) != m_kernelConfigs.end())
-        {
-            kernelParams = m_kernelConfigs.find(kernelExecuteID)->second;
-        }
-
-        m_kernel->SetKernelConfigs(kernelParams);
-
         // reset render Data for current kernel
         MOS_ZeroMemory(&m_renderData, sizeof(m_renderData));
 
         VP_RENDER_CHK_STATUS_RETURN(RenderEngineSetup());
 
-        VP_RENDER_CHK_STATUS_RETURN(KernelStateSetup((KernelID)kernelExecuteID));
+        VP_RENDER_CHK_STATUS_RETURN(KernelStateSetup());
 
         VP_RENDER_CHK_STATUS_RETURN(SetupSurfaceState()); // once Surface setup done, surface index should be created here
 
@@ -113,12 +98,8 @@
 
         VP_RENDER_CHK_STATUS_RETURN(LoadKernel());
 
-        m_kernelRenderData.insert(std::make_pair(kernelExecuteID, m_renderData));
-
     }
 
-    m_packetResourcesdPrepared = true;
-
     return MOS_STATUS_SUCCESS;
 }
 
@@ -132,17 +113,7 @@
     // for multi-kernel submit in one BB for prepared kernels
     for (auto it = m_kernelObjs.begin(); it != m_kernelObjs.end(); it++)
     {
-        KernelId kernelExecuteID = it->first;
-        VpRenderKernelObj* kernel = it->second;
-
-        VP_RENDER_CHK_NULL_RETURN(kernel);
-
-        if (m_kernelRenderData.find(kernelExecuteID) != m_kernelRenderData.end())
-        {
-            m_renderData = m_kernelRenderData.find(kernelExecuteID)->second;
-        }
-
-        VP_RENDER_CHK_STATUS_RETURN(SetupMediaWalker(kernel));
+        VP_RENDER_CHK_STATUS_RETURN(SetupMediaWalker());
 
         VP_RENDER_CHK_STATUS_RETURN(RenderCmdPacket::Submit(commandBuffer, packetPhase));
     }
@@ -154,29 +125,9 @@
 
 MOS_STATUS VpRenderCmdPacket::SetVeboxUpdateParams(PVEBOX_UPDATE_PARAMS params)
 {
-    VP_RENDER_CHK_NULL_RETURN(params);
-
-    if (params->kernelGroup.empty())
-    {
-        VP_RENDER_ASSERTMESSAGE("No Kernel need to be processed");
-        return MOS_STATUS_INVALID_PARAMETER;
-    }
-
-    for (auto it : params->kernelGroup)
-    {
-        uint32_t kernel = it;
-        m_kernelId.push_back(kernel);
-        m_kernelConfigs.insert(std::make_pair((KernelId)kernel, (void*)params));
-    }
-
     return MOS_STATUS_SUCCESS;
 }
 
-MOS_STATUS VpRenderCmdPacket::SetSecureCopyParams(bool copyNeeded)
-{
-    return MOS_STATUS();
-}
-
 MOS_STATUS VpRenderCmdPacket::PacketInit(
     VP_SURFACE* inputSurface, 
     VP_SURFACE* outputSurface, 
@@ -190,15 +141,11 @@
     VP_UNUSED(previousSurface);
 
     m_PacketCaps    = packetCaps;
-
-    // Init packet surface params.
-    m_surfSetting = surfSetting;
-
-    m_packetResourcesdPrepared = false;
+    m_surfSetting   = surfSetting;
     return MOS_STATUS_SUCCESS;
 }
 
-MOS_STATUS VpRenderCmdPacket::KernelStateSetup(KernelID kernelExecuteID)
+MOS_STATUS VpRenderCmdPacket::KernelStateSetup()
 {
     if (m_kernelId.empty())
     {
@@ -218,7 +165,7 @@
     MOS_ZeroMemory(&m_renderData.KernelEntry, sizeof(Kdll_CacheEntry));
 
     // Store pointer to Kernel Parameter
-    VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetKernelSettings(m_renderData.KernelParam, kernelExecuteID));
+    VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetKernelSettings(m_renderData.KernelParam));
     VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetKernelID(iKUID));
     kernelSize   = m_kernel->GetKernelSize();
     kernelBinary = m_kernel->GetKernelBinary();
@@ -245,92 +192,52 @@
 {
     VP_RENDER_CHK_NULL_RETURN(m_kernel);
 
-    VP_RENDER_CHK_STATUS_RETURN(m_kernel->SetProcessSurface(m_surfSetting.surfGroup));
-
-    if (!m_kernel->GetKernelSurfaceConfig().empty())
+    for (auto it : m_kernel->GetProcessingSurfaces())
     {
-        for (auto surface = m_kernel->GetKernelSurfaceConfig().begin(); surface != m_kernel->GetKernelSurfaceConfig().end(); surface++)
+        auto surface = m_kernel->GetKernelSurfaceConfig().find(it);
+
+        if (surface != m_kernel->GetKernelSurfaceConfig().end())
         {
-            KERNEL_SURFACE2D_STATE_PARAM *kernelSurfaceParam = &surface->second;
-            SurfaceType type = surface->first;
+            KERNEL_SURFACE2D_STATE_PARAM kernelSurfaceParam = surface->second;
 
             RENDERHAL_SURFACE_NEXT renderHalSurface;
             MOS_ZeroMemory(&renderHalSurface, sizeof(RENDERHAL_SURFACE_NEXT));
 
             RENDERHAL_SURFACE_STATE_PARAMS renderSurfaceParams;
             MOS_ZeroMemory(&renderSurfaceParams, sizeof(RENDERHAL_SURFACE_STATE_PARAMS));
-            if (kernelSurfaceParam->surfaceOverwriteParams.updatedRenderSurfaces)
+            if (kernelSurfaceParam.surfaceOverwriteParams.updatedSurfaceParams)
             {
-                renderSurfaceParams = kernelSurfaceParam->surfaceOverwriteParams.renderSurfaceParams;
+                renderSurfaceParams = kernelSurfaceParam.surfaceOverwriteParams.renderSurfaceParams;
             }
             else
             {
-                renderSurfaceParams.bRenderTarget    = (kernelSurfaceParam->renderTarget == true) ? 1 : 0;
+                renderSurfaceParams.bRenderTarget    = (kernelSurfaceParam.renderTarget == true) ? 1 : 0;
                 renderSurfaceParams.Boundary         = RENDERHAL_SS_BOUNDARY_ORIGINAL; // Add conditional in future for Surfaces out of range
                 renderSurfaceParams.bWidth16Align    = false;
                 renderSurfaceParams.bWidthInDword_Y  = true;
                 renderSurfaceParams.bWidthInDword_UV = true;
             }
 
-            VP_SURFACE* vpSurface = nullptr;
+            VP_SURFACE* vpSurface = m_surfSetting.surfGroup.find(it)->second;
 
-            if (m_surfSetting.surfGroup.find(type) != m_surfSetting.surfGroup.end())
-            {
-                vpSurface = m_surfSetting.surfGroup.find(type)->second;
-            }
-            else
-            {
-                vpSurface = nullptr;
-            }
+            VP_RENDER_CHK_NULL_RETURN(vpSurface);
 
-            if (vpSurface)
-            {
-                // Prepare surfaces tracked in Resource manager
-                VP_RENDER_CHK_STATUS_RETURN(InitRenderHalSurface(*vpSurface, renderHalSurface));
-            }
-            else
-            {
-                // State Heaps are not tracked in resource manager till now
-                VP_RENDER_CHK_STATUS_RETURN(InitStateHeapSurface(type, renderHalSurface));
-            }
+            VP_RENDER_CHK_STATUS_RETURN(InitRenderHalSurface(*vpSurface, renderHalSurface));
 
-            VP_RENDER_CHK_STATUS_RETURN(UpdateRenderSurface(renderHalSurface, *kernelSurfaceParam));
+            VP_RENDER_CHK_STATUS_RETURN(UpdateRenderSurface(renderHalSurface, kernelSurfaceParam));
 
-            uint32_t index = 0;
+            uint32_t index = SetSurfaceForHwAccess(
+                vpSurface->osSurface,
+                &renderHalSurface,
+                &renderSurfaceParams,
+                renderSurfaceParams.bRenderTarget);
 
-            if (kernelSurfaceParam->surfaceOverwriteParams.bindedKernel)
-            {
-                index = SetSurfaceForHwAccess(
-                    &renderHalSurface.OsSurface,
-                    &renderHalSurface,
-                    &renderSurfaceParams,
-                    kernelSurfaceParam->surfaceOverwriteParams.bindIndex,
-                    renderSurfaceParams.bRenderTarget);
-            }
-            else
-            {
-                if ((kernelSurfaceParam->surfaceOverwriteParams.updatedSurfaceParams  &&
-                     kernelSurfaceParam->surfaceOverwriteParams.bufferResource)       ||
-                    (!kernelSurfaceParam->surfaceOverwriteParams.updatedSurfaceParams &&
-                      renderHalSurface.OsSurface.Type == MOS_GFXRES_BUFFER))
-                {
-                    index = SetBufferForHwAccess(
-                        &renderHalSurface.OsSurface,
-                        &renderHalSurface,
-                        &renderSurfaceParams,
-                        renderSurfaceParams.bRenderTarget);
-                }
-                else
-                {
-                    index = SetSurfaceForHwAccess(
-                        &renderHalSurface.OsSurface,
-                        &renderHalSurface,
-                        &renderSurfaceParams,
-                        renderSurfaceParams.bRenderTarget);
-                }
-            }
-
-            VP_RENDER_CHK_STATUS_RETURN(m_kernel->UpdateCurbeBindingIndex(type, index));
+            VP_RENDER_CHK_STATUS_RETURN(m_kernel->UpdateCurbeBindingIndex(it, index));
+        }
+        else
+        {
+            VP_RENDER_ASSERTMESSAGE("Kernel Obj Issue: Didn't find correct kernel surface here, return error");
+            return MOS_STATUS_UNIMPLEMENTED;
         }
     }
 
@@ -363,23 +270,22 @@
     return surf;
 }
 
-MOS_STATUS VpRenderCmdPacket::SetupMediaWalker(VpRenderKernelObj* kernel)
+MOS_STATUS VpRenderCmdPacket::SetupMediaWalker()
 {
-    VP_RENDER_CHK_NULL_RETURN(kernel);
+    VP_RENDER_CHK_NULL_RETURN(m_kernel);
 
-    VP_RENDER_CHK_STATUS_RETURN(kernel->GetWalkerSetting(m_renderData.walkerParam));
-
-    MOS_ZeroMemory(&m_mediaWalkerParams, sizeof(MHW_WALKER_PARAMS));
-    MOS_ZeroMemory(&m_gpgpuWalkerParams, sizeof(MHW_GPGPU_WALKER_PARAMS));
+    VP_RENDER_CHK_STATUS_RETURN(m_kernel->GetWalkerSetting(m_renderData.walkerParam));
 
     switch (m_walkerType)
     {
     case WALKER_TYPE_MEDIA:
+        MOS_ZeroMemory(&m_mediaWalkerParams, sizeof(MHW_WALKER_PARAMS));
         // Prepare Media Walker Params
         VP_RENDER_CHK_STATUS_RETURN(PrepareMediaWalkerParams(m_renderData.walkerParam, m_mediaWalkerParams));
         break;
     case WALKER_TYPE_COMPUTE:
         // Parepare Compute Walker Param
+        MOS_ZeroMemory(&m_gpgpuWalkerParams, sizeof(MHW_GPGPU_WALKER_PARAMS));
         VP_RENDER_CHK_STATUS_RETURN(PrepareComputeWalkerParams(m_renderData.walkerParam, m_gpgpuWalkerParams));
         break;
     case WALKER_TYPE_DISABLED:
@@ -403,41 +309,6 @@
 
     return MOS_STATUS_SUCCESS;
 }
-MOS_STATUS VpRenderCmdPacket::InitStateHeapSurface(SurfaceType type, RENDERHAL_SURFACE& renderSurface)
-{
-    MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
-
-    MOS_SURFACE mosSurface;
-
-    MOS_ZeroMemory(&mosSurface, sizeof(MOS_SURFACE));
-
-    // Check for Vebox Heap readiness
-    const MHW_VEBOX_HEAP* pVeboxHeap = nullptr;
-    VP_RENDER_CHK_NULL_RETURN(m_hwInterface);
-    VP_RENDER_CHK_NULL_RETURN(m_hwInterface->m_veboxInterface);
-
-    VP_RENDER_CHK_STATUS_RETURN(m_hwInterface->m_veboxInterface->GetVeboxHeapInfo(
-        &pVeboxHeap));
-    VP_RENDER_CHK_NULL_RETURN(pVeboxHeap);
-
-    switch (type)
-    {
-    case SurfaceTypeVeboxStateHeap_Drv:
-        mosSurface.OsResource = pVeboxHeap->DriverResource;
-        break;
-    case SurfaceTypeVeboxStateHeap_Knr:
-        mosSurface.OsResource = pVeboxHeap->KernelResource;
-        break;
-    default:
-        eStatus = MOS_STATUS_UNIMPLEMENTED;
-        VP_RENDER_ASSERTMESSAGE("Not Inplenmented in driver now, return fail");
-        break;
-    }
-
-    VP_RENDER_CHK_STATUS_RETURN(RenderCmdPacket::InitRenderHalSurface(mosSurface, &renderSurface));
-
-    return eStatus;
-}
 MOS_STATUS VpRenderCmdPacket::UpdateRenderSurface(RENDERHAL_SURFACE_NEXT& renderSurface, KERNEL_SURFACE2D_STATE_PARAM& kernelParams)
 {
     auto& overwriteParam = kernelParams.surfaceOverwriteParams;
@@ -445,9 +316,8 @@
     {
         if (overwriteParam.width && overwriteParam.height)
         {
-            renderSurface.OsSurface.dwWidth  = overwriteParam.width;
+            renderSurface.OsSurface.dwWidth = overwriteParam.width;
             renderSurface.OsSurface.dwHeight = overwriteParam.height;
-            renderSurface.OsSurface.dwQPitch = overwriteParam.height;
         }
 
         renderSurface.OsSurface.dwPitch = overwriteParam.pitch != 0 ? overwriteParam.pitch : renderSurface.OsSurface.dwPitch;
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h
index 904f1c7..218f5bf 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h
@@ -67,8 +67,6 @@
 
     MOS_STATUS SetVeboxUpdateParams(PVEBOX_UPDATE_PARAMS params);
 
-    MOS_STATUS SetSecureCopyParams(bool copyNeeded);
-
     MOS_STATUS PacketInit(
         VP_SURFACE* inputSurface,
         VP_SURFACE* outputSurface,
@@ -77,7 +75,7 @@
         VP_EXECUTE_CAPS packetCaps) override;
 
 protected:
-    MOS_STATUS KernelStateSetup(KernelID kernelExecuteID);
+    MOS_STATUS KernelStateSetup();
 
     virtual MOS_STATUS SetupSurfaceState();
 
@@ -85,29 +83,23 @@
 
     virtual VP_SURFACE* GetSurface(SurfaceType type);
 
-    virtual MOS_STATUS SetupMediaWalker(VpRenderKernelObj * kernel);
+    virtual MOS_STATUS SetupMediaWalker() override;
 
     MOS_STATUS InitRenderHalSurface(
         VP_SURFACE         &surface,
         RENDERHAL_SURFACE  &renderSurface);
 
-    MOS_STATUS InitStateHeapSurface(
-        SurfaceType        type,
-        RENDERHAL_SURFACE& renderSurface);
-
     // comments here: Hight overwite params if needed
     MOS_STATUS UpdateRenderSurface(RENDERHAL_SURFACE_NEXT &renderSurface, KERNEL_SURFACE2D_STATE_PARAM& kernelParams);
 
 protected:
 
     KERNEL_OBJECTS                     m_kernelObjs;
-    KERNEL_CONFIGS                     m_kernelConfigs;
-    KERNEL_RENDER_DATA                 m_kernelRenderData;
 
     int32_t                            m_kernelIndex = 0;
     Kdll_FilterEntry                  *m_filter = nullptr;                                       // Kernel Filter (points to base of filter array)
     bool                               m_firstFrame = true;
-    std::vector<uint32_t>              m_kernelId;
+    std::vector<KernelId>              m_kernelId;
     VpKernelSet                       *m_kernelSet = nullptr;
     VpRenderKernelObj                 *m_kernel    = nullptr; // processing kernel pointer
 };
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp
index 8547a32..512096f 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp
@@ -27,7 +27,7 @@
 #include "vp_render_kernel_obj.h"
 using namespace vp;
 
-const vp::MEDIA_OBJECT_KA2_INLINE_DATA g_cInit_MEDIA_VP_OBJECT_KA2_INLINE_DATA =
+extern const vp::MEDIA_OBJECT_KA2_INLINE_DATA g_cInit_MEDIA_VP_OBJECT_KA2_INLINE_DATA =
 {
     // DWORD 0
     {
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h
index ba227c2..1c46967 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h
@@ -283,21 +283,23 @@
     } DW15;
 };
 
+extern const MEDIA_OBJECT_KA2_INLINE_DATA g_cInit_MEDIA_VP_OBJECT_KA2_INLINE_DATA;
+
 typedef struct _KERNEL_SURFACE2D_STATE_PARAM
 {
     struct {
-        bool                           updatedSurfaceParams; // true if using included surface params
-        MOS_FORMAT                     format;               // MOS_FORMAT for processing surfaces
-        uint32_t                       width;
-        uint32_t                       height;
-        uint32_t                       pitch;
-        uint32_t                       surface_offset;     // Offset to the origin of the surface, in bytes.
-        MOS_TILE_TYPE                  tileType;
-        bool                           bufferResource;
-        bool                           bindedKernel;
-        uint32_t                       bindIndex;
-        bool                           updatedRenderSurfaces;
-        RENDERHAL_SURFACE_STATE_PARAMS renderSurfaceParams;  // default can be skip. for future usages, if surface configed by kernel, use it directlly
+        bool       updatedSurfaceParams; // true if using included surface params
+        MOS_FORMAT format; //[IN] MOS_FORMAT
+        uint32_t   width;
+        uint32_t   height;
+        //uint32_t   depth;
+        uint32_t   pitch;
+        //uint16_t   memory_object_control;
+        //uint32_t   surface_x_offset;   // Horizontal offset to the origin of the surface, in columns of pixels.
+        //uint32_t   surface_y_offset;   // Vertical offset to the origin of the surface, in rows of pixels.
+        uint32_t   surface_offset;     // Offset to the origin of the surface, in bytes.
+        MOS_TILE_TYPE tileType;
+        RENDERHAL_SURFACE_STATE_PARAMS renderSurfaceParams;  // defaule can be skip. for future usages, if surface configed by kernel, use it directlly
     } surfaceOverwriteParams;
     bool       renderTarget;        // true for render target
     uint32_t   reserved[2]; // for future usage
@@ -309,6 +311,11 @@
     VpRenderKernelObj(PVP_MHWINTERFACE hwInterface);
     virtual ~VpRenderKernelObj() {};
 
+    virtual void SetKernelParams(RENDER_KERNEL_PARAMS& kernelParams)
+    {
+        m_kernelParams = &kernelParams;
+    }
+
     // Kernel Specific, which will inplenment be each kernel
     // GetCurbeState should be called after UpdateCurbeBindingIndex for all processed surfaces being called
     virtual MOS_STATUS GetCurbeState(void*& curbe, uint32_t& curbeLength) = 0;
@@ -321,20 +328,14 @@
 
     virtual MOS_STATUS GetWalkerSetting(KERNEL_WALKER_PARAMS& walkerParam) = 0;
 
-    virtual MOS_STATUS SetKernelConfigs(void* params) = 0;
-
     // Kernel Common configs
-    virtual MOS_STATUS GetKernelSettings(RENDERHAL_KERNEL_PARAM &settsings, KernelID executeKernelID)
+    virtual MOS_STATUS GetKernelSettings(RENDERHAL_KERNEL_PARAM &settsings)
     {
         MOS_ZeroMemory(&settsings, sizeof(RENDERHAL_KERNEL_PARAM));
 
         if (m_hwInterface && m_hwInterface->m_vpPlatformInterface)
         {
-            // adding when insert new kernels
-            if (executeKernelID >= VeboxSecureBlockCopy && executeKernelID < VeboxKernelMax)
-            {
-                settsings = m_hwInterface->m_vpPlatformInterface->GetVeboxKernelSettings(executeKernelID - VeboxSecureBlockCopy);
-            }
+            settsings = m_hwInterface->m_vpPlatformInterface->GetVeboxKernelSettings(m_kernelID);
             return MOS_STATUS_SUCCESS;
         }
         else
@@ -404,10 +405,12 @@
         m_kernelSize = size;
         return MOS_STATUS_SUCCESS;
     }
+protected:
 
     virtual MOS_STATUS SetupSurfaceState() = 0;
 
 protected:
+    RENDER_KERNEL_PARAMS                                *m_kernelParams = nullptr;   // kernel input for processing params include kernel ID and process surface group
     std::map<SurfaceType, VP_SURFACE*>                  *m_surfaceGroup = nullptr;   // input surface process surface groups
     PVP_MHWINTERFACE                                     m_hwInterface = nullptr;
     std::vector<SurfaceType>                             m_surfaces;                 // vector for processed surfaces, the order should match with Curbe surface order
@@ -421,6 +424,4 @@
     //KERNEL_WALKER_PARAMS                                 m_kernelWalkerParams = {};   // Kernel Walker Params
 };
 }
-
-extern const vp::MEDIA_OBJECT_KA2_INLINE_DATA g_cInit_MEDIA_VP_OBJECT_KA2_INLINE_DATA;
 #endif // __VP_RENDER_KERNEL_OBJ_H__
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp
index 6f1594a..1553809 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp
@@ -997,7 +997,7 @@
 
 bool VpVeboxCmdPacket::UseKernelResource()
 {
-    return true;// false;
+    return false;
 }
 
 MOS_STATUS VpVeboxCmdPacket::InitVeboxSurfaceParams(
@@ -1616,36 +1616,6 @@
     return eStatus;
 }
 
-MOS_STATUS VpVeboxCmdPacket::Prepare()
-{
-    VP_FUNC_CALL();
-
-    MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
-
-    return eStatus;
-}
-
-MOS_STATUS VpVeboxCmdPacket::PrepareState()
-{
-    VP_FUNC_CALL();
-
-    MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
-
-    if (m_packetResourcesdPrepared)
-    {
-        VP_RENDER_NORMALMESSAGE("Resource Prepared, skip this time");
-        return MOS_STATUS_SUCCESS;
-    }
-
-    VP_RENDER_CHK_STATUS_RETURN(SetupIndirectStates());
-
-    VP_RENDER_CHK_STATUS_RETURN(UpdateVeboxStates());
-
-    m_packetResourcesdPrepared = true;
-
-    return eStatus;
-}
-
 MOS_STATUS VpVeboxCmdPacket::PacketInit(
     VP_SURFACE                          *inputSurface,
     VP_SURFACE                          *outputSurface,
@@ -1656,7 +1626,6 @@
     VP_FUNC_CALL();
 
     VpVeboxRenderData       *pRenderData = GetLastExecRenderData();
-    m_packetResourcesdPrepared = false;
 
     VP_RENDER_CHK_NULL_RETURN(pRenderData);
     VP_RENDER_CHK_NULL_RETURN(inputSurface);
@@ -1727,6 +1696,9 @@
         }
     }
 
+    // Setup, Copy and Update VEBOX State
+    VP_RENDER_CHK_STATUS_RETURN(CopyAndUpdateVeboxState());
+
     // Send vebox command
     VP_RENDER_CHK_STATUS_RETURN(SendVeboxCmd(commandBuffer));
 
@@ -1767,6 +1739,34 @@
     m_allocator->DestroyVpSurface(m_renderTarget);
 }
 
+MOS_STATUS VpVeboxCmdPacket::CopyAndUpdateVeboxState()
+{
+    MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
+
+    // Setup VEBOX State
+    VP_RENDER_CHK_STATUS_RETURN(SetupIndirectStates());
+
+    // Copy VEBOX State
+    VP_RENDER_CHK_STATUS_RETURN(CopyVeboxStates());
+
+    // Update VEBOX State
+    VP_RENDER_CHK_STATUS_RETURN(UpdateVeboxStates());
+
+    return eStatus;
+}
+
+
+//!
+//! \brief    Vebox Copy Vebox state heap, intended for HM or IDM
+//! \details  Copy Vebox state heap between different memory
+//! \return   MOS_STATUS
+//!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
+//!
+MOS_STATUS VpVeboxCmdPacket::CopyVeboxStates()
+{
+    return MOS_STATUS_SUCCESS;  // no need to copy, always use driver resource in clear memory
+}
+
 //!
 //! \brief    Calculate offsets of statistics surface address based on the
 //!           functions which were enabled in the previous call,
@@ -1863,6 +1863,19 @@
     return eStatus;
 }
 
+//!
+//! \brief    Vebox state heap update for auto mode features
+//! \details  Update Vebox indirect states for auto mode features
+//! \param    [in] pSrcSurface
+//!           Pointer to input surface of Vebox
+//! \return   MOS_STATUS
+//!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
+//!
+MOS_STATUS VpVeboxCmdPacket::UpdateVeboxStates()
+{
+    return MOS_STATUS_SUCCESS;
+}
+
 MOS_STATUS VpVeboxCmdPacket::AddVeboxDndiState()
 {                                                                          
     PMHW_VEBOX_INTERFACE             pVeboxInterface = m_hwInterface->m_veboxInterface;;
@@ -2336,11 +2349,6 @@
     return MOS_STATUS_SUCCESS;
 }
 
-MOS_STATUS VpVeboxCmdPacket::UpdateVeboxStates()
-{
-    return MOS_STATUS_SUCCESS;
-}
-
 MOS_STATUS VpVeboxCmdPacket::InitSurfMemCacheControl(VP_EXECUTE_CAPS packetCaps)
 {
     MOS_HW_RESOURCE_DEF                 Usage           = MOS_HW_RESOURCE_DEF_MAX;
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h
index 24e9f39..3e45603 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h
@@ -321,9 +321,7 @@
 
     virtual MOS_STATUS Destory() { return MOS_STATUS_SUCCESS; };
 
-    virtual MOS_STATUS Prepare() override;
-
-    virtual MOS_STATUS PrepareState() override;
+    virtual MOS_STATUS Prepare() override { return MOS_STATUS_SUCCESS; };
 
     virtual MOS_STATUS                  AllocateExecRenderData()
     {
@@ -736,6 +734,13 @@
         VP_SURFACE_SETTING                  &surfSetting,
         VP_EXECUTE_CAPS                     packetCaps) override;
 
+    //!
+    //! \brief    Copy and update vebox state
+    //! \details  Copy and update vebox state for input frame.
+    //! \return   MOS_STATUS
+    //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
+    //!
+    virtual MOS_STATUS CopyAndUpdateVeboxState();
 
     //!
     //! \brief    Check whether the Vebox command parameters are correct
@@ -751,6 +756,24 @@
         const MHW_VEBOX_DI_IECP_CMD_PARAMS          &VeboxDiIecpCmdParams,
         const VPHAL_VEBOX_SURFACE_STATE_CMD_PARAMS  &VeboxSurfaceStateCmdParams);
 
+    //!
+    //! \brief    Copy Vebox state heap
+    //! \details  Call HW interface function,
+    //!           use Secure_Block_Copy kernel,
+    //!           copy Vebox state heap between different memory
+    //! \return   MOS_STATUS
+    //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
+    //!
+    virtual MOS_STATUS CopyVeboxStates();
+
+    //!
+    //! \brief    Vebox state heap update for auto mode features
+    //! \details  Update Vebox indirect states for auto mode features
+    //! \return   MOS_STATUS
+    //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
+    //!
+    virtual MOS_STATUS UpdateVeboxStates();
+
     virtual MOS_STATUS QueryStatLayout(
         VEBOX_STAT_QUERY_TYPE QueryType,
         uint32_t*             pQuery) {return MOS_STATUS_SUCCESS;};
@@ -790,15 +813,6 @@
     //!
     virtual MOS_STATUS VeboxSetPerfTagPaFormat();
 
-    //!
-    //! \brief    Vebox state heap update for auto mode features
-    //! \details  Update Vebox indirect states for auto mode features
-    //! \return   MOS_STATUS
-    //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
-    //!
-    virtual MOS_STATUS UpdateVeboxStates();
-
-
 protected:
 
     //!
diff --git a/media_driver/media_driver_next/agnostic/gen12_tgllp/vp/hal/platform_interface/vp_platform_interface_g12_tgllp.cpp b/media_driver/media_driver_next/agnostic/gen12_tgllp/vp/hal/platform_interface/vp_platform_interface_g12_tgllp.cpp
index 83493be..a28ed7c 100644
--- a/media_driver/media_driver_next/agnostic/gen12_tgllp/vp/hal/platform_interface/vp_platform_interface_g12_tgllp.cpp
+++ b/media_driver/media_driver_next/agnostic/gen12_tgllp/vp/hal/platform_interface/vp_platform_interface_g12_tgllp.cpp
@@ -39,7 +39,7 @@
 
 using namespace vp;
 //Kernel Params ---------------------------------------------------------------
-extern const RENDERHAL_KERNEL_PARAM g_Vebox_KernelParam_m12[VEBOX_KERNEL_BASE_MAX_G12] =
+const RENDERHAL_KERNEL_PARAM g_Vebox_KernelParam_g12[VEBOX_KERNEL_BASE_MAX_G12] =
 {
     ///*  GRF_Count
     //    |  BT_Count
@@ -136,11 +136,7 @@
     MOS_ZeroMemory(&kernelParam, sizeof(RENDERHAL_KERNEL_PARAM));
     if (iKDTIndex < VEBOX_KERNEL_BASE_MAX_G12)
     {
-        kernelParam = g_Vebox_KernelParam_m12[iKDTIndex];
-    }
-    else
-    {
-        VP_PUBLIC_ASSERTMESSAGE("not support in Vebox Kernels");
+        kernelParam = g_Vebox_KernelParam_g12[iKDTIndex];
     }
     return kernelParam;
 }
