[VP] Enable euThreadSchedulingMode for SR

Enable euThreadScheduling mode for SR
diff --git a/media_common/agnostic/common/renderhal/renderhal.h b/media_common/agnostic/common/renderhal/renderhal.h
index 790de5c..8b3d560 100644
--- a/media_common/agnostic/common/renderhal/renderhal.h
+++ b/media_common/agnostic/common/renderhal/renderhal.h
@@ -1178,6 +1178,7 @@
     MHW_STATE_BASE_ADDR_PARAMS   StateBaseAddressParams;
     MHW_SIP_STATE_PARAMS         SipStateParams;
     MHW_WALKER_MODE              MediaWalkerMode;                               // Media object walker mode from Regkey: repel, dual mode, quad mode
+    uint32_t                     euThreadSchedulingMode;
 
     RENDERHAL_SURFACE_STATE_TYPE SurfaceTypeDefault;                            // Surface State type default
     RENDERHAL_SURFACE_STATE_TYPE SurfaceTypeAdvanced;                           // Surface State type advanced
diff --git a/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h b/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h
index 157454f..9ee5816 100644
--- a/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h
+++ b/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h
@@ -382,6 +382,7 @@
 struct _MHW_PAR_T(STATE_COMPUTE_MODE)
 {
     bool enableLargeGrf = false;
+    uint32_t forceEuThreadSchedulingMode = 0;
 };
 
 }  // namespace render
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp b/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp
index 98e5f35..07b7845 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.cpp
@@ -150,6 +150,25 @@
     return MOS_STATUS_SUCCESS;
 }
 
+MOS_STATUS VpRenderCmdPacket::SetEuThreadSchedulingMode(uint32_t mode)
+{
+    VP_FUNC_CALL();
+    VP_RENDER_CHK_NULL_RETURN(m_renderHal);
+    uint32_t curMode = m_renderHal->euThreadSchedulingMode;
+    if (curMode != mode)
+    {
+        if (curMode != 0)
+        {
+            RENDER_PACKET_ASSERTMESSAGE("Not support different modes in same kernelObjs!");
+        }
+        else
+        {
+            m_renderHal->euThreadSchedulingMode = mode;
+        }
+    }
+    return MOS_STATUS_SUCCESS;
+}
+
 MOS_STATUS VpRenderCmdPacket::Prepare()
 {
     VP_FUNC_CALL();
@@ -182,6 +201,8 @@
         return MOS_STATUS_SUCCESS;
     }
 
+    m_renderHal->euThreadSchedulingMode = 0;
+
     VP_RENDER_CHK_STATUS_RETURN(m_kernelSet->CreateKernelObjects(
         m_renderKernelParams,
         m_surfSetting.surfGroup,
@@ -227,6 +248,7 @@
             VP_RENDER_CHK_NULL_RETURN(m_kernel);
 
             m_kernel->SetCacheCntl(m_surfMemCacheCtl);
+            VP_RENDER_CHK_STATUS_RETURN(SetEuThreadSchedulingMode(m_kernel->GetEuThreadSchedulingMode()));
 
             // reset render Data for current kernel
             MOS_ZeroMemory(&m_renderData, sizeof(KERNEL_PACKET_RENDER_DATA));
@@ -305,6 +327,8 @@
             m_kernel = it->second;
             VP_RENDER_CHK_NULL_RETURN(m_kernel);
             m_kernel->SetPerfTag();
+            VP_RENDER_CHK_STATUS_RETURN(SetEuThreadSchedulingMode(m_kernel->GetEuThreadSchedulingMode()));
+
             if (it != m_kernelObjs.begin())
             {
                 // reset render Data for current kernel
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h b/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h
index e68fde6..822e495 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_cmd_packet.h
@@ -48,6 +48,8 @@
         return RenderCmdPacket::Destroy();
     }
 
+    MOS_STATUS SetEuThreadSchedulingMode(uint32_t mode);
+
     virtual MOS_STATUS Submit(MOS_COMMAND_BUFFER* commandBuffer, uint8_t packetPhase = otherPacket) override;
 
     virtual MOS_STATUS SubmitWithMultiKernel(MOS_COMMAND_BUFFER* commandBuffer, uint8_t packetPhase = otherPacket);
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp
index 9f07685..1c41afc 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp
@@ -114,6 +114,14 @@
     return MOS_STATUS_SUCCESS;
 }
 
+MOS_STATUS VpRenderKernelObj::SetTuningFlag(PKERNEL_TUNING_PARAMS tuningParams)
+{
+    VP_FUNC_CALL();
+    m_kernelTuningParams = tuningParams;
+    return MOS_STATUS_SUCCESS;
+}
+
+
 MOS_STATUS VpRenderKernelObj::SetKernelArgs(KERNEL_ARGS &kernelArgs, VP_PACKET_SHARED_CONTEXT *sharedContext)
 {
     VP_FUNC_CALL();
@@ -141,6 +149,8 @@
 
     VP_RENDER_CHK_STATUS_RETURN(SetWalkerSetting(kernelParams.kernelThreadSpace, kernelParams.syncFlag,kernelParams.flushL1));
 
+    VP_RENDER_CHK_STATUS_RETURN(SetTuningFlag(&kernelParams.kernelTuningParams));
+
     return MOS_STATUS_SUCCESS;
 }
 
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h
index b439413..8d946dd 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h
@@ -73,6 +73,11 @@
     uint32_t                             iCapcityOfSurfaceEntry = 0;
 } KERNEL_SURFACE_STATE_PARAM;
 
+typedef struct _KERNEL_TUNING_PARAMS
+{
+    uint32_t euThreadSchedulingMode;
+} KERNEL_TUNING_PARAMS, *PKERNEL_TUNING_PARAMS;
+
 using KERNEL_CONFIGS = std::map<VpKernelID, void *>; // Only for legacy/non-cm kernels
 using KERNEL_ARGS = std::vector<KRN_ARG>;
 using KERNEL_SAMPLER_STATE_GROUP = std::map<SamplerIndex, MHW_SAMPLER_STATE_PARAM>;
@@ -89,6 +94,7 @@
     KERNEL_THREAD_SPACE  kernelThreadSpace;
     bool                 syncFlag;
     bool                 flushL1;
+    KERNEL_TUNING_PARAMS kernelTuningParams;
 } KERNEL_PARAMS;
 
 struct MEDIA_OBJECT_KA2_INLINE_DATA
@@ -503,6 +509,12 @@
 
     virtual void OcaDumpKernelInfo(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext);
 
+    virtual uint32_t GetEuThreadSchedulingMode()
+    {
+        // hw default mode
+        return 0;
+    }
+
 protected:
 
     virtual MOS_STATUS SetWalkerSetting(KERNEL_THREAD_SPACE &threadSpace, bool bSyncFlag, bool flushL1 = false);
@@ -525,6 +537,8 @@
         return MOS_STATUS_SUCCESS;
     }
 
+    virtual MOS_STATUS SetTuningFlag(PKERNEL_TUNING_PARAMS tuningParams);
+
 protected:
 
     VP_SURFACE_GROUP                                        *m_surfaceGroup = nullptr;  // input surface process surface groups
@@ -543,6 +557,8 @@
     DelayLoadedKernelType                                   m_kernelType     = KernelNone;
     KernelIndex                                             m_kernelIndex = 0;          // index of current kernel in KERNEL_PARAMS_LIST
 
+    PKERNEL_TUNING_PARAMS                                   m_kernelTuningParams = nullptr;
+
     bool                                                    m_isAdvKernel = false;      // true mean multi kernel can be submitted in one workload.
 
     std::shared_ptr<mhw::vebox::Itf>                        m_veboxItf = nullptr;