New Upstream Release - intel-media-driver
Ready changes
Summary
Merged new upstream version: 23.1.3+dfsg1 (was: 23.1.2+dfsg1).
Diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a70cba3d..5d57a9cd 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@
cmake_minimum_required(VERSION 3.5)
project(IntelMediaDriver)
-set(MEDIA_VERSION "23.1.2${MEDIA_VERSION_EXTRA}" CACHE STRING "" FORCE)
+set(MEDIA_VERSION "23.1.3${MEDIA_VERSION_EXTRA}" CACHE STRING "" FORCE)
include(os_release_info.cmake)
diff --git a/debian/changelog b/debian/changelog
index fbc564b4..1c47ea1b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+intel-media-driver (23.1.3+dfsg1-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk> Sun, 12 Mar 2023 10:54:53 -0000
+
intel-media-driver (23.1.2+dfsg1-1) unstable; urgency=medium
* New upstream version 23.1.2+dfsg1
diff --git a/debian/patches/0001-Integrate-unit-tests-in-cmake-s-test-framework.patch b/debian/patches/0001-Integrate-unit-tests-in-cmake-s-test-framework.patch
index 70479f22..e098358b 100644
--- a/debian/patches/0001-Integrate-unit-tests-in-cmake-s-test-framework.patch
+++ b/debian/patches/0001-Integrate-unit-tests-in-cmake-s-test-framework.patch
@@ -8,10 +8,10 @@ Subject: Integrate unit tests in cmake's test framework
media_driver/linux/ult/ult_app/CMakeLists.txt | 12 ++++--------
3 files changed, 5 insertions(+), 15 deletions(-)
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5a11b6f..2c75524 100755
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
+Index: intel-media-driver.git/CMakeLists.txt
+===================================================================
+--- intel-media-driver.git.orig/CMakeLists.txt
++++ intel-media-driver.git/CMakeLists.txt
@@ -78,6 +78,7 @@ if (BUILD_KERNELS)
add_subdirectory(Tools/MediaDriverTools)
endif()
@@ -20,10 +20,10 @@ index 5a11b6f..2c75524 100755
add_subdirectory(media_driver)
if("${LIBVA_DRIVERS_PATH}" STREQUAL "")
-diff --git a/media_driver/linux/ult/CMakeLists.txt b/media_driver/linux/ult/CMakeLists.txt
-index 9fb5b39..4f54575 100644
---- a/media_driver/linux/ult/CMakeLists.txt
-+++ b/media_driver/linux/ult/CMakeLists.txt
+Index: intel-media-driver.git/media_driver/linux/ult/CMakeLists.txt
+===================================================================
+--- intel-media-driver.git.orig/media_driver/linux/ult/CMakeLists.txt
++++ intel-media-driver.git/media_driver/linux/ult/CMakeLists.txt
@@ -51,10 +51,3 @@ endif ()
add_subdirectory(libdrm_mock)
@@ -35,11 +35,11 @@ index 9fb5b39..4f54575 100644
- PROPERTIES PASS_REGULAR_EXPRESSION "PASS")
-set_tests_properties(test_devult
- PROPERTIES FAIL_REGULAR_EXPRESSION "FAIL")
-diff --git a/media_driver/linux/ult/ult_app/CMakeLists.txt b/media_driver/linux/ult/ult_app/CMakeLists.txt
-index b4c54b6..7a05725 100644
---- a/media_driver/linux/ult/ult_app/CMakeLists.txt
-+++ b/media_driver/linux/ult/ult_app/CMakeLists.txt
-@@ -75,13 +75,9 @@ if (DEFINED BYPASS_MEDIA_ULT AND "${BYPASS_MEDIA_ULT}" STREQUAL "yes")
+Index: intel-media-driver.git/media_driver/linux/ult/ult_app/CMakeLists.txt
+===================================================================
+--- intel-media-driver.git.orig/media_driver/linux/ult/ult_app/CMakeLists.txt
++++ intel-media-driver.git/media_driver/linux/ult/ult_app/CMakeLists.txt
+@@ -75,13 +75,9 @@ if (DEFINED BYPASS_MEDIA_ULT AND "${BYPA
message("-- media -- BYPASS_MEDIA_ULT = ${BYPASS_MEDIA_ULT}")
else ()
if (ENABLE_NONFREE_KERNELS)
diff --git a/debian/patches/0002-Remove-settings-based-on-ARCH.patch b/debian/patches/0002-Remove-settings-based-on-ARCH.patch
index 1bb9595a..aa3b925e 100644
--- a/debian/patches/0002-Remove-settings-based-on-ARCH.patch
+++ b/debian/patches/0002-Remove-settings-based-on-ARCH.patch
@@ -6,10 +6,10 @@ Subject: Remove settings based on ARCH
media_driver/cmake/linux/media_compile_flags_linux.cmake | 11 -----------
1 file changed, 11 deletions(-)
-diff --git a/media_driver/cmake/linux/media_compile_flags_linux.cmake b/media_driver/cmake/linux/media_compile_flags_linux.cmake
-index 04729a2..a7d386b 100755
---- a/media_driver/cmake/linux/media_compile_flags_linux.cmake
-+++ b/media_driver/cmake/linux/media_compile_flags_linux.cmake
+Index: intel-media-driver.git/media_driver/cmake/linux/media_compile_flags_linux.cmake
+===================================================================
+--- intel-media-driver.git.orig/media_driver/cmake/linux/media_compile_flags_linux.cmake
++++ intel-media-driver.git/media_driver/cmake/linux/media_compile_flags_linux.cmake
@@ -51,9 +51,6 @@ set(MEDIA_COMPILER_FLAGS_COMMON
-ffunction-sections
-Wl,--gc-sections
diff --git a/media_common/agnostic/common/media_interfaces/media_interfaces_vphal.h b/media_common/agnostic/common/media_interfaces/media_interfaces_vphal.h
index 980bb35c..17522e43 100644
--- a/media_common/agnostic/common/media_interfaces/media_interfaces_vphal.h
+++ b/media_common/agnostic/common/media_interfaces/media_interfaces_vphal.h
@@ -84,7 +84,8 @@ public:
static VpBase *CreateFactoryNext(
PMOS_INTERFACE osInterface,
MOS_CONTEXT_HANDLE osDriverContext,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
static MOS_STATUS CreateVPMhwInterfaces(
bool sfcNeeded,
@@ -108,7 +109,8 @@ public:
virtual MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus) = 0;
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false) = 0;
virtual MOS_STATUS CreateVpPlatformInterface(
PMOS_INTERFACE osInterface,
diff --git a/media_common/agnostic/common/os/mos_os.h b/media_common/agnostic/common/os/mos_os.h
index 5284335c..9f81bd0c 100644
--- a/media_common/agnostic/common/os/mos_os.h
+++ b/media_common/agnostic/common/os/mos_os.h
@@ -658,6 +658,13 @@ typedef void * MOS_INTERFACE_HANDLE;
class GpuContextMgr;
+namespace CMRT_UMD
+{
+ class CmDevice;
+};
+struct _CM_HAL_STATE;
+typedef struct _CM_HAL_STATE *PCM_HAL_STATE;
+
//!
//! \brief Structure to Unified HAL OS resources
//!
@@ -758,7 +765,6 @@ typedef struct _MOS_INTERFACE
#endif
bool bEnableVdboxBalancing; //!< Enable per BB VDBox balancing
-
#if (_DEBUG || _RELEASE_INTERNAL)
int eForceVdbox; //!< Force select Vdbox
uint32_t dwForceTileYfYs; // force to allocate Yf (=1) or Ys (=2), remove after full validation
@@ -1526,6 +1532,54 @@ typedef struct _MOS_INTERFACE
MOS_STATUS (*pfnDestroyVeInterface)(
PMOS_VIRTUALENGINE_INTERFACE *veInterface);
+ //!
+ //! \brief Creates a CmDevice from a MOS context.
+ //! \details If an existing CmDevice has already associated to the MOS context,
+ //! the existing CmDevice will be returned. Otherwise, a new CmDevice
+ //! instance will be created and associatied with that MOS context.
+ //! \param mosContext
+ //! [in] pointer to MOS conetext.
+ //! \param device
+ //! [in,out] reference to the pointer to the CmDevice.
+ //! \param devCreateOption
+ //! [in] option to customize CmDevice.
+ //! \return int32_t
+ //! CM_SUCCESS if the CmDevice is successfully created.
+ //! CM_NULL_POINTER if pMosContext is null.
+ //! CM_FAILURE otherwise.
+ //!
+ int32_t (*pfnCreateCmDevice)(
+ MOS_CONTEXT *mosContext,
+ CMRT_UMD::CmDevice *&device,
+ uint32_t devCreateOption,
+ uint8_t priority);
+
+ //!
+ //! \brief Destroys the CmDevice.
+ //! \details This function also destroys surfaces, kernels, programs, samplers,
+ //! threadspaces, tasks and the queues that were created using this
+ //! device instance but haven't explicitly been destroyed by calling
+ //! respective destroy functions.
+ //! \param device
+ //! [in] reference to the pointer to the CmDevice.
+ //! \return int32_t
+ //! CM_SUCCESS if CmDevice is successfully destroyed.
+ //! CM_FAILURE otherwise.
+ //!
+ int32_t (*pfnDestroyCmDevice)(
+ CMRT_UMD::CmDevice *&device);
+
+ //!
+ //! \brief Initialize cm hal ddi interfaces
+ //! \details Initialize cm hal ddi interfaces
+ //! \param cmState
+ //! [in,out] the pointer to the cm state.
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if succeeded, otherwise error code
+ //!
+ MOS_STATUS (*pfnInitCmInterface)(
+ PCM_HAL_STATE cmState);
+
#if (_DEBUG || _RELEASE_INTERNAL)
//!
//! \brief gpuCtxCreateOption Init for media Scalability
diff --git a/media_common/agnostic/common/os/mos_os_trace_event.h b/media_common/agnostic/common/os/mos_os_trace_event.h
index 86927ee1..84d67796 100644
--- a/media_common/agnostic/common/os/mos_os_trace_event.h
+++ b/media_common/agnostic/common/os/mos_os_trace_event.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015-2017, Intel Corporation
+* Copyright (c) 2015-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -562,6 +562,7 @@ typedef enum _MT_LOG_ID
MT_CP_HAL_STATUS_CHECK,
MT_CP_PROVISION_CERT_CHECK,
MT_CP_PROVISION_CERT_NOT_FOUND,
+ MT_CP_HUC_NOT_AUTHENTICATED,
MT_CP_KERNEL_RULE,
MT_CP_KERNEL_TRANSCRYPT,
MT_CP_BUFFER_RULE,
diff --git a/media_common/agnostic/common/vp/hal/vp_common.h b/media_common/agnostic/common/vp/hal/vp_common.h
index ce20c127..cc11c251 100644
--- a/media_common/agnostic/common/vp/hal/vp_common.h
+++ b/media_common/agnostic/common/vp/hal/vp_common.h
@@ -169,6 +169,9 @@ struct VPHAL_SURFACE
MOS_RESOURCE_MMC_MODE CompressionMode = MOS_MMC_DISABLED;
uint32_t CompressionFormat = 0;
+ //Surface cache Usage
+ uint32_t CacheSetting = 0;
+
bool bUseSampleUnorm = false; //!< true: sample unorm is used, false: DScaler or AVS is used.
bool bUseSamplerLumakey = false; //!< true: sampler lumakey is used, false: lumakey is disabled or EU computed lumakey is used.
//------------------------------------------
diff --git a/media_common/agnostic/common/vp/hal/vp_common_tools.h b/media_common/agnostic/common/vp/hal/vp_common_tools.h
index 37c45041..65a81459 100644
--- a/media_common/agnostic/common/vp/hal/vp_common_tools.h
+++ b/media_common/agnostic/common/vp/hal/vp_common_tools.h
@@ -125,6 +125,8 @@ typedef struct _VP_CONFIG
uint32_t dwRTCompressibleReported; // RT MMC Reported compressible flag
uint32_t dwRTCompressMode; // RT MMC Compression Mode
uint32_t dwRTCompressModeReported; // RT MMC Reported Compression Mode
+ uint32_t dwRTCacheSetting; // RT cache usage
+ uint32_t dwRTCacheSettingReported; // RT cache Reported usage
uint32_t dwFFDICompressible; // FFDI Compressible flag
uint32_t dwFFDICompressMode; // FFDI Compression mode
uint32_t dwFFDNCompressible; // FFDN Compressible flag
diff --git a/media_common/linux/common/os/mos_os_specific.h b/media_common/linux/common/os/mos_os_specific.h
index ee48a207..8190bda2 100644
--- a/media_common/linux/common/os/mos_os_specific.h
+++ b/media_common/linux/common/os/mos_os_specific.h
@@ -375,6 +375,8 @@ struct MOS_SURFACE
bool bGMMTileEnabled; //!< [out] GMM defined tile mode flag
uint32_t YoffsetForUplane; //!< [out] Y offset from U plane to Y plane.
uint32_t YoffsetForVplane; //!< [out] Y offset from V plane to Y plane.
+ // Surface cache Usage
+ uint32_t CacheSetting;
};
typedef MOS_SURFACE *PMOS_SURFACE;
diff --git a/media_driver/agnostic/Xe_M/Xe_HPM/codec/hal/codechal_kernel_olp_mdf_xe_hpm.cpp b/media_driver/agnostic/Xe_M/Xe_HPM/codec/hal/codechal_kernel_olp_mdf_xe_hpm.cpp
index 0ab2f53b..6a508c71 100644
--- a/media_driver/agnostic/Xe_M/Xe_HPM/codec/hal/codechal_kernel_olp_mdf_xe_hpm.cpp
+++ b/media_driver/agnostic/Xe_M/Xe_HPM/codec/hal/codechal_kernel_olp_mdf_xe_hpm.cpp
@@ -35,7 +35,7 @@ MOS_STATUS CodechalKernelOlpMdfXe_Hpm::Init(PMOS_INTERFACE osInterface)
{
CODECHAL_DECODE_FUNCTION_ENTER;
CODECHAL_DECODE_CHK_NULL_RETURN(osInterface);
-
+ m_osInterface = osInterface;
if (m_cmDevice)
{
return MOS_STATUS_SUCCESS;
@@ -44,10 +44,11 @@ MOS_STATUS CodechalKernelOlpMdfXe_Hpm::Init(PMOS_INTERFACE osInterface)
osInterface->pfnNotifyStreamIndexSharing(osInterface);
uint32_t devCreateOption = CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_DISABLE;
- CODECHAL_DECODE_CHK_STATUS_RETURN(CreateCmDevice(
+ CODECHAL_DECODE_CHK_STATUS_RETURN(osInterface->pfnCreateCmDevice(
osInterface->pOsContext,
m_cmDevice,
- devCreateOption));
+ devCreateOption,
+ CM_DEVICE_CREATE_PRIORITY_DEFAULT));
CODECHAL_DECODE_CHK_STATUS_RETURN(m_cmDevice->CreateQueue(m_cmQueue));
#if defined(ENABLE_KERNELS) && !defined(_FULL_OPEN_SOURCE)
diff --git a/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.cpp b/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.cpp
index fd8801c1..69a850e0 100644
--- a/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.cpp
+++ b/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.cpp
@@ -35,7 +35,7 @@ MOS_STATUS CodechalKernelOlpMdf::Init(PMOS_INTERFACE osInterface)
{
CODECHAL_DECODE_FUNCTION_ENTER;
CODECHAL_DECODE_CHK_NULL_RETURN(osInterface);
-
+ m_osInterface = osInterface;
if (m_cmDevice)
{
return MOS_STATUS_SUCCESS;
@@ -44,10 +44,11 @@ MOS_STATUS CodechalKernelOlpMdf::Init(PMOS_INTERFACE osInterface)
osInterface->pfnNotifyStreamIndexSharing(osInterface);
uint32_t devCreateOption = CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_DISABLE;
- CODECHAL_DECODE_CHK_STATUS_RETURN(CreateCmDevice(
+ CODECHAL_DECODE_CHK_STATUS_RETURN(osInterface->pfnCreateCmDevice(
osInterface->pOsContext,
m_cmDevice,
- devCreateOption));
+ devCreateOption,
+ CM_DEVICE_CREATE_PRIORITY_DEFAULT));
CODECHAL_DECODE_CHK_STATUS_RETURN(m_cmDevice->CreateQueue(m_cmQueue));
#if defined(ENABLE_KERNELS) && !defined(_FULL_OPEN_SOURCE)
@@ -215,7 +216,10 @@ MOS_STATUS CodechalKernelOlpMdf::UnInit()
m_cmDevice->DestroyProgram(m_cmProgram);
m_cmProgram = nullptr;
}
- DestroyCmDevice(m_cmDevice);
+ if (m_osInterface != nullptr)
+ {
+ m_osInterface->pfnDestroyCmDevice(m_cmDevice);
+ }
return MOS_STATUS_SUCCESS;
}
diff --git a/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.h b/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.h
index b667cd65..53322a37 100644
--- a/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.h
+++ b/media_driver/agnostic/Xe_M/Xe_XPM/codec/hal/codechal_kernel_olp_mdf_xe_xpm.h
@@ -82,6 +82,7 @@ protected:
MOS_STATUS SetKernelArgs(uint16_t flags, bool uv);
protected:
+ PMOS_INTERFACE m_osInterface = nullptr;
CmDevice *m_cmDevice = nullptr;
CmQueue *m_cmQueue = nullptr;
CmTask *m_cmTask = nullptr;
diff --git a/media_driver/agnostic/Xe_M/Xe_XPM/vp/hal/vphal_render_vebox_xe_xpm_denoise.cpp b/media_driver/agnostic/Xe_M/Xe_XPM/vp/hal/vphal_render_vebox_xe_xpm_denoise.cpp
index 4e1f3f31..7bca3440 100644
--- a/media_driver/agnostic/Xe_M/Xe_XPM/vp/hal/vphal_render_vebox_xe_xpm_denoise.cpp
+++ b/media_driver/agnostic/Xe_M/Xe_XPM/vp/hal/vphal_render_vebox_xe_xpm_denoise.cpp
@@ -175,7 +175,7 @@ VphalHVSDenoiserHpm::VphalHVSDenoiserHpm(PRENDERHAL_INTERFACE renderHal) : m_eve
{
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal);
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal->pOsInterface);
- m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface->pOsContext);
+ m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface);
m_eventManager = MOS_New(EventManager, "HVSEventManager", m_cmContext);
VPHAL_RENDER_NORMALMESSAGE("Constructor!");
}
diff --git a/media_driver/agnostic/common/cm/cm_device_rt_base.h b/media_driver/agnostic/common/cm/cm_device_rt_base.h
index 3c4859e5..c9c5fec8 100644
--- a/media_driver/agnostic/common/cm/cm_device_rt_base.h
+++ b/media_driver/agnostic/common/cm/cm_device_rt_base.h
@@ -327,30 +327,30 @@ public:
uint32_t GetAccelsize(){ return m_accelSize; }
- int32_t GetHalMaxValues(CM_HAL_MAX_VALUES* & pHalMaxValues,
+ virtual int32_t GetHalMaxValues(CM_HAL_MAX_VALUES* & pHalMaxValues,
CM_HAL_MAX_VALUES_EX* & pHalMaxValuesEx);
- int32_t GetGenPlatform(uint32_t &platform);
+ virtual int32_t GetGenPlatform(uint32_t &platform);
void Sampler8x8CoefficientFormatTransform(
CM_AVS_INTERNEL_NONPIPLINED_STATE* dst_avs_state,
CM_AVS_NONPIPLINED_STATE* src_avs_state);
- int32_t GetSurfaceManager(CmSurfaceManager* &pSurfaceMgr);
+ virtual int32_t GetSurfaceManager(CmSurfaceManager* &pSurfaceMgr);
- std::vector<CmQueueRT *> &GetQueue();
+ virtual std::vector<CmQueueRT *> &GetQueue();
- CSync* GetSurfaceLock();
+ virtual CSync* GetSurfaceLock();
- CSync* GetSurfaceCreationLock();
+ virtual CSync* GetSurfaceCreationLock();
- CSync* GetProgramKernelLock();
+ virtual CSync* GetProgramKernelLock();
- CSync* GetQueueLock();
+ virtual CSync* GetQueueLock();
- int32_t LoadPredefinedCopyKernel(CmProgram*& pProgram);
+ virtual int32_t LoadPredefinedCopyKernel(CmProgram*& pProgram);
- int32_t LoadPredefinedInitKernel(CmProgram*& pProgram);
+ virtual int32_t LoadPredefinedInitKernel(CmProgram*& pProgram);
int32_t GetKernelSlot()
{
@@ -359,8 +359,8 @@ public:
int32_t PrepareGPUinitSurface();
- int32_t GPUinitSurface(CmSurface2D* surf2D, const uint32_t initValue, CmEvent*& event);
- bool CheckGTPinEnabled();
+ virtual int32_t GPUinitSurface(CmSurface2D* surf2D, const uint32_t initValue, CmEvent*& event);
+ virtual bool CheckGTPinEnabled();
#if USE_EXTENSION_CODE
int32_t EnableGTPin(CmBufferUP* pBufferUP0,
@@ -369,10 +369,10 @@ public:
char * pGTPinCom,
GTPIN_INVOKE_STRUCT* pInvokeStruct,
bool reserveRegisters);
- CmGTPin *GetGTPin();
+ virtual CmGTPin *GetGTPin();
#endif
- int32_t GetGenStepInfo(char*& stepinfostr);
+ virtual int32_t GetGenStepInfo(char*& stepinfostr);
int32_t GetCapsInternal(void *pCaps, uint32_t *puSize);
@@ -380,11 +380,11 @@ public:
int32_t Release();
- int32_t GetPrintBufferIndex(SurfaceIndex *& pIndex) const;
+ virtual int32_t GetPrintBufferIndex(SurfaceIndex *& pIndex) const;
- bool IsPrintEnable() const;
+ virtual bool IsPrintEnable() const;
- bool IsVtuneLogOn() const;
+ virtual bool IsVtuneLogOn() const;
int32_t GetPrintBufferMem(unsigned char *& pPrintBufferMem) const;
@@ -397,9 +397,9 @@ public:
bool bIsCmCreated,
CmSurface2D* & pSurface) = 0;
- int32_t GetSampler8x8(uint32_t index, CmSampler8x8State_RT *&pSampler8x8);
+ virtual int32_t GetSampler8x8(uint32_t index, CmSampler8x8State_RT *&pSampler8x8);
- bool IsScratchSpaceDisabled();
+ virtual bool IsScratchSpaceDisabled();
int32_t SetSurfaceArraySizeForAlias();
@@ -410,18 +410,18 @@ public:
m_isDriverStoreEnabled = dsEnabled;
}
- CmDynamicArray* GetKernelArray();
+ virtual CmDynamicArray* GetKernelArray();
- uint32_t *GetKernelCount();
+ virtual uint32_t *GetKernelCount();
#if CM_LOG_ON
std::string Log();
#endif
- CM_HAL_STATE* GetHalState();
+ virtual CM_HAL_STATE* GetHalState();
int32_t DestroyVmeSurface(SurfaceIndex *& pVmeIndex);
- int32_t CreatePrintBuffer();
+ virtual int32_t CreatePrintBuffer();
CmNotifierGroup* GetNotifiers() {return m_notifierGroup;}
diff --git a/media_driver/agnostic/common/cm/cm_hal.cpp b/media_driver/agnostic/common/cm/cm_hal.cpp
index cec4e692..ad9583e6 100644
--- a/media_driver/agnostic/common/cm/cm_hal.cpp
+++ b/media_driver/agnostic/common/cm/cm_hal.cpp
@@ -86,9 +86,6 @@ int32_t HalCm_InsertCloneKernel(
PCM_HAL_KERNEL_PARAM kernelParam,
PRENDERHAL_KRN_ALLOCATION &kernelAllocation);
-extern MOS_STATUS HalCm_GetSipBinary(
- PCM_HAL_STATE state);
-
#if MDF_COMMAND_BUFFER_DUMP
extern int32_t HalCm_InitDumpCommandBuffer(PCM_HAL_STATE state);
@@ -2135,7 +2132,7 @@ int32_t HalCm_UnloadKernel(
goto finish;
}
- CM_CHK_CMSTATUS_GOTOFINISH(HalCm_SyncKernel(state, kernelAllocation->dwSync));
+ CM_CHK_CMSTATUS_GOTOFINISH(state->pfnSyncKernel(state, kernelAllocation->dwSync));
// Unload kernel
if (kernelAllocation->pMhwKernelParam)
@@ -4333,7 +4330,7 @@ MOS_STATUS HalCm_Setup2DSurfaceState(
if (state->cmHalInterface->GetDecompressFlag())
{
- HalCm_DecompressSurface(state, argParam, threadIndex);
+ state->pfnDecompressSurface(state, argParam, threadIndex);
}
//Binding surface based at the unit of dword
@@ -9139,11 +9136,11 @@ MOS_STATUS HalCm_RegisterSampler(
{
entry->ElementType = MHW_Sampler4Elements;
}
- CM_CHK_MOSSTATUS_GOTOFINISH(HalCm_GetGfxMapFilter(param->minFilter, &entry->Unorm.MinFilter));
- CM_CHK_MOSSTATUS_GOTOFINISH(HalCm_GetGfxMapFilter(param->magFilter, &entry->Unorm.MagFilter));
- CM_CHK_MOSSTATUS_GOTOFINISH(HalCm_GetGfxTextAddress(param->addressU, &entry->Unorm.AddressU));
- CM_CHK_MOSSTATUS_GOTOFINISH(HalCm_GetGfxTextAddress(param->addressV, &entry->Unorm.AddressV));
- CM_CHK_MOSSTATUS_GOTOFINISH(HalCm_GetGfxTextAddress(param->addressW, &entry->Unorm.AddressW));
+ CM_CHK_MOSSTATUS_GOTOFINISH(state->pfnGetGfxMapFilter(param->minFilter, &entry->Unorm.MinFilter));
+ CM_CHK_MOSSTATUS_GOTOFINISH(state->pfnGetGfxMapFilter(param->magFilter, &entry->Unorm.MagFilter));
+ CM_CHK_MOSSTATUS_GOTOFINISH(state->pfnGetGfxTextAddress(param->addressU, &entry->Unorm.AddressU));
+ CM_CHK_MOSSTATUS_GOTOFINISH(state->pfnGetGfxTextAddress(param->addressV, &entry->Unorm.AddressV));
+ CM_CHK_MOSSTATUS_GOTOFINISH(state->pfnGetGfxTextAddress(param->addressW, &entry->Unorm.AddressW));
entry->Unorm.SurfaceFormat = (MHW_SAMPLER_SURFACE_PIXEL_TYPE)param->surfaceFormat;
switch (entry->Unorm.SurfaceFormat)
@@ -10679,12 +10676,13 @@ MOS_STATUS HalCm_Create(
state->pfnSetSurfaceReadFlag = HalCm_SetSurfaceReadFlag;
state->pfnSetVtuneProfilingFlag = HalCm_SetVtuneProfilingFlag;
state->pfnExecuteVeboxTask = HalCm_ExecuteVeboxTask;
- state->pfnGetSipBinary = HalCm_GetSipBinary;
state->pfnGetTaskSyncLocation = HalCm_GetTaskSyncLocation;
state->pfnGetGlobalTime = HalCm_GetGlobalTime;
state->pfnConvertToQPCTime = HalCm_ConvertToQPCTime;
+ state->pfnSyncOnResource = HalCm_SyncOnResource;
+
state->pfnDeleteFromStateBufferList = HalCm_DeleteFromStateBufferList;
state->pfnGetMediaStatePtrForKernel = HalCm_GetMediaStatePtrForKernel;
state->pfnGetStateBufferVAPtrForSurfaceIndex = HalCm_GetStateBufferVAPtrForSurfaceIndex;
@@ -10704,6 +10702,8 @@ MOS_STATUS HalCm_Create(
//==========<Initialize 5 OS-dependent DDI functions: pfnAllocate3DResource, pfnAllocateSurface2DUP====
// pfnAllocateBuffer,pfnRegisterKMDNotifyEventHandle, pfnGetSurface2DPitchAndSize >====
HalCm_OsInitInterface(state);
+
+ state->osInterface->pfnInitCmInterface(state);
HalCm_InitPerfTagIndexMap(state);
diff --git a/media_driver/agnostic/common/cm/cm_hal.h b/media_driver/agnostic/common/cm/cm_hal.h
index 2dc3b071..50b8ee45 100644
--- a/media_driver/agnostic/common/cm/cm_hal.h
+++ b/media_driver/agnostic/common/cm/cm_hal.h
@@ -30,6 +30,7 @@
#include "cm_common.h"
#include "cm_debug.h"
#include "cm_csync.h"
+#include "cm_ish.h"
#include "mhw_vebox.h"
#include "cm_hal_generic.h"
#include "media_perf_profiler.h"
@@ -1863,6 +1864,42 @@ typedef struct _CM_HAL_STATE
PCM_HAL_STATE state,
MOS_GPUCTX_CREATOPTIONS *mosCreateOption);
+ MOS_STATUS(*pfnGetGfxMapFilter) (
+ uint32_t filter,
+ MHW_GFX3DSTATE_MAPFILTER *pGfxFilter);
+
+ MOS_STATUS(*pfnGetGfxTextAddress) (
+ uint32_t addressMode,
+ MHW_GFX3DSTATE_TEXCOORDMODE *gfxAddress);
+
+ MOS_STATUS(*pfnDecompressSurface) (
+ PCM_HAL_STATE state,
+ PCM_HAL_KERNEL_ARG_PARAM argParam,
+ uint32_t threadIndex);
+
+ MOS_STATUS (*pfnSetOsResourceFromDdi)(
+ PMOS_RESOURCE resource,
+ PMOS_RESOURCE osResource,
+ uint32_t mipSlice);
+
+ int32_t (*pfnSyncKernel)(
+ PCM_HAL_STATE state,
+ uint32_t sync);
+
+ MOS_STATUS (*pfnSurfaceSync)(
+ PCM_HAL_STATE pState,
+ PMOS_SURFACE pSurface,
+ bool bReadSync);
+
+ MOS_STATUS (*pfnSyncOnResource)(
+ PCM_HAL_STATE state,
+ PMOS_SURFACE surface,
+ bool isWrite);
+
+ MOS_STATUS (*pfnCreateSipKernel)(
+ PCM_HAL_STATE state,
+ CmISH *cmISH);
+
//*-----------------------------------------------------------------------------
//| Purpose: Selects the required stream index and sets the correct GPU context for further function calls.
//| Returns: Previous stream index.
@@ -2047,6 +2084,37 @@ MOS_STATUS HalCm_SendGpGpuWalkerState(
PCM_HAL_KERNEL_PARAM kernelParam,
PMOS_COMMAND_BUFFER cmdBuffer);
+MOS_STATUS HalCm_SetOsResourceFromDdi(
+ PMOS_RESOURCE resource,
+ PMOS_RESOURCE osResource,
+ uint32_t mipSlice = 0);
+
+MOS_STATUS HalCm_GetSurface2DPitchAndSize(
+ PCM_HAL_STATE state,
+ PCM_HAL_SURFACE2D_UP_PARAM param);
+
+MOS_STATUS HalCm_GetGPUCurrentFrequency(
+ PCM_HAL_STATE state,
+ uint32_t *currentFreq);
+
+MOS_STATUS HalCm_RegisterUMDNotifyEventHandle(
+ PCM_HAL_STATE state,
+ PCM_HAL_OSSYNC_PARAM syncParam);
+
+MOS_STATUS HalCm_GetGpuTime(
+ PCM_HAL_STATE state,
+ uint64_t *gpuTime);
+
+uint32_t HalCm_RegisterStream(
+ PCM_HAL_STATE state);
+
+MOS_STATUS HalCm_GetSipBinary(
+ PCM_HAL_STATE state);
+
+MOS_STATUS HalCm_CreateSipKernel(
+ PCM_HAL_STATE state,
+ CmISH *cmISH);
+
//===============<Below are Os-non-dependent Private/Non-DDI Functions>=========================================
uint32_t HalCm_GetFreeBindingIndex(
diff --git a/media_driver/agnostic/common/cm/cm_ish_base.cpp b/media_driver/agnostic/common/cm/cm_ish_base.cpp
index 626d4c59..8dcab768 100644
--- a/media_driver/agnostic/common/cm/cm_ish_base.cpp
+++ b/media_driver/agnostic/common/cm/cm_ish_base.cpp
@@ -30,6 +30,10 @@
using namespace CMRT_UMD;
CmISHBase::CmISHBase():
+ m_isSipKernelLoaded(false),
+ m_sipKernel(nullptr),
+ m_sipKernelSize(0),
+ m_sipKernelOffset(0),
m_osInterface(nullptr),
m_resource(nullptr),
m_lockedData(nullptr),
@@ -37,11 +41,7 @@ CmISHBase::CmISHBase():
m_offset(0),
m_trackerProducer(nullptr),
m_lastTrackerToken(nullptr),
- m_addedKernelCount(0),
- m_isSipKernelLoaded(false),
- m_sipKernel(nullptr),
- m_sipKernelSize(0),
- m_sipKernelOffset(0)
+ m_addedKernelCount(0)
{
}
diff --git a/media_driver/agnostic/common/cm/cm_ish_base.h b/media_driver/agnostic/common/cm/cm_ish_base.h
index 8f1bc1cb..b6322687 100644
--- a/media_driver/agnostic/common/cm/cm_ish_base.h
+++ b/media_driver/agnostic/common/cm/cm_ish_base.h
@@ -52,6 +52,12 @@ public:
void Clean();
+ // SIP kernels
+ bool m_isSipKernelLoaded;
+ uint8_t *m_sipKernel;
+ uint32_t m_sipKernelSize;
+ uint32_t m_sipKernelOffset;
+
protected:
CmISHBase();
virtual ~CmISHBase();
@@ -86,10 +92,5 @@ protected:
const uint32_t m_expandStep = 0x80000;
const uint32_t m_kernelAlign = 64;
const uint32_t m_kernelPadding = 128;
-
- // SIP kernels
- bool m_isSipKernelLoaded;
- uint8_t *m_sipKernel;
- uint32_t m_sipKernelSize;
- uint32_t m_sipKernelOffset;
+
};
diff --git a/media_driver/agnostic/common/cm/cm_rt_umd.h b/media_driver/agnostic/common/cm/cm_rt_umd.h
index 5f9d8c59..96f1357c 100644
--- a/media_driver/agnostic/common/cm/cm_rt_umd.h
+++ b/media_driver/agnostic/common/cm/cm_rt_umd.h
@@ -42,27 +42,8 @@
#include "cm_thread_space.h"
#include "cm_vebox.h"
#include "cm_type.h"
-using namespace CMRT_UMD;
-
-//!
-//! \brief Creates a CmDevice from a MOS context.
-//! \details If an existing CmDevice has already associated to the MOS context,
-//! the existing CmDevice will be returned. Otherwise, a new CmDevice
-//! instance will be created and associatied with that MOS context.
-//! \param mosContext
-//! [in] pointer to MOS conetext.
-//! \param device
-//! [in,out] reference to the pointer to the CmDevice.
-//! \param devCreateOption
-//! [in] option to customize CmDevice.
-//! \retval CM_SUCCESS if the CmDevice is successfully created.
-//! \retval CM_NULL_POINTER if pMosContext is null.
-//! \retval CM_FAILURE otherwise.
-//!
-CM_RT_API int32_t CreateCmDevice(MOS_CONTEXT *mosContext,
- CmDevice* &device,
- uint32_t devCreateOption);
+using namespace CMRT_UMD;
//!
//! \brief Creates a CmDevice from a MOS context.
@@ -84,7 +65,7 @@ CM_RT_API int32_t CreateCmDevice(MOS_CONTEXT *mosContext,
CM_RT_API int32_t CreateCmDevice(MOS_CONTEXT *mosContext,
CmDevice *& device,
uint32_t devCreateOption,
- uint8_t priority);
+ uint8_t priority = CM_DEVICE_CREATE_PRIORITY_DEFAULT);
//!
//! \brief Destroys the CmDevice.
diff --git a/media_driver/agnostic/common/cm/cm_surface_manager_base.h b/media_driver/agnostic/common/cm/cm_surface_manager_base.h
index 676b3a7c..01004e99 100644
--- a/media_driver/agnostic/common/cm/cm_surface_manager_base.h
+++ b/media_driver/agnostic/common/cm/cm_surface_manager_base.h
@@ -60,7 +60,7 @@ public:
PMOS_RESOURCE pMosResource, void* &pSysMem,
bool isConditionalBuffer, uint32_t comparisonValue );
int32_t DestroySurface( CmBuffer_RT* & pSurface, SURFACE_DESTROY_KIND destroyKind);
- int32_t UpdateBuffer(MOS_RESOURCE * mosResource, int index, uint32_t handle);
+ virtual int32_t UpdateBuffer(MOS_RESOURCE * mosResource, int index, uint32_t handle);
int32_t CreateSurface2DUP(uint32_t width, uint32_t height,
CM_SURFACE_FORMAT format, void* pSysMem,
@@ -95,10 +95,10 @@ public:
int32_t DestroySurface( CmSurfaceSampler8x8* & pSurfaceSampler8x8 );
- int32_t GetSurface( const uint32_t index, CmSurface* & pSurface );
- int32_t GetCmDevice( CmDeviceRT* & pCmDevice );
+ virtual int32_t GetSurface( const uint32_t index, CmSurface* & pSurface );
+ virtual int32_t GetCmDevice( CmDeviceRT* & pCmDevice );
- int32_t GetPixelBytesAndHeight(uint32_t width, uint32_t height,
+ virtual int32_t GetPixelBytesAndHeight(uint32_t width, uint32_t height,
CM_SURFACE_FORMAT format, uint32_t& sizePerPixel,
uint32_t& updatedHeight);
virtual int32_t Surface2DSanityCheck(uint32_t width, uint32_t height, CM_SURFACE_FORMAT format) = 0;
@@ -111,10 +111,10 @@ public:
SurfaceIndex* & pSamplerSurfaceIndex);
int32_t DestroySamplerSurface(SurfaceIndex* & pSamplerSurfaceIndex );
int32_t DestroySurface( CmSurfaceSampler* & pSurfaceSampler );
- uint32_t GetSurfacePoolSize();
+ virtual uint32_t GetSurfacePoolSize();
int32_t IncreaseSurfaceUsage(uint32_t index);
int32_t DecreaseSurfaceUsage(uint32_t index);
- int32_t RefreshDelayDestroySurfaces(uint32_t &freeSurfaceCount);
+ virtual int32_t RefreshDelayDestroySurfaces(uint32_t &freeSurfaceCount);
int32_t TouchSurfaceInPoolForDestroy();
int32_t GetFreeSurfaceIndexFromPool(uint32_t &freeIndex);
int32_t GetFreeSurfaceIndex(uint32_t &index);
@@ -126,7 +126,7 @@ public:
int32_t DestroySurfaceArrayElement( uint32_t index );
inline int32_t GetMemorySizeOfSurfaces();
- int32_t GetSurfaceArraySize(uint32_t& surfaceArraySize);
+ virtual int32_t GetSurfaceArraySize(uint32_t& surfaceArraySize);
int32_t UpdateStateForDelayedDestroy(SURFACE_DESTROY_KIND destroyKind, uint32_t i);
@@ -137,20 +137,20 @@ public:
int32_t UpdateProfileFor3DSurface(uint32_t index, uint32_t width,
uint32_t height, uint32_t depth, CM_SURFACE_FORMAT format);
- int32_t UpdateSurface2DTableMosResource( uint32_t index, PMOS_RESOURCE pMosResource );
- int32_t UpdateSurface2DTableRotation(uint32_t index, CM_ROTATION rotationFlag);
+ virtual int32_t UpdateSurface2DTableMosResource( uint32_t index, PMOS_RESOURCE pMosResource );
+ virtual int32_t UpdateSurface2DTableRotation(uint32_t index, CM_ROTATION rotationFlag);
- int32_t UpdateSurface2DTableFrameType(uint32_t index, CM_FRAME_TYPE frameType);
- int32_t UpdateSurface2DTableChromaSiting(uint32_t index, int32_t chromaSiting);
+ virtual int32_t UpdateSurface2DTableFrameType(uint32_t index, CM_FRAME_TYPE frameType);
+ virtual int32_t UpdateSurface2DTableChromaSiting(uint32_t index, int32_t chromaSiting);
int32_t DestroyStateBuffer( CmStateBuffer *&buffer_ptr,
SURFACE_DESTROY_KIND destroyKind );
int32_t DestroyMediaState( void *media_state_ptr );
- bool IsCmReservedSurfaceIndex(uint32_t surfBTI);
- bool IsValidSurfaceIndex(uint32_t surfBTI);
+ virtual bool IsCmReservedSurfaceIndex(uint32_t surfBTI);
+ virtual bool IsValidSurfaceIndex(uint32_t surfBTI);
uint32_t MaxIndirectSurfaceCount();
- uint32_t ValidSurfaceIndexStart();
+ virtual uint32_t ValidSurfaceIndexStart();
bool IsSupportedForSamplerSurface2D(CM_SURFACE_FORMAT format);
inline void SetLatestVeboxTrackerAddr(uint32_t *tracker) {m_latestVeboxTracker = tracker; }
inline uint32_t LatestVeboxTracker() {return *m_latestVeboxTracker; }
@@ -160,7 +160,7 @@ public:
std::set<CmSurface *> & GetStatelessSurfaceArray() { return m_statelessSurfaceArray; }
#if MDF_SURFACE_CONTENT_DUMP
- CM_HAL_STATE* GetHalState();
+ virtual CM_HAL_STATE* GetHalState();
#endif // #if MDF_SURFACE_CONTENT_DUMP
protected:
diff --git a/media_driver/agnostic/common/cm/cm_wrapper.h b/media_driver/agnostic/common/cm/cm_wrapper.h
index 2371fe3e..24b2290c 100644
--- a/media_driver/agnostic/common/cm/cm_wrapper.h
+++ b/media_driver/agnostic/common/cm/cm_wrapper.h
@@ -549,13 +549,6 @@ int32_t CmThinExecuteInternal(CmDevice *device,
void *inputData,
uint32_t inputDataLen);
-// Below APIs are called in CmThinExecute(), so they are declared here again.
-extern int32_t CreateCmDevice(MOS_CONTEXT *mosContext,
- CmDevice* &device,
- uint32_t devCreateOption);
-
-extern int32_t DestroyCmDevice(CmDevice* &device);
-
namespace CMRT_UMD
{
// class of CmWrapperEx for functionality extention in cm wrapper
diff --git a/media_driver/agnostic/common/cm/media_srcs.cmake b/media_driver/agnostic/common/cm/media_srcs.cmake
index f93b2da1..ecc3a551 100644
--- a/media_driver/agnostic/common/cm/media_srcs.cmake
+++ b/media_driver/agnostic/common/cm/media_srcs.cmake
@@ -23,7 +23,6 @@ set(TMP_SOURCES_
${CMAKE_CURRENT_LIST_DIR}/cm_buffer_rt.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_state_buffer.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_def.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cm_device_rt_base.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_event_rt.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_group_space.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_hal.cpp
@@ -44,7 +43,6 @@ set(TMP_SOURCES_
${CMAKE_CURRENT_LIST_DIR}/cm_surface.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_surface_2d_up_rt.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_surface_3d_rt.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cm_surface_manager_base.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_surface_sampler.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_surface_sampler8x8.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_surface_vme.cpp
@@ -54,7 +52,6 @@ set(TMP_SOURCES_
${CMAKE_CURRENT_LIST_DIR}/cm_vebox_rt.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_vebox_data.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_visa.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cm_global_api.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_execution_adv.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_ish_base.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_kernel_ex.cpp
@@ -67,8 +64,7 @@ set(TMP_SOURCES_
${CMAKE_CURRENT_LIST_DIR}/cm_tracker.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_event_ex_base.cpp
${CMAKE_CURRENT_LIST_DIR}/cm_command_buffer.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cm_surface_2d_rt_base.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cm_wrapper.cpp)
+ ${CMAKE_CURRENT_LIST_DIR}/cm_surface_2d_rt_base.cpp)
set(TMP_HEADERS_
${CMAKE_CURRENT_LIST_DIR}/cm_array.h
@@ -120,9 +116,6 @@ set(TMP_HEADERS_
${CMAKE_CURRENT_LIST_DIR}/cm_vebox_data.h
${CMAKE_CURRENT_LIST_DIR}/cm_visa.h
${CMAKE_CURRENT_LIST_DIR}/cm_execution_adv.h
- ${CMAKE_CURRENT_LIST_DIR}/cm_rt_umd.h
- ${CMAKE_CURRENT_LIST_DIR}/cm_surface_manager_base.h
- ${CMAKE_CURRENT_LIST_DIR}/cm_device_rt_base.h
${CMAKE_CURRENT_LIST_DIR}/cm_ish_base.h
${CMAKE_CURRENT_LIST_DIR}/cm_kernel_ex.h
${CMAKE_CURRENT_LIST_DIR}/cm_surface_state.h
@@ -134,7 +127,6 @@ set(TMP_HEADERS_
${CMAKE_CURRENT_LIST_DIR}/cm_tracker.h
${CMAKE_CURRENT_LIST_DIR}/cm_event_ex_base.h
${CMAKE_CURRENT_LIST_DIR}/cm_command_buffer.h
- ${CMAKE_CURRENT_LIST_DIR}/cm_wrapper.h
${CMAKE_CURRENT_LIST_DIR}/cm_surface_2d_rt_base.h)
set(COMMON_SOURCES_
@@ -150,9 +142,31 @@ set(COMMON_PRIVATE_INCLUDE_DIRS_
${CMAKE_CURRENT_LIST_DIR}
)
+set(TMP_1_SOURCES_
+ ${CMAKE_CURRENT_LIST_DIR}/cm_global_api.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/cm_device_rt_base.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/cm_surface_manager_base.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/cm_wrapper.cpp
+)
+
+set(TMP_1_HEADERS_
+ ${CMAKE_CURRENT_LIST_DIR}/cm_rt_umd.h
+ ${CMAKE_CURRENT_LIST_DIR}/cm_device_rt_base.h
+ ${CMAKE_CURRENT_LIST_DIR}/cm_surface_manager_base.h
+ ${CMAKE_CURRENT_LIST_DIR}/cm_wrapper.h
+)
+
+set(SOURCES_
+ ${SOURCES_}
+ ${TMP_1_SOURCES_})
+
+set(HEADERS_
+ ${HEADERS_}
+ ${TMP_1_HEADERS_})
+
set(SOURCES_SSE2
${CMAKE_CURRENT_LIST_DIR}/cm_mem_sse2_impl.cpp)
-source_group(CM FILES ${TMP_SOURCES_} ${TMP_HEADERS_})
+source_group(CM FILES ${TMP_SOURCES_} ${TMP_HEADERS_} ${TMP_1_SOURCES_} ${TMP_1_HEADERS_})
media_add_curr_to_include_path()
\ No newline at end of file
diff --git a/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.cpp b/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.cpp
index 8d92c459..f45027e7 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.cpp
+++ b/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.cpp
@@ -38,15 +38,16 @@ MOS_STATUS CodechalDecodeNV12ToP010::Init(PMOS_INTERFACE osInterface)
CODECHAL_DECODE_FUNCTION_ENTER;
CODECHAL_DECODE_CHK_NULL_RETURN(osInterface);
-
+ m_osInterface = osInterface;
uint32_t devCreateOption = CM_DEVICE_CREATE_OPTION_FOR_HEVC;
devCreateOption &= (~CM_DEVICE_CONFIG_GPUCONTEXT_ENABLE);
osInterface->pfnNotifyStreamIndexSharing(osInterface);
- CODECHAL_DECODE_CHK_STATUS_RETURN(CreateCmDevice(
+ CODECHAL_DECODE_CHK_STATUS_RETURN(osInterface->pfnCreateCmDevice(
osInterface->pOsContext,
m_cmDevice,
- devCreateOption));
+ devCreateOption,
+ CM_DEVICE_CREATE_PRIORITY_DEFAULT));
CODECHAL_DECODE_CHK_STATUS_RETURN(m_cmDevice->CreateQueue(
m_cmQueue));
@@ -148,7 +149,9 @@ CodechalDecodeNV12ToP010::~CodechalDecodeNV12ToP010()
m_cmDevice->DestroyKernel(m_cmKernel);
m_cmKernel = nullptr;
}
-
- DestroyCmDevice(m_cmDevice);
+ if (m_osInterface != nullptr)
+ {
+ m_osInterface->pfnDestroyCmDevice(m_cmDevice);
+ }
}
diff --git a/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.h b/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.h
index 7c68c450..d0a32ef9 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.h
+++ b/media_driver/agnostic/common/codec/hal/codechal_decode_nv12top010.h
@@ -87,6 +87,8 @@ private:
CmTask *m_cmTask = nullptr;
//! \brief Pointer to CM thread space
CmThreadSpace *m_cmThreadSpace = nullptr;
+ //! \brief Pointer to os interface
+ PMOS_INTERFACE m_osInterface = nullptr;
};
#endif
diff --git a/media_driver/agnostic/common/codec/hal/codechal_encode_avc_base.cpp b/media_driver/agnostic/common/codec/hal/codechal_encode_avc_base.cpp
index 2a4b6647..9930c6e3 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_encode_avc_base.cpp
+++ b/media_driver/agnostic/common/codec/hal/codechal_encode_avc_base.cpp
@@ -2345,6 +2345,12 @@ MOS_STATUS CodechalEncodeAvcBase::SetSequenceStructs()
auto seqParams = m_avcSeqParam;
+ if (seqParams->FrameHeight > m_rawSurface.dwHeight || seqParams->FrameWidth > m_rawSurface.dwWidth)
+ {
+ CODECHAL_ENCODE_ASSERTMESSAGE("Error: Allocated surface width and height cannot be less than SPS width and height");
+ return MOS_STATUS_INVALID_PARAMETER;
+ }
+
// seq_scaling_matrix_present_flag and chroma_format_idc
// shall not be present for main profile
if (seqParams->Profile == CODEC_AVC_MAIN_PROFILE)
diff --git a/media_driver/agnostic/common/codec/hal/codechal_encoder_base.cpp b/media_driver/agnostic/common/codec/hal/codechal_encoder_base.cpp
index d30e9adc..7f02fe9c 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_encoder_base.cpp
+++ b/media_driver/agnostic/common/codec/hal/codechal_encoder_base.cpp
@@ -1080,8 +1080,9 @@ MOS_STATUS CodechalEncoderState::AllocateMDFResources()
if (m_cmDev == nullptr)
{
+ CODECHAL_ENCODE_CHK_NULL_RETURN(m_osInterface);
m_osInterface->pfnNotifyStreamIndexSharing(m_osInterface);
- CODECHAL_ENCODE_CHK_STATUS_RETURN(CreateCmDevice(m_osInterface->pOsContext, m_cmDev, devOp));
+ CODECHAL_ENCODE_CHK_STATUS_RETURN(m_osInterface->pfnCreateCmDevice(m_osInterface->pOsContext, m_cmDev, devOp, CM_DEVICE_CREATE_PRIORITY_DEFAULT));
}
//just WA for issues in MDF null support
if (!m_cmQueue)
@@ -1105,9 +1106,9 @@ MOS_STATUS CodechalEncoderState::DestroyMDFResources()
m_cmDev->DestroyTask(m_cmTask);
m_cmTask = nullptr;
}
- if (m_cmDev)
+ if (m_cmDev && m_osInterface)
{
- DestroyCmDevice(m_cmDev);
+ m_osInterface->pfnDestroyCmDevice(m_cmDev);
m_cmDev = nullptr;
}
diff --git a/media_driver/agnostic/common/codec/hal/codechal_encoder_base.h b/media_driver/agnostic/common/codec/hal/codechal_encoder_base.h
index 20185ded..2a1f7808 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_encoder_base.h
+++ b/media_driver/agnostic/common/codec/hal/codechal_encoder_base.h
@@ -1996,7 +1996,7 @@ public:
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
- MOS_STATUS CreateGpuContexts();
+ virtual MOS_STATUS CreateGpuContexts();
//!
//! \brief Verify Space Available
diff --git a/media_driver/agnostic/common/renderhal/renderhal_legacy.cpp b/media_driver/agnostic/common/renderhal/renderhal_legacy.cpp
index a440a8d3..bd4fb460 100644
--- a/media_driver/agnostic/common/renderhal/renderhal_legacy.cpp
+++ b/media_driver/agnostic/common/renderhal/renderhal_legacy.cpp
@@ -27,6 +27,86 @@
#include "renderhal_legacy.h"
+//!
+//! \brief Create Interface
+//! \details Create RenderHal Interface structure, responsible for HW
+//! abstraction of HW Rendering Engine for CM(MDF) and VP.
+//! \param PRENDERHAL_INTERFACE renderHal
+//! [in/out] Pointer to Hardware Interface Structure
+//! \param MhwCpInterface **cpInterface
+//! [out] Pointer of pointer to MHW CP Interface Structure, which
+//! is created during renderhal initialization
+//! \param PMOS_INTERFACE osInterface
+//! [in] Pointer to OS Interface Structure
+//! \param PRENDERHAL_SETTINGS_LEGACY renderHalSettings
+//! [in] Pointer to RenderHal Settings
+//!
+MOS_STATUS Create_RenderHal_Interface_Legacy(
+ PRENDERHAL_INTERFACE &renderHal,
+ MhwCpInterface **cpInterface,
+ PMOS_INTERFACE osInterface,
+ PRENDERHAL_SETTINGS_LEGACY renderHalSettings)
+{
+ MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
+ if (!cpInterface || !osInterface || !renderHalSettings)
+ {
+ MHW_RENDERHAL_ASSERTMESSAGE("Invalid parameters.");
+ return MOS_STATUS_NULL_POINTER;
+ }
+
+ renderHal = (PRENDERHAL_INTERFACE_LEGACY)MOS_AllocAndZeroMemory(sizeof(RENDERHAL_INTERFACE_LEGACY));
+ if (!renderHal)
+ {
+ MHW_RENDERHAL_ASSERTMESSAGE("Allocate render hal failed");
+ return MOS_STATUS_NULL_POINTER;
+ }
+
+ eStatus = RenderHal_InitInterface_Legacy(
+ (PRENDERHAL_INTERFACE_LEGACY)renderHal,
+ cpInterface,
+ osInterface);
+ if (eStatus != MOS_STATUS_SUCCESS)
+ {
+ MHW_RENDERHAL_ASSERTMESSAGE("Init render hal interface failed");
+ return MOS_STATUS_NULL_POINTER;
+ }
+
+ // Allocate and initialize HW states
+ renderHalSettings->iMediaStates = 32;
+ eStatus = renderHal->pfnInitialize(renderHal, renderHalSettings);
+ if (eStatus != MOS_STATUS_SUCCESS)
+ {
+ MHW_RENDERHAL_ASSERTMESSAGE("Init render hal failed");
+ return MOS_STATUS_NULL_POINTER;
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+//!
+//! \brief Destroy Interface
+//! \details Create RenderHal Interface structure, responsible for HW
+//! abstraction of HW Rendering Engine for CM(MDF) and VP.
+//! \param PRENDERHAL_INTERFACE_LEGACY renderHal
+//! [in] Pointer to Hardware Interface Structure
+//!
+MOS_STATUS Destroy_RenderHal_Interface_Legacy(PRENDERHAL_INTERFACE_LEGACY renderHal)
+{
+ MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
+ if (renderHal)
+ {
+ eStatus = renderHal->pfnDestroy(renderHal);
+ if (eStatus != MOS_STATUS_SUCCESS)
+ {
+ MHW_RENDERHAL_ASSERTMESSAGE("Failed to destroy RenderHal, eStatus:%d.\n", eStatus);
+ }
+ MOS_FreeMemory(renderHal);
+
+ }
+
+ return eStatus;
+}
+
//!
//! \brief Init Interface
//! \details Initializes RenderHal Interface structure, responsible for HW
diff --git a/media_driver/agnostic/common/renderhal/renderhal_legacy.h b/media_driver/agnostic/common/renderhal/renderhal_legacy.h
index 346b982f..eaf231be 100644
--- a/media_driver/agnostic/common/renderhal/renderhal_legacy.h
+++ b/media_driver/agnostic/common/renderhal/renderhal_legacy.h
@@ -97,6 +97,36 @@ typedef struct _RENDERHAL_INTERFACE_LEGACY : _RENDERHAL_INTERFACE
} RENDERHAL_INTERFACE_LEGACY, *PRENDERHAL_INTERFACE_LEGACY;
+//!
+//! \brief Create Interface
+//! \details Create RenderHal Interface structure, responsible for HW
+//! abstraction of HW Rendering Engine for CM(MDF) and VP.
+//! \param PRENDERHAL_INTERFACE renderHal
+//! [in/out] Pointer to Hardware Interface Structure
+//! \param MhwCpInterface* cpInterface
+//! [out] Pointer of pointer to MHW CP Interface Structure, which
+//! is created during renderhal initialization
+//! \param PMOS_INTERFACE osInterface
+//! [in] Pointer to OS Interface Structure
+//! \param PRENDERHAL_SETTINGS_LEGACY renderHalSettings
+//! [in] Pointer to RenderHal Settings
+//!
+MOS_STATUS Create_RenderHal_Interface_Legacy(
+ PRENDERHAL_INTERFACE &renderHal,
+ MhwCpInterface **cpInterface,
+ PMOS_INTERFACE osInterface,
+ PRENDERHAL_SETTINGS_LEGACY renderHalSettings);
+
+//!
+//! \brief Destroy Interface
+//! \details Create RenderHal Interface structure, responsible for HW
+//! abstraction of HW Rendering Engine for CM(MDF) and VP.
+//! \param PRENDERHAL_INTERFACE_LEGACY renderHal
+//! [in] Pointer to Hardware Interface Structure
+//!
+MOS_STATUS Destroy_RenderHal_Interface_Legacy(
+ PRENDERHAL_INTERFACE_LEGACY renderHal);
+
//!
//! \brief Init Interface
//! \details Initializes Render Hal Interface structure, responsible for HW
diff --git a/media_driver/agnostic/common/shared/mediacopy/media_blt_copy.cpp b/media_driver/agnostic/common/shared/mediacopy/media_blt_copy.cpp
index 6eebede6..7a95c906 100644
--- a/media_driver/agnostic/common/shared/mediacopy/media_blt_copy.cpp
+++ b/media_driver/agnostic/common/shared/mediacopy/media_blt_copy.cpp
@@ -32,6 +32,7 @@
#include "media_copy.h"
#include "mhw_mi.h"
#include "mos_utilities.h"
+#include "media_perf_profiler.h"
#define BIT( n ) ( 1 << (n) )
//!
@@ -341,6 +342,10 @@ MOS_STATUS BltState::SubmitCMD(
}
planeNum = GetPlaneNum(dstResDetails.Format);
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ BLT_CHK_NULL_RETURN(perfProfiler);
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
+
if (pBltStateParam->bCopyMainSurface)
{
m_blokCopyon = true;
@@ -408,6 +413,8 @@ MOS_STATUS BltState::SubmitCMD(
}
}
}
+
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
// Add flush DW
BLT_CHK_STATUS_RETURN(m_miInterface->AddMiFlushDwCmd(&cmdBuffer, &FlushDwParams));
diff --git a/media_driver/agnostic/common/shared/mediacopy/media_vebox_copy.cpp b/media_driver/agnostic/common/shared/mediacopy/media_vebox_copy.cpp
index 2c579f9f..b47c4e05 100644
--- a/media_driver/agnostic/common/shared/mediacopy/media_vebox_copy.cpp
+++ b/media_driver/agnostic/common/shared/mediacopy/media_vebox_copy.cpp
@@ -239,6 +239,9 @@ MOS_STATUS VeboxCopyState::CopyMainSurface(PMOS_RESOURCE src, PMOS_RESOURCE dst)
VEBOX_COPY_CHK_STATUS_RETURN(m_osInterface->pfnGetCommandBuffer(m_osInterface, &cmdBuffer, 0));
VEBOX_COPY_CHK_STATUS_RETURN(InitCommandBuffer(&cmdBuffer));
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ VEBOX_COPY_CHK_NULL_RETURN(perfProfiler);
+ VEBOX_COPY_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
// Set Vebox Aux MMIO
VEBOX_COPY_CHK_STATUS_RETURN(m_veboxInterface->setVeboxPrologCmd(m_miInterface, &cmdBuffer));
@@ -256,6 +259,7 @@ MOS_STATUS VeboxCopyState::CopyMainSurface(PMOS_RESOURCE src, PMOS_RESOURCE dst)
// Send CMD: Vebox_Tiling_Convert
//---------------------------------
VEBOX_COPY_CHK_STATUS_RETURN(m_veboxInterface->AddVeboxTilingConvert(&cmdBuffer, &mhwVeboxSurfaceStateCmdParams.SurfInput, &mhwVeboxSurfaceStateCmdParams.SurfOutput));
+ VEBOX_COPY_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
MOS_ZeroMemory(&flushDwParams, sizeof(flushDwParams));
diff --git a/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.cpp b/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.cpp
index d5b60a31..c8636f9a 100644
--- a/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.cpp
+++ b/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.cpp
@@ -98,18 +98,19 @@ CmEvent* EventManager::GetLastEvent() const
return mLastEvent;
}
-CmContext::CmContext(PMOS_CONTEXT OsContext) :
+CmContext::CmContext(PMOS_INTERFACE osInterface) :
mRefCount(0),
mCmDevice(nullptr),
mCmQueue(nullptr),
mCmVebox(nullptr),
+ m_osInterface(osInterface),
mBatchTask(nullptr),
mHasBatchedTask(false),
mConditionalBatchBuffer(nullptr),
mCondParam({ 0 }),
mEventListener(nullptr)
{
- VPHAL_RENDER_ASSERT(OsContext);
+ VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(osInterface);
const unsigned int MDF_DEVICE_CREATE_OPTION =
((CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_DISABLE) |
@@ -120,7 +121,7 @@ CmContext::CmContext(PMOS_CONTEXT OsContext) :
(CM_DEVICE_CONFIG_GPUCONTEXT_ENABLE) |
(32 << CM_DEVICE_CONFIG_KERNELBINARYGSH_OFFSET));
- int result = CreateCmDevice(OsContext, mCmDevice, MDF_DEVICE_CREATE_OPTION);
+ int result = osInterface->pfnCreateCmDevice(osInterface->pOsContext, mCmDevice, MDF_DEVICE_CREATE_OPTION, CM_DEVICE_CREATE_PRIORITY_DEFAULT);
if (result != CM_SUCCESS)
{
VPHAL_RENDER_ASSERTMESSAGE("CmDevice creation error %d\n", result);
@@ -344,9 +345,9 @@ void CmContext::Destroy()
mCmDevice->DestroyVebox(mCmVebox);
}
- if (mCmDevice)
+ if (mCmDevice && m_osInterface)
{
- DestroyCmDevice(mCmDevice);
+ m_osInterface->pfnDestroyCmDevice(mCmDevice);
}
mBatchTask = nullptr;
diff --git a/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.h b/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.h
index 7b3a3e5e..29d8fafe 100644
--- a/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.h
+++ b/media_driver/agnostic/common/vp/hal/vphal_mdf_wrapper.h
@@ -81,7 +81,7 @@ public:
// noncopyable
CmContext(const CmContext&) = delete;
CmContext& operator=(const CmContext&) = delete;
- CmContext(PMOS_CONTEXT OsContext);
+ CmContext(PMOS_INTERFACE osInterface);
virtual ~CmContext();
void Destroy();
@@ -137,6 +137,7 @@ private:
CmQueue *mCmQueue;
CmVebox *mCmVebox;
+ PMOS_INTERFACE m_osInterface = nullptr;
CmTask *mBatchTask;
std::vector<CmKernel *> mAddedKernels;
std::vector<CmKernel *> mKernelsToPurge;
diff --git a/media_driver/agnostic/common/vp/hal/vphal_render_hdr_g11.cpp b/media_driver/agnostic/common/vp/hal/vphal_render_hdr_g11.cpp
index 3d228cc6..09b41a68 100644
--- a/media_driver/agnostic/common/vp/hal/vphal_render_hdr_g11.cpp
+++ b/media_driver/agnostic/common/vp/hal/vphal_render_hdr_g11.cpp
@@ -292,7 +292,7 @@ Hdr3DLutGenerator::Hdr3DLutGenerator(PRENDERHAL_INTERFACE renderHal, uint32_t *k
{
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal);
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal->pOsInterface);
- m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface->pOsContext);
+ m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface);
VPHAL_RENDER_NORMALMESSAGE("Hdr3DLutGenerator Constructor!");
diff --git a/media_driver/agnostic/common/vp/hal/vphal_render_vebox_denoise.cpp b/media_driver/agnostic/common/vp/hal/vphal_render_vebox_denoise.cpp
index 9e2f2300..bc14d96e 100644
--- a/media_driver/agnostic/common/vp/hal/vphal_render_vebox_denoise.cpp
+++ b/media_driver/agnostic/common/vp/hal/vphal_render_vebox_denoise.cpp
@@ -136,7 +136,7 @@ VphalHVSDenoiser::VphalHVSDenoiser(PRENDERHAL_INTERFACE renderHal) :
{
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal);
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal->pOsInterface);
- m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface->pOsContext);
+ m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface);
m_eventManager = MOS_New(EventManager, "HVSEventManager", m_cmContext);
VPHAL_RENDER_NORMALMESSAGE("Constructor!");
}
diff --git a/media_driver/agnostic/common/vp/hal/vphal_renderer.cpp b/media_driver/agnostic/common/vp/hal/vphal_renderer.cpp
index 2e738c93..cd045cf2 100644
--- a/media_driver/agnostic/common/vp/hal/vphal_renderer.cpp
+++ b/media_driver/agnostic/common/vp/hal/vphal_renderer.cpp
@@ -1006,6 +1006,8 @@ void VphalRenderer::UpdateReport(
m_reporting->GetFeatures().rtCompressible = true;
m_reporting->GetFeatures().rtCompressMode = (uint8_t)(pRenderParams->pTarget[0]->CompressionMode);
}
+
+ m_reporting->GetFeatures().rtCacheSetting = (uint8_t)(pRenderParams->pTarget[0]->CacheSetting);
}
//!
diff --git a/media_driver/agnostic/gen11/cm/cm_hal_g11.cpp b/media_driver/agnostic/gen11/cm/cm_hal_g11.cpp
index 531a8141..81e262ec 100644
--- a/media_driver/agnostic/gen11/cm/cm_hal_g11.cpp
+++ b/media_driver/agnostic/gen11/cm/cm_hal_g11.cpp
@@ -748,7 +748,7 @@ MOS_STATUS CM_HAL_G11_X::SubmitCommands(
&mosSurface));
mosSurface.OsResource = state->bufferTable[i].osResource;
- CM_CHK_HRESULT_GOTOFINISH_MOSERROR(HalCm_SurfaceSync(state, &mosSurface, false));
+ CM_CHK_HRESULT_GOTOFINISH_MOSERROR(state->pfnSurfaceSync(state, &mosSurface, false));
}
}
diff --git a/media_driver/agnostic/gen12/cm/cm_hal_g12.cpp b/media_driver/agnostic/gen12/cm/cm_hal_g12.cpp
index a42e46a8..24cfb875 100644
--- a/media_driver/agnostic/gen12/cm/cm_hal_g12.cpp
+++ b/media_driver/agnostic/gen12/cm/cm_hal_g12.cpp
@@ -925,7 +925,7 @@ MOS_STATUS CM_HAL_G12_X::SubmitCommands(
&mosSurface));
mosSurface.OsResource = state->bufferTable[i].osResource;
- CM_CHK_HRESULT_GOTOFINISH_MOSERROR(HalCm_SurfaceSync(state, &mosSurface, false));
+ CM_CHK_HRESULT_GOTOFINISH_MOSERROR(state->pfnSurfaceSync(state, &mosSurface, false));
}
}
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_encode_hevc_mbenc_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_encode_hevc_mbenc_g12.cpp
index 1f9bb321..f1fed82a 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_encode_hevc_mbenc_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_encode_hevc_mbenc_g12.cpp
@@ -390,11 +390,13 @@ MOS_STATUS CodecHalHevcMbencG12::AllocateMDFResources()
//create CM device
if (!m_cmDev)
{
+ CODECHAL_ENCODE_CHK_NULL_RETURN(m_osInterface);
m_osInterface->pfnNotifyStreamIndexSharing(m_osInterface);
- CODECHAL_ENCODE_CHK_STATUS_RETURN(CreateCmDevice(
+ CODECHAL_ENCODE_CHK_STATUS_RETURN(m_osInterface->pfnCreateCmDevice(
m_osInterface->pOsContext,
m_cmDev,
- devOp));
+ devOp,
+ CM_DEVICE_CREATE_PRIORITY_DEFAULT));
}
if (!m_surfIndexArray)
@@ -410,11 +412,13 @@ MOS_STATUS CodecHalHevcMbencG12::AllocateMDFResources()
{
if (!m_mfeEncodeSharedState->pCmDev)
{
+ CODECHAL_ENCODE_CHK_NULL_RETURN(m_osInterface);
m_osInterface->pfnNotifyStreamIndexSharing(m_osInterface);
- CODECHAL_ENCODE_CHK_STATUS_RETURN(CreateCmDevice(
+ CODECHAL_ENCODE_CHK_STATUS_RETURN(m_osInterface->pfnCreateCmDevice(
m_osInterface->pOsContext,
m_cmDev,
- devOp));
+ devOp,
+ CM_DEVICE_CREATE_PRIORITY_DEFAULT));
m_mfeEncodeSharedState->pCmDev = m_cmDev;
}
@@ -474,9 +478,11 @@ MOS_STATUS CodecHalHevcMbencG12::DestroyMDFResources()
{
delete[] m_surfIndexArray;
m_surfIndexArray = nullptr;
-
- DestroyCmDevice(m_cmDev);
- m_cmDev = nullptr;
+ if (m_osInterface != nullptr)
+ {
+ m_osInterface->pfnDestroyCmDevice(m_cmDev);
+ m_cmDev = nullptr;
+ }
}
else
{
@@ -488,9 +494,11 @@ MOS_STATUS CodecHalHevcMbencG12::DestroyMDFResources()
delete[] m_surfIndexArray;
m_surfIndexArray = nullptr;
m_mfeEncodeSharedState->commonSurface = nullptr;
-
- DestroyCmDevice(m_cmDev);
- m_mfeEncodeSharedState->pCmDev = m_cmDev = nullptr;
+ if (m_osInterface != nullptr)
+ {
+ m_osInterface->pfnDestroyCmDevice(m_cmDev);
+ m_mfeEncodeSharedState->pCmDev = m_cmDev = nullptr;
+ }
}
else
{
diff --git a/media_driver/agnostic/gen12/vp/hal/vphal_render_hdr_3dlut_g12.cpp b/media_driver/agnostic/gen12/vp/hal/vphal_render_hdr_3dlut_g12.cpp
index 3dc46bbb..513fe1fc 100644
--- a/media_driver/agnostic/gen12/vp/hal/vphal_render_hdr_3dlut_g12.cpp
+++ b/media_driver/agnostic/gen12/vp/hal/vphal_render_hdr_3dlut_g12.cpp
@@ -292,7 +292,7 @@ Hdr3DLutGeneratorG12::Hdr3DLutGeneratorG12(PRENDERHAL_INTERFACE renderHal, uint3
{
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal);
VPHAL_RENDER_CHK_NULL_NO_STATUS_RETURN(m_renderHal->pOsInterface);
- m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface->pOsContext);
+ m_cmContext = MOS_New(CmContext, m_renderHal->pOsInterface);
VPHAL_RENDER_NORMALMESSAGE("Hdr3DLutGeneratorG12 Constructor!");
diff --git a/media_driver/agnostic/gen9/cm/cm_hal_g9.cpp b/media_driver/agnostic/gen9/cm/cm_hal_g9.cpp
index 3393bbf5..b460b637 100644
--- a/media_driver/agnostic/gen9/cm/cm_hal_g9.cpp
+++ b/media_driver/agnostic/gen9/cm/cm_hal_g9.cpp
@@ -1072,7 +1072,7 @@ MOS_STATUS CM_HAL_G9_X::SubmitCommands(
&mosSurface));
mosSurface.OsResource = state->bufferTable[i].osResource;
- CM_CHK_HRESULT_GOTOFINISH_MOSERROR(HalCm_SurfaceSync(state, &mosSurface, false));
+ CM_CHK_HRESULT_GOTOFINISH_MOSERROR(state->pfnSurfaceSync(state, &mosSurface, false));
}
}
}
diff --git a/media_driver/linux/common/cm/hal/cm_global_api_os.cpp b/media_driver/linux/common/cm/hal/cm_global_api_os.cpp
index 6960c570..3af3c013 100644
--- a/media_driver/linux/common/cm/hal/cm_global_api_os.cpp
+++ b/media_driver/linux/common/cm/hal/cm_global_api_os.cpp
@@ -45,8 +45,10 @@ using CMRT_UMD::CmDeviceRT;
//!
CM_RT_API int32_t CreateCmDevice(MOS_CONTEXT *mosContext,
CmDevice* &device,
- uint32_t devCreateOption)
+ uint32_t devCreateOption,
+ uint8_t priority)
{
+ UNUSED(priority);
if (mosContext == nullptr)
{
return CM_NULL_POINTER;
@@ -91,3 +93,17 @@ CM_RT_API int32_t DestroyCmDevice(CmDevice* & device)
return CM_SUCCESS;
}
+
+//!
+//! \brief Initialize cm hal ddi interfaces
+//! \details Initialize cm hal ddi interfaces
+//! \param cmState
+//! [in,out] the pointer to the cm state.
+//! \return MOS_STATUS
+//! MOS_STATUS_SUCCESS if succeeded, otherwise error code
+//!
+MOS_STATUS InitCmOsDDIInterface(PCM_HAL_STATE cmState)
+{
+ UNUSED(cmState);
+ return MOS_STATUS_SUCCESS;
+}
diff --git a/media_driver/linux/common/cm/hal/cm_hal_os.cpp b/media_driver/linux/common/cm/hal/cm_hal_os.cpp
index 03e22b05..fd025595 100644
--- a/media_driver/linux/common/cm/hal/cm_hal_os.cpp
+++ b/media_driver/linux/common/cm/hal/cm_hal_os.cpp
@@ -284,7 +284,7 @@ MOS_STATUS HalCm_GetSurfaceAndRegister(
}
//Tag-based Sync on the Resource/surface
- CM_CHK_MOSSTATUS_GOTOFINISH(HalCm_SyncOnResource(state, surface, true));
+ CM_CHK_MOSSTATUS_GOTOFINISH(state->pfnSyncOnResource(state, surface, true));
eStatus = MOS_STATUS_SUCCESS;
finish:
@@ -359,7 +359,7 @@ finish:
//| Purpose: Get 2D surface pitch and physical size for SURFACE2D_UP
//| Returns: Result of the operation.
//*-----------------------------------------------------------------------------
-MOS_STATUS HalCm_GetSurface2DPitchAndSize_Linux(
+MOS_STATUS HalCm_GetSurface2DPitchAndSize(
PCM_HAL_STATE state, // [in] Pointer to CM State
PCM_HAL_SURFACE2D_UP_PARAM param) // [in] Pointer to Buffer Param
{
@@ -371,7 +371,7 @@ MOS_STATUS HalCm_GetSurface2DPitchAndSize_Linux(
//| Purpose: Register APP/Runtime-level created Event Handle as a UMD Object;
//| Returns: Result of the operation.
//*-----------------------------------------------------------------------------
-MOS_STATUS HalCm_RegisterUMDNotifyEventHandle_Linux(
+MOS_STATUS HalCm_RegisterUMDNotifyEventHandle(
PCM_HAL_STATE state,
PCM_HAL_OSSYNC_PARAM syncParam)
{
@@ -679,7 +679,7 @@ finish:
//| Purpose: Get GPU current frequency
//| Returns: Result of the operation.
//*-----------------------------------------------------------------------------
-MOS_STATUS HalCm_GetGPUCurrentFrequency_Linux(
+MOS_STATUS HalCm_GetGPUCurrentFrequency(
PCM_HAL_STATE state, // [in] Pointer to CM State
uint32_t *currentFrequency) // [out] Pointer to current frequency
{
@@ -693,7 +693,7 @@ MOS_STATUS HalCm_GetGPUCurrentFrequency_Linux(
return MOS_STATUS_SUCCESS;
}
-MOS_STATUS HalCm_GetGpuTime_Linux(PCM_HAL_STATE state, uint64_t *gpuTime)
+MOS_STATUS HalCm_GetGpuTime(PCM_HAL_STATE state, uint64_t *gpuTime)
{
UNUSED(state);
*gpuTime = 0;
@@ -1186,12 +1186,12 @@ void HalCm_OsInitInterface(
{
CM_ASSERT(cmState);
- cmState->pfnGetSurface2DPitchAndSize = HalCm_GetSurface2DPitchAndSize_Linux;
- cmState->pfnRegisterUMDNotifyEventHandle = HalCm_RegisterUMDNotifyEventHandle_Linux;
+ cmState->pfnGetSurface2DPitchAndSize = HalCm_GetSurface2DPitchAndSize;
+ cmState->pfnGetGPUCurrentFrequency = HalCm_GetGPUCurrentFrequency;
+ cmState->pfnRegisterUMDNotifyEventHandle = HalCm_RegisterUMDNotifyEventHandle;
cmState->pfnAllocateBuffer = HalCm_AllocateBuffer_Linux;
cmState->pfnAllocateSurface2DUP = HalCm_AllocateSurface2DUP_Linux;
- cmState->pfnGetGPUCurrentFrequency = HalCm_GetGPUCurrentFrequency_Linux;
- cmState->pfnGetGpuTime = HalCm_GetGpuTime_Linux;
+ cmState->pfnGetGpuTime = HalCm_GetGpuTime;
cmState->pfnGetPlatformInfo = HalCm_GetPlatformInfo_Linux;
cmState->pfnGetGTSystemInfo = HalCm_GetGTSystemInfo_Linux;
cmState->pfnReferenceCommandBuffer = HalCm_ReferenceCommandBuf_Linux;
@@ -1202,6 +1202,14 @@ void HalCm_OsInitInterface(
cmState->pfnUpdateTrackerResource = HalCm_UpdateTrackerResource_Linux;
cmState->pfnRegisterStream = HalCm_RegisterStream;
+ cmState->pfnGetGfxMapFilter = HalCm_GetGfxMapFilter;
+ cmState->pfnGetGfxTextAddress = HalCm_GetGfxTextAddress;
+ cmState->pfnDecompressSurface = HalCm_DecompressSurface;
+ cmState->pfnSetOsResourceFromDdi = HalCm_SetOsResourceFromDdi;
+ cmState->pfnGetSipBinary = HalCm_GetSipBinary;
+ cmState->pfnSurfaceSync = HalCm_SurfaceSync;
+ cmState->pfnSyncKernel = HalCm_SyncKernel;
+
HalCm_GetLibDrmVMapFnt(cmState);
cmState->syncOnResource = false;
return;
@@ -1598,3 +1606,27 @@ MOS_STATUS HalCm_SurfaceSync(
return MOS_STATUS_SUCCESS;
}
+
+//!
+//! \brief initialization os resource from DDI
+//! \details initialization os resource from DDI
+//! \param PMOS_RESOURCE pResource
+//! [in] Pointer to OS Resource
+//! \param PMOS_RESOURCE pOsResource
+//! [out] Pointer to OS Resource
+//! \param UINT MipSlice
+//! [in] Slice info
+//! \return MOS_STATUS
+//! Return MOS_STATUS_SUCCESS if successful, otherwise failed
+//!
+MOS_STATUS HalCm_SetOsResourceFromDdi(
+ PMOS_RESOURCE resource,
+ PMOS_RESOURCE osResource,
+ uint32_t mipSlice)
+{
+ UNUSED(resource);
+ UNUSED(osResource);
+ UNUSED(mipSlice);
+
+ return MOS_STATUS_SUCCESS;
+}
diff --git a/media_driver/linux/common/cm/hal/cm_wrapper_os.cpp b/media_driver/linux/common/cm/hal/cm_wrapper_os.cpp
index 64d4bbd3..66578800 100644
--- a/media_driver/linux/common/cm/hal/cm_wrapper_os.cpp
+++ b/media_driver/linux/common/cm/hal/cm_wrapper_os.cpp
@@ -26,7 +26,7 @@
//!
#include "cm_wrapper.h"
-
+#include "cm_rt_umd.h"
#include "cm_device_rt.h"
#include "cm_surface_2d_rt.h"
#include "media_libva_util.h"
diff --git a/media_driver/linux/common/codec/ddi/media_ddi_decode_av1.cpp b/media_driver/linux/common/codec/ddi/media_ddi_decode_av1.cpp
index 30b6128d..cf982fef 100644
--- a/media_driver/linux/common/codec/ddi/media_ddi_decode_av1.cpp
+++ b/media_driver/linux/common/codec/ddi/media_ddi_decode_av1.cpp
@@ -227,11 +227,16 @@ VAStatus DdiDecodeAV1::ParsePicParams(
if (picParam->ref_frame_map[i] < mediaCtx->uiNumSurfaces)
{
frameIdx = GetRenderTargetID(&m_ddiDecodeCtx->RTtbl, refSurface);
- if (frameIdx == DDI_CODEC_INVALID_FRAME_INDEX) {
- return VA_STATUS_ERROR_INVALID_PARAMETER;
+
+ if ((frameIdx == DDI_CODEC_INVALID_FRAME_INDEX) &&
+ (picParam->pic_info_fields.bits.frame_type != keyFrame) &&
+ (picParam->pic_info_fields.bits.frame_type != intraOnlyFrame))
+ {
+ return VA_STATUS_ERROR_INVALID_PARAMETER;
}
- picAV1Params->m_refFrameMap[i].FrameIdx = ((uint32_t)frameIdx >= CODECHAL_NUM_UNCOMPRESSED_SURFACE_VP9) ?
- (CODECHAL_NUM_UNCOMPRESSED_SURFACE_VP9 - 1) : frameIdx;
+
+ picAV1Params->m_refFrameMap[i].FrameIdx = ((uint32_t)frameIdx >= CODECHAL_NUM_UNCOMPRESSED_SURFACE_AV1) ?
+ (CODECHAL_NUM_UNCOMPRESSED_SURFACE_AV1 - 1) : frameIdx;
}
else
{
@@ -240,17 +245,17 @@ VAStatus DdiDecodeAV1::ParsePicParams(
frameIdx = GetRenderTargetID(&m_ddiDecodeCtx->RTtbl, refSurface);
if (frameIdx != DDI_CODEC_INVALID_FRAME_INDEX)
{
- picAV1Params->m_refFrameMap[i].FrameIdx = ((uint32_t)frameIdx >= CODECHAL_NUM_UNCOMPRESSED_SURFACE_VP9) ?
- (CODECHAL_NUM_UNCOMPRESSED_SURFACE_VP9 - 1) : frameIdx;
+ picAV1Params->m_refFrameMap[i].FrameIdx = ((uint32_t)frameIdx >= CODECHAL_NUM_UNCOMPRESSED_SURFACE_AV1) ?
+ (CODECHAL_NUM_UNCOMPRESSED_SURFACE_AV1 - 1) : frameIdx;
}
else
{
- picAV1Params->m_refFrameMap[i].FrameIdx = CODECHAL_NUM_UNCOMPRESSED_SURFACE_VP9 - 1;
+ picAV1Params->m_refFrameMap[i].FrameIdx = CODECHAL_NUM_UNCOMPRESSED_SURFACE_AV1 - 1;
}
}
else
{
- picAV1Params->m_refFrameMap[i].FrameIdx = CODECHAL_NUM_UNCOMPRESSED_SURFACE_VP9 - 1;
+ picAV1Params->m_refFrameMap[i].FrameIdx = CODECHAL_NUM_UNCOMPRESSED_SURFACE_AV1 - 1;
}
}
}
diff --git a/media_driver/linux/common/cp/ddi/media_ddi_prot.cpp b/media_driver/linux/common/cp/ddi/media_ddi_prot.cpp
index e6ea1c19..7546df05 100644
--- a/media_driver/linux/common/cp/ddi/media_ddi_prot.cpp
+++ b/media_driver/linux/common/cp/ddi/media_ddi_prot.cpp
@@ -333,10 +333,17 @@ void DdiMedia_FreeProtectedSessionHeap(
for (int32_t elementId = 0; ctxNums > 0 && elementId < contextHeap->uiAllocatedHeapElements; ++elementId)
{
PDDI_MEDIA_VACONTEXT_HEAP_ELEMENT mediaContextHeapElmt = &mediaContextHeapBase[elementId];
- if (nullptr != mediaContextHeapElmt && nullptr == mediaContextHeapElmt->pVaContext)
- continue;
- VAContextID vaCtxID = (VAContextID)(mediaContextHeapElmt->uiVaContextID + vaContextOffset);
- DdiMediaProtected::DdiMedia_DestroyProtectedSession(ctx, vaCtxID);
+ if (nullptr != mediaContextHeapElmt)
+ {
+ if (nullptr == mediaContextHeapElmt->pVaContext)
+ continue;
+ VAContextID vaCtxID = (VAContextID)(mediaContextHeapElmt->uiVaContextID + vaContextOffset);
+ DdiMediaProtected::DdiMedia_DestroyProtectedSession(ctx, vaCtxID);
+ }
+ else
+ {
+ DDI_ASSERTMESSAGE("DDI: Invalid mediaContextHeapElmt");
+ }
ctxNums--;
}
}
diff --git a/media_driver/linux/common/ddi/media_libva.cpp b/media_driver/linux/common/ddi/media_libva.cpp
index f48ea910..29f4e688 100755
--- a/media_driver/linux/common/ddi/media_libva.cpp
+++ b/media_driver/linux/common/ddi/media_libva.cpp
@@ -777,7 +777,7 @@ static void DdiMedia_FreeSurfaceHeapElements(PDDI_MEDIA_CONTEXT mediaCtx)
for (int32_t elementId = 0; surfaceNums > 0 && elementId < surfaceHeap->uiAllocatedHeapElements; elementId++)
{
PDDI_MEDIA_SURFACE_HEAP_ELEMENT mediaSurfaceHeapElmt = &mediaSurfaceHeapBase[elementId];
- if (nullptr != mediaSurfaceHeapElmt && nullptr == mediaSurfaceHeapElmt->pSurface)
+ if (nullptr == mediaSurfaceHeapElmt->pSurface)
continue;
DdiMediaUtil_FreeSurface(mediaSurfaceHeapElmt->pSurface);
@@ -813,7 +813,7 @@ static void DdiMedia_FreeBufferHeapElements(VADriverContextP ctx)
for (int32_t elementId = 0; bufNums > 0 && elementId < bufferHeap->uiAllocatedHeapElements; ++elementId)
{
PDDI_MEDIA_BUFFER_HEAP_ELEMENT mediaBufferHeapElmt = &mediaBufferHeapBase[elementId];
- if (nullptr != mediaBufferHeapElmt && nullptr == mediaBufferHeapElmt->pBuffer)
+ if (nullptr == mediaBufferHeapElmt->pBuffer)
continue;
//Note: uiNumBufs will recount in DdiMedia_DestroyBuffer
DdiMedia_DestroyBuffer(ctx,mediaBufferHeapElmt->uiVaBufferID);
@@ -847,7 +847,7 @@ static void DdiMedia_FreeImageHeapElements(VADriverContextP ctx)
for (int32_t elementId = 0; imageNums > 0 && elementId < imageHeap->uiAllocatedHeapElements; ++elementId)
{
PDDI_MEDIA_IMAGE_HEAP_ELEMENT mediaImageHeapElmt = &mediaImageHeapBase[elementId];
- if (nullptr != mediaImageHeapElmt && nullptr == mediaImageHeapElmt->pImage)
+ if (nullptr == mediaImageHeapElmt->pImage)
continue;
//Note: uiNumImages will recount in DdiMedia_DestroyImage
DdiMedia_DestroyImage(ctx,mediaImageHeapElmt->uiVaImageID);
@@ -872,7 +872,7 @@ static void DdiMedia_FreeContextHeap(VADriverContextP ctx, PDDI_MEDIA_HEAP conte
for (int32_t elementId = 0; ctxNums > 0 && elementId < contextHeap->uiAllocatedHeapElements; ++elementId)
{
PDDI_MEDIA_VACONTEXT_HEAP_ELEMENT mediaContextHeapElmt = &mediaContextHeapBase[elementId];
- if (nullptr != mediaContextHeapElmt && nullptr == mediaContextHeapElmt->pVaContext)
+ if (nullptr == mediaContextHeapElmt->pVaContext)
continue;
VAContextID vaCtxID = (VAContextID)(mediaContextHeapElmt->uiVaContextID + vaContextOffset);
DdiMedia_DestroyContext(ctx,vaCtxID);
diff --git a/media_driver/linux/common/os/mos_os_specific.c b/media_driver/linux/common/os/mos_os_specific.c
index 69dc58de..8e3a53cc 100644
--- a/media_driver/linux/common/os/mos_os_specific.c
+++ b/media_driver/linux/common/os/mos_os_specific.c
@@ -66,6 +66,15 @@
#include "mos_oca_interface_specific.h"
#include "mos_os_next.h"
+extern int32_t CreateCmDevice(MOS_CONTEXT *mosContext,
+ CMRT_UMD::CmDevice* &device,
+ uint32_t devCreateOption,
+ uint8_t priority);
+
+extern int32_t DestroyCmDevice(CMRT_UMD::CmDevice* &device);
+
+extern MOS_STATUS InitCmOsDDIInterface(PCM_HAL_STATE cmState);
+
//!
//! \brief DRM VMAP patch
//!
@@ -7128,6 +7137,11 @@ MOS_STATUS Mos_Specific_InitInterface(
pOsInterface->pfnVirtualEngineInit = Mos_Specific_Virtual_Engine_Init;
pOsInterface->pfnDestroyVeInterface = Mos_Specific_DestroyVeInterface;
pOsInterface->pfnVirtualEngineInterfaceInitialize = Mos_VirtualEngineInterface_Initialize;
+
+ pOsInterface->pfnCreateCmDevice = CreateCmDevice;
+ pOsInterface->pfnDestroyCmDevice = DestroyCmDevice;
+ pOsInterface->pfnInitCmInterface = InitCmOsDDIInterface;
+
#if (_DEBUG || _RELEASE_INTERNAL)
pOsInterface->pfnGetEngineLogicId = Mos_Specific_GetEngineLogicId;
#endif
diff --git a/media_driver/linux/common/vp/ddi/media_libva_vp_tools.c b/media_driver/linux/common/vp/ddi/media_libva_vp_tools.c
index 03c86764..cb33c2d8 100644
--- a/media_driver/linux/common/vp/ddi/media_libva_vp_tools.c
+++ b/media_driver/linux/common/vp/ddi/media_libva_vp_tools.c
@@ -641,6 +641,7 @@ void VpConfigValuesInit(
pConfigValues->dwScalerCompressModeReported = LIBVA_VP_CONFIG_NOT_REPORTED;
pConfigValues->dwPrimaryCompressibleReported = LIBVA_VP_CONFIG_NOT_REPORTED;
pConfigValues->dwPrimaryCompressModeReported = LIBVA_VP_CONFIG_NOT_REPORTED;
+ pConfigValues->dwRTCacheSettingReported = LIBVA_VP_CONFIG_NOT_REPORTED;
}
void VpFeatureReport(
@@ -697,6 +698,12 @@ void VpFeatureReport(
__VPHAL_RT_MMC_COMPRESSIBLE,
pConfig->dwRTCompressible,
MediaUserSetting::Group::Sequence);
+ //VP RT Cache Usage
+ ReportUserSettingForDebug(
+ userSettingPtr,
+ __VPHAL_RT_Cache_Setting,
+ pConfig->dwRTCacheSetting,
+ MediaUserSetting::Group::Sequence);
#endif
#endif //(_DEBUG || _RELEASE_INTERNAL)
}
diff --git a/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp b/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp
index 073a362b..8790986d 100644
--- a/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp
+++ b/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp
@@ -78,7 +78,8 @@ Register<VphalInterfacesXe_Hpm>((uint32_t)IGFX_DG2);
MOS_STATUS VphalInterfacesXe_Hpm::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
bool bApogeiosEnable = true;
MOS_USER_FEATURE_VALUE_DATA UserFeatureData;
diff --git a/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.h b/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.h
index ca703655..c2ed3fc7 100644
--- a/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.h
+++ b/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.h
@@ -374,7 +374,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
MOS_STATUS CreateVpPlatformInterface(
PMOS_INTERFACE osInterface,
diff --git a/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.cpp b/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.cpp
index 98f7fdc7..ac515a02 100644
--- a/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.cpp
+++ b/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.cpp
@@ -47,7 +47,8 @@ static bool cnlRegisteredVphal =
MOS_STATUS VphalInterfacesG10Cnl::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.h b/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.h
index ab328108..4489cdbe 100644
--- a/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.h
+++ b/media_driver/media_interface/media_interfaces_m10_cnl/media_interfaces_g10_cnl.h
@@ -250,7 +250,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesG10Cnl : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.cpp b/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.cpp
index 8d6db46f..072de7cf 100644
--- a/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.cpp
+++ b/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.cpp
@@ -48,7 +48,8 @@ Register<VphalInterfacesG11Icllp>((uint32_t)IGFX_ICELAKE_LP);
MOS_STATUS VphalInterfacesG11Icllp::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.h b/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.h
index bfde8a41..316f2181 100644
--- a/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.h
+++ b/media_driver/media_interface/media_interfaces_m11_icllp/media_interfaces_g11_icllp.h
@@ -251,7 +251,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesG11Icllp : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.cpp b/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.cpp
index 4552f4fd..5a466fa6 100644
--- a/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.cpp
+++ b/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.cpp
@@ -48,7 +48,8 @@ Register<VphalInterfacesG11JslEhl>((uint32_t)IGFX_JASPERLAKE);
MOS_STATUS VphalInterfacesG11JslEhl::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.h b/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.h
index a3eb3760..4c2f1bc1 100644
--- a/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.h
+++ b/media_driver/media_interface/media_interfaces_m11_jsl_ehl/media_interfaces_g11_jsl_ehl.h
@@ -208,7 +208,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesG11JslEhl : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp b/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp
index 3b5abc3a..7a9cf575 100644
--- a/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp
+++ b/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp
@@ -49,7 +49,8 @@ Register<VphalInterfacesG12Tgllp>((uint32_t)IGFX_TIGERLAKE_LP);
MOS_STATUS VphalInterfacesG12Tgllp::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
MOS_OS_CHK_NULL_RETURN(eStatus);
MOS_OS_CHK_NULL_RETURN(osInterface);
diff --git a/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.h b/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.h
index 33aa7037..2bf16ea9 100644
--- a/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.h
+++ b/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.h
@@ -310,7 +310,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
MOS_STATUS CreateVpPlatformInterface(
PMOS_INTERFACE osInterface,
diff --git a/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.cpp b/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.cpp
index f3842f2a..d9b663cb 100644
--- a/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.cpp
+++ b/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.cpp
@@ -51,7 +51,8 @@ static bool bdwRegisteredVphal =
MOS_STATUS VphalInterfacesG8Bdw::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.h b/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.h
index f6a5c360..ec765cb1 100644
--- a/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.h
+++ b/media_driver/media_interface/media_interfaces_m8_bdw/media_interfaces_g8_bdw.h
@@ -178,7 +178,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesG8Bdw : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.cpp b/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.cpp
index 1ecb1947..3f306ee2 100644
--- a/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.cpp
+++ b/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.cpp
@@ -45,7 +45,8 @@ static bool bxtRegisteredVphal =
MOS_STATUS VphalInterfacesG9Bxt::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.h b/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.h
index cb3973b6..dab920c3 100644
--- a/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.h
+++ b/media_driver/media_interface/media_interfaces_m9_bxt/media_interfaces_g9_bxt.h
@@ -238,7 +238,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class DecodeHistogramDeviceG9Bxt : public DecodeHistogramDevice
diff --git a/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.cpp b/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.cpp
index 8a9cdbf7..de81e609 100644
--- a/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.cpp
+++ b/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.cpp
@@ -50,7 +50,8 @@ static bool glkRegisteredVphal =
MOS_STATUS VphalInterfacesG9Glk::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.h b/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.h
index a7d84319..b93124f6 100644
--- a/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.h
+++ b/media_driver/media_interface/media_interfaces_m9_glk/media_interfaces_g9_glk.h
@@ -66,7 +66,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class CodechalEncodeInterfacesG9Glk
diff --git a/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.cpp b/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.cpp
index e07ce690..99d78618 100644
--- a/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.cpp
+++ b/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.cpp
@@ -45,7 +45,8 @@ static bool kblRegisteredVphal =
MOS_STATUS VphalInterfacesG9Kbl::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.h b/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.h
index ea81074f..fb99be46 100644
--- a/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.h
+++ b/media_driver/media_interface/media_interfaces_m9_kbl/media_interfaces_g9_kbl.h
@@ -237,7 +237,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesG9Kbl : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.cpp b/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.cpp
index 3249f145..e2520edf 100644
--- a/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.cpp
+++ b/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.cpp
@@ -53,7 +53,8 @@ static bool sklRegisteredVphal =
MOS_STATUS VphalInterfacesG9Skl::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.h b/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.h
index 72ebb08e..27ceeb05 100644
--- a/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.h
+++ b/media_driver/media_interface/media_interfaces_m9_skl/media_interfaces_g9_skl.h
@@ -240,7 +240,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesG9Skl : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp b/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp
index ca3fdd31..612f4a40 100644
--- a/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp
+++ b/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp
@@ -56,7 +56,8 @@ Register<VphalInterfacesXe_Xpm_Plus>((uint32_t)IGFX_PVC);
MOS_STATUS VphalInterfacesXe_Xpm_Plus::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
m_vpBase = MOS_New(
VphalState,
diff --git a/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.h b/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.h
index 07f99e9e..800a4764 100644
--- a/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.h
+++ b/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.h
@@ -348,7 +348,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
};
class RenderHalInterfacesXe_Hpc : public RenderHalDevice
diff --git a/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp b/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp
index abcf5082..f3d0f4c6 100644
--- a/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp
+++ b/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp
@@ -64,7 +64,8 @@ Register<VphalInterfacesXe_Xpm>((uint32_t)IGFX_XE_HP_SDV);
MOS_STATUS VphalInterfacesXe_Xpm::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
MOS_OS_CHK_NULL_RETURN(osInterface);
bool bApogeiosEnable = true;
diff --git a/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.h b/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.h
index d9d2d646..03be27a8 100644
--- a/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.h
+++ b/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.h
@@ -304,7 +304,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
MOS_STATUS CreateVpPlatformInterface(
PMOS_INTERFACE osInterface,
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_blt_copy_xe_hpm.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_blt_copy_xe_hpm.cpp
index 95a860bc..5b92210d 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_blt_copy_xe_hpm.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_blt_copy_xe_hpm.cpp
@@ -32,6 +32,7 @@
#include "mos_os.h"
#include "mos_util_debug.h"
#include "mos_utilities.h"
+#include "media_perf_profiler.h"
class MhwInterfaces;
//!
@@ -614,7 +615,6 @@ MOS_STATUS BltState_Xe_Hpm::SetupCtrlSurfCopyBltParam(
MOS_STATUS BltState_Xe_Hpm::SubmitCMD(
PBLT_STATE_PARAM pBltStateParam)
{
- MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
MOS_COMMAND_BUFFER cmdBuffer;
MHW_FAST_COPY_BLT_PARAM fastCopyBltParam;
MHW_CTRL_SURF_COPY_BLT_PARAM ctrlSurfCopyBltParam;
@@ -622,7 +622,7 @@ MOS_STATUS BltState_Xe_Hpm::SubmitCMD(
int planeNum = 1;
PMHW_BLT_INTERFACE_XE_HP pbltInterface = dynamic_cast<PMHW_BLT_INTERFACE_XE_HP>(m_bltInterface);
- BLT_CHK_NULL(pbltInterface);
+ BLT_CHK_NULL_RETURN(pbltInterface);
// no gpucontext will be created if the gpu context has been created before.
BLT_CHK_STATUS_RETURN(m_osInterface->pfnCreateGpuContext(
@@ -653,6 +653,9 @@ MOS_STATUS BltState_Xe_Hpm::SubmitCMD(
}
planeNum = GetPlaneNum(dstResDetails.Format);
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ BLT_CHK_NULL_RETURN(perfProfiler);
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
if (pBltStateParam->bCopyMainSurface)
{
BLT_CHK_STATUS_RETURN(SetupBltCopyParam(
@@ -730,6 +733,7 @@ MOS_STATUS BltState_Xe_Hpm::SubmitCMD(
&cmdBuffer,
&ctrlSurfCopyBltParam));
}
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
// Add flush DW
MHW_MI_FLUSH_DW_PARAMS FlushDwParams;
@@ -742,8 +746,7 @@ MOS_STATUS BltState_Xe_Hpm::SubmitCMD(
// Flush the command buffer
BLT_CHK_STATUS_RETURN(m_osInterface->pfnSubmitCommandBuffer(m_osInterface, &cmdBuffer, false));
-finish:
- return eStatus;
+ return MOS_STATUS_SUCCESS;
}
MOS_STATUS BltState_Xe_Hpm::CopyMainSurface(
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_m12.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_m12.cpp
index e703b419..6b12fd07 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_m12.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_m12.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2018-2021, Intel Corporation
+* Copyright (c) 2018-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -318,7 +318,7 @@ MOS_STATUS AvcPipelineM12::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
DumpDownSamplingParams(*downSamplingFeature);
});
#endif
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_m12.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_m12.cpp
index 81753c6d..acb1b64c 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_m12.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_m12.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2018-2022, Intel Corporation
+* Copyright (c) 2018-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -345,7 +345,7 @@ MOS_STATUS HevcPipelineM12::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
if (downSamplingFeature->m_histogramBuffer != nullptr)
{
inputParameters.histogramOutputBuf = &downSamplingFeature->m_histogramBuffer->OsResource;
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_m12.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_m12.cpp
index f5e6687e..0d1bb185 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_m12.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_m12.cpp
@@ -50,7 +50,6 @@ MOS_STATUS JpegDecodePktM12::Submit(
m_jpegBasicFeature->m_width, m_jpegBasicFeature->m_height, false));
DECODE_CHK_STATUS(Mos_Solo_PreProcessDecode(m_osInterface, &m_jpegBasicFeature->m_destSurface));
- SetPerfTag(m_jpegBasicFeature->m_mode, m_jpegBasicFeature->m_pictureCodingType);
if (IsPrologRequired())
{
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_xe_m_base_packet.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_xe_m_base_packet.cpp
index d276286e..2e115643 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_xe_m_base_packet.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/packet/decode_jpeg_xe_m_base_packet.cpp
@@ -82,7 +82,9 @@ void JpegDecodePktXe_M_Base::SetPerfTag(CODECHAL_MODE mode, uint16_t picCodingTy
DECODE_FUNC_CALL();
uint16_t perfTag = ((mode << 4) & 0xF0) | (picCodingType & 0xF);
+ m_osInterface->pfnIncPerfFrameID(m_osInterface);
m_osInterface->pfnSetPerfTag(m_osInterface, perfTag);
+ m_osInterface->pfnResetPerfBufferID(m_osInterface);
}
bool JpegDecodePktXe_M_Base::IsPrologRequired()
@@ -241,7 +243,8 @@ MOS_STATUS JpegDecodePktXe_M_Base::StartStatusReport(uint32_t srType, MOS_COMMAN
DECODE_CHK_STATUS(MediaPacket::StartStatusReport(srType, cmdBuffer));
- SetPerfTag(CODECHAL_DECODE_MODE_JPEG, m_jpegBasicFeature->m_pictureCodingType);
+ // no frame type for Jpeg decode, use I as default value here
+ SetPerfTag(CODECHAL_DECODE_MODE_JPEG, I_TYPE);
MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
DECODE_CHK_NULL(perfProfiler);
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_m12.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_m12.cpp
index 5c5f64e5..ace8d340 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_m12.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_m12.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2021, Intel Corporation
+* Copyright (c) 2021-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -279,7 +279,7 @@ MOS_STATUS JpegPipelineM12::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
CODECHAL_DEBUG_TOOL(DumpDownSamplingParams(*downSamplingFeature));
}
#endif
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_m12.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_m12.cpp
index 12656dd2..2ea478aa 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_m12.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_m12.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2021, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -125,7 +125,7 @@ MOS_STATUS Vp9PipelineG12::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
if (downSamplingFeature->m_histogramBuffer != nullptr)
{
inputParameters.histogramOutputBuf = &downSamplingFeature->m_histogramBuffer->OsResource;
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_blt_copy_xe_xpm_base.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_blt_copy_xe_xpm_base.cpp
index 5ab6c7e6..42178b54 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_blt_copy_xe_xpm_base.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_blt_copy_xe_xpm_base.cpp
@@ -646,7 +646,6 @@ MOS_STATUS BltStateXe_Xpm::SetupCtrlSurfCopyBltParam(
MOS_STATUS BltStateXe_Xpm::SubmitCMD(
PBLT_STATE_PARAM pBltStateParam)
{
- MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
MOS_COMMAND_BUFFER cmdBuffer;
MHW_FAST_COPY_BLT_PARAM fastCopyBltParam;
MHW_CTRL_SURF_COPY_BLT_PARAM ctrlSurfCopyBltParam;
@@ -654,7 +653,7 @@ MOS_STATUS BltStateXe_Xpm::SubmitCMD(
int planeNum = 1;
PMHW_BLT_INTERFACE_XE_HP pbltInterface = dynamic_cast<PMHW_BLT_INTERFACE_XE_HP>(m_bltInterface);
- BLT_CHK_NULL(pbltInterface);
+ BLT_CHK_NULL_RETURN(pbltInterface);
// no gpucontext will be created if the gpu context has been created before.
BLT_CHK_STATUS_RETURN(m_osInterface->pfnCreateGpuContext(
@@ -683,6 +682,10 @@ MOS_STATUS BltStateXe_Xpm::SubmitCMD(
}
planeNum = GetPlaneNum(dstResDetails.Format);
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ BLT_CHK_NULL_RETURN(perfProfiler);
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
+
if (pBltStateParam->bCopyMainSurface)
{
BLT_CHK_STATUS_RETURN(SetupBltCopyParam(
@@ -760,7 +763,7 @@ MOS_STATUS BltStateXe_Xpm::SubmitCMD(
&cmdBuffer,
&ctrlSurfCopyBltParam));
}
-
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
// Add flush DW
MHW_MI_FLUSH_DW_PARAMS FlushDwParams;
MOS_ZeroMemory(&FlushDwParams, sizeof(FlushDwParams));
@@ -772,8 +775,8 @@ MOS_STATUS BltStateXe_Xpm::SubmitCMD(
// Flush the command buffer
BLT_CHK_STATUS_RETURN(m_osInterface->pfnSubmitCommandBuffer(m_osInterface, &cmdBuffer, false));
-finish:
- return eStatus;
+
+ return MOS_STATUS_SUCCESS;
}
MOS_STATUS BltStateXe_Xpm::CopyMainSurface(
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_blt_copy_xe_xpm_plus.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_blt_copy_xe_xpm_plus.cpp
index 393c791c..a01ec99c 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_blt_copy_xe_xpm_plus.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_blt_copy_xe_xpm_plus.cpp
@@ -481,7 +481,6 @@ MOS_STATUS BltStateXe_Xpm_Plus::SetupCtrlSurfCopyBltParam(
MOS_STATUS BltStateXe_Xpm_Plus::SubmitCMD(
PBLT_STATE_PARAM pBltStateParam)
{
- MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
MOS_COMMAND_BUFFER cmdBuffer;
MHW_FAST_COPY_BLT_PARAM fastCopyBltParam;
MHW_CTRL_SURF_COPY_BLT_PARAM ctrlSurfCopyBltParam;
@@ -489,7 +488,7 @@ MOS_STATUS BltStateXe_Xpm_Plus::SubmitCMD(
int planeNum = 1;
PMHW_BLT_INTERFACE_XE_HPC pbltInterface = dynamic_cast<PMHW_BLT_INTERFACE_XE_HPC>(m_bltInterface);
- BLT_CHK_NULL(pbltInterface);
+ BLT_CHK_NULL_RETURN(pbltInterface);
// no gpucontext will be created if the gpu context has been created before.
BLT_CHK_STATUS_RETURN(m_osInterface->pfnCreateGpuContext(
@@ -518,6 +517,10 @@ MOS_STATUS BltStateXe_Xpm_Plus::SubmitCMD(
}
planeNum = GetPlaneNum(dstResDetails.Format);
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ BLT_CHK_NULL_RETURN(perfProfiler);
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
+
if (pBltStateParam->bCopyMainSurface)
{
BLT_CHK_STATUS_RETURN(SetupBltCopyParam(
@@ -596,6 +599,8 @@ MOS_STATUS BltStateXe_Xpm_Plus::SubmitCMD(
// &ctrlSurfCopyBltParam));
}
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miInterface, &cmdBuffer));
+
// Add flush DW
MHW_MI_FLUSH_DW_PARAMS FlushDwParams;
MOS_ZeroMemory(&FlushDwParams, sizeof(FlushDwParams));
@@ -607,8 +612,7 @@ MOS_STATUS BltStateXe_Xpm_Plus::SubmitCMD(
// Flush the command buffer
BLT_CHK_STATUS_RETURN(m_osInterface->pfnSubmitCommandBuffer(m_osInterface, &cmdBuffer, false));
-finish:
- return eStatus;
+ return MOS_STATUS_SUCCESS;
}
MOS_STATUS BltStateXe_Xpm_Plus::CopyMainSurface(
diff --git a/media_driver/media_softlet/agnostic/Xe_R/Xe_HP_Base/renderhal/renderhal_xe_hp_base.cpp b/media_driver/media_softlet/agnostic/Xe_R/Xe_HP_Base/renderhal/renderhal_xe_hp_base.cpp
index 1cc0b8db..60742202 100644
--- a/media_driver/media_softlet/agnostic/Xe_R/Xe_HP_Base/renderhal/renderhal_xe_hp_base.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_R/Xe_HP_Base/renderhal/renderhal_xe_hp_base.cpp
@@ -105,7 +105,7 @@ MOS_STATUS XRenderHal_Interface_Xe_Hp_Base::SetupSurfaceState(
MHW_RENDERHAL_CHK_NULL(pRenderHal->pStateHeap);
MHW_RENDERHAL_CHK_NULL(pRenderHal->pHwSizes);
MHW_RENDERHAL_CHK_NULL(pRenderHal->pMhwStateHeap);
- MHW_RENDERHAL_ASSERT(pRenderHalSurface->Rotation >= 0 && pRenderHalSurface->Rotation < 8);
+ MHW_RENDERHAL_ASSERT(pRenderHalSurface->Rotation >= MHW_ROTATION_IDENTITY && pRenderHalSurface->Rotation <= MHW_ROTATE_90_MIRROR_HORIZONTAL);
//-----------------------------------------
dwSurfaceSize = pRenderHal->pHwSizes->dwSizeSurfaceState;
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.cpp
index 4bb62944..73e86c40 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.cpp
@@ -39,8 +39,8 @@ using namespace vp;
extern const Kdll_RuleEntry g_KdllRuleTable_Next[];
#define VEBOX_KERNEL_BASE_MAX_G13 2
-VpPlatformInterfacesXe_Lpm_Plus::VpPlatformInterfacesXe_Lpm_Plus(PMOS_INTERFACE pOsInterface)
- : VpPlatformInterface(pOsInterface)
+VpPlatformInterfacesXe_Lpm_Plus::VpPlatformInterfacesXe_Lpm_Plus(PMOS_INTERFACE pOsInterface, bool clearViewMode)
+ : VpPlatformInterface(pOsInterface, clearViewMode)
{
bool defaultValue = 0;
// get dithering flag.
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.h b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.h
index 2e121a3d..fdb5121c 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.h
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus/vp/hal/platform_interface/vp_platform_interface_xe_lpm_plus.h
@@ -46,7 +46,7 @@ class VpPlatformInterfacesXe_Lpm_Plus : public VpPlatformInterface
{
public:
- VpPlatformInterfacesXe_Lpm_Plus(PMOS_INTERFACE pOsInterface);
+ VpPlatformInterfacesXe_Lpm_Plus(PMOS_INTERFACE pOsInterface, bool clearViewMode = false);
virtual ~VpPlatformInterfacesXe_Lpm_Plus()
{}
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/av1/pipeline/decode_av1_pipeline_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/av1/pipeline/decode_av1_pipeline_xe_lpm_plus_base.cpp
index 4442d6a4..96b082c4 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/av1/pipeline/decode_av1_pipeline_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/av1/pipeline/decode_av1_pipeline_xe_lpm_plus_base.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2021, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -139,7 +139,7 @@ namespace decode
m_featureManager->GetFeature(DecodeFeatureIDs::decodeDownSampling));
if (downSamplingFeature != nullptr) {
auto frameIdx = basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
DumpDownSamplingParams(*downSamplingFeature);
});
#endif
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_xe_lpm_plus_base.cpp
index 5ee9cad3..1c2e8e92 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/avc/pipeline/decode_avc_pipeline_xe_lpm_plus_base.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2021, Intel Corporation
+* Copyright (c) 2021-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -213,7 +213,7 @@ MOS_STATUS AvcPipelineXe_Lpm_Plus_Base::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
DumpDownSamplingParams(*downSamplingFeature);
});
#endif
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_xe_lpm_plus_base.cpp
index 16d948f2..ed4b77a1 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/hevc/pipeline/decode_hevc_pipeline_xe_lpm_plus_base.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2021-2022, Intel Corporation
+* Copyright (c) 2021-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -255,7 +255,7 @@ MOS_STATUS HevcPipelineXe_Lpm_Plus_Base::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
if (downSamplingFeature->m_histogramBuffer != nullptr)
{
inputParameters.histogramOutputBuf = &downSamplingFeature->m_histogramBuffer->OsResource;
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_xe_lpm_plus_base.cpp
index 5ea9ea33..bc2ba735 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/packet/decode_jpeg_packet_xe_lpm_plus_base.cpp
@@ -50,7 +50,6 @@ MOS_STATUS JpegDecodePktXe_Lpm_Plus_Base::Submit(
m_jpegBasicFeature->m_width, m_jpegBasicFeature->m_height, false));
DECODE_CHK_STATUS(Mos_Solo_PreProcessDecode(m_osInterface, &m_jpegBasicFeature->m_destSurface));
- SetPerfTag(m_jpegBasicFeature->m_mode, m_jpegBasicFeature->m_pictureCodingType);
if (IsPrologRequired())
{
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_xe_lpm_plus_base.cpp
index 7e1b255f..da40f48d 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/jpeg/pipeline/decode_jpeg_pipeline_xe_lpm_plus_base.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2021, Intel Corporation
+* Copyright (c) 2021-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -199,7 +199,7 @@ MOS_STATUS JpegPipelineXe_Lpm_Plus_Base::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
CODECHAL_DEBUG_TOOL(DumpDownSamplingParams(*downSamplingFeature));
}
#endif
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_xe_lpm_plus_base.cpp
index 53be550b..fdbe23fe 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/dec/vp9/pipeline/decode_vp9_pipeline_xe_lpm_plus_base.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2022, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -111,7 +111,7 @@ MOS_STATUS Vp9PipelineXe_Lpm_Plus_Base::Prepare(void *params)
if (downSamplingFeature != nullptr)
{
auto frameIdx = m_basicFeature->m_curRenderPic.FrameIdx;
- inputParameters.sfcOutputPicRes = &downSamplingFeature->m_outputSurfaceList[frameIdx].OsResource;
+ inputParameters.sfcOutputSurface = &downSamplingFeature->m_outputSurfaceList[frameIdx];
if (downSamplingFeature->m_histogramBuffer != nullptr)
{
inputParameters.histogramOutputBuf = &downSamplingFeature->m_histogramBuffer->OsResource;
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.cpp
index 273dbdfd..760a16fa 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.cpp
@@ -36,3 +36,10 @@ MOS_STATUS EncodeAvcVdencPipelineAdapterXe_Lpm_Plus_Base::Allocate(CodechalSetti
return m_encoder->Init(codecHalSettings);
}
+
+MOS_STATUS EncodeAvcVdencPipelineAdapterXe_Lpm_Plus_Base::ResolveMetaData(PMOS_RESOURCE pInput, PMOS_RESOURCE pOutput)
+{
+ ENCODE_FUNC_CALL();
+
+ return m_encoder->ExecuteResolveMetaData(pInput, pOutput);
+}
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.h b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.h
index 754cf944..74751f13 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.h
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/avc/pipeline/encode_avc_vdenc_pipeline_adapter_xe_lpm_plus_base.h
@@ -40,6 +40,8 @@ public:
virtual MOS_STATUS Allocate(CodechalSetting *codecHalSettings) override;
+ virtual MOS_STATUS ResolveMetaData(PMOS_RESOURCE pInput, PMOS_RESOURCE pOutput) override;
+
MEDIA_CLASS_DEFINE_END(EncodeAvcVdencPipelineAdapterXe_Lpm_Plus_Base)
};
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/vp9/packet/encode_vp9_vdenc_packet_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/vp9/packet/encode_vp9_vdenc_packet_xe_lpm_plus_base.cpp
index 51f3b816..a1f8d9b0 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/vp9/packet/encode_vp9_vdenc_packet_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/codec/hal/enc/vp9/packet/encode_vp9_vdenc_packet_xe_lpm_plus_base.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2022, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -196,6 +196,7 @@ MOS_STATUS Vp9VdencPktXe_Lpm_Plus_Base::AddPictureVdencCommands(MOS_COMMAND_BUFF
ENCODE_CHK_STATUS_RETURN(AddVdencSurfacesStateCmd(cmdBuffer));
// Add vdenc pipeline buffer address command
ENCODE_CHK_STATUS_RETURN(AddVdencPipeBufAddrCmd(cmdBuffer));
+
// Add second level batch buffer command
ENCODE_CHK_STATUS_RETURN(AddVdencSecondLevelBatchBufferCmd(cmdBuffer));
@@ -306,6 +307,14 @@ MOS_STATUS Vp9VdencPktXe_Lpm_Plus_Base::PatchPictureLevelCommands(MOS_COMMAND_BU
{
m_vdencPakObjCmdStreamOutEnabled = false;
}
+
+ if (!m_basicFeature->m_hucEnabled)
+ {
+ // Construct picture state 2nd level batch buffer
+ RUN_FEATURE_INTERFACE_RETURN(Vp9EncodePak, Vp9FeatureIDs::vp9PakFeature, ConstructPicStateBatchBuffer, m_pipeline);
+ // Refresh internal bufferes
+ RUN_FEATURE_INTERFACE_RETURN(Vp9EncodeHpu, Vp9FeatureIDs::vp9HpuFeature, RefreshFrameInternalBuffers);
+ }
}
ENCODE_CHK_STATUS_RETURN(AddCondBBEndForLastPass(cmdBuffer));
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_blt_copy_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_blt_copy_xe_lpm_plus_base.cpp
index 02ced837..1baf0297 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_blt_copy_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_blt_copy_xe_lpm_plus_base.cpp
@@ -27,7 +27,7 @@
#include "media_blt_copy_xe_lpm_plus_base.h"
#include "mhw_cp_interface.h"
-
+#include "media_perf_profiler.h"
//!
//! \brief BltStateXe_Xpm_Plus constructor
//! \details Initialize the BltStateXe_Xpm_Plus members.
@@ -560,6 +560,10 @@ MOS_STATUS BltStateXe_Lpm_Plus_Base::SubmitCMD(
}
planeNum = GetPlaneNum(dstResDetails.Format);
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ BLT_CHK_NULL_RETURN(perfProfiler);
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miItf, &cmdBuffer));
+
if (pBltStateParam->bCopyMainSurface)
{
BLT_CHK_STATUS_RETURN(SetupBltCopyParam(
@@ -653,18 +657,7 @@ MOS_STATUS BltStateXe_Lpm_Plus_Base::SubmitCMD(
}
}
}
-
- if (pBltStateParam->bCopyCCS)
- {
- BLT_CHK_STATUS_RETURN(SetupCtrlSurfCopyBltParam(
- &ctrlSurfCopyBltParam,
- pBltStateParam->pSrcCCS,
- pBltStateParam->pDstCCS,
- pBltStateParam->ccsFlag));
- //BLT_CHK_STATUS_RETURN(pbltInterfacePvc->AddCtrlSurfCopyBlt(
- // &cmdBuffer,
- // &ctrlSurfCopyBltParam));
- }
+ BLT_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miItf, &cmdBuffer));
// Add flush DW
auto& flushDwParams = m_miItf->MHW_GETPAR_F(MI_FLUSH_DW)();
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_vebox_copy_xe_lpm_plus_base.cpp b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_vebox_copy_xe_lpm_plus_base.cpp
index 3acff28c..77087d4b 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_vebox_copy_xe_lpm_plus_base.cpp
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_vebox_copy_xe_lpm_plus_base.cpp
@@ -155,6 +155,10 @@ MOS_STATUS VeboxCopyStateXe_Lpm_Plus_Base::CopyMainSurface(PMOS_RESOURCE src, PM
VEBOX_COPY_CHK_STATUS_RETURN(m_osInterface->pfnGetCommandBuffer(m_osInterface, &cmdBuffer, 0));
VEBOX_COPY_CHK_STATUS_RETURN(InitCommandBuffer(&cmdBuffer));
+ MediaPerfProfiler* perfProfiler = MediaPerfProfiler::Instance();
+ VEBOX_COPY_CHK_NULL_RETURN(perfProfiler);
+ VEBOX_COPY_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectStartCmd((void*)this, m_osInterface, m_miItf, &cmdBuffer));
+
// Set Vebox MMIO
VEBOX_COPY_CHK_STATUS_RETURN(m_miItf->AddVeboxMMIOPrologCmd(&cmdBuffer));
@@ -186,7 +190,7 @@ MOS_STATUS VeboxCopyStateXe_Lpm_Plus_Base::CopyMainSurface(PMOS_RESOURCE src, PM
flushDwParams.dwDataDW1 = veboxHeap->dwNextTag;
VEBOX_COPY_CHK_STATUS_RETURN(m_miItf->MHW_ADDCMD_F(MI_FLUSH_DW)(&cmdBuffer));
}
-
+ VEBOX_COPY_CHK_STATUS_RETURN(perfProfiler->AddPerfCollectEndCmd((void*)this, m_osInterface, m_miItf, &cmdBuffer));
VEBOX_COPY_CHK_STATUS_RETURN(m_miItf->AddMiBatchBufferEnd(&cmdBuffer, nullptr));
// Return unused command buffer space to OS
diff --git a/media_softlet/agnostic/common/codec/hal/codechal_debug.cpp b/media_softlet/agnostic/common/codec/hal/codechal_debug.cpp
index 1632c82f..279de5c7 100644
--- a/media_softlet/agnostic/common/codec/hal/codechal_debug.cpp
+++ b/media_softlet/agnostic/common/codec/hal/codechal_debug.cpp
@@ -794,14 +794,9 @@ MOS_STATUS CodechalDebugInterface::DumpRgbDataOnYUVSurface(
m_osInterface->pfnUnlockResource(m_osInterface, &surface->OsResource);
}
- if (&(tmpRgbSurface->OsResource))
- {
- m_osInterface->pfnFreeResource(m_osInterface, &(tmpRgbSurface->OsResource));
- }
- if (tmpRgbSurface)
- {
- MOS_Delete(tmpRgbSurface);
- }
+ m_osInterface->pfnFreeResource(m_osInterface, &(tmpRgbSurface->OsResource));
+ MOS_Delete(tmpRgbSurface);
+
return MOS_STATUS_SUCCESS;
}
diff --git a/media_softlet/agnostic/common/codec/hal/dec/avc/features/decode_avc_basic_feature.cpp b/media_softlet/agnostic/common/codec/hal/dec/avc/features/decode_avc_basic_feature.cpp
index 90e713dd..a3d75ee6 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/avc/features/decode_avc_basic_feature.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/avc/features/decode_avc_basic_feature.cpp
@@ -230,14 +230,14 @@ namespace decode {
PCODEC_AVC_SLICE_PARAMS slc = m_avcSliceParams + slcIdx;
if(m_avcPicParams->pic_fields.field_pic_flag == 0)
{
- if(slc->num_ref_idx_l0_active_minus1 > 15)
+ if (slc->num_ref_idx_l0_active_minus1 > 15 || slc->num_ref_idx_l1_active_minus1 > 15)
{
return MOS_STATUS_INVALID_PARAMETER;
}
}
else if(m_avcPicParams->pic_fields.field_pic_flag == 1)
{
- if(slc->num_ref_idx_l0_active_minus1 > 31)
+ if (slc->num_ref_idx_l0_active_minus1 > 31 || slc->num_ref_idx_l1_active_minus1 > 31)
{
return MOS_STATUS_INVALID_PARAMETER;
}
diff --git a/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.cpp b/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.cpp
index b956c1fd..3ef454d3 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.cpp
@@ -75,9 +75,10 @@ namespace decode {
return MOS_STATUS_SUCCESS;
}
- HucS2lPkt::~HucS2lPkt()
+ MOS_STATUS HucS2lPkt::Destroy()
{
FreeResource();
+ return MOS_STATUS_SUCCESS;
}
MOS_STATUS HucS2lPkt::FreeResource()
diff --git a/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.h b/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.h
index 01ea6cbd..be3c9561 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.h
+++ b/media_softlet/agnostic/common/codec/hal/dec/hevc/packet/decode_huc_s2l_packet.h
@@ -134,7 +134,7 @@ namespace decode
}
}
- virtual ~HucS2lPkt();
+ virtual ~HucS2lPkt() {}
//!
//! \brief Initialize the media packet, allocate required resources
@@ -157,6 +157,8 @@ namespace decode
//!
virtual MOS_STATUS FreeResource();
+ virtual MOS_STATUS Destroy() override;
+
//!
//! \brief Calculate Command Size
//!
diff --git a/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_packet.cpp b/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_packet.cpp
index 1b1c3dfe..d8d9b310 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_packet.cpp
@@ -82,7 +82,9 @@ void JpegDecodePkt::SetPerfTag(CODECHAL_MODE mode, uint16_t picCodingType)
DECODE_FUNC_CALL();
uint16_t perfTag = ((mode << 4) & 0xF0) | (picCodingType & 0xF);
+ m_osInterface->pfnIncPerfFrameID(m_osInterface);
m_osInterface->pfnSetPerfTag(m_osInterface, perfTag);
+ m_osInterface->pfnResetPerfBufferID(m_osInterface);
}
bool JpegDecodePkt::IsPrologRequired()
@@ -238,7 +240,8 @@ MOS_STATUS JpegDecodePkt::StartStatusReport(uint32_t srType, MOS_COMMAND_BUFFER*
DECODE_CHK_STATUS(MediaPacket::StartStatusReportNext(srType, cmdBuffer));
- SetPerfTag(CODECHAL_DECODE_MODE_JPEG, m_jpegBasicFeature->m_pictureCodingType);
+ // no frame type for Jpeg decode, use I as default value here
+ SetPerfTag(CODECHAL_DECODE_MODE_JPEG, I_TYPE);
MediaPerfProfiler *perfProfiler = MediaPerfProfiler::Instance();
DECODE_CHK_NULL(perfProfiler);
diff --git a/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_picture_packet.cpp b/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_picture_packet.cpp
index 5d7ea9b6..6614ba1a 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_picture_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/jpeg/packet/decode_jpeg_picture_packet.cpp
@@ -420,6 +420,7 @@ MOS_STATUS JpegDecodePicPkt::AddAllCmds_MFD_JPEG_BSD_OBJECT(PMOS_COMMAND_BUFFER
for (uint16_t scanCount = 0; scanCount < m_jpegBasicFeature->m_jpegScanParams->NumScans; scanCount++)
{
uint16_t numComponents = m_jpegBasicFeature->m_jpegScanParams->ScanHeader[scanCount].NumComponents;
+ MOS_ZeroMemory(¶ms, sizeof(params));
params.indirectDataLength = m_jpegBasicFeature->m_jpegScanParams->ScanHeader[scanCount].DataLength;
params.dataStartAddress = m_jpegBasicFeature->m_jpegScanParams->ScanHeader[scanCount].DataOffset;
diff --git a/media_softlet/agnostic/common/codec/hal/dec/shared/pipeline/decode_pipeline.cpp b/media_softlet/agnostic/common/codec/hal/dec/shared/pipeline/decode_pipeline.cpp
index 7b66831b..2c739539 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/shared/pipeline/decode_pipeline.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/shared/pipeline/decode_pipeline.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2018-2022, Intel Corporation
+* Copyright (c) 2018-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -428,18 +428,14 @@ MOS_STATUS DecodePipeline::DumpOutput(const DecodeStatusReportData& reportData)
m_featureManager->GetFeature(DecodeFeatureIDs::decodeDownSampling));
if (downSamplingFeature != nullptr && downSamplingFeature->IsEnabled())
{
- if (reportData.currSfcOutputPicRes != nullptr &&
+ if (reportData.currSfcOutputSurface != nullptr &&
m_debugInterface->DumpIsEnabled(CodechalDbgAttr::attrSfcOutputSurface))
{
- MOS_SURFACE sfcDstSurface;
- MOS_ZeroMemory(&sfcDstSurface, sizeof(sfcDstSurface));
- sfcDstSurface.Format = Format_NV12;
- sfcDstSurface.OsResource = *reportData.currSfcOutputPicRes;
+ MOS_SURFACE &sfcDstSurface = *reportData.currSfcOutputSurface;
if (!Mos_ResourceIsNull(&sfcDstSurface.OsResource))
{
#if (_DEBUG || _RELEASE_INTERNAL)
- DECODE_CHK_STATUS(m_allocator->GetSurfaceInfo(&sfcDstSurface));
//rgb format read from reg key
uint32_t sfcOutputRgbFormatFlag =
ReadUserFeature(m_userSettingPtr, "Decode SFC RGB Format Output", MediaUserSetting::Group::Sequence).Get<uint32_t>();
@@ -615,15 +611,11 @@ MOS_STATUS DecodePipeline::ReportSfcLinearSurfaceUsage(const DecodeStatusReportD
m_featureManager->GetFeature(DecodeFeatureIDs::decodeDownSampling));
if (downSamplingFeature != nullptr && downSamplingFeature->IsEnabled())
{
- if (reportData.currSfcOutputPicRes != nullptr)
+ if (reportData.currSfcOutputSurface != nullptr)
{
- MOS_SURFACE sfcDstSurface;
- MOS_ZeroMemory(&sfcDstSurface, sizeof(sfcDstSurface));
- sfcDstSurface.Format = Format_NV12;
- sfcDstSurface.OsResource = *reportData.currSfcOutputPicRes;
+ MOS_SURFACE sfcDstSurface = *reportData.currSfcOutputSurface;
if (!Mos_ResourceIsNull(&sfcDstSurface.OsResource))
{
- DECODE_CHK_STATUS(m_allocator->GetSurfaceInfo(&sfcDstSurface));
if (sfcDstSurface.TileType == MOS_TILE_LINEAR)
{
WriteUserFeature(__MEDIA_USER_FEATURE_VALUE_SFC_LINEAR_OUTPUT_USED_ID, 1, m_osInterface->pOsContext);
diff --git a/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.cpp b/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.cpp
index 254feb30..497b5fca 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.cpp
@@ -113,7 +113,7 @@ namespace decode {
m_statusReportData[submitIndex].currDecodedPic = inputParameters->currOriginalPic;
m_statusReportData[submitIndex].currDecodedPicRes = inputParameters->currDecodedPicRes;
#if (_DEBUG || _RELEASE_INTERNAL)
- m_statusReportData[submitIndex].currSfcOutputPicRes = inputParameters->sfcOutputPicRes;
+ m_statusReportData[submitIndex].currSfcOutputSurface = inputParameters->sfcOutputSurface;
m_statusReportData[submitIndex].currHistogramOutBuf = inputParameters->histogramOutputBuf;
m_statusReportData[submitIndex].frameType = inputParameters->pictureCodingType;
m_statusReportData[submitIndex].currFgOutputPicRes = inputParameters->fgOutputPicRes;
diff --git a/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.h b/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.h
index d8387bc7..e96b1c7e 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.h
+++ b/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2019-2020, Intel Corporation
+* Copyright (c) 2019-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -66,7 +66,7 @@ namespace decode {
#if (_DEBUG || _RELEASE_INTERNAL)
//! \brief Applies when debug dumps are enabled, pointer to SFC output resource for the picture associated with this status report
- PMOS_RESOURCE currSfcOutputPicRes = nullptr;
+ PMOS_SURFACE currSfcOutputSurface = nullptr;
//! \brief Applies when debug dumps are enabled, pointer to histogram output resource for the picture associated with this status report
PMOS_RESOURCE currHistogramOutBuf = nullptr;
//! \brief Applies when debug dumps are enabled, pointer to AV1 film grain output resource for the picture associated with this status report
diff --git a/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report_defs.h b/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report_defs.h
index a22516e6..31c9a231 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report_defs.h
+++ b/media_softlet/agnostic/common/codec/hal/dec/shared/statusreport/decode_status_report_defs.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2019-2021, Intel Corporation
+* Copyright (c) 2019-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -115,7 +115,7 @@ struct DecodeStatusParameters
uint32_t numSlices;
MOS_RESOURCE currDecodedPicRes;
#if (_DEBUG || _RELEASE_INTERNAL)
- MOS_RESOURCE *sfcOutputPicRes;
+ MOS_SURFACE *sfcOutputSurface;
MOS_RESOURCE *histogramOutputBuf;
MOS_RESOURCE *fgOutputPicRes;
#endif
diff --git a/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_brc.cpp b/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_brc.cpp
index b58b70ff..15abbdeb 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_brc.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_brc.cpp
@@ -298,7 +298,7 @@ namespace encode
dmem->UPD_FrameHdrOBUSizeInBytes = (uint16_t)((m_basicFeature->m_av1PicParams->FrameHdrOBUSizeInBits + 7) >> 3);
dmem->UPD_FrameHdrOBUSizeByteOffset = (uint16_t)(m_basicFeature->m_av1PicParams->FrameHdrOBUSizeByteOffset - m_basicFeature->GetAppHdrSizeInBytes(true));
dmem->UPD_FrameType = 0;
- dmem->UPD_ErrorResilientMode = 0;
+ dmem->UPD_ErrorResilientMode = m_basicFeature->m_av1PicParams->PicFlags.fields.error_resilient_mode;
dmem->UPD_IntraOnly = 0;
dmem->UPD_PrimaryRefFrame = 0;
dmem->UPD_SegOn = m_basicFeature->m_av1PicParams->stAV1Segments.SegmentFlags.fields.segmentation_enabled;
diff --git a/media_softlet/agnostic/common/codec/hal/enc/av1/pipeline/encode_av1_reference_frames.cpp b/media_softlet/agnostic/common/codec/hal/enc/av1/pipeline/encode_av1_reference_frames.cpp
index 5cf39e21..5586dcf5 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/av1/pipeline/encode_av1_reference_frames.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/av1/pipeline/encode_av1_reference_frames.cpp
@@ -680,7 +680,7 @@ MHW_SETPAR_DECL_SRC(VDENC_PIPE_BUF_ADDR_STATE, Av1ReferenceFrames)
return MOS_STATUS_INVALID_PARAMETER;
}
- if (m_basicFeature->m_pictureCodingType != I_TYPE)
+ if (m_basicFeature->m_pictureCodingType != I_TYPE && picParams->primary_ref_frame != av1PrimaryRefNone)
{
uint8_t frameIdx = picParams->RefFrameList[picParams->primary_ref_frame].FrameIdx;
uint8_t idxForTempMV = m_refList[frameIdx]->ucScalingIdx;
diff --git a/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_init_packet.cpp b/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_init_packet.cpp
index 7e96b4a3..f99e3886 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_init_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_init_packet.cpp
@@ -100,6 +100,7 @@ MOS_STATUS AvcHucBrcInitPkt::Submit(MOS_COMMAND_BUFFER *commandBuffer, uint8_t p
ENCODE_CHK_STATUS_RETURN(brcFeature->SaveHucStatus2Buffer(m_resHucStatus2Buffer));
+ SetPerfTag(CODECHAL_ENCODE_PERFTAG_CALL_BRC_INIT_RESET, (uint16_t)m_basicFeature->m_mode, m_basicFeature->m_pictureCodingType);
ENCODE_CHK_STATUS_RETURN(Execute(commandBuffer, true, requestProlog, BRC_INIT));
CODECHAL_DEBUG_TOOL(
diff --git a/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_update_packet.cpp b/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_update_packet.cpp
index 1598fe1e..07a64d30 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_update_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_huc_brc_update_packet.cpp
@@ -246,6 +246,9 @@ MOS_STATUS AvcHucBrcUpdatePkt::Execute(PMOS_COMMAND_BUFFER cmdBuffer, bool store
ENCODE_CHK_STATUS_RETURN(m_miItf->MHW_ADDCMD_F(MI_CONDITIONAL_BATCH_BUFFER_END)(cmdBuffer));
}
+ SetPerfTag(m_pipeline->IsFirstPass() ? CODECHAL_ENCODE_PERFTAG_CALL_BRC_UPDATE : CODECHAL_ENCODE_PERFTAG_CALL_BRC_UPDATE_SECOND_PASS,
+ (uint16_t)m_basicFeature->m_mode,
+ m_basicFeature->m_pictureCodingType);
ENCODE_CHK_STATUS_RETURN(StartPerfCollect(*cmdBuffer));
if (m_pipeline->IsSingleTaskPhaseSupported())
{
diff --git a/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_vdenc_packet.cpp b/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_vdenc_packet.cpp
index 6d2c4c3d..877f4631 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_vdenc_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_vdenc_packet.cpp
@@ -293,7 +293,9 @@ namespace encode {
ENCODE_CHK_STATUS_RETURN(m_miItf->SetWatchdogTimerThreshold(m_basicFeature->m_frameWidth, m_basicFeature->m_frameHeight, true));
- SetPerfTag(CODECHAL_ENCODE_PERFTAG_CALL_PAK_ENGINE, (uint16_t)m_basicFeature->m_mode, m_basicFeature->m_pictureCodingType);
+ SetPerfTag(m_pipeline->IsFirstPass() ? CODECHAL_ENCODE_PERFTAG_CALL_PAK_ENGINE : CODECHAL_ENCODE_PERFTAG_CALL_PAK_ENGINE_SECOND_PASS,
+ (uint16_t)m_basicFeature->m_mode,
+ m_basicFeature->m_pictureCodingType);
auto brcFeature = dynamic_cast<AvcEncodeBRC*>(m_featureManager->GetFeature(AvcFeatureIDs::avcBrcFeature));
ENCODE_CHK_NULL_RETURN(brcFeature);
diff --git a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.cpp b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.cpp
index a6cfdc10..608ae97e 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2021, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -25,6 +25,7 @@
//!
#include "encode_vp9_hpu.h"
+#include "encode_vp9_pak.h"
#include "encode_vp9_vdenc_feature_manager.h"
#include "encode_vp9_vdenc_const_settings.h"
#include "media_vp9_packet_defs.h"
@@ -305,4 +306,913 @@ MHW_SETPAR_DECL_SRC(HCP_PIPE_BUF_ADDR_STATE, Vp9EncodeHpu)
return MOS_STATUS_SUCCESS;
}
+MOS_STATUS Vp9EncodeHpu::SetDefaultTxProbs(uint8_t *ctxBuffer, uint32_t &byteCnt) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+ // TX probs
+ for (i = 0; i < CODEC_VP9_TX_SIZE_CONTEXTS; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_TX_SIZES - 3; ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultTxProbs.p8x8[i][j];
+ }
+ }
+ for (i = 0; i < CODEC_VP9_TX_SIZE_CONTEXTS; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_TX_SIZES - 2; ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultTxProbs.p16x16[i][j];
+ }
+ }
+ for (i = 0; i < CODEC_VP9_TX_SIZE_CONTEXTS; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_TX_SIZES - 1; ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultTxProbs.p32x32[i][j];
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultCoeffProbs(uint8_t *ctxBuffer, uint32_t &byteCnt) const
+{
+ ENCODE_FUNC_CALL();
+
+ uint8_t blocktype = 0;
+ uint8_t reftype = 0;
+ uint8_t coeffbands = 0;
+ uint8_t unConstrainedNodes = 0;
+ uint8_t prevCoefCtx = 0;
+ // Coeff probs
+ for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
+ {
+ for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
+ {
+ for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
+ {
+ uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
+ for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
+ {
+ for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
+ {
+ ctxBuffer[byteCnt++] = DefaultCoefProbs4x4[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
+ }
+ }
+ }
+ }
+ }
+
+ for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
+ {
+ for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
+ {
+ for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
+ {
+ uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
+ for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
+ {
+ for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
+ {
+ ctxBuffer[byteCnt++] = DefaultCoefPprobs8x8[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
+ }
+ }
+ }
+ }
+ }
+
+ for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
+ {
+ for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
+ {
+ for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
+ {
+ uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
+ for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
+ {
+ for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
+ {
+ ctxBuffer[byteCnt++] = DefaultCoefProbs16x16[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
+ }
+ }
+ }
+ }
+ }
+
+ for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
+ {
+ for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
+ {
+ for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
+ {
+ uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
+ for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
+ {
+ for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
+ {
+ ctxBuffer[byteCnt++] = DefaultCoefProbs32x32[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
+ }
+ }
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultMbskipProbs(uint8_t *ctxBuffer, uint32_t &byteCnt) const
+{
+ ENCODE_FUNC_CALL();
+
+ // mb skip probs
+ for (auto i = 0; i < CODEC_VP9_MBSKIP_CONTEXTS; ++i)
+ {
+ ctxBuffer[byteCnt++] = DefaultMbskipProbs[i];
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultInterModeProbs(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ // Inter mode probs
+ for (i = 0; i < CODEC_VP9_INTER_MODE_CONTEXTS; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_INTER_MODES - 1; ++j)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultInterModeProbs[i][j];
+ }
+ else
+ {
+ // Zeros for key frame
+ byteCnt++;
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultSwitchableInterpProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ // Switchable interprediction probs
+ for (i = 0; i < CODEC_VP9_SWITCHABLE_FILTERS + 1; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_SWITCHABLE_FILTERS - 1; ++j)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultSwitchableInterpProb[i][j];
+ }
+ else
+ {
+ // Zeros for key frame
+ byteCnt++;
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultIntraInterProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ // Intra inter probs
+ for (auto i = 0; i < CODEC_VP9_INTRA_INTER_CONTEXTS; ++i)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultIntraInterProb[i];
+ }
+ else
+ {
+ // Zeros for key frame
+ byteCnt++;
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultCompInterProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ // Comp inter probs
+ for (auto i = 0; i < CODEC_VP9_COMP_INTER_CONTEXTS; ++i)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultCompInterProb[i];
+ }
+ else
+ {
+ // Zeros for key frame
+ byteCnt++;
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultSingleRefProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ // Single ref probs
+ for (i = 0; i < CODEC_VP9_REF_CONTEXTS; ++i)
+ {
+ for (j = 0; j < 2; ++j)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultSingleRefProb[i][j];
+ }
+ else
+ {
+ // Zeros for key frame
+ byteCnt++;
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultCompRefProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ // Comp ref probs
+ for (auto i = 0; i < CODEC_VP9_REF_CONTEXTS; ++i)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultCompRefProb[i];
+ }
+ else
+ {
+ // Zeros for key frame
+ byteCnt++;
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultYModeProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ // y mode probs
+ for (i = 0; i < CODEC_VP9_BLOCK_SIZE_GROUPS; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_INTRA_MODES - 1; ++j)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultIFYProb[i][j];
+ }
+ else
+ {
+ // Zeros for key frame, since HW will not use this buffer, but default right buffer
+ byteCnt++;
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultPartitionProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ // Partition probs, key & intra-only frames use key type, other inter frames use inter type
+ for (i = 0; i < CODECHAL_VP9_PARTITION_CONTEXTS; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_PARTITION_TYPES - 1; ++j)
+ {
+ if (setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultKFPartitionProb[i][j];
+ }
+ else
+ {
+ ctxBuffer[byteCnt++] = DefaultPartitionProb[i][j];
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultNmvContext(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ for (i = 0; i < (CODEC_VP9_MV_JOINTS - 1); ++i)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.joints[i];
+ }
+ else
+ {
+ byteCnt++;
+ }
+ }
+
+ for (i = 0; i < 2; ++i)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].sign;
+ for (j = 0; j < (CODEC_VP9_MV_CLASSES - 1); ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].classes[j];
+ }
+ for (j = 0; j < (CODECHAL_VP9_CLASS0_SIZE - 1); ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].class0[j];
+ }
+ for (j = 0; j < CODECHAL_VP9_MV_OFFSET_BITS; ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].bits[j];
+ }
+ }
+ else
+ {
+ byteCnt += 1;
+ byteCnt += (CODEC_VP9_MV_CLASSES - 1);
+ byteCnt += (CODECHAL_VP9_CLASS0_SIZE - 1);
+ byteCnt += (CODECHAL_VP9_MV_OFFSET_BITS);
+ }
+ }
+ for (i = 0; i < 2; ++i)
+ {
+ if (!setToKey)
+ {
+ for (j = 0; j < CODECHAL_VP9_CLASS0_SIZE; ++j)
+ {
+ for (int32_t k = 0; k < (CODEC_VP9_MV_FP_SIZE - 1); ++k)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].class0_fp[j][k];
+ }
+ }
+ for (j = 0; j < (CODEC_VP9_MV_FP_SIZE - 1); ++j)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].fp[j];
+ }
+ }
+ else
+ {
+ byteCnt += (CODECHAL_VP9_CLASS0_SIZE * (CODEC_VP9_MV_FP_SIZE - 1));
+ byteCnt += (CODEC_VP9_MV_FP_SIZE - 1);
+ }
+ }
+ for (i = 0; i < 2; ++i)
+ {
+ if (!setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].class0_hp;
+ ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].hp;
+ }
+ else
+ {
+ byteCnt += 2;
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::SetDefaultUVModeProbs(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ int32_t i, j;
+
+ // uv mode probs
+ for (i = 0; i < CODEC_VP9_INTRA_MODES; ++i)
+ {
+ for (j = 0; j < CODEC_VP9_INTRA_MODES - 1; ++j)
+ {
+ if (setToKey)
+ {
+ ctxBuffer[byteCnt++] = DefaultKFUVModeProb[i][j];
+ }
+ else
+ {
+ ctxBuffer[byteCnt++] = DefaultIFUVProbs[i][j];
+ }
+ }
+ }
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::CtxBufDiffInit(uint8_t *ctxBuffer, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ uint32_t byteCnt = CODEC_VP9_INTER_PROB_OFFSET;
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultInterModeProbs(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultSwitchableInterpProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultIntraInterProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultCompInterProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultSingleRefProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultCompRefProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultYModeProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultPartitionProb(ctxBuffer, byteCnt, setToKey));
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultNmvContext(ctxBuffer, byteCnt, setToKey));
+
+ // 47 bytes of zeros
+ byteCnt += 47;
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultUVModeProbs(ctxBuffer, byteCnt, setToKey));
+
+ return MOS_STATUS_SUCCESS;
+}
+
+MOS_STATUS Vp9EncodeHpu::ContextBufferInit(uint8_t *ctxBuffer, bool setToKey) const
+{
+ ENCODE_FUNC_CALL();
+
+ MOS_ZeroMemory(ctxBuffer, CODEC_VP9_SEG_PROB_OFFSET);
+
+ uint32_t byteCnt = 0;
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultTxProbs(ctxBuffer, byteCnt));
+
+ // 52 bytes of zeros
+ byteCnt += 52;
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultCoeffProbs(ctxBuffer, byteCnt));
+
+ // 16 bytes of zeros
+ byteCnt += 16;
+
+ ENCODE_CHK_STATUS_RETURN(SetDefaultMbskipProbs(ctxBuffer, byteCnt));
+
+ // Populate prob values which are different between Key and Non-Key frame
+ CtxBufDiffInit(ctxBuffer, setToKey);
+
+ // Skip Seg tree/pred probs, updating not done in this function
+ byteCnt = CODEC_VP9_SEG_PROB_OFFSET;
+ byteCnt += 7;
+ byteCnt += 3;
+
+ // 28 bytes of zeros
+ for (auto i = 0; i < 28; i++)
+ {
+ ctxBuffer[byteCnt++] = 0;
+ }
+
+ if (byteCnt > CODEC_VP9_PROB_MAX_NUM_ELEM)
+ {
+ CODECHAL_PUBLIC_ASSERTMESSAGE("Error: FrameContext array out-of-bounds, byteCnt = %d!\n", byteCnt);
+ return MOS_STATUS_NO_SPACE;
+ }
+ else
+ {
+ return MOS_STATUS_SUCCESS;
+ }
+}
+
+void Vp9EncodeHpu::PutDataForCompressedHdr(
+ CompressedHeader *compressedHdr,
+ uint32_t bit,
+ uint32_t prob,
+ uint32_t binIdx)
+{
+ compressedHdr[binIdx].fields.valid = 1;
+ compressedHdr[binIdx].fields.bin_probdiff = 1;
+ compressedHdr[binIdx].fields.bin = bit;
+ compressedHdr[binIdx].fields.prob = (prob == 128) ? 0 : 1;
+}
+
+MOS_STATUS Vp9EncodeHpu::RefreshFrameInternalBuffers()
+{
+ ENCODE_FUNC_CALL();
+ ENCODE_CHK_NULL_RETURN(m_basicFeature);
+ ENCODE_CHK_NULL_RETURN(m_basicFeature->m_vp9PicParams);
+
+ auto hpuFeature = dynamic_cast<Vp9EncodeHpu *>(m_featureManager->GetFeature(Vp9FeatureIDs::vp9HpuFeature));
+ ENCODE_CHK_NULL_RETURN(hpuFeature);
+ auto pakFeature = dynamic_cast<Vp9EncodePak *>(m_featureManager->GetFeature(Vp9FeatureIDs::vp9PakFeature));
+ ENCODE_CHK_NULL_RETURN(pakFeature);
+
+ MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
+
+ auto &picFields = m_basicFeature->m_vp9PicParams->PicFlags.fields;
+ ENCODE_ASSERT(picFields.refresh_frame_context == 0);
+
+ MOS_LOCK_PARAMS lockFlagsWriteOnly;
+ MOS_ZeroMemory(&lockFlagsWriteOnly, sizeof(MOS_LOCK_PARAMS));
+ lockFlagsWriteOnly.WriteOnly = 1;
+
+ bool keyFrame = !picFields.frame_type;
+ bool isScaling = (m_basicFeature->m_oriFrameWidth == m_basicFeature->m_prevFrameInfo.FrameWidth) &&
+ (m_basicFeature->m_oriFrameHeight == m_basicFeature->m_prevFrameInfo.FrameHeight)
+ ? false
+ : true;
+ bool resetSegIdBuf = keyFrame || isScaling ||
+ picFields.error_resilient_mode ||
+ picFields.intra_only;
+
+ if (resetSegIdBuf)
+ {
+ uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(m_basicFeature->m_resSegmentIdBuffer);
+ ENCODE_CHK_NULL_RETURN(data);
+
+ MOS_ZeroMemory(data, m_basicFeature->m_picSizeInSb * CODECHAL_CACHELINE_SIZE);
+
+ ENCODE_CHK_STATUS_RETURN(m_allocator->UnLock(m_basicFeature->m_resSegmentIdBuffer));
+ }
+
+ //refresh inter probs in needed frame context buffers
+ bool clearAll = (keyFrame || picFields.error_resilient_mode ||
+ (picFields.reset_frame_context == 3 && picFields.intra_only));
+
+ bool clearSpecified = (picFields.reset_frame_context == 2 &&
+ picFields.intra_only);
+
+ for (auto i = 0; i < CODEC_VP9_NUM_CONTEXTS; i++)
+ {
+ PMOS_RESOURCE resProbBuffer = nullptr;
+ ENCODE_CHK_STATUS_RETURN(hpuFeature->GetProbabilityBuffer(i, resProbBuffer));
+ ENCODE_CHK_NULL_RETURN(resProbBuffer);
+
+ if (clearAll || (clearSpecified && i == picFields.frame_context_idx))
+ {
+ uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(resProbBuffer);
+ ENCODE_CHK_NULL_RETURN(data);
+
+ eStatus = ContextBufferInit(data, keyFrame || picFields.intra_only);
+
+ ENCODE_CHK_STATUS_RETURN(m_allocator->UnLock(resProbBuffer));
+ ENCODE_CHK_STATUS_RETURN(eStatus);
+
+ m_clearAllToKey[i] = keyFrame || picFields.intra_only;
+ if (i == 0) //reset this flag when Ctx buffer 0 is cleared.
+ {
+ m_isPreCtx0InterProbSaved = false;
+ }
+ }
+ else if (m_clearAllToKey[i]) // this buffer is inside inter frame, but its interProb has not been init to default inter type data.
+ {
+ uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(resProbBuffer);
+ ENCODE_CHK_NULL_RETURN(data);
+
+ if (picFields.intra_only && i == 0) // this buffer is used as intra_only context, do not need to set interprob to be inter type.
+ {
+ eStatus = CtxBufDiffInit(data, true);
+ }
+ else // set interprob to be inter type.
+ {
+ eStatus = CtxBufDiffInit(data, false);
+ m_clearAllToKey[i] = false;
+ }
+
+ ENCODE_CHK_STATUS_RETURN(m_allocator->UnLock(resProbBuffer));
+ ENCODE_CHK_STATUS_RETURN(eStatus);
+ }
+ else if (i == 0) // this buffer do not need to clear in current frame, also it has not been cleared to key type in previous frame.
+ { // in this case, only context buffer 0 will be temporally overwritten.
+ if (picFields.intra_only)
+ {
+ uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(resProbBuffer);
+ ENCODE_CHK_NULL_RETURN(data);
+
+ if (!m_isPreCtx0InterProbSaved) // only when non intra-only -> intra-only need save InterProb, otherwise leave saved InterProb unchanged.
+ {
+ //save current interprob
+ ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(m_preCtx0InterProbSaved, CODECHAL_VP9_INTER_PROB_SIZE, data + CODEC_VP9_INTER_PROB_OFFSET, CODECHAL_VP9_INTER_PROB_SIZE));
+ m_isPreCtx0InterProbSaved = true;
+ }
+ eStatus = CtxBufDiffInit(data, true);
+ ENCODE_CHK_STATUS_RETURN(m_allocator->UnLock(resProbBuffer));
+ ENCODE_CHK_STATUS_RETURN(eStatus);
+ }
+ else if (m_isPreCtx0InterProbSaved)
+ {
+ uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(resProbBuffer);
+ ENCODE_CHK_NULL_RETURN(data);
+
+ //reload former interprob
+ ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(data + CODEC_VP9_INTER_PROB_OFFSET, CODECHAL_VP9_INTER_PROB_SIZE, m_preCtx0InterProbSaved, CODECHAL_VP9_INTER_PROB_SIZE));
+
+ ENCODE_CHK_STATUS_RETURN(m_allocator->UnLock(resProbBuffer));
+ m_isPreCtx0InterProbSaved = false;
+ }
+ }
+ }
+
+ // compressed header
+ uint32_t index = 0;
+ auto txMode = m_basicFeature->m_txMode;
+ CompressedHeader *compressedHdr = (CompressedHeader *)MOS_AllocAndZeroMemory(sizeof(CompressedHeader) * (PAK_COMPRESSED_HDR_SYNTAX_ELEMS + 1));
+ ENCODE_CHK_NULL_RETURN(compressedHdr);
+
+ if (!picFields.LosslessFlag)
+ {
+ if (txMode == CODEC_VP9_TX_SELECTABLE)
+ {
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_TX_MODE_IDX);
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_TX_MODE_IDX + 1);
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_TX_MODE_SELECT_IDX);
+ }
+ else if (txMode == CODEC_VP9_TX_32X32)
+ {
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_TX_MODE_IDX);
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_TX_MODE_IDX + 1);
+ PutDataForCompressedHdr(compressedHdr, 0, 128, PAK_TX_MODE_SELECT_IDX);
+ }
+ else
+ {
+ PutDataForCompressedHdr(compressedHdr, (txMode & 0x02) >> 1, 128, PAK_TX_MODE_IDX);
+ PutDataForCompressedHdr(compressedHdr, (txMode & 0x01), 128, PAK_TX_MODE_IDX + 1);
+ }
+
+ if (txMode == CODEC_VP9_TX_SELECTABLE)
+ {
+ index = PAK_TX_8x8_PROB_IDX;
+ for (auto i = 0; i < 2; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+
+ index = PAK_TX_16x16_PROB_IDX;
+ for (auto i = 0; i < 2; i++)
+ {
+ for (auto j = 0; j < 2; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+
+ index = PAK_TX_32x32_PROB_IDX;
+ for (auto i = 0; i < 2; i++)
+ {
+ for (auto j = 0; j < 3; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+ }
+ }
+
+ for (auto coeffSize = 0; coeffSize < 4; coeffSize++)
+ {
+ if (coeffSize > txMode)
+ {
+ continue;
+ }
+
+ switch (coeffSize)
+ {
+ case 0:
+ index = PAK_TX_4x4_COEFF_PROB_IDX;
+ break;
+ case 1:
+ index = PAK_TX_8x8_COEFF_PROB_IDX;
+ break;
+ case 2:
+ index = PAK_TX_16x16_COEFF_PROB_IDX;
+ break;
+ case 3:
+ index = PAK_TX_32x32_COEFF_PROB_IDX;
+ break;
+ }
+
+ PutDataForCompressedHdr(compressedHdr, 0, 128, index);
+ }
+
+ PutDataForCompressedHdr(compressedHdr, 0, 252, PAK_SKIP_CONTEXT_IDX);
+ PutDataForCompressedHdr(compressedHdr, 0, 252, PAK_SKIP_CONTEXT_IDX + 2);
+ PutDataForCompressedHdr(compressedHdr, 0, 252, PAK_SKIP_CONTEXT_IDX + 4);
+
+ if (picFields.frame_type != 0 && !picFields.intra_only)
+ {
+ index = PAK_INTER_MODE_CTX_IDX;
+ for (auto i = 0; i < 7; i++)
+ {
+ for (auto j = 0; j < 3; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+
+ if (picFields.mcomp_filter_type == CODEC_VP9_SWITCHABLE_FILTERS)
+ {
+ index = PAK_SWITCHABLE_FILTER_CTX_IDX;
+ for (auto i = 0; i < 4; i++)
+ {
+ for (auto j = 0; j < 2; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+ }
+
+ index = PAK_INTRA_INTER_CTX_IDX;
+ for (auto i = 0; i < 4; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+
+ auto &picRefFields = m_basicFeature->m_vp9PicParams->RefFlags.fields;
+ bool allowComp = !(
+ (picRefFields.LastRefSignBias && picRefFields.GoldenRefSignBias && picRefFields.AltRefSignBias) ||
+ (!picRefFields.LastRefSignBias && !picRefFields.GoldenRefSignBias && !picRefFields.AltRefSignBias));
+
+ if (allowComp)
+ {
+ if (picFields.comp_prediction_mode == PRED_MODE_HYBRID)
+ {
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_COMPOUND_PRED_MODE_IDX);
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_COMPOUND_PRED_MODE_IDX + 1);
+ index = PAK_HYBRID_PRED_CTX_IDX;
+ for (auto i = 0; i < 5; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+ else if (picFields.comp_prediction_mode == PRED_MODE_COMPOUND)
+ {
+ PutDataForCompressedHdr(compressedHdr, 1, 128, PAK_COMPOUND_PRED_MODE_IDX);
+ PutDataForCompressedHdr(compressedHdr, 0, 128, PAK_COMPOUND_PRED_MODE_IDX + 1);
+ }
+ else
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 128, PAK_COMPOUND_PRED_MODE_IDX);
+ }
+ }
+
+ if (picFields.comp_prediction_mode != PRED_MODE_COMPOUND)
+ {
+ index = PAK_SINGLE_REF_PRED_CTX_IDX;
+ for (auto i = 0; i < 5; i++)
+ {
+ for (auto j = 0; j < 2; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+ }
+
+ if (picFields.comp_prediction_mode != PRED_MODE_SINGLE)
+ {
+ index = PAK_CMPUND_PRED_CTX_IDX;
+ for (auto i = 0; i < 5; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+
+ index = PAK_INTRA_MODE_PROB_CTX_IDX;
+ for (auto i = 0; i < 4; i++)
+ {
+ for (auto j = 0; j < 9; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+
+ index = PAK_PARTITION_PROB_IDX;
+ for (auto i = 0; i < 16; i++)
+ {
+ for (auto j = 0; j < 3; j++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 2;
+ }
+ }
+
+ index = PAK_MVJOINTS_PROB_IDX;
+ for (auto i = 0; i < 3; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ }
+
+ for (auto d = 0; d < 2; d++)
+ {
+ index = (d == 0) ? PAK_MVCOMP0_IDX : PAK_MVCOMP1_IDX;
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ for (auto i = 0; i < 10; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ }
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ for (auto i = 0; i < 10; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ }
+ }
+
+ for (auto d = 0; d < 2; d++)
+ {
+ index = (d == 0) ? PAK_MVFRAC_COMP0_IDX : PAK_MVFRAC_COMP1_IDX;
+ for (auto i = 0; i < 3; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ }
+ for (auto i = 0; i < 3; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ }
+ for (auto i = 0; i < 3; i++)
+ {
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ }
+ }
+
+ if (picFields.allow_high_precision_mv)
+ {
+ for (auto d = 0; d < 2; d++)
+ {
+ index = (d == 0) ? PAK_MVHP_COMP0_IDX : PAK_MVHP_COMP1_IDX;
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ index += 8;
+ PutDataForCompressedHdr(compressedHdr, 0, 252, index);
+ }
+ }
+ }
+
+ PMOS_RESOURCE comprHeaderBuffer = pakFeature->GetCompressedHeaderBuffer();
+ ENCODE_CHK_NULL_RETURN(comprHeaderBuffer);
+
+ uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(comprHeaderBuffer);
+ if (data == nullptr)
+ {
+ MOS_FreeMemory(compressedHdr);
+ ENCODE_CHK_NULL_RETURN(nullptr);
+ }
+
+ for (uint32_t i = 0; i < PAK_COMPRESSED_HDR_SYNTAX_ELEMS; i += 2)
+ {
+ data[i >> 1] = (compressedHdr[i + 1].value << 0x04) | (compressedHdr[i].value);
+ }
+
+ eStatus = m_allocator->UnLock(comprHeaderBuffer);
+ if (eStatus != MOS_STATUS_SUCCESS)
+ {
+ MOS_FreeMemory(compressedHdr);
+ ENCODE_CHK_STATUS_RETURN(eStatus);
+ }
+
+ MOS_FreeMemory(compressedHdr);
+ return eStatus;
+}
+
} // namespace encode
diff --git a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.h b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.h
index 7b0887c3..29de1c6b 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.h
+++ b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_hpu.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2021, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -28,6 +28,7 @@
#include "encode_vp9_basic_feature.h"
#include "media_vp9_packet_defs.h"
+#include "codec_def_vp9_probs.h"
namespace encode
{
@@ -121,6 +122,253 @@ public:
//!
MOS_STATUS SetIsLastPass(bool isLastPass);
+ //!
+ //! \brief Set default tx probs
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultTxProbs(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt) const;
+
+ //!
+ //! \brief Set default coeff probs
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultCoeffProbs(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt) const;
+
+ //!
+ //! \brief Set default mb skip probs
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultMbskipProbs(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt) const;
+
+ //!
+ //! \brief Populate prob values which are different between Key and Non-Key frame
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS CtxBufDiffInit(
+ uint8_t *ctxBuffer,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default inter mode probs
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultInterModeProbs(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default switchable interprediction Prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultSwitchableInterpProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default intra-inter prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultIntraInterProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default comp inter prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultCompInterProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default single reference prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultSingleRefProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default comp reference prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultCompRefProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default Y mode prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultYModeProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default partition prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultPartitionProb(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default NMV prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultNmvContext(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Set default UV mode prob
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in,out] byteCnt
+ //! Numbe rof bytes counter
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS SetDefaultUVModeProbs(
+ uint8_t *ctxBuffer,
+ uint32_t &byteCnt,
+ bool setToKey) const;
+
+ //!
+ //! \brief Init context buffer
+ //! \details
+ //! \param [in,out] ctxBuffer
+ //! Pointer to context buffer
+ //! \param [in] setToKey
+ //! Specify if it's key frame
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS ContextBufferInit(
+ uint8_t *ctxBuffer,
+ bool setToKey) const;
+
+ //!
+ //! \brief Refresh frame interlnal buffers
+ //! \return MOS_STATUS
+ //! MOS_STATUS_SUCCESS if success, else fail reason
+ //!
+ MOS_STATUS RefreshFrameInternalBuffers();
+
//!
//! \brief MHW parameters declaration
//!
@@ -149,6 +397,90 @@ protected:
MOS_RESOURCE m_resProbBuffer[CODEC_VP9_NUM_CONTEXTS] = {0}; //!< Probability buffer
mutable bool m_isLastPass = false;
+
+ //!
+ //! \struct CompressedHeader
+ //! \brief Compressed header
+ //!
+ struct CompressedHeader
+ {
+ union
+ {
+ struct
+ {
+ uint8_t valid : 1; // valid =1, invalid = 0
+ uint8_t bin_probdiff : 1; // 1= bin, 0 = prob diff
+ uint8_t prob : 1; // 0 = 128, 1 = 252
+ uint8_t bin : 1;
+ uint8_t reserved : 4;
+ } fields;
+ uint8_t value;
+ };
+ };
+
+ /* BinIdx for compressed header generation for PAK */
+ /* The first value indicates previous SE index and second value indicates the size of the previous SE*/
+ static constexpr uint32_t PAK_TX_MODE_IDX = 0; //idx=0
+ static constexpr uint32_t PAK_TX_MODE_SELECT_IDX = (PAK_TX_MODE_IDX + 2); //idx=2
+ static constexpr uint32_t PAK_TX_8x8_PROB_IDX = (PAK_TX_MODE_SELECT_IDX + 1); //idx=3
+ static constexpr uint32_t PAK_TX_16x16_PROB_IDX = (PAK_TX_8x8_PROB_IDX + 4); //idx=7
+ static constexpr uint32_t PAK_TX_32x32_PROB_IDX = (PAK_TX_16x16_PROB_IDX + 8); //idx=15
+ static constexpr uint32_t PAK_TX_4x4_COEFF_PROB_IDX = (PAK_TX_32x32_PROB_IDX + 12); //idx=27
+ static constexpr uint32_t PAK_TX_8x8_COEFF_PROB_IDX = (PAK_TX_4x4_COEFF_PROB_IDX + 793); //idx=820
+ static constexpr uint32_t PAK_TX_16x16_COEFF_PROB_IDX = (PAK_TX_8x8_COEFF_PROB_IDX + 793); //idx=1613
+ static constexpr uint32_t PAK_TX_32x32_COEFF_PROB_IDX = (PAK_TX_16x16_COEFF_PROB_IDX + 793); //idx=2406
+ static constexpr uint32_t PAK_SKIP_CONTEXT_IDX = (PAK_TX_32x32_COEFF_PROB_IDX + 793); //idx=3199
+ static constexpr uint32_t PAK_INTER_MODE_CTX_IDX = (PAK_SKIP_CONTEXT_IDX + 6); //idx=3205
+ static constexpr uint32_t PAK_SWITCHABLE_FILTER_CTX_IDX = (PAK_INTER_MODE_CTX_IDX + 42); //idx=3247
+ static constexpr uint32_t PAK_INTRA_INTER_CTX_IDX = (PAK_SWITCHABLE_FILTER_CTX_IDX + 16); //idx=3263
+ static constexpr uint32_t PAK_COMPOUND_PRED_MODE_IDX = (PAK_INTRA_INTER_CTX_IDX + 8); //idx=3271
+ static constexpr uint32_t PAK_HYBRID_PRED_CTX_IDX = (PAK_COMPOUND_PRED_MODE_IDX + 2); //idx=3273
+ static constexpr uint32_t PAK_SINGLE_REF_PRED_CTX_IDX = (PAK_HYBRID_PRED_CTX_IDX + 10); //idx=3283
+ static constexpr uint32_t PAK_CMPUND_PRED_CTX_IDX = (PAK_SINGLE_REF_PRED_CTX_IDX + 20); //idx=3303
+ static constexpr uint32_t PAK_INTRA_MODE_PROB_CTX_IDX = (PAK_CMPUND_PRED_CTX_IDX + 10); //idx=3313
+ static constexpr uint32_t PAK_PARTITION_PROB_IDX = (PAK_INTRA_MODE_PROB_CTX_IDX + 72); //idx=3385
+ static constexpr uint32_t PAK_MVJOINTS_PROB_IDX = (PAK_PARTITION_PROB_IDX + 96); //idx=3481
+ static constexpr uint32_t PAK_MVCOMP0_IDX = (PAK_MVJOINTS_PROB_IDX + 24); //idx=3505
+ static constexpr uint32_t PAK_MVCOMP1_IDX = (PAK_MVCOMP0_IDX + 176); //idx=3681
+ static constexpr uint32_t PAK_MVFRAC_COMP0_IDX = (PAK_MVCOMP1_IDX + 176); //idx=3857
+ static constexpr uint32_t PAK_MVFRAC_COMP1_IDX = (PAK_MVFRAC_COMP0_IDX + 72); //idx=3929
+ static constexpr uint32_t PAK_MVHP_COMP0_IDX = (PAK_MVFRAC_COMP1_IDX + 72); //idx=4001
+ static constexpr uint32_t PAK_MVHP_COMP1_IDX = (PAK_MVHP_COMP0_IDX + 16); //idx=4017
+ static constexpr uint32_t PAK_COMPRESSED_HDR_SYNTAX_ELEMS = (PAK_MVHP_COMP1_IDX + 16); //=4033
+
+ bool m_clearAllToKey[CODEC_VP9_NUM_CONTEXTS] = {false};
+ bool m_isPreCtx0InterProbSaved = false;
+ uint8_t m_preCtx0InterProbSaved[CODECHAL_VP9_INTER_PROB_SIZE] = {0};
+
+ //!
+ //! \enum PRED_MODE
+ //! \brief Pred mode
+ //!
+ enum PRED_MODE
+ {
+ PRED_MODE_SINGLE = 0,
+ PRED_MODE_COMPOUND = 1,
+ PRED_MODE_HYBRID = 2
+ };
+
+ //!
+ //! \brief Put data for compressed header
+ //!
+ //! \param [in] compressedHdr
+ //! Compressed header
+ //! \param [in] bit
+ //! Bit
+ //! \param [in] prob
+ //! Prob
+ //! \param [in] binIdx
+ //! Bin index
+ //!
+ void PutDataForCompressedHdr(
+ CompressedHeader *compressedHdr,
+ uint32_t bit,
+ uint32_t prob,
+ uint32_t binIdx);
+
MEDIA_CLASS_DEFINE_END(encode__Vp9EncodeHpu)
};
diff --git a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.cpp b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.cpp
index 5ce6a4ba..0e355d5e 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2022, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -178,7 +178,7 @@ MOS_STATUS Vp9EncodePak::ConstructPicStateBatchBuffer(EncodePipeline* pipeline)
if ((dysRefFrameFlags == DYS_REF_NONE) && m_basicFeature->m_pakOnlyModeEnabledForLastPass)
{
// This flag sets PAK-only mode in SLBB for rePAK pass. In single-pass mode, this flag should be disabled.
- m_basicFeature->m_vdencPakonlyMultipassEnabled = ((passNum > 0) && isLastPass) ? true : false;
+ m_basicFeature->m_vdencPakonlyMultipassEnabled = ((passNum > 1) && isLastPass) ? true : false;
}
// This function will call by Vp9HucProbPkt or Vp9HucBrcUpdatePkt.
@@ -408,6 +408,13 @@ MOS_STATUS Vp9EncodePak::PakConstructPicStateBatchBuffer(PMOS_RESOURCE picStateB
return MOS_STATUS_SUCCESS;
}
+PMOS_RESOURCE Vp9EncodePak::GetCompressedHeaderBuffer()
+{
+ ENCODE_FUNC_CALL();
+
+ return &m_resCompressedHeaderBuffer;
+}
+
MOS_STATUS Vp9EncodePak::AllocateResources()
{
ENCODE_FUNC_CALL();
diff --git a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.h b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.h
index 0c9136dc..04667389 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.h
+++ b/media_softlet/agnostic/common/codec/hal/enc/vp9/features/encode_vp9_pak.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2022, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -280,6 +280,12 @@ public:
MOS_STATUS PakConstructPicStateBatchBuffer(
PMOS_RESOURCE picStateBuffer);
+ //!
+ //! \brief Get compressed header buffer
+ //! \return Pointer to the buffer
+ //!
+ PMOS_RESOURCE GetCompressedHeaderBuffer();
+
//!
//! \brief MHW parameters declaration
//!
diff --git a/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.cpp b/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.cpp
index 9b5c9965..c9d8c854 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020-2022, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -557,8 +557,8 @@ MOS_STATUS Vp9HpuPkt::SetDmemBuffer() const
uint8_t *data = (uint8_t *)m_allocator->LockResourceForWrite(resProbBuffer);
ENCODE_CHK_NULL_RETURN(data);
- ContextBufferInit(data, 0);
- CtxBufDiffInit(data, 0);
+ hpuFeature->ContextBufferInit(data, 0);
+ hpuFeature->CtxBufDiffInit(data, 0);
ENCODE_CHK_STATUS_RETURN(m_allocator->UnLock(resProbBuffer));
}
@@ -596,7 +596,7 @@ MOS_STATUS Vp9HpuPkt::SetDmemBuffer() const
// For DyS CQP or BRC case there is no Repak on last pass. So disable the Repak flag here.
// We also disable repak pass in TU7 speed mode usage for performance reasons
- dmem->RePak = (m_pipeline->GetPassNum() > 0 && m_pipeline->IsLastPass() && !(m_basicFeature->m_dysCqp || m_basicFeature->m_dysBrc) &&
+ dmem->RePak = (m_pipeline->GetPassNum() > 1 && m_pipeline->IsLastPass() && !(m_basicFeature->m_dysCqp || m_basicFeature->m_dysBrc) &&
!TargetUsage::isSpeed(vp9SeqParams->TargetUsage));
dmem->PrevFrameInfo = m_basicFeature->m_prevFrameInfo;
@@ -626,511 +626,6 @@ MOS_STATUS Vp9HpuPkt::SetDmemBuffer() const
return MOS_STATUS_SUCCESS;
}
-MOS_STATUS Vp9HpuPkt::ContextBufferInit(uint8_t *ctxBuffer, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- MOS_ZeroMemory(ctxBuffer, CODEC_VP9_SEG_PROB_OFFSET);
-
- uint32_t byteCnt = 0;
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultTxProbs(ctxBuffer, byteCnt));
-
- // 52 bytes of zeros
- byteCnt += 52;
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultCoeffProbs(ctxBuffer, byteCnt));
-
- // 16 bytes of zeros
- byteCnt += 16;
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultMbskipProbs(ctxBuffer, byteCnt));
-
- // Populate prob values which are different between Key and Non-Key frame
- CtxBufDiffInit(ctxBuffer, setToKey);
-
- // Skip Seg tree/pred probs, updating not done in this function
- byteCnt = CODEC_VP9_SEG_PROB_OFFSET;
- byteCnt += 7;
- byteCnt += 3;
-
- // 28 bytes of zeros
- for (auto i = 0; i < 28; i++)
- {
- ctxBuffer[byteCnt++] = 0;
- }
-
- if (byteCnt > CODEC_VP9_PROB_MAX_NUM_ELEM)
- {
- CODECHAL_PUBLIC_ASSERTMESSAGE("Error: FrameContext array out-of-bounds, byteCnt = %d!\n", byteCnt);
- return MOS_STATUS_NO_SPACE;
- }
- else
- {
- return MOS_STATUS_SUCCESS;
- }
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultTxProbs(uint8_t *ctxBuffer, uint32_t &byteCnt) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
- // TX probs
- for (i = 0; i < CODEC_VP9_TX_SIZE_CONTEXTS; ++i)
- {
- for (j = 0; j < CODEC_VP9_TX_SIZES - 3; ++j)
- {
- ctxBuffer[byteCnt++] = DefaultTxProbs.p8x8[i][j];
- }
- }
- for (i = 0; i < CODEC_VP9_TX_SIZE_CONTEXTS; ++i)
- {
- for (j = 0; j < CODEC_VP9_TX_SIZES - 2; ++j)
- {
- ctxBuffer[byteCnt++] = DefaultTxProbs.p16x16[i][j];
- }
- }
- for (i = 0; i < CODEC_VP9_TX_SIZE_CONTEXTS; ++i)
- {
- for (j = 0; j < CODEC_VP9_TX_SIZES - 1; ++j)
- {
- ctxBuffer[byteCnt++] = DefaultTxProbs.p32x32[i][j];
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultCoeffProbs(uint8_t *ctxBuffer, uint32_t &byteCnt) const
-{
- ENCODE_FUNC_CALL();
-
- uint8_t blocktype = 0;
- uint8_t reftype = 0;
- uint8_t coeffbands = 0;
- uint8_t unConstrainedNodes = 0;
- uint8_t prevCoefCtx = 0;
- // Coeff probs
- for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
- {
- for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
- {
- for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
- {
- uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
- for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
- {
- for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
- {
- ctxBuffer[byteCnt++] = DefaultCoefProbs4x4[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
- }
- }
- }
- }
- }
-
- for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
- {
- for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
- {
- for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
- {
- uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
- for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
- {
- for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
- {
- ctxBuffer[byteCnt++] = DefaultCoefPprobs8x8[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
- }
- }
- }
- }
- }
-
- for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
- {
- for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
- {
- for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
- {
- uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
- for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
- {
- for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
- {
- ctxBuffer[byteCnt++] = DefaultCoefProbs16x16[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
- }
- }
- }
- }
- }
-
- for (blocktype = 0; blocktype < CODEC_VP9_BLOCK_TYPES; ++blocktype)
- {
- for (reftype = 0; reftype < CODEC_VP9_REF_TYPES; ++reftype)
- {
- for (coeffbands = 0; coeffbands < CODEC_VP9_COEF_BANDS; ++coeffbands)
- {
- uint8_t numPrevCoeffCtxts = (coeffbands == 0) ? 3 : CODEC_VP9_PREV_COEF_CONTEXTS;
- for (prevCoefCtx = 0; prevCoefCtx < numPrevCoeffCtxts; ++prevCoefCtx)
- {
- for (unConstrainedNodes = 0; unConstrainedNodes < CODEC_VP9_UNCONSTRAINED_NODES; ++unConstrainedNodes)
- {
- ctxBuffer[byteCnt++] = DefaultCoefProbs32x32[blocktype][reftype][coeffbands][prevCoefCtx][unConstrainedNodes];
- }
- }
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultMbskipProbs(uint8_t *ctxBuffer, uint32_t &byteCnt) const
-{
- ENCODE_FUNC_CALL();
-
- // mb skip probs
- for (auto i = 0; i < CODEC_VP9_MBSKIP_CONTEXTS; ++i)
- {
- ctxBuffer[byteCnt++] = DefaultMbskipProbs[i];
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::CtxBufDiffInit(uint8_t *ctxBuffer, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- uint32_t byteCnt = CODEC_VP9_INTER_PROB_OFFSET;
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultInterModeProbs(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultSwitchableInterpProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultIntraInterProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultCompInterProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultSingleRefProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultCompRefProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultYModeProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultPartitionProb(ctxBuffer, byteCnt, setToKey));
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultNmvContext(ctxBuffer, byteCnt, setToKey));
-
- // 47 bytes of zeros
- byteCnt += 47;
-
- ENCODE_CHK_STATUS_RETURN(SetDefaultUVModeProbs(ctxBuffer, byteCnt, setToKey));
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultInterModeProbs(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- // Inter mode probs
- for (i = 0; i < CODEC_VP9_INTER_MODE_CONTEXTS; ++i)
- {
- for (j = 0; j < CODEC_VP9_INTER_MODES - 1; ++j)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultInterModeProbs[i][j];
- }
- else
- {
- // Zeros for key frame
- byteCnt++;
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultSwitchableInterpProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- // Switchable interprediction probs
- for (i = 0; i < CODEC_VP9_SWITCHABLE_FILTERS + 1; ++i)
- {
- for (j = 0; j < CODEC_VP9_SWITCHABLE_FILTERS - 1; ++j)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultSwitchableInterpProb[i][j];
- }
- else
- {
- // Zeros for key frame
- byteCnt++;
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultIntraInterProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- // Intra inter probs
- for (auto i = 0; i < CODEC_VP9_INTRA_INTER_CONTEXTS; ++i)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultIntraInterProb[i];
- }
- else
- {
- // Zeros for key frame
- byteCnt++;
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultCompInterProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- // Comp inter probs
- for (auto i = 0; i < CODEC_VP9_COMP_INTER_CONTEXTS; ++i)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultCompInterProb[i];
- }
- else
- {
- // Zeros for key frame
- byteCnt++;
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultSingleRefProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- // Single ref probs
- for (i = 0; i < CODEC_VP9_REF_CONTEXTS; ++i)
- {
- for (j = 0; j < 2; ++j)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultSingleRefProb[i][j];
- }
- else
- {
- // Zeros for key frame
- byteCnt++;
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultCompRefProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- // Comp ref probs
- for (auto i = 0; i < CODEC_VP9_REF_CONTEXTS; ++i)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultCompRefProb[i];
- }
- else
- {
- // Zeros for key frame
- byteCnt++;
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultYModeProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- // y mode probs
- for (i = 0; i < CODEC_VP9_BLOCK_SIZE_GROUPS; ++i)
- {
- for (j = 0; j < CODEC_VP9_INTRA_MODES - 1; ++j)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultIFYProb[i][j];
- }
- else
- {
- // Zeros for key frame, since HW will not use this buffer, but default right buffer
- byteCnt++;
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultPartitionProb(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- // Partition probs, key & intra-only frames use key type, other inter frames use inter type
- for (i = 0; i < CODECHAL_VP9_PARTITION_CONTEXTS; ++i)
- {
- for (j = 0; j < CODEC_VP9_PARTITION_TYPES - 1; ++j)
- {
- if (setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultKFPartitionProb[i][j];
- }
- else
- {
- ctxBuffer[byteCnt++] = DefaultPartitionProb[i][j];
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultNmvContext(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- for (i = 0; i < (CODEC_VP9_MV_JOINTS - 1); ++i)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.joints[i];
- }
- else
- {
- byteCnt++;
- }
- }
-
- for (i = 0; i < 2; ++i)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].sign;
- for (j = 0; j < (CODEC_VP9_MV_CLASSES - 1); ++j)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].classes[j];
- }
- for (j = 0; j < (CODECHAL_VP9_CLASS0_SIZE - 1); ++j)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].class0[j];
- }
- for (j = 0; j < CODECHAL_VP9_MV_OFFSET_BITS; ++j)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].bits[j];
- }
- }
- else
- {
- byteCnt += 1;
- byteCnt += (CODEC_VP9_MV_CLASSES - 1);
- byteCnt += (CODECHAL_VP9_CLASS0_SIZE - 1);
- byteCnt += (CODECHAL_VP9_MV_OFFSET_BITS);
- }
- }
- for (i = 0; i < 2; ++i)
- {
- if (!setToKey)
- {
- for (j = 0; j < CODECHAL_VP9_CLASS0_SIZE; ++j)
- {
- for (int32_t k = 0; k < (CODEC_VP9_MV_FP_SIZE - 1); ++k)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].class0_fp[j][k];
- }
- }
- for (j = 0; j < (CODEC_VP9_MV_FP_SIZE - 1); ++j)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].fp[j];
- }
- }
- else
- {
- byteCnt += (CODECHAL_VP9_CLASS0_SIZE * (CODEC_VP9_MV_FP_SIZE - 1));
- byteCnt += (CODEC_VP9_MV_FP_SIZE - 1);
- }
- }
- for (i = 0; i < 2; ++i)
- {
- if (!setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].class0_hp;
- ctxBuffer[byteCnt++] = DefaultNmvContext.comps[i].hp;
- }
- else
- {
- byteCnt += 2;
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS Vp9HpuPkt::SetDefaultUVModeProbs(uint8_t *ctxBuffer, uint32_t &byteCnt, bool setToKey) const
-{
- ENCODE_FUNC_CALL();
-
- int32_t i, j;
-
- // uv mode probs
- for (i = 0; i < CODEC_VP9_INTRA_MODES; ++i)
- {
- for (j = 0; j < CODEC_VP9_INTRA_MODES - 1; ++j)
- {
- if (setToKey)
- {
- ctxBuffer[byteCnt++] = DefaultKFUVModeProb[i][j];
- }
- else
- {
- ctxBuffer[byteCnt++] = DefaultIFUVProbs[i][j];
- }
- }
- }
-
- return MOS_STATUS_SUCCESS;
-}
-
uint8_t Vp9HpuPkt::GetReferenceBufferSlotIndex(uint8_t refreshFlags) const
{
// Even if there could be multiple reference frames in the buffer
diff --git a/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.h b/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.h
index 9db0fc10..8c2783b9 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.h
+++ b/media_softlet/agnostic/common/codec/hal/enc/vp9/packet/encode_vp9_hpu_packet.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2020, Intel Corporation
+* Copyright (c) 2020-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -150,246 +150,6 @@ public:
//!
virtual MOS_STATUS SetDmemBuffer() const;
- //!
- //! \brief Init context buffer
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS ContextBufferInit(
- uint8_t *ctxBuffer,
- bool setToKey) const;
-
- //!
- //! \brief Set default tx probs
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultTxProbs(
- uint8_t *ctxBuffer,
- uint32_t& byteCnt) const;
-
- //!
- //! \brief Set default coeff probs
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultCoeffProbs(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt) const;
-
- //!
- //! \brief Set default mb skip probs
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultMbskipProbs(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt) const;
-
- //!
- //! \brief Populate prob values which are different between Key and Non-Key frame
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS CtxBufDiffInit(
- uint8_t *ctxBuffer,
- bool setToKey) const;
-
- //!
- //! \brief Set default inter mode probs
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultInterModeProbs(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default switchable interprediction Prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultSwitchableInterpProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default intra-inter prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultIntraInterProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default comp inter prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultCompInterProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default single reference prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultSingleRefProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default comp reference prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultCompRefProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default Y mode prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultYModeProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default partition prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultPartitionProb(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default NMV prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultNmvContext(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
- //!
- //! \brief Set default UV mode prob
- //! \details
- //! \param [in,out] ctxBuffer
- //! Pointer to context buffer
- //! \param [in,out] byteCnt
- //! Numbe rof bytes counter
- //! \param [in] setToKey
- //! Specify if it's key frame
- //! \return MOS_STATUS
- //! MOS_STATUS_SUCCESS if success, else fail reason
- //!
- MOS_STATUS SetDefaultUVModeProbs(
- uint8_t * ctxBuffer,
- uint32_t &byteCnt,
- bool setToKey) const;
-
//!
//! \brief Get reference buffer slot index
//! \param [in] refreshFlags
diff --git a/media_softlet/agnostic/common/os/mos_utilities_next.cpp b/media_softlet/agnostic/common/os/mos_utilities_next.cpp
index 773ba879..00592006 100644
--- a/media_softlet/agnostic/common/os/mos_utilities_next.cpp
+++ b/media_softlet/agnostic/common/os/mos_utilities_next.cpp
@@ -400,7 +400,7 @@ void *MosUtilities::MosReallocMemory(
size_t newSize)
#endif // MOS_MESSAGES_ENABLED
{
- void *oldPtr = nullptr;
+ uintptr_t oldPtr = reinterpret_cast<uintptr_t>(nullptr);
void *newPtr = nullptr;
#if (_DEBUG || _RELEASE_INTERNAL)
@@ -410,14 +410,14 @@ void *MosUtilities::MosReallocMemory(
}
#endif
- oldPtr = ptr;
+ oldPtr = reinterpret_cast<uintptr_t>(ptr);
newPtr = realloc(ptr, newSize);
MOS_OS_ASSERT(newPtr != nullptr);
- if (newPtr != oldPtr)
+ if (newPtr != reinterpret_cast<void*>(oldPtr))
{
- if (oldPtr != nullptr)
+ if (oldPtr != reinterpret_cast<uintptr_t>(nullptr))
{
MosAtomicDecrement(&m_mosMemAllocCounter);
MOS_MEMNINJA_FREE_MESSAGE(oldPtr, functionName, filename, line);
diff --git a/media_softlet/agnostic/common/shared/mediacopy/media_copy.cpp b/media_softlet/agnostic/common/shared/mediacopy/media_copy.cpp
index 6cd795f1..d5a854b5 100644
--- a/media_softlet/agnostic/common/shared/mediacopy/media_copy.cpp
+++ b/media_softlet/agnostic/common/shared/mediacopy/media_copy.cpp
@@ -30,6 +30,7 @@
#include "media_debug_dumper.h"
#include "mhw_cp_interface.h"
#include "mos_utilities.h"
+#include "mos_util_debug.h"
MediaCopyBaseState::MediaCopyBaseState():
m_osInterface(nullptr)
@@ -208,6 +209,70 @@ MOS_STATUS MediaCopyBaseState::CopyEnigneSelect(MCPY_METHOD preferMethod, MCPY_E
return MOS_STATUS_SUCCESS;
}
+uint32_t GetMinRequiredSurfaceSizeInBytes(uint32_t pitch, uint32_t height, MOS_FORMAT format)
+{
+ uint32_t nBytes = 0;
+ switch (format)
+ {
+ case Format_NV12:
+ case Format_YV12:
+ case Format_I420:
+ case Format_P010:
+ case Format_P016:
+ nBytes = pitch * height + (pitch >> 1) * (height >> 1) + (pitch >> 1) * (height >> 1);
+ break;
+ case Format_RGBP:
+ case Format_BGRP:
+ nBytes = pitch * height + pitch * height + pitch * height;
+ break;
+ case Format_Y410:
+ case Format_Y416:
+ case Format_Y210:
+ case Format_Y216:
+ case Format_YUY2:
+ case Format_R5G6B5:
+ case Format_R8G8B8:
+ case Format_A8R8G8B8:
+ case Format_A8B8G8R8:
+ case Format_X8R8G8B8:
+ case Format_X8B8G8R8:
+ case Format_AYUV:
+ case Format_R10G10B10A2:
+ case Format_B10G10R10A2:
+ case Format_P8:
+ case Format_L8:
+ nBytes = pitch * height;
+ break;
+ default:
+ MCPY_ASSERTMESSAGE("Unsupported format!");
+ break;
+ }
+ return nBytes;
+}
+
+MOS_STATUS CheckResourceSizeValidForCopy(MOS_SURFACE& res)
+{
+ if (res.TileType != MOS_TILE_LINEAR)
+ {
+ return MOS_STATUS_SUCCESS;
+ }
+
+ uint32_t nBytes = GetMinRequiredSurfaceSizeInBytes(res.dwPitch, res.dwHeight, res.Format);
+ if (nBytes == 0)
+ {
+ return MOS_STATUS_INVALID_PARAMETER;
+ }
+ if (res.dwSize < nBytes)
+ {
+ MT_ERR2(MT_MEDIA_COPY,
+ MT_MEDIA_COPY_DATASIZE, nBytes,
+ MT_MEDIA_COPY_DATASIZE, res.dwSize);
+
+ return MOS_STATUS_INVALID_PARAMETER;
+ }
+ return MOS_STATUS_SUCCESS;
+}
+
//!
//! \brief surface copy func.
//! \details copy surface.
@@ -237,6 +302,15 @@ MOS_STATUS MediaCopyBaseState::SurfaceCopy(PMOS_RESOURCE src, PMOS_RESOURCE dst,
mcpySrc.OsRes = src;
MCPY_NORMALMESSAGE("input surface's format %d, width %d; hight %d, pitch %d, tiledmode %d, mmc mode %d",
ResDetails.Format, ResDetails.dwWidth, ResDetails.dwHeight, ResDetails.dwPitch, mcpySrc.TileMode, mcpySrc.CompressionMode);
+ MT_LOG7(MT_MEDIA_COPY, MT_NORMAL,
+ MT_SURF_PITCH, ResDetails.dwPitch,
+ MT_SURF_HEIGHT, ResDetails.dwHeight,
+ MT_SURF_WIDTH, ResDetails.dwWidth,
+ MT_SURF_MOS_FORMAT, ResDetails.Format,
+ MT_MEDIA_COPY_DATASIZE, ResDetails.dwSize,
+ MT_SURF_TILE_TYPE, ResDetails.TileType,
+ MT_SURF_COMP_MODE, mcpySrc.CompressionMode);
+ MCPY_CHK_STATUS_RETURN(CheckResourceSizeValidForCopy(ResDetails));
MOS_ZeroMemory(&ResDetails, sizeof(MOS_SURFACE));
ResDetails.Format = Format_Invalid;
@@ -247,6 +321,15 @@ MOS_STATUS MediaCopyBaseState::SurfaceCopy(PMOS_RESOURCE src, PMOS_RESOURCE dst,
mcpyDst.OsRes = dst;
MCPY_NORMALMESSAGE("Output surface's format %d, width %d; hight %d, pitch %d, tiledmode %d, mmc mode %d",
ResDetails.Format, ResDetails.dwWidth, ResDetails.dwHeight, ResDetails.dwPitch, mcpyDst.TileMode, mcpyDst.CompressionMode);
+ MT_LOG7(MT_MEDIA_COPY, MT_NORMAL,
+ MT_SURF_PITCH, ResDetails.dwPitch,
+ MT_SURF_HEIGHT, ResDetails.dwHeight,
+ MT_SURF_WIDTH, ResDetails.dwWidth,
+ MT_SURF_MOS_FORMAT, ResDetails.Format,
+ MT_MEDIA_COPY_DATASIZE, ResDetails.dwSize,
+ MT_SURF_TILE_TYPE, ResDetails.TileType,
+ MT_SURF_COMP_MODE, mcpyDst.CompressionMode);
+ MCPY_CHK_STATUS_RETURN(CheckResourceSizeValidForCopy(ResDetails));
MCPY_CHK_STATUS_RETURN(PreCheckCpCopy(mcpySrc, mcpyDst, preferMethod));
diff --git a/media_softlet/agnostic/common/shared/profiler/media_perf_profiler.cpp b/media_softlet/agnostic/common/shared/profiler/media_perf_profiler.cpp
index ed54cc2b..05d26211 100644
--- a/media_softlet/agnostic/common/shared/profiler/media_perf_profiler.cpp
+++ b/media_softlet/agnostic/common/shared/profiler/media_perf_profiler.cpp
@@ -720,6 +720,9 @@ PerfGPUNode MediaPerfProfiler::GpuContextToGpuNode(MOS_GPU_CONTEXT context)
case MOS_GPU_CONTEXT_VEBOX2:
node = PERF_GPU_NODE_VE;
break;
+ case MOS_GPU_CONTEXT_BLT:
+ node = PERF_GPU_NODE_BLT;
+ break;
default:
node = PERF_GPU_NODE_UNKNOW;
break;
diff --git a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp
index 4c5e53a5..a1b5353f 100644
--- a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp
+++ b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.cpp
@@ -598,6 +598,7 @@ MOS_STATUS VpAllocator::GetSurfaceInfo(VPHAL_SURFACE *surface, VPHAL_GET_SURFACE
surface->Format = resDetails.Format;
surface->bCompressible = resDetails.bCompressible ? true : false;
surface->bIsCompressed = resDetails.bIsCompressed ? true : false;
+ surface->CacheSetting = resDetails.CacheSetting;
if (IS_RGB32_FORMAT(surface->Format) ||
IS_RGB16_FORMAT(surface->Format) ||
@@ -695,6 +696,8 @@ MOS_STATUS VpAllocator::GetSurfaceInfo(VP_SURFACE* surface, VPHAL_GET_SURFACE_IN
surface->osSurface->Format = resDetails.Format;
surface->osSurface->bCompressible = resDetails.bCompressible ? true : false;
surface->osSurface->bIsCompressed = resDetails.bIsCompressed ? true : false;
+ surface->osSurface->CacheSetting = resDetails.CacheSetting;
+
return MOS_STATUS_SUCCESS;
}
@@ -773,7 +776,8 @@ MOS_STATUS VpAllocator::ReAllocateSurface(
MOS_TILE_MODE_GMM tileModeByForce,
Mos_MemPool memType,
bool isNotLockable,
- void * systemMemory)
+ void * systemMemory,
+ uint32_t depth)
{
VP_FUNC_CALL();
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
@@ -838,6 +842,7 @@ MOS_STATUS VpAllocator::ReAllocateSurface(
allocParams.dwWidth = width;
allocParams.dwHeight = height;
+ allocParams.dwDepth = depth;
allocParams.Format = format;
allocParams.bIsCompressible = compressible;
allocParams.CompressionMode = compressionMode;
diff --git a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.h b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.h
index 352357b4..c632ff0e 100644
--- a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.h
+++ b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_allocator.h
@@ -386,7 +386,8 @@ public:
MOS_TILE_MODE_GMM tileModeByForce = MOS_TILE_UNSET_GMM,
Mos_MemPool memType = MOS_MEMPOOL_VIDEOMEMORY,
bool isNotLockable = false,
- void *systemMemory = nullptr);
+ void *systemMemory = nullptr,
+ uint32_t depth = 0);
//!
//! \brief Allocates the Surface
diff --git a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_hdr_resource_manager.cpp b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_hdr_resource_manager.cpp
index bb57214b..5c0235f5 100644
--- a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_hdr_resource_manager.cpp
+++ b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_hdr_resource_manager.cpp
@@ -137,7 +137,7 @@ MOS_STATUS VphdrResourceManager::AssignRenderResource(VP_EXECUTE_CAPS &caps, std
{
surfSetting.surfGroup.insert(std::make_pair((SurfaceType)(SurfaceTypeHdrInputLayer0 + i), inputSurfaces[i]));
- SwFilterHdr *hdr = dynamic_cast<SwFilterHdr *>(executedFilters.GetSwFilter(true, i, FeatureType::FeatureTypeHdrOnRender));
+ SwFilterHdr *hdr = dynamic_cast<SwFilterHdr *>(executedFilters.GetSwFilter(true, i, FeatureType::FeatureTypeHdrOnRender));
FeatureParamHdr params = {};
if (hdr)
{
@@ -172,10 +172,10 @@ MOS_STATUS VphdrResourceManager::AssignRenderResource(VP_EXECUTE_CAPS &caps, std
surfSetting.surfGroup.insert(std::make_pair((SurfaceType)(SurfaceTypeHdrOETF1DLUTSurface0 + i), m_hdrOETF1DLUTSurface[i]));
}
- dwWidth = dwHeight = VPHAL_HDR_CRI_3DLUT_SIZE;
+ dwWidth = dwHeight = dwDepth = VPHAL_HDR_CRI_3DLUT_SIZE;
for (size_t i = 0; i < VPHAL_MAX_HDR_INPUT_LAYER; ++i)
{
- SwFilterHdr *hdr = dynamic_cast<SwFilterHdr *>(executedFilters.GetSwFilter(true, i, FeatureType::FeatureTypeHdrOnRender));
+ SwFilterHdr *hdr = dynamic_cast<SwFilterHdr *>(executedFilters.GetSwFilter(true, i, FeatureType::FeatureTypeHdrOnRender));
FeatureParamHdr params = {};
if (hdr)
{
@@ -190,7 +190,7 @@ MOS_STATUS VphdrResourceManager::AssignRenderResource(VP_EXECUTE_CAPS &caps, std
m_hdrCri3DLUTSurface[i],
"Cri3DLUTSurface",
params.bGpuGenerate3DLUT ? Format_R10G10B10A2 : Format_A16B16G16R16,
- MOS_GFXRES_2D,
+ MOS_GFXRES_VOLUME,
MOS_TILE_LINEAR,
dwWidth,
dwHeight,
@@ -199,7 +199,12 @@ MOS_STATUS VphdrResourceManager::AssignRenderResource(VP_EXECUTE_CAPS &caps, std
allocated,
false,
deferredDestroyed,
- MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_RENDER));
+ MOS_HW_RESOURCE_USAGE_VP_INTERNAL_READ_RENDER,
+ MOS_TILE_UNSET_GMM,
+ MOS_MEMPOOL_VIDEOMEMORY,
+ false,
+ nullptr,
+ dwDepth));
surfSetting.Cri3DLUTAllocated = allocated;
surfSetting.surfGroup.insert(std::make_pair((SurfaceType)(SurfaceTypeHdrCRI3DLUTSurface0 + i), m_hdrCri3DLUTSurface[i]));
diff --git a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp
index 2276f65c..a7175b6c 100644
--- a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp
+++ b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.cpp
@@ -150,11 +150,12 @@ extern const VEBOX_SPATIAL_ATTRIBUTES_CONFIGURATION g_cInit_VEBOX_SPATIAL_ATTRIB
}
};
-VpResourceManager::VpResourceManager(MOS_INTERFACE &osInterface, VpAllocator &allocator, VphalFeatureReport &reporting, vp::VpPlatformInterface &vpPlatformInterface, MediaCopyWrapper *mediaCopyWrapper)
+VpResourceManager::VpResourceManager(MOS_INTERFACE &osInterface, VpAllocator &allocator, VphalFeatureReport &reporting, vp::VpPlatformInterface &vpPlatformInterface, MediaCopyWrapper *mediaCopyWrapper, vp::VpUserFeatureControl *vpUserFeatureControl)
: m_osInterface(osInterface), m_allocator(allocator), m_reporting(reporting), m_vpPlatformInterface(vpPlatformInterface), m_mediaCopyWrapper(mediaCopyWrapper)
{
InitSurfaceConfigMap();
m_userSettingPtr = m_osInterface.pfnGetUserSettingInstance(&m_osInterface);
+ m_vpUserFeatureControl = vpUserFeatureControl;
}
VpResourceManager::~VpResourceManager()
@@ -226,11 +227,6 @@ VpResourceManager::~VpResourceManager()
m_allocator.DestroyVpSurface(m_temperalInput);
}
- if (m_internalInput)
- {
- m_allocator.DestroyVpSurface(m_internalInput);
- }
-
if (m_hdrResourceManager)
{
MOS_Delete(m_hdrResourceManager);
@@ -626,6 +622,8 @@ void VpResourceManager::InitSurfaceConfigMap()
AddSurfaceConfig(true, true, false, false, true, false, false, VEBOX_SURFACE_INPUT, VEBOX_SURFACE_PAST_REF, VEBOX_SURFACE_FRAME1, VEBOX_SURFACE_FRAME0);
AddSurfaceConfig(true, true, true, false, false, false, true, VEBOX_SURFACE_INPUT, VEBOX_SURFACE_NULL, VEBOX_SURFACE_FRAME1, VEBOX_SURFACE_NULL);
AddSurfaceConfig(true, true, true, false, false, false, false, VEBOX_SURFACE_INPUT, VEBOX_SURFACE_NULL, VEBOX_SURFACE_FRAME1, VEBOX_SURFACE_NULL);
+ AddSurfaceConfig(true, true, true, false, true, false, true, VEBOX_SURFACE_INPUT, VEBOX_SURFACE_PAST_REF, VEBOX_SURFACE_FRAME1, VEBOX_SURFACE_FRAME0);
+
// outOfBound
AddSurfaceConfig(true, true, false, true, true, false, true, VEBOX_SURFACE_INPUT, VEBOX_SURFACE_PAST_REF, VEBOX_SURFACE_FRAME1, VEBOX_SURFACE_FRAME0);
AddSurfaceConfig(true, true, false, true, true, false, false, VEBOX_SURFACE_INPUT, VEBOX_SURFACE_NULL, VEBOX_SURFACE_FRAME1, VEBOX_SURFACE_NULL);
@@ -691,20 +689,6 @@ MOS_STATUS VpResourceManager::GetResourceHint(std::vector<FeatureType> &featureP
return MOS_STATUS_SUCCESS;
}
-struct VP_SURFACE_PARAMS
-{
- uint32_t width = 0;
- uint32_t height = 0;
- MOS_FORMAT format = Format_None;
- MOS_TILE_TYPE tileType = MOS_TILE_X;
- MOS_RESOURCE_MMC_MODE surfCompressionMode = MOS_MMC_DISABLED;
- bool surfCompressible = false;
- VPHAL_CSPACE colorSpace = CSpace_None;
- RECT rcSrc = {0, 0, 0, 0}; //!< Source rectangle
- RECT rcDst = {0, 0, 0, 0}; //!< Destination rectangle
- RECT rcMaxSrc = {0, 0, 0, 0}; //!< Max source rectangle
- VPHAL_SAMPLE_TYPE sampleType = SAMPLE_PROGRESSIVE;
-};
MOS_STATUS VpResourceManager::GetIntermediaColorAndFormat3DLutOutput(VPHAL_CSPACE &colorSpace, MOS_FORMAT &format, SwFilterPipe &executedFilters)
{
SwFilterHdr *hdr = dynamic_cast<SwFilterHdr *>(executedFilters.GetSwFilter(true, 0, FeatureType::FeatureTypeHdr));
@@ -914,6 +898,7 @@ MOS_STATUS VpResourceManager::AssignIntermediaSurface(VP_EXECUTE_CAPS& caps, SwF
VP_SURFACE *outputSurface = executedFilters.GetSurface(false, 0);
VP_SURFACE *intermediaSurface = nullptr;
+ VP_SURFACE_PARAMS params = {};
if (outputSurface)
{
// No need intermedia surface.
@@ -930,7 +915,6 @@ MOS_STATUS VpResourceManager::AssignIntermediaSurface(VP_EXECUTE_CAPS& caps, SwF
{
m_intermediaSurfaces.push_back(nullptr);
}
- VP_SURFACE_PARAMS params = {};
bool allocated = false;
// Get surface parameter.
GetIntermediaOutputSurfaceParams(caps, params, executedFilters);
@@ -1027,14 +1011,7 @@ MOS_STATUS VpResourceManager::AssignFcResources(VP_EXECUTE_CAPS &caps, std::vect
{
for (size_t i = 0; i < inputSurfaces.size(); ++i)
{
- if (caps.bInternalInputInuse && i==0)
- {
- surfSetting.surfGroup.insert(std::make_pair((SurfaceType)(SurfaceTypeFcInputLayer0 + i), m_internalInput));
- }
- else
- {
- surfSetting.surfGroup.insert(std::make_pair((SurfaceType)(SurfaceTypeFcInputLayer0 + i), inputSurfaces[i]));
- }
+ surfSetting.surfGroup.insert(std::make_pair((SurfaceType)(SurfaceTypeFcInputLayer0 + i), inputSurfaces[i]));
if (!resHint.isIScalingTypeNone)
{
@@ -1104,11 +1081,6 @@ MOS_STATUS VpResourceManager::AssignRenderResource(VP_EXECUTE_CAPS &caps, std::v
if (caps.bComposite)
{
VP_PUBLIC_CHK_STATUS_RETURN(AssignFcResources(caps, inputSurfaces, outputSurface, pastSurfaces, futureSurfaces, resHint, surfSetting));
- if (caps.bInternalInputInuse)
- {
- m_internalInput->ColorSpace = inputSurfaces[0]->ColorSpace;
- executedFilters.AddSurface(m_internalInput, true, 0);
- }
}
else if (caps.b3DLutCalc)
{
@@ -1338,15 +1310,23 @@ MOS_STATUS VpResourceManager::ReAllocateVeboxOutputSurface(VP_EXECUTE_CAPS& caps
outputSurface->osSurface->Format, veboxOutputFormat, veboxOutputTileType));
allocated = false;
- if (IS_VP_VEBOX_DN_ONLY(caps))
+
+ bool enableVeboxOutputSurf = false;
+ if (m_vpUserFeatureControl)
{
- bSurfCompressible = inputSurface->osSurface->bCompressible;
+ enableVeboxOutputSurf = m_vpUserFeatureControl->IsVeboxOutputSurfEnabled();
+ }
+
+ if (enableVeboxOutputSurf || IS_VP_VEBOX_DN_ONLY(caps))
+ {
+ bSurfCompressible = inputSurface->osSurface->bCompressible;
surfCompressionMode = inputSurface->osSurface->CompressionMode;
}
else
{
- bSurfCompressible = true;
+ bSurfCompressible = true;
surfCompressionMode = MOS_MMC_MC;
+
}
if (m_currentFrameIds.pastFrameAvailable && m_currentFrameIds.futureFrameAvailable)
@@ -1355,6 +1335,8 @@ MOS_STATUS VpResourceManager::ReAllocateVeboxOutputSurface(VP_EXECUTE_CAPS& caps
m_veboxOutputCount = 4;
}
+ bool isVppInterResourceLocakable = enableVeboxOutputSurf ? VPP_INTER_RESOURCE_LOCKABLE : VPP_INTER_RESOURCE_NOTLOCKABLE;
+
for (i = 0; i < m_veboxOutputCount; i++)
{
VP_PUBLIC_CHK_STATUS_RETURN(m_allocator.ReAllocateSurface(
@@ -1373,7 +1355,7 @@ MOS_STATUS VpResourceManager::ReAllocateVeboxOutputSurface(VP_EXECUTE_CAPS& caps
MOS_HW_RESOURCE_USAGE_VP_OUTPUT_PICTURE_FF,
MOS_TILE_UNSET_GMM,
memTypeSurfVideoMem,
- VPP_INTER_RESOURCE_NOTLOCKABLE));
+ isVppInterResourceLocakable));
m_veboxOutput[i]->ColorSpace = inputSurface->ColorSpace;
m_veboxOutput[i]->rcDst = inputSurface->rcDst;
@@ -2211,6 +2193,12 @@ VP_SURFACE* VpResourceManager::GetVeboxOutputSurface(VP_EXECUTE_CAPS& caps, VP_S
{
VP_FUNC_CALL();
+ bool enableVeboxOutputSurf = false;
+ if (m_vpUserFeatureControl)
+ {
+ enableVeboxOutputSurf = m_vpUserFeatureControl->IsVeboxOutputSurfEnabled();
+ }
+
if (caps.bRender)
{
// Place Holder when enable DI
@@ -2231,7 +2219,7 @@ VP_SURFACE* VpResourceManager::GetVeboxOutputSurface(VP_EXECUTE_CAPS& caps, VP_S
{
return m_veboxOutput[m_currentDnOutput];
}
- else if (caps.bDN) // SFC + DN case
+ else if (enableVeboxOutputSurf || caps.bDN) // SFC + DN case
{
// DN + SFC scenario needs IECP implicitly, which need vebox output surface being assigned.
// Use m_currentDnOutput to ensure m_veboxOutput surface paired with DN output surface.
@@ -2260,11 +2248,17 @@ MOS_STATUS VpResourceManager::InitVeboxSpatialAttributesConfiguration()
bool VpResourceManager::VeboxOutputNeeded(VP_EXECUTE_CAPS& caps)
{
VP_FUNC_CALL();
+ bool enableVeboxOutputSurf = false;
+ if (m_vpUserFeatureControl)
+ {
+ enableVeboxOutputSurf = m_vpUserFeatureControl->IsVeboxOutputSurfEnabled();
+ }
// If DN and/or Hotpixel are the only functions enabled then the only output is the Denoised Output
// and no need vebox output.
// For any other vebox features being enabled, vebox output surface is needed.
- if (caps.bDI ||
+ if (enableVeboxOutputSurf ||
+ caps.bDI ||
caps.bQueryVariance ||
caps.bDiProcess2ndField ||
caps.bIECP ||
diff --git a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.h b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.h
index 84be096e..da70bfbd 100644
--- a/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.h
+++ b/media_softlet/agnostic/common/vp/hal/bufferMgr/vp_resource_manager.h
@@ -333,12 +333,27 @@ struct VP_FRAME_IDS
int32_t pastFrameId;
int32_t futureFrameId;
};
-struct VP_SURFACE_PARAMS;
+
+struct VP_SURFACE_PARAMS
+{
+ uint32_t width = 0;
+ uint32_t height = 0;
+ MOS_FORMAT format = Format_None;
+ MOS_TILE_TYPE tileType = MOS_TILE_X;
+ MOS_RESOURCE_MMC_MODE surfCompressionMode = MOS_MMC_DISABLED;
+ bool surfCompressible = false;
+ VPHAL_CSPACE colorSpace = CSpace_None;
+ RECT rcSrc = {0, 0, 0, 0}; //!< Source rectangle
+ RECT rcDst = {0, 0, 0, 0}; //!< Destination rectangle
+ RECT rcMaxSrc = {0, 0, 0, 0}; //!< Max source rectangle
+ VPHAL_SAMPLE_TYPE sampleType = SAMPLE_PROGRESSIVE;
+ VPHAL_SURFACE_TYPE surfType = SURF_NONE;
+};
class VpResourceManager
{
public:
- VpResourceManager(MOS_INTERFACE &osInterface, VpAllocator &allocator, VphalFeatureReport &reporting, vp::VpPlatformInterface &vpPlatformInterface, MediaCopyWrapper *mediaCopyWrapper);
+ VpResourceManager(MOS_INTERFACE &osInterface, VpAllocator &allocator, VphalFeatureReport &reporting, vp::VpPlatformInterface &vpPlatformInterface, MediaCopyWrapper *mediaCopyWrapper, vp::VpUserFeatureControl *vpUserFeatureControl);
virtual ~VpResourceManager();
virtual MOS_STATUS OnNewFrameProcessStart(SwFilterPipe &pipe);
virtual void OnNewFrameProcessEnd();
@@ -453,7 +468,7 @@ protected:
virtual MOS_STATUS GetIntermediaColorAndFormat3DLutOutput(VPHAL_CSPACE &colorSpace, MOS_FORMAT &format, SwFilterPipe &executedFilters);
virtual MOS_STATUS GetIntermediaColorAndFormatBT2020toRGB(VP_EXECUTE_CAPS &caps, VPHAL_CSPACE &colorSpace, MOS_FORMAT &format, SwFilterPipe &executedFilters);
- MOS_STATUS GetIntermediaOutputSurfaceParams(VP_EXECUTE_CAPS& caps, VP_SURFACE_PARAMS ¶ms, SwFilterPipe &executedFilters);
+ virtual MOS_STATUS GetIntermediaOutputSurfaceParams(VP_EXECUTE_CAPS& caps, VP_SURFACE_PARAMS ¶ms, SwFilterPipe &executedFilters);
MOS_STATUS GetIntermediaOutputSurfaceColorAndFormat(VP_EXECUTE_CAPS &caps, SwFilterPipe &executedFilters, MOS_FORMAT &format, VPHAL_CSPACE &colorSpace);
MOS_STATUS AssignIntermediaSurface(VP_EXECUTE_CAPS& caps, SwFilterPipe &executedFilters);
@@ -480,6 +495,7 @@ protected:
VpAllocator &m_allocator;
VphalFeatureReport &m_reporting;
vp::VpPlatformInterface &m_vpPlatformInterface;
+ vp::VpUserFeatureControl *m_vpUserFeatureControl = nullptr;
// Vebox Resource
VP_SURFACE* m_veboxDenoiseOutput[VP_NUM_DN_SURFACES] = {}; //!< Vebox Denoise output surface
@@ -531,7 +547,6 @@ protected:
VP_SURFACE *m_veboxWeitCoefSurface = nullptr; //!< VEBOX 1D LUT surface for Vebox Gen12
VP_SURFACE *m_veboxGlobalToneMappingCurveLUTSurface = nullptr; //!< VEBOX 1D LUT surface for Vebox Gen12
VP_SURFACE *m_temperalInput = nullptr;
- VP_SURFACE *m_internalInput = nullptr;
// Fc Resource
VP_SURFACE *m_cmfcCoeff = nullptr;
diff --git a/media_softlet/agnostic/common/vp/hal/feature_manager/policy.cpp b/media_softlet/agnostic/common/vp/hal/feature_manager/policy.cpp
index 8af1535f..5192619c 100644
--- a/media_softlet/agnostic/common/vp/hal/feature_manager/policy.cpp
+++ b/media_softlet/agnostic/common/vp/hal/feature_manager/policy.cpp
@@ -2190,7 +2190,6 @@ MOS_STATUS Policy::InitExecuteCaps(VP_EXECUTE_CAPS &caps, VP_EngineEntry &engine
else if (engineCapsInputPipe.isolated)
{
caps.bTemperalInputInuse = engineCapsInputPipe.bTemperalInputInuse;
- caps.bInternalInputInuse = engineCapsInputPipe.bInternalInputInuse;
if (engineCapsInputPipe.VeboxNeeded != 0 || engineCapsInputPipe.SfcNeeded != 0)
{
caps.bVebox = true;
@@ -2232,7 +2231,6 @@ MOS_STATUS Policy::InitExecuteCaps(VP_EXECUTE_CAPS &caps, VP_EngineEntry &engine
caps.bIECP = engineCaps.VeboxIECPNeeded;
caps.bDiProcess2ndField = engineCaps.diProcess2ndField;
caps.bTemperalInputInuse = engineCaps.bTemperalInputInuse;
- caps.bInternalInputInuse = engineCaps.bInternalInputInuse;
if (engineCaps.fcOnlyFeatureExists)
{
@@ -2286,7 +2284,6 @@ MOS_STATUS Policy::InitExecuteCaps(VP_EXECUTE_CAPS &caps, VP_EngineEntry &engine
caps.bDiProcess2ndField = engineCaps.diProcess2ndField;
caps.bTemperalInputInuse = engineCaps.bTemperalInputInuse;
- caps.bInternalInputInuse = engineCaps.bInternalInputInuse;
}
VP_PUBLIC_NORMALMESSAGE("Execute Caps, value 0x%llx (bVebox %d, bSFC %d, bRender %d, bComposite %d, bOutputPipeFeatureInuse %d, bIECP %d, bForceCscToRender %d, bDiProcess2ndField %d)",
diff --git a/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.cpp b/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.cpp
index 151c76ca..1e13f654 100644
--- a/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.cpp
+++ b/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.cpp
@@ -615,10 +615,7 @@ MOS_STATUS SwFilterScaling::Update(VP_SURFACE *inputSurf, VP_SURFACE *outputSurf
m_Params.csc.colorSpaceOutput = outputSurf->ColorSpace;
if (rotMir &&
- (rotMir->GetSwFilterParams().rotation == VPHAL_ROTATION_90 ||
- rotMir->GetSwFilterParams().rotation == VPHAL_ROTATION_270 ||
- rotMir->GetSwFilterParams().rotation == VPHAL_ROTATE_90_MIRROR_VERTICAL ||
- rotMir->GetSwFilterParams().rotation == VPHAL_ROTATE_90_MIRROR_HORIZONTAL))
+ VpUtils::IsVerticalRotation(rotMir->GetSwFilterParams().rotation))
{
m_Params.rotation.rotationNeeded = true;
@@ -1338,7 +1335,7 @@ MOS_STATUS SwFilterHdr::Configure(VP_PIPELINE_PARAMS ¶ms, bool isInputSurf,
}
else
{
- CurrentLUTMode = VPHAL_HDR_LUT_MODE_2D;
+ CurrentLUTMode = VPHAL_HDR_LUT_MODE_3D;
}
// Neither 1D nor 3D LUT is needed in linear output case.
diff --git a/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.h b/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.h
index 3717c359..5e9c5ed9 100644
--- a/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.h
+++ b/media_softlet/agnostic/common/vp/hal/feature_manager/sw_filter.h
@@ -696,7 +696,6 @@ enum SurfaceType
// SR
SurfaceTypeSRLumaInputSurf,
- SurfaceTypeSRTempOutputSurf,
SurfaceTypeSRTempLumaOutput,
SurfaceTypeSRTempLumaOutputEnd = SurfaceTypeSRTempLumaOutput + SURFACETYPE_SIZE32,
SurfaceTypeSRTempLuma2Output,
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 d804c758..1da8f5c5 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
@@ -1608,6 +1608,10 @@ MOS_STATUS VpRenderCmdPacket::SubmitWithMultiKernel(MOS_COMMAND_BUFFER *commandB
RENDER_PACKET_CHK_STATUS_RETURN(SetPowerMode(kernelCombinedFc));
+ m_renderHal->pRenderHalPltInterface->On1stLevelBBStart(m_renderHal, commandBuffer, pOsContext, pOsInterface->CurrentGpuContextHandle, pMmioRegisters);
+
+ OcaDumpDbgInfo(*commandBuffer, *pOsContext);
+
RENDER_PACKET_CHK_STATUS_RETURN(SetMediaFrameTracking(GenericPrologParams));
// Initialize command buffer and insert prolog
@@ -1615,6 +1619,8 @@ MOS_STATUS VpRenderCmdPacket::SubmitWithMultiKernel(MOS_COMMAND_BUFFER *commandB
RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pRenderHalPltInterface->AddPerfCollectStartCmd(m_renderHal, pOsInterface, commandBuffer));
+ RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pRenderHalPltInterface->StartPredicate(m_renderHal, commandBuffer));
+
// Write timing data for 3P budget
RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pfnSendTimingData(m_renderHal, commandBuffer, true));
@@ -1633,6 +1639,8 @@ MOS_STATUS VpRenderCmdPacket::SubmitWithMultiKernel(MOS_COMMAND_BUFFER *commandB
RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pfnSendRcsStatusTag(m_renderHal, commandBuffer));
}
+ RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pRenderHalPltInterface->StopPredicate(m_renderHal, commandBuffer));
+
RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pRenderHalPltInterface->AddPerfCollectEndCmd(m_renderHal, pOsInterface, commandBuffer));
// Write timing data for 3P budget
@@ -1682,6 +1690,8 @@ MOS_STATUS VpRenderCmdPacket::SubmitWithMultiKernel(MOS_COMMAND_BUFFER *commandB
RENDER_PACKET_CHK_STATUS_RETURN(m_renderHal->pRenderHalPltInterface->AddMediaStateFlush(m_renderHal, commandBuffer, &FlushParam));
}
+ HalOcaInterfaceNext::On1stLevelBBEnd(*commandBuffer, *pOsInterface);
+
if (pBatchBuffer)
{
// Send Batch Buffer end command (HW/OS dependent)
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_hdr_kernel.cpp b/media_softlet/agnostic/common/vp/hal/packet/vp_render_hdr_kernel.cpp
index 806e4210..349017ea 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_hdr_kernel.cpp
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_hdr_kernel.cpp
@@ -3069,7 +3069,7 @@ MOS_STATUS VpRenderHdrKernel::UpdatePerLayerPipelineStates(
}
else
{
- CurrentLUTMode = VPHAL_HDR_LUT_MODE_2D;
+ CurrentLUTMode = VPHAL_HDR_LUT_MODE_3D;
}
// Neither 1D nor 3D LUT is needed in linear output case.
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp b/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp
index c8553f21..773578f1 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.cpp
@@ -1773,8 +1773,14 @@ MOS_STATUS VpVeboxCmdPacket::RenderVeboxCmd(
VP_RENDER_CHK_STATUS_RETURN(m_sfcRender->SetupSfcState(m_renderTarget));
+ bool enableVeboxOutputSurf = false;
+ if (m_vpUserFeatureControl)
+ {
+ enableVeboxOutputSurf = m_vpUserFeatureControl->IsVeboxOutputSurfEnabled();
+ }
+
VP_RENDER_CHK_STATUS_RETURN(m_sfcRender->SendSfcCmd(
- (pRenderData->DI.bDeinterlace || pRenderData->DN.bDnEnabled),
+ (enableVeboxOutputSurf || pRenderData->DI.bDeinterlace || pRenderData->DN.bDnEnabled),
pCmdBufferInUse));
}
@@ -2453,6 +2459,7 @@ VpVeboxCmdPacket::VpVeboxCmdPacket(
VP_PUBLIC_CHK_NULL_NO_STATUS_RETURN(hwInterface->m_vpPlatformInterface);
m_veboxItf = hwInterface->m_vpPlatformInterface->GetMhwVeboxItf();
m_miItf = hwInterface->m_vpPlatformInterface->GetMhwMiItf();
+ m_vpUserFeatureControl = hwInterface->m_userFeatureControl;
}
VpVeboxCmdPacket:: ~VpVeboxCmdPacket()
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h b/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h
index 28390413..05de0027 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_vebox_cmd_packet.h
@@ -1199,6 +1199,7 @@ protected:
std::shared_ptr<mhw::vebox::Itf> m_veboxItf = nullptr;
MediaFeatureManager *m_featureManager = nullptr;
std::shared_ptr<mhw::mi::Itf> m_miItf = nullptr;
+ vp::VpUserFeatureControl *m_vpUserFeatureControl = nullptr;
MEDIA_CLASS_DEFINE_END(vp__VpVeboxCmdPacket)
};
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.cpp b/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.cpp
index 3f5a6329..160d1065 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.cpp
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.cpp
@@ -46,13 +46,14 @@ VpBase::~VpBase()
VpBase* VpBase::VphalStateFactory(
PMOS_INTERFACE osInterface,
MOS_CONTEXT_HANDLE osDriverContext,
- MOS_STATUS *peStatus)
+ MOS_STATUS *peStatus,
+ bool clearViewMode)
{
VP_FUNC_CALL();
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
- VpBase *vpBase = VphalDevice::CreateFactoryNext(osInterface, (PMOS_CONTEXT)osDriverContext, &eStatus);
+ VpBase *vpBase = VphalDevice::CreateFactoryNext(osInterface, (PMOS_CONTEXT)osDriverContext, &eStatus, clearViewMode);
if (peStatus)
{
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.h b/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.h
index 11a49f52..ed55a6d8 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.h
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_base.h
@@ -87,7 +87,7 @@ struct VpSettings
uint32_t kernelUpdate; //!< For VEBox Copy and Update kernels
uint32_t disableHdr; //!< Disable Hdr
uint32_t veboxParallelExecution; //!< Control VEBox parallel execution with render engine
- uint32_t clearVideoViewMode; //!< Perf Optimize for ClearVideoView DDI
+ bool clearVideoViewMode; //!< Perf Optimize for ClearVideoView DDI
};
struct _VP_MHWINTERFACE
@@ -142,7 +142,8 @@ public:
static VpBase* VphalStateFactory(
PMOS_INTERFACE osInterface,
MOS_CONTEXT_HANDLE osDriverContext,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
//!
//! \brief Allocate VpPipelineAdapterBase Resources
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.cpp b/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.cpp
index ea9ca158..b8c3f1fa 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.cpp
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.cpp
@@ -43,6 +43,7 @@ void VpFeatureReport::InitReportValue()
m_features.vpMMCInUse = false;
m_features.rtCompressible = false;
m_features.rtCompressMode = 0;
+ m_features.rtCacheSetting = 0;
m_features.ffdiCompressible = false;
m_features.ffdiCompressMode = 0;
m_features.ffdnCompressible = false;
@@ -117,6 +118,9 @@ void VpFeatureReport::SetConfigValues(
configValues->dwPrimaryCompressible = m_features.primaryCompressible;
configValues->dwPrimaryCompressMode = m_features.primaryCompressMode;
+ // Report Render Target cache usage
+ configValues->dwRTCacheSetting = m_features.rtCacheSetting;
+
// Report In Place Compositon status
configValues->dwCurrentCompositionMode = m_features.compositionMode;
configValues->dwCurrentScdMode = m_features.diScdMode;
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.h b/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.h
index 8774c12f..e1496d98 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.h
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_feature_report.h
@@ -69,6 +69,7 @@ public:
bool diScdMode = false; //!< Scene change detection
VPHAL_HDR_MODE hdrMode = VPHAL_HDR_MODE_NONE; //!< HDR mode
bool packetReused = false; //!< true if packet reused.
+ uint8_t rtCacheSetting = 0; //!< Render Target cache usage
};
virtual ~VpFeatureReport(){};
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline.cpp b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline.cpp
index e1031c14..48ce5fc5 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline.cpp
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline.cpp
@@ -184,6 +184,8 @@ MOS_STATUS VpPipeline::UserFeatureReport()
m_reporting->GetFeatures().rtCompressible = true;
m_reporting->GetFeatures().rtCompressMode = (uint8_t)(params->pTarget[0]->CompressionMode);
}
+
+ m_reporting->GetFeatures().rtCacheSetting = (uint8_t)(params->pTarget[0]->CacheSetting);
}
}
@@ -260,6 +262,10 @@ MOS_STATUS VpPipeline::Init(void *mhwInterface)
VP_PUBLIC_CHK_STATUS_RETURN(CreateUserFeatureControl());
m_vpMhwInterface.m_userFeatureControl = m_userFeatureControl;
}
+ if (m_userFeatureControl && m_vpMhwInterface.m_settings)
+ {
+ m_userFeatureControl->SetClearVideoViewMode(((VP_SETTINGS *)m_vpMhwInterface.m_settings)->clearVideoViewMode);
+ }
VP_PUBLIC_CHK_STATUS_RETURN(m_vpMhwInterface.m_vpPlatformInterface->ConfigVirtualEngine());
@@ -321,10 +327,9 @@ MOS_STATUS VpPipeline::Init(void *mhwInterface)
VP_PUBLIC_CHK_STATUS_RETURN(SetVideoProcessingSettings(m_vpMhwInterface.m_settings));
m_vpMhwInterface.m_settings = m_vpSettings;
-
if (m_vpMhwInterface.m_vpPlatformInterface->IsGpuContextCreatedInPipelineInit())
{
- if (m_numVebox > 0)
+ if (m_numVebox > 0 && !(m_vpSettings && m_vpSettings->clearVideoViewMode))
{
VP_PUBLIC_NORMALMESSAGE("Create GpuContext for Vebox.");
VP_PUBLIC_CHK_STATUS_RETURN(PacketPipe::SwitchContext(VP_PIPELINE_PACKET_VEBOX, m_scalability,
@@ -1150,7 +1155,7 @@ MOS_STATUS VpSinglePipeContext::CreateResourceManager(PMOS_INTERFACE osInterface
VP_FUNC_CALL();
if (nullptr == m_resourceManager)
{
- m_resourceManager = MOS_New(VpResourceManager, *osInterface, *allocator, *reporting, *vpPlatformInterface, mediaCopyWrapper);
+ m_resourceManager = MOS_New(VpResourceManager, *osInterface, *allocator, *reporting, *vpPlatformInterface, mediaCopyWrapper, userFeatureControl);
VP_PUBLIC_CHK_NULL_RETURN(m_resourceManager);
}
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.cpp b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.cpp
index 00ea602e..920581ab 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.cpp
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.cpp
@@ -34,7 +34,8 @@
VpPipelineAdapterBase::VpPipelineAdapterBase(
vp::VpPlatformInterface &vpPlatformInterface,
- MOS_STATUS &eStatus):
+ MOS_STATUS &eStatus,
+ bool clearViewMode) :
m_vpPlatformInterface(vpPlatformInterface)
{
m_osInterface = m_vpPlatformInterface.GetOsInterface();
@@ -42,7 +43,11 @@ VpPipelineAdapterBase::VpPipelineAdapterBase(
{
m_userSettingPtr = m_osInterface->pfnGetUserSettingInstance(m_osInterface);
}
- VpUserSetting::InitVpUserSetting(m_userSettingPtr);
+ if (!clearViewMode)
+ {
+ VpUserSetting::InitVpUserSetting(m_userSettingPtr);
+ }
+
eStatus = MOS_STATUS_SUCCESS;
}
@@ -50,6 +55,7 @@ MOS_STATUS VpPipelineAdapterBase::GetVpMhwInterface(
VP_MHWINTERFACE &vpMhwinterface)
{
VP_FUNC_CALL();
+
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
bool sfcNeeded = false;
bool veboxNeeded = false;
@@ -89,14 +95,14 @@ MOS_STATUS VpPipelineAdapterBase::GetVpMhwInterface(
veboxNeeded = MEDIA_IS_SKU(m_skuTable, FtrVERing);
sfcNeeded = MEDIA_IS_SKU(m_skuTable, FtrSFCPipe);
- if (veboxNeeded || sfcNeeded)
+ SetMhwMiItf(m_vprenderHal->pRenderHalPltInterface->GetMhwMiItf());
+ if ((veboxNeeded || sfcNeeded) && !m_clearVideoViewMode)
{
eStatus = VphalDevice::CreateVPMhwInterfaces(sfcNeeded, veboxNeeded, veboxItf, sfcItf, miItf, m_osInterface);
if (eStatus == MOS_STATUS_SUCCESS)
{
SetMhwVeboxItf(veboxItf);
SetMhwSfcItf(sfcItf);
- SetMhwMiItf(m_vprenderHal->pRenderHalPltInterface->GetMhwMiItf());
}
else
{
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.h b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.h
index 8214d43b..e28e2bd0 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.h
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_adapter_base.h
@@ -74,7 +74,8 @@ public:
//!
VpPipelineAdapterBase(
vp::VpPlatformInterface &vpPlatformInterface,
- MOS_STATUS &eStatus);
+ MOS_STATUS &eStatus,
+ bool clearViewMode = false);
virtual MOS_STATUS GetVpMhwInterface(
VP_MHWINTERFACE &vpMhwinterface);
@@ -235,7 +236,9 @@ protected:
vp::VpPlatformInterface &m_vpPlatformInterface; //!< vp platform interface. Should be destroyed during deconstruction.
MediaUserSettingSharedPtr m_userSettingPtr = nullptr; //!< usersettingInstance
-MEDIA_CLASS_DEFINE_END(VpPipelineAdapterBase)
+ // Perf Optimize for ClearVideoView DDI
+ bool m_clearVideoViewMode = false;
+ MEDIA_CLASS_DEFINE_END(VpPipelineAdapterBase)
};
#endif // __VP_PIPELINE_ADAPTER_BASE_H__
diff --git a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_common.h b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_common.h
index cd0400a6..15c83e83 100644
--- a/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_common.h
+++ b/media_softlet/agnostic/common/vp/hal/pipeline/vp_pipeline_common.h
@@ -129,6 +129,7 @@ struct _VP_SETTINGS
uint32_t kernelUpdate = 0; //!< For VEBox Copy and Update kernels
uint32_t disableHdr = 0; //!< Disable Hdr
uint32_t veboxParallelExecution = 0; //!< Control VEBox parallel execution with render engine
+ bool clearVideoViewMode = 0; //!< Perf Optimize for ClearVideoView DDI
};
using VP_SETTINGS = _VP_SETTINGS;
@@ -149,7 +150,6 @@ struct _VP_EXECUTE_CAPS
uint64_t bForceProcampToRender : 1; // If true, force to use render for procamp.
uint64_t lastSubmission : 1; // If true, it's the last submission of current DDI.
uint64_t bTemperalInputInuse : 1; // If true, will use temperal input instead of input
- uint64_t bInternalInputInuse : 1; // If true, will use internal input instead of input
// Vebox Features
uint64_t bDN : 1; // Vebox DN needed
@@ -240,7 +240,6 @@ typedef struct _VP_EngineEntry
uint32_t sfcOnlyFeatureExists : 1; // The feature exists, which only support sfc.
uint32_t bTemperalInputInuse : 1; // true if replace input
uint32_t veboxRGBOutputWithoutLumaKey : 1;
- uint32_t bInternalInputInuse : 1; // true if replace input with Internal Input
};
uint32_t value;
};
diff --git a/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.cpp b/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.cpp
index e7be1391..665b6006 100644
--- a/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.cpp
+++ b/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.cpp
@@ -32,14 +32,17 @@ using namespace vp;
extern const Kdll_RuleEntry g_KdllRuleTable_Next[];
const std::string VpRenderKernel::s_kernelNameNonAdvKernels = "vpFcKernels";
-VpPlatformInterface::VpPlatformInterface(PMOS_INTERFACE pOsInterface)
+VpPlatformInterface::VpPlatformInterface(PMOS_INTERFACE pOsInterface, bool clearViewMode)
{
m_pOsInterface = pOsInterface;
if (m_pOsInterface)
{
m_userSettingPtr = m_pOsInterface->pfnGetUserSettingInstance(m_pOsInterface);
}
- VpUserSetting::InitVpUserSetting(m_userSettingPtr);
+ if (!clearViewMode)
+ {
+ VpUserSetting::InitVpUserSetting(m_userSettingPtr);
+ }
}
MOS_STATUS VpRenderKernel::InitVPKernel(
diff --git a/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.h b/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.h
index 49a2f244..3197afbc 100644
--- a/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.h
+++ b/media_softlet/agnostic/common/vp/hal/platform_interface/vp_platform_interface.h
@@ -140,7 +140,7 @@ class VpPlatformInterface
{
public:
- VpPlatformInterface(PMOS_INTERFACE pOsInterface);
+ VpPlatformInterface(PMOS_INTERFACE pOsInterface, bool clearViewMode = false);
virtual ~VpPlatformInterface();
diff --git a/media_softlet/agnostic/common/vp/hal/utils/hal_ddi_share/vp_user_setting.cpp b/media_softlet/agnostic/common/vp/hal/utils/hal_ddi_share/vp_user_setting.cpp
index c7b7de05..493dfaa8 100644
--- a/media_softlet/agnostic/common/vp/hal/utils/hal_ddi_share/vp_user_setting.cpp
+++ b/media_softlet/agnostic/common/vp/hal/utils/hal_ddi_share/vp_user_setting.cpp
@@ -108,6 +108,13 @@ MOS_STATUS VpUserSetting::InitVpUserSetting(MediaUserSettingSharedPtr userSettin
0,
true);
+ DeclareUserSettingKey(
+ userSettingPtr,
+ __MEDIA_USER_FEATURE_VALUE_FORCE_ENABLE_VEBOX_OUTPUT_SURF,
+ MediaUserSetting::Group::Sequence,
+ 0,
+ true);
+
DeclareUserSettingKey(
userSettingPtr,
__VPHAL_HDR_LUT_MODE,
@@ -150,6 +157,13 @@ MOS_STATUS VpUserSetting::InitVpUserSetting(MediaUserSettingSharedPtr userSettin
0,
true);
+ DeclareUserSettingKey( // VP Render Target Cache Usage
+ userSettingPtr,
+ __VPHAL_RT_Cache_Setting,
+ MediaUserSetting::Group::Sequence,
+ 0,
+ true);
+
DeclareUserSettingKey( // VP Primary Input Compression Mode
userSettingPtr,
__VPHAL_PRIMARY_MMC_COMPRESSMODE,
diff --git a/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.cpp b/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.cpp
index 4674eda2..94828cf9 100644
--- a/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.cpp
+++ b/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.cpp
@@ -113,6 +113,24 @@ VpUserFeatureControl::VpUserFeatureControl(MOS_INTERFACE &osInterface, VpPlatfor
}
VP_PUBLIC_NORMALMESSAGE("disableDn %d", m_ctrlValDefault.disableDn);
+ // Force enable vebox ouptut surface.
+ bool forceEnableVeboxOutputSurf = false;
+ status = ReadUserSetting(
+ m_userSettingPtr,
+ forceEnableVeboxOutputSurf,
+ __MEDIA_USER_FEATURE_VALUE_FORCE_ENABLE_VEBOX_OUTPUT_SURF,
+ MediaUserSetting::Group::Sequence);
+ if (MOS_SUCCEEDED(status))
+ {
+ m_ctrlValDefault.ForceEnableVeboxOutputSurf = forceEnableVeboxOutputSurf;
+ }
+ else
+ {
+ // Default value
+ m_ctrlValDefault.ForceEnableVeboxOutputSurf = false;
+ }
+ VP_PUBLIC_NORMALMESSAGE("ForceEnableVeboxOutputSurf %d", m_ctrlValDefault.ForceEnableVeboxOutputSurf);
+
// __MEDIA_USER_FEATURE_VALUE_CSC_COEFF_PATCH_MODE_DISABLE
bool cscCoeffPatchModeDisabled = false;
status = ReadUserSetting(
diff --git a/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.h b/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.h
index c9c9fe54..18d8d7cb 100644
--- a/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.h
+++ b/media_softlet/agnostic/common/vp/hal/utils/vp_user_feature_control.h
@@ -50,6 +50,7 @@ public:
bool eufusionBypassWaEnabled = false;
bool disableDn = false;
bool cscCosffPatchModeDisabled = false;
+ bool ForceEnableVeboxOutputSurf = false;
#if (_DEBUG || _RELEASE_INTERNAL)
bool forceDecompressedOutput = false;
@@ -63,6 +64,7 @@ public:
VPHAL_HDR_LUT_MODE globalLutMode = VPHAL_HDR_LUT_MODE_NONE; //!< Global LUT mode control for debugging purpose
bool gpuGenerate3DLUT = false; //!< Flag for per frame GPU generation of 3DLUT
bool disableAutoMode = false;
+ bool clearVideoViewMode = false;
uint32_t splitFramePortions = 1;
};
@@ -91,6 +93,11 @@ public:
virtual MOS_STATUS Update(PVP_PIPELINE_PARAMS params);
+ bool IsVeboxOutputSurfEnabled()
+ {
+ return m_ctrlVal.ForceEnableVeboxOutputSurf;
+ }
+
bool IsVeboxOutputDisabled()
{
return m_ctrlVal.disableVeboxOutput;
@@ -146,6 +153,17 @@ public:
return m_ctrlVal.disableAutoMode;
}
+ bool IsClearVideoViewMode()
+ {
+ return m_ctrlVal.clearVideoViewMode;
+ }
+
+ MOS_STATUS SetClearVideoViewMode(bool mode)
+ {
+ m_ctrlVal.clearVideoViewMode = mode;
+ return MOS_STATUS_SUCCESS;
+ }
+
uint32_t GetSplitFramePortions()
{
return m_ctrlVal.splitFramePortions;
diff --git a/media_softlet/agnostic/common/vp/hal/utils/vp_utils.h b/media_softlet/agnostic/common/vp/hal/utils/vp_utils.h
index 43dcecb8..d4d1764b 100644
--- a/media_softlet/agnostic/common/vp/hal/utils/vp_utils.h
+++ b/media_softlet/agnostic/common/vp/hal/utils/vp_utils.h
@@ -275,6 +275,7 @@ protected:
#define __MEDIA_USER_FEATURE_VALUE_DISABLE_DN "Disable Dn"
#define __MEDIA_USER_FEATURE_VALUE_DISABLE_PACKET_REUSE "Disable PacketReuse"
#define __MEDIA_USER_FEATURE_VALUE_ENABLE_PACKET_REUSE_TEAMS_ALWAYS "Enable PacketReuse Teams mode Always"
+#define __MEDIA_USER_FEATURE_VALUE_FORCE_ENABLE_VEBOX_OUTPUT_SURF "Force Enable Vebox Output Surf"
#define __VPHAL_HDR_LUT_MODE "HDR Lut Mode"
#define __VPHAL_HDR_GPU_GENERTATE_3DLUT "HDR GPU generate 3DLUT"
@@ -283,6 +284,7 @@ protected:
#define __MEDIA_USER_FEATURE_VALUE_VPP_APOGEIOS_ENABLE "VP Apogeios Enabled"
#define __VPHAL_PRIMARY_MMC_COMPRESSMODE "VP Primary Surface Compress Mode"
#define __VPHAL_RT_MMC_COMPRESSMODE "VP RT Compress Mode"
+#define __VPHAL_RT_Cache_Setting "VP RT Cache Setting"
#if (_DEBUG || _RELEASE_INTERNAL)
#define __VPHAL_ENABLE_COMPUTE_CONTEXT "VP Enable Compute Context"
diff --git a/media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp b/media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp
index 3b588232..ab4feae2 100644
--- a/media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp
+++ b/media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2022, Intel Corporation
+* Copyright (c) 2022-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -150,7 +150,7 @@ static bool InitMtlMediaSkuExt(struct GfxDeviceInfo *devInfo,
MEDIA_WR_SKU(skuTable, FtrEncodeAV1Vdenc, 1);
MEDIA_WR_SKU(skuTable, FtrEncodeAV1Vdenc10bit420, 1);
}
-
+ MEDIA_WR_SKU(skuTable, FtrEnableProtectedHuc, drvInfo->hasProtectedHuc);
MEDIA_WR_SKU(skuTable, FtrEnableMediaKernels, drvInfo->hasHuc);
MEDIA_WR_SKU(skuTable, FtrVERing, drvInfo->hasVebox);
MEDIA_WR_SKU(skuTable, FtrPPGTT, drvInfo->hasPpgtt);
diff --git a/media_softlet/linux/common/ddi/media_libva_caps_next.cpp b/media_softlet/linux/common/ddi/media_libva_caps_next.cpp
index 2c1b09ce..2c1af2bb 100644
--- a/media_softlet/linux/common/ddi/media_libva_caps_next.cpp
+++ b/media_softlet/linux/common/ddi/media_libva_caps_next.cpp
@@ -558,11 +558,19 @@ VAStatus MediaLibvaCapsNext::QueryDisplayAttributes(
DDI_CHK_NULL(attribList, "Null attribList", VA_STATUS_ERROR_INVALID_PARAMETER);
DDI_CHK_NULL(attributesNum, "Null attribs", VA_STATUS_ERROR_INVALID_PARAMETER);
+ VADisplayAttribute * attrib = attribList;
*attributesNum = 0;
- attribList->type = VADisplayAttribCopy;
+ attrib->type = VADisplayAttribCopy;
(*attributesNum) ++;
+#if VA_CHECK_VERSION(1, 15, 0)
+ attrib ++;
+
+ attrib->type = VADisplayPCIID;
+ (*attributesNum) ++;
+#endif
+
return GetDisplayAttributes(attribList, *attributesNum);
}
@@ -581,6 +589,12 @@ VAStatus MediaLibvaCapsNext::GetDisplayAttributes(
attribList->min_value = attribList->value = attribList->max_value = 0;
attribList->flags = VA_DISPLAY_ATTRIB_GETTABLE;
break;
+#if VA_CHECK_VERSION(1, 15, 0)
+ case VADisplayPCIID:
+ attribList->min_value = attribList->value = attribList->max_value = (m_mediaCtx->iDeviceId & 0xffff) | 0x80860000;
+ attribList->flags = VA_DISPLAY_ATTRIB_GETTABLE;
+ break;
+#endif
default:
attribList->min_value = VA_ATTRIB_NOT_SUPPORTED;
attribList->max_value = VA_ATTRIB_NOT_SUPPORTED;
diff --git a/media_softlet/linux/common/media_interfaces/media_interfaces_next.cpp b/media_softlet/linux/common/media_interfaces/media_interfaces_next.cpp
index 955d21b9..26ed4d04 100644
--- a/media_softlet/linux/common/media_interfaces/media_interfaces_next.cpp
+++ b/media_softlet/linux/common/media_interfaces/media_interfaces_next.cpp
@@ -58,7 +58,8 @@ typedef MediaFactory<uint32_t, MmdDeviceNext> MmdFactoryNext;
VpBase *VphalDevice::CreateFactoryNext(
PMOS_INTERFACE osInterface,
MOS_CONTEXT_HANDLE osDriverContext,
- MOS_STATUS *eStatus)
+ MOS_STATUS *eStatus,
+ bool clearViewMode)
{
VpBase *vpBase = nullptr;
VphalDevice *vphalDevice = nullptr;
diff --git a/media_softlet/linux/common/os/hwinfo_linux.cpp b/media_softlet/linux/common/os/hwinfo_linux.cpp
index ade93b60..dbf09b6b 100644
--- a/media_softlet/linux/common/os/hwinfo_linux.cpp
+++ b/media_softlet/linux/common/os/hwinfo_linux.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2017-2021, Intel Corporation
+* Copyright (c) 2017-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -441,6 +441,10 @@ MOS_STATUS HWInfoGetLinuxDrvInfo(int fd, struct LinuxDriverInfo *drvInfo)
if (MediaGetParam(fd, LOCAL_I915_PARAM_HAS_HUC, &retValue))
{
drvInfo->hasHuc = !!retValue;
+ if (retValue == 1)
+ {
+ drvInfo->hasProtectedHuc = 1;
+ }
}
drvInfo->devId = 0;
diff --git a/media_softlet/linux/common/os/linux_system_info.h b/media_softlet/linux/common/os/linux_system_info.h
index 910c8121..dd6741e6 100644
--- a/media_softlet/linux/common/os/linux_system_info.h
+++ b/media_softlet/linux/common/os/linux_system_info.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2017, Intel Corporation
+* Copyright (c) 2017-2023, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -54,6 +54,7 @@ struct LinuxDriverInfo
uint32_t hasVebox : 1;
uint32_t hasBltRing : 1;
uint32_t hasHuc : 1;
+ uint32_t hasProtectedHuc : 1;
uint32_t hasPpgtt : 1;
uint32_t hasPreemption : 1;
uint32_t isServer : 1;
diff --git a/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp b/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
index dfc59809..2f44570f 100644
--- a/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
+++ b/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
@@ -1582,6 +1582,12 @@ void DdiVpFunctions::VpFeatureReport(PVP_CONFIG config, PDDI_VP_CONTEXT vpCtx)
config->dwRTCompressMode,
MediaUserSetting::Group::Sequence);
#endif
+ //VP RT Cache Usage
+ ReportUserSetting(
+ userSettingPtr,
+ __VPHAL_RT_Cache_Setting,
+ config->dwRTCacheSetting,
+ MediaUserSetting::Group::Sequence);
#if (_DEBUG || _RELEASE_INTERNAL)
ReportUserSettingForDebug(
diff --git a/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.cpp b/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.cpp
index c5e6fe63..8c1ff7eb 100644
--- a/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.cpp
+++ b/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.cpp
@@ -71,7 +71,8 @@ static bool mtlRegisteredVphal =
MOS_STATUS VphalInterfacesXe_Lpm_Plus::Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS * eStatus)
+ MOS_STATUS * eStatus,
+ bool clearViewMode)
{
vp::VpPlatformInterface *vpPlatformInterface = MOS_New(vp::VpPlatformInterfacesXe_Lpm_Plus, osInterface);
if (nullptr == vpPlatformInterface)
diff --git a/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.h b/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.h
index 826c28a1..0334988a 100644
--- a/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.h
+++ b/media_softlet/media_interface/media_interfaces_mtl/media_interfaces_mtl.h
@@ -189,7 +189,8 @@ public:
MOS_STATUS Initialize(
PMOS_INTERFACE osInterface,
bool bInitVphalState,
- MOS_STATUS *eStatus);
+ MOS_STATUS *eStatus,
+ bool clearViewMode = false);
MOS_STATUS CreateVpPlatformInterface(
PMOS_INTERFACE osInterface,
More details
Historical runs
- timed-out: AttributeError: module 'VirtSubproc' has no attribute 'TimeoutError'
- malformed-transform: Malformed tree transform during new upstream merge
- worker-timeout: No keepalives received in 4:32:24.857309.
- worker-clone-incomplete-read: IncompleteRead(0 bytes read)
- build-failed-stage-build: No SOURCES given to target: iHD_drv_video_VP
- nothing-to-do: Last upstream version 22.4.0 already imported.
- nothing-to-do: Last upstream version 22.3.1 already imported. Import a snapshot by specifying --snapshot.
- nothing-to-do: Last upstream version 22.3.0 already imported. Import a snapshot by specifying --snapshot.
- nothing-to-do: Last upstream version 22.2.1 already imported. Import a snapshot by specifying --snapshot.