[VP] Put render/vebox heap in local memory only when necessary
Put render/vebox heap in local memory only when necessary.
diff --git a/media_driver/agnostic/common/hw/mhw_state_heap.c b/media_driver/agnostic/common/hw/mhw_state_heap.c
index c53a40e..c2bfd1e 100644
--- a/media_driver/agnostic/common/hw/mhw_state_heap.c
+++ b/media_driver/agnostic/common/hw/mhw_state_heap.c
@@ -1465,9 +1465,16 @@
uint32_t dwNumHeaps;
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
PMHW_BLOCK_MANAGER pBlockManager = nullptr;
+ MEDIA_FEATURE_TABLE *skuTable = nullptr;
MHW_FUNCTION_ENTER;
+ MHW_CHK_NULL(m_pOsInterface);
+ MHW_CHK_NULL(m_pOsInterface->pfnGetSkuTable);
+
+ skuTable = m_pOsInterface->pfnGetSkuTable(m_pOsInterface);
+ MHW_CHK_NULL(skuTable);
+
pNewStateHeap = (PMHW_STATE_HEAP)MOS_AllocAndZeroMemory(sizeof(MHW_STATE_HEAP));
MHW_CHK_NULL(pNewStateHeap);
@@ -1483,6 +1490,11 @@
AllocParams.Format = Format_Buffer;
AllocParams.dwBytes = pNewStateHeap->dwSize;
AllocParams.pBufName = "DynamicStateHeap";
+ if (MEDIA_IS_SKU(skuTable, FtrLimitedLMemBar))
+ {
+ AllocParams.dwMemType = MOS_MEMPOOL_SYSTEMMEMORY;
+ }
+
MHW_CHK_STATUS(m_pOsInterface->pfnAllocateResource(
m_pOsInterface,
&AllocParams,
diff --git a/media_driver/agnostic/common/hw/mhw_vebox.cpp b/media_driver/agnostic/common/hw/mhw_vebox.cpp
index 10e48fa..bf68ba0 100644
--- a/media_driver/agnostic/common/hw/mhw_vebox.cpp
+++ b/media_driver/agnostic/common/hw/mhw_vebox.cpp
@@ -224,6 +224,15 @@
uint32_t uiOffset;
MOS_ALLOC_GFXRES_PARAMS AllocParams;
MOS_LOCK_PARAMS LockFlags;
+ MEDIA_FEATURE_TABLE *skuTable = nullptr;
+
+ MHW_FUNCTION_ENTER;
+
+ MHW_CHK_NULL(m_osInterface);
+ MHW_CHK_NULL(m_osInterface->pfnGetSkuTable);
+
+ skuTable = m_osInterface->pfnGetSkuTable(m_osInterface);
+ MHW_CHK_NULL(skuTable);
eStatus = MOS_STATUS_SUCCESS;
@@ -289,11 +298,23 @@
AllocParams.pBufName = "VphalVeboxHeap";
AllocParams.ResUsageType = MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_FF;
+ if (MEDIA_IS_SKU(skuTable, FtrLimitedLMemBar))
+ {
+ AllocParams.dwMemType = MOS_MEMPOOL_SYSTEMMEMORY;
+ }
+
MHW_CHK_STATUS(m_osInterface->pfnAllocateResource(
m_osInterface,
&AllocParams,
&m_veboxHeap->DriverResource));
+ if (MEDIA_IS_SKU(skuTable, FtrLimitedLMemBar))
+ {
+ // Use device memory for vebox heap kernel resource, as no cpu access on it.
+ AllocParams.dwMemType = MOS_MEMPOOL_DEVICEMEMORY;
+ AllocParams.Flags.bNotLockable = 1;
+ }
+
MHW_CHK_STATUS(m_osInterface->pfnAllocateResource(
m_osInterface,
&AllocParams,