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 b0e0065..ef97487 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
@@ -605,15 +605,15 @@
     // Check IECP first here, since IECP is done after DI, and the vebox downsampling not affect the vebox input.
     if (executeCaps.bIECP)
     {
-        if (executeCaps.bHDR3DLUT)
-        {
-            return IS_COLOR_SPACE_BT2020(colorSpaceOutput) ? Format_R10G10B10A2 : Format_A8B8G8R8;
-        }
         // Upsampling to yuv444 for IECP input/output.
         // To align with legacy path, need to check whether inputFormat can also be used for IECP case,
         // in which case IECP down sampling will be applied.
         return Format_AYUV;
     }
+    else if (executeCaps.bHDR3DLUT)
+    {
+        return IS_COLOR_SPACE_BT2020(colorSpaceOutput) ? Format_R10G10B10A2 : Format_A8B8G8R8;
+    }
     else if (executeCaps.bDI)
     {
         // If the input is 4:2:0, then chroma data is doubled vertically to 4:2:2
@@ -1266,6 +1266,9 @@
     // Insert Vebox statistics surface
     surfGroup.insert(std::make_pair(SurfaceTypeStatistics, m_veboxStatisticsSurface));
 
+    // Insert Vebox 3Dlut surface
+    surfGroup.insert(std::make_pair(SurfaceType3dLut, m_vebox3DLookUpTables));
+
     // Update previous Dn output flag for next frame to use.
     if (surfGroup.find(SurfaceTypeDNOutput) != surfGroup.end() || m_sameSamples && m_pastDnOutputValid)
     {
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 4b7eb80..415baf6 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
@@ -354,21 +354,24 @@
         VP_PUBLIC_CHK_STATUS_RETURN(MOS_STATUS_INVALID_PARAMETER);
     }
 
-    MOS_FORMAT   hdrFormat = Format_Any;
-    VPHAL_CSPACE hdrCSpace = CSpace_Any;
-
-    if (m_hwCaps.m_sfcHwEntry[cscParams->formatInput].inputSupported &&
+    MOS_FORMAT   hdrFormat  = Format_Any;
+    VPHAL_CSPACE hdrCSpace  = CSpace_Any;
+    hdrCSpace               = IS_COLOR_SPACE_BT2020(cscParams->output.colorSpace) ? CSpace_BT2020_RGB : CSpace_sRGB;
+    hdrFormat               = IS_COLOR_SPACE_BT2020(cscParams->output.colorSpace) ? Format_R10G10B10A2 : Format_A8R8G8B8;
+    if (m_hwCaps.m_sfcHwEntry[hdrFormat].inputSupported &&
         m_hwCaps.m_sfcHwEntry[cscParams->formatOutput].outputSupported &&
-        m_hwCaps.m_sfcHwEntry[cscParams->formatInput].cscSupported)
+        m_hwCaps.m_sfcHwEntry[hdrFormat].cscSupported)
     {
-        hdrCSpace = IS_COLOR_SPACE_BT2020(cscParams->output.colorSpace) ? CSpace_BT2020_RGB : CSpace_sRGB;
-        hdrFormat = IS_COLOR_SPACE_BT2020(cscParams->output.colorSpace) ? Format_R10G10B10A2 : Format_A8R8G8B8;
-        if (m_hwCaps.m_sfcHwEntry[hdrFormat].inputSupported &&
-            m_hwCaps.m_sfcHwEntry[cscParams->formatOutput].outputSupported &&
-            m_hwCaps.m_sfcHwEntry[hdrFormat].cscSupported)
+        cscEngine->bEnabled = 1;
+        cscEngine->VeboxNeeded  = 0;
+        cscEngine->RenderNeeded = 0;
+        if (hdrFormat != cscParams->formatOutput || hdrCSpace != cscParams->output.colorSpace)
         {
-            cscEngine->bEnabled = 1;
-            cscEngine->SfcNeeded |= 1;
+            cscEngine->SfcNeeded    |= 1;
+        }
+        else
+        {
+            cscEngine->SfcNeeded    = 0;
         }
     }
     else
@@ -918,7 +921,6 @@
     {
         pHDREngine->bEnabled        = 1;
         pHDREngine->VeboxNeeded     = 1;
-        pHDREngine->VeboxIECPNeeded = 1;
         if (hdrParams->formatOutput == Format_A8B8G8R8 || hdrParams->formatOutput == Format_A8R8G8B8)
         {
             pHDREngine->VeboxARGBOut = 1;
@@ -1096,6 +1098,10 @@
             }
         }
     }
+    else
+    {
+        VP_PUBLIC_CHK_STATUS_RETURN(FilterFeatureCombination(inputPipe));
+    }
 
     engineCaps.value = 0;
     // Set Engine Caps the first time
@@ -1116,6 +1122,39 @@
     return MOS_STATUS_SUCCESS;
 }
 
+MOS_STATUS Policy::FilterFeatureCombination(SwFilterSubPipe *pipe)
+{
+    VP_FUNC_CALL();
+
+    auto hdr = pipe->GetSwFilter(FeatureTypeHdr);
+    if (nullptr != hdr)
+    {
+        for (auto filterID : m_featurePool)
+        {
+            if (filterID == FeatureTypeTcc ||
+                filterID == FeatureTypeSte ||
+                filterID == FeatureTypeProcamp)
+            {
+                auto feature = pipe->GetSwFilter(FeatureType(filterID));
+                if (feature && feature->GetFilterEngineCaps().bEnabled)
+                {
+                    feature->GetFilterEngineCaps().bEnabled = false;
+                }
+            }
+            if (filterID == FeatureTypeCsc)
+            {
+                SwFilterCsc *feature = (SwFilterCsc *)pipe->GetSwFilter(FeatureType(filterID));
+                if (feature)
+                {
+                    auto &params      = feature->GetSwFilterParams();
+                    params.pIEFParams = nullptr;
+                }
+            }
+        }
+    }
+    return MOS_STATUS_SUCCESS;
+}
+
 MOS_STATUS Policy::BuildExecuteFilter(SwFilterPipe& featurePipe, VP_EXECUTE_CAPS& caps, HW_FILTER_PARAMS& params)
 {
     VP_FUNC_CALL();
@@ -1247,7 +1286,7 @@
                 }
                 // Vebox only cases
                 else if (caps.bVebox && engineCaps->bEnabled &&
-                    (engineCaps->VeboxNeeded || (caps.bIECP && filterID == FeatureTypeCsc)))
+                    (engineCaps->VeboxNeeded || (!caps.bHDR3DLUT && caps.bIECP && filterID == FeatureTypeCsc)))
                 {
                     UpdateExeCaps(feature, caps, EngineTypeVebox);
                 }
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 9dc37d4..0b90067 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
@@ -113,6 +113,8 @@
 
     MOS_STATUS AssignExecuteResource(VP_EXECUTE_CAPS& caps, HW_FILTER_PARAMS& params);
 
+    virtual MOS_STATUS FilterFeatureCombination(SwFilterSubPipe *pipe);
+
     virtual bool IsVeboxSecurePathEnabled(SwFilterPipe& subSwFilterPipe, VP_EXECUTE_CAPS& caps)
     {
         return false;
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp
index 6ef0e50..d5dc532 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp
@@ -202,8 +202,8 @@
         m_sfcCSCParams->iefParams = m_cscParams.pIEFParams;
     }
 
-    m_cscParams.input.colorSpace    = GetSfcInputColorSpace(m_executeCaps, m_cscParams.input.colorSpace, m_cscParams.output.colorSpace);
-    m_sfcCSCParams->inputColorSpace = m_cscParams.input.colorSpace;
+    m_cscParams.input.colorSpace    = m_cscParams.input.colorSpace;
+    m_sfcCSCParams->inputColorSpace = GetSfcInputColorSpace(m_executeCaps, m_cscParams.input.colorSpace, m_cscParams.output.colorSpace);
 
     m_cscParams.formatInput         = GetSfcInputFormat(m_executeCaps, m_cscParams.formatInput, m_cscParams.output.colorSpace);
     m_sfcCSCParams->inputFormat     = m_cscParams.formatInput;
@@ -322,7 +322,7 @@
     VP_RENDER_CHK_NULL_RETURN(m_veboxCSCParams);
 
     VPHAL_COLORPACK       srcColorPack;
-    bool bNeedUpSampling = vpExecuteCaps.bIECP;
+    bool bNeedUpSampling = vpExecuteCaps.bIECP || vpExecuteCaps.bHDR3DLUT;
     bool bDIEnabled      = vpExecuteCaps.bDI;
 
     srcColorPack = VpHal_GetSurfaceColorPack(m_cscParams.formatInput);
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp
index d796532..01973de 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp
@@ -113,6 +113,7 @@
     MOS_FORMAT format,
     bool bOutput,
     bool bRotateNeeded,
+    bool bVEHDR3DlutUsed,
     uint16_t & widthAlignUnit,
     uint16_t & heightAlignUnit)
 {
@@ -136,6 +137,11 @@
         // Output rect has been rotated in SwFilterScaling::Configure. Need to swap the alignUnit accordingly.
         swap(widthAlignUnit, heightAlignUnit);
     }
+    if (m_pvpMhwInterface && MEDIA_IS_SKU(m_pvpMhwInterface->m_skuTable, FtrHeight8AlignVE3DLUTDualPipe)
+        && bVEHDR3DlutUsed)
+    {
+        heightAlignUnit = 8;
+    }
 }
 
 MOS_STATUS VpScalingFilter::IsColorfillEnable()
@@ -274,8 +280,8 @@
     MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
 
     GetFormatWidthHeightAlignUnit(isOutputSurf ? m_scalingParams.formatOutput : m_scalingParams.formatInput,
-        isOutputSurf, m_scalingParams.rotation.rotationNeeded, wWidthAlignUnit, wHeightAlignUnit);
-    GetFormatWidthHeightAlignUnit(m_scalingParams.formatOutput, true, m_scalingParams.rotation.rotationNeeded, wWidthAlignUnitForDstRect, wHeightAlignUnitForDstRect);
+        isOutputSurf, m_scalingParams.rotation.rotationNeeded, false, wWidthAlignUnit, wHeightAlignUnit);
+    GetFormatWidthHeightAlignUnit(m_scalingParams.formatOutput, true, false, m_scalingParams.rotation.rotationNeeded, wWidthAlignUnitForDstRect, wHeightAlignUnitForDstRect);
 
     // The source rectangle is floored to the aligned unit to
     // get rid of invalid data(ex: an odd numbered src rectangle with NV12 format
@@ -393,6 +399,7 @@
         GetFormatWidthHeightAlignUnit(
             m_scalingParams.formatOutput,
             true,
+            false,
             m_scalingParams.rotation.rotationNeeded,
             wOutputWidthAlignUnit,
             wOutputHeightAlignUnit);
@@ -401,6 +408,7 @@
         GetFormatWidthHeightAlignUnit(
             m_sfcScalingParams->inputFrameFormat,
             false,
+            m_executeCaps.bHDR3DLUT,
             m_scalingParams.rotation.rotationNeeded,
             wInputWidthAlignUnit,
             wInputHeightAlignUnit);
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h
index 7a2940f..bea0109 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h
@@ -96,6 +96,7 @@
         MOS_FORMAT              format,
         bool                    bOutput,
         bool                    bRotateNeeded,
+        bool                    bVE3DlutUsed,
         uint16_t                &widthAlignUnit,
         uint16_t                &heightAlignUnit);
 
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_common.h b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_common.h
index ec0d339..2afd581 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_common.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/packet/vp_vebox_common.h
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2018-2020, Intel Corporation
+* Copyright (c) 2018-2021, Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
@@ -413,6 +413,17 @@
 
     uint32_t *pAceCacheData  = nullptr;
 
+    virtual MOS_STATUS InitChromaSampling()
+    {
+        MOS_ZeroMemory(&m_chromaSampling, sizeof(MHW_VEBOX_CHROMA_SAMPLING));
+        m_chromaSampling.BypassChromaUpsampling                     = 1;
+        m_chromaSampling.ChromaUpsamplingCoSitedHorizontalOffset    = 0;
+        m_chromaSampling.ChromaUpsamplingCoSitedVerticalOffset      = 0;
+        m_chromaSampling.BypassChromaDownsampling                   = 1;
+        m_chromaSampling.ChromaDownsamplingCoSitedHorizontalOffset  = 0;
+        m_chromaSampling.ChromaDownsamplingCoSitedVerticalOffset    = 0;
+        return MOS_STATUS_SUCCESS;
+    }
 protected:
     MHW_VEBOX_DNDI_PARAMS   m_veboxDNDIParams = {};
     MHW_VEBOX_IECP_PARAMS   m_veboxIecpParams = {};
