intel-media-driver: upgrade 23.4.3 -> 24.1.5

Drops list of patches already merged:
 - 0004-Add-device-ID-for-ARL.patch
 - 0005-Add-XR24-support-to-DMABuf.patch
 - 0006-add-INTEL-MEDIA-ALLOC-refineE-to-specify-the-memory-.patch
 - 0007-Skip-report-keys.patch
 - 0008-Limit-INTEL-MEDIA-ALLOC-MODE-to-MTL-and-ARL-only.patch
 - 0009-Skip-cache-bucket-realloc-for-default-mode-0.patch
 - 0010-Fix-failed-4k-video-wall-test-case-and-color-corrupt.patch
 - 0011-Disable-422H-format-output.patch
 - 0012-Decode-Fix-AVC-decode-SFC-4K-hang-issue.patch

Backport a patch to fix build errors:

| error: comparing the result of pointer addition ‘(avcDirectmodeParams._MHW_VDBOX_AVC_DIRECTMODE_PARAMS::presAvcDmvBuffers + ((((sizetype)n) + 1) * 328))’ and NULL [-Werror=address]
| 592 | if (&avcDirectmodeParams.presAvcDmvBuffers[n+1] != nullptr)
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~

Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
This commit is contained in:
Lim Siew Hoon 2024-05-07 13:13:07 +08:00 committed by Anuj Mittal
parent fdab9460e9
commit f77e45d588
11 changed files with 156 additions and 929 deletions

View File

@ -1,45 +0,0 @@
From bb860c0bfe53060925b1dce50da4e6e94cfc8cae Mon Sep 17 00:00:00 2001
From: huangli2018 <li.h.huang@intel.com>
Date: Wed, 20 Dec 2023 15:47:43 +0800
Subject: [PATCH 04/13] Add device ID for ARL
Add device ID for ARL
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/95cbfce81cafa3c24d9d4601d41a855093bc51fb]
Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com>
---
.../linux/Xe_M_plus/ddi/media_sysinfo_mtl.cpp | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/media_softlet/linux/Xe_M_plus/ddi/media_sysinfo_mtl.cpp b/media_softlet/linux/Xe_M_plus/ddi/media_sysinfo_mtl.cpp
index 426bd795f..7b73dfaff 100644
--- a/media_softlet/linux/Xe_M_plus/ddi/media_sysinfo_mtl.cpp
+++ b/media_softlet/linux/Xe_M_plus/ddi/media_sysinfo_mtl.cpp
@@ -1,6 +1,6 @@
/*===================== begin_copyright_notice ==================================
-Copyright (c) 2022, Intel Corporation
+Copyright (c) 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"),
@@ -218,4 +218,13 @@ static struct GfxDeviceInfo arlInfo = {
};
static bool arlsDevice7d67 = DeviceInfoFactory<GfxDeviceInfo>::
- RegisterDevice(0x7D67, &arlInfo);
\ No newline at end of file
+ RegisterDevice(0x7D67, &arlInfo);
+
+static bool arlhDevice7d51 = DeviceInfoFactory<GfxDeviceInfo>::
+ RegisterDevice(0x7D51, &arlInfo);
+
+static bool arlhDevice7dd1 = DeviceInfoFactory<GfxDeviceInfo>::
+ RegisterDevice(0x7DD1, &arlInfo);
+
+static bool arlhDevice7d41 = DeviceInfoFactory<GfxDeviceInfo>::
+ RegisterDevice(0x7D41, &arlInfo);
\ No newline at end of file
--
2.40.1

View File

@ -1,34 +0,0 @@
From bbd3af94a6146d702909ff7e25b0c0547ecbb895 Mon Sep 17 00:00:00 2001
From: jlui <jonathan.ming.jun.lui@intel.com>
Date: Wed, 15 Nov 2023 10:48:34 +0800
Subject: [PATCH 05/13] Add XR24 support to DMABuf
This is to enable XR24/BGRX support for DMABuf
Signed-off-by: Lui, Jonathan Ming Jun <jonathan.ming.jun.lui@intel.com>
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/3910b7029f5416fd0b5972f940c65d0a82c48c7b]
Signed-off-by: Lim, Siew Hoon <siew.hoon.lim@intel.com>
---
.../vp/ddi/capstable_data_vp_xe_lpm_plus_r0_specific.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/media_softlet/linux/xe_lpm_plus_r0/vp/ddi/capstable_data_vp_xe_lpm_plus_r0_specific.h b/media_softlet/linux/xe_lpm_plus_r0/vp/ddi/capstable_data_vp_xe_lpm_plus_r0_specific.h
index fdcca8873..2dcf440a4 100644
--- a/media_softlet/linux/xe_lpm_plus_r0/vp/ddi/capstable_data_vp_xe_lpm_plus_r0_specific.h
+++ b/media_softlet/linux/xe_lpm_plus_r0/vp/ddi/capstable_data_vp_xe_lpm_plus_r0_specific.h
@@ -55,8 +55,9 @@ static ProfileSurfaceAttribInfo surfaceAttribInfo_VAEntrypointVideoProc_VAProfil
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('4', '2', '2', 'V')}}},
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('R', 'G', 'B', 'A')}}},
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('B', 'G', 'R', 'A')}}},
- {VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, { VA_FOURCC('R', 'G', 'B', 'P')}}},
+ {VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('R', 'G', 'B', 'P')}}},
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('R', 'G', 'B', 'X')}}},
+ {VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('X', 'R', 'G', 'B')}}},
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('P', '0', '1', '0')}}},
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC('R', 'G', '2', '4')}}},
{VASurfaceAttribPixelFormat, VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE, {VAGenericValueTypeInteger, {VA_FOURCC_ARGB}}},
--
2.40.1

View File

@ -1,214 +0,0 @@
From 67fb6128adf8fc03d429393e98f0982b42a40e64 Mon Sep 17 00:00:00 2001
From: Zhang_Xinfeng <carl.zhang@intel.com>
Date: Wed, 27 Dec 2023 09:59:29 +0800
Subject: [PATCH 06/12] add INTEL MEDIA ALLOC refineE to specify the memory
alignment
this key is used to allocate bigger pages
env variable INTEL_MEDIA_ALLOC_refineE also could be used
and was not enabled by default
mode 0 is default mode
mode 1 is < 64 align to 64
mode 2 is > 1M && <= 3M align to 1M, >3M align to 2M
mode 3 is mode 1 & mode 2
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/765dd939dcc5562d18cca18e5eda505bda952797]
Signed-off-by: Lim, Siew Hoon <siew.hoon.lim@intel.com>
---
.../linux/common/os/i915/mos_bufmgr.c | 75 +++++++++++++++----
.../common/os/i915_production/mos_bufmgr.c | 1 +
.../common/os/mos_context_specific_next.cpp | 21 +++++-
.../common/os/mos_user_setting_specific.cpp | 7 ++
4 files changed, 90 insertions(+), 14 deletions(-)
diff --git a/media_softlet/linux/common/os/i915/mos_bufmgr.c b/media_softlet/linux/common/os/i915/mos_bufmgr.c
index c0b3ba027..b623d0129 100644
--- a/media_softlet/linux/common/os/i915/mos_bufmgr.c
+++ b/media_softlet/linux/common/os/i915/mos_bufmgr.c
@@ -138,7 +138,7 @@ struct mos_bufmgr_gem {
int exec_count;
/** Array of lists of cached gem objects of power-of-two sizes */
- struct mos_gem_bo_bucket cache_bucket[14 * 4];
+ struct mos_gem_bo_bucket cache_bucket[64];
int num_buckets;
time_t time;
@@ -3852,9 +3852,9 @@ add_bucket(struct mos_bufmgr_gem *bufmgr_gem, int size)
}
static void
-init_cache_buckets(struct mos_bufmgr_gem *bufmgr_gem)
+init_cache_buckets(struct mos_bufmgr_gem *bufmgr_gem, uint8_t alloc_mode)
{
- unsigned long size, cache_max_size = 64 * 1024 * 1024;
+ unsigned long size, cache_max_size = 64 * 1024 * 1024, unit_size;
/* OK, so power of two buckets was too wasteful of memory.
* Give 3 other sizes between each power of two, to hopefully
@@ -3864,17 +3864,63 @@ init_cache_buckets(struct mos_bufmgr_gem *bufmgr_gem)
* width/height alignment and rounding of sizes to pages will
* get us useful cache hit rates anyway)
*/
- add_bucket(bufmgr_gem, 4096);
- add_bucket(bufmgr_gem, 4096 * 2);
- add_bucket(bufmgr_gem, 4096 * 3);
+ /* alloc_mode 0 is default alloc_mode
+ * alloc_mode 1 rounding up to 64K for all < 1M
+ * alloc_mode 2 rounding up to 2M for size> 1M
+ * alloc_mode 3 rounding up to 2M for size > 1M and 64K for size <= 1M */
+ if( alloc_mode > 3 )
+ alloc_mode = 0;
+
+ if ( 0 == alloc_mode || 2 == alloc_mode)
+ {
+ // < 1M normal alloc_mode
+ add_bucket(bufmgr_gem, 4096);
+ add_bucket(bufmgr_gem, 4096 * 2);
+ add_bucket(bufmgr_gem, 4096 * 3);
+ /* Initialize the linked lists for BO reuse cache. */
+ for (size = 4 * 4096; size < 1024 * 1024; size *= 2) {
+ add_bucket(bufmgr_gem, size);
+ add_bucket(bufmgr_gem, size + size * 1 / 4);
+ add_bucket(bufmgr_gem, size + size * 2 / 4);
+ add_bucket(bufmgr_gem, size + size * 3 / 4);
+ }
- /* Initialize the linked lists for BO reuse cache. */
- for (size = 4 * 4096; size <= cache_max_size; size *= 2) {
- add_bucket(bufmgr_gem, size);
+ add_bucket(bufmgr_gem, 1024 * 1024);
+ }
+ if (1 == alloc_mode || 3 == alloc_mode)
+ {
+ // < 1M 64k alignment
+ unit_size = 64 * 1024;
+ for (size = unit_size; size <= 1024 * 1024; size += unit_size)
+ {
+ add_bucket(bufmgr_gem, size);
+ }
+ }
+ if( 0 == alloc_mode || 1 == alloc_mode)
+ {
+ //> 1M is normal alloc_mode
+ add_bucket(bufmgr_gem, 1280 * 1024);
+ add_bucket(bufmgr_gem, 1536 * 1024);
+ add_bucket(bufmgr_gem, 1792 * 1024);
+
+ for (size = 2 * 1024 * 1024; size < cache_max_size; size *= 2) {
+ add_bucket(bufmgr_gem, size);
+ add_bucket(bufmgr_gem, size + size * 1 / 4);
+ add_bucket(bufmgr_gem, size + size * 2 / 4);
+ add_bucket(bufmgr_gem, size + size * 3 / 4);
+ }
+ }
+ if( 2 == alloc_mode || 3 == alloc_mode)
+ {
+ //> 1M rolling to 2M
+ unit_size = 2 * 1024 * 1024;
+ add_bucket(bufmgr_gem, unit_size);
+ add_bucket(bufmgr_gem, 3 * 1024 * 1024);
- add_bucket(bufmgr_gem, size + size * 1 / 4);
- add_bucket(bufmgr_gem, size + size * 2 / 4);
- add_bucket(bufmgr_gem, size + size * 3 / 4);
+ for (size = 4 * 1024 * 1024; size <= cache_max_size; size += unit_size)
+ {
+ add_bucket(bufmgr_gem, size);
+ }
}
}
@@ -5100,6 +5146,7 @@ mos_bufmgr_gem_init_i915(int fd, int batch_size)
struct drm_i915_gem_get_aperture aperture;
drm_i915_getparam_t gp;
int ret, tmp;
+ uint8_t alloc_mode;
bool exec2 = false;
pthread_mutex_lock(&bufmgr_list_mutex);
@@ -5352,10 +5399,12 @@ mos_bufmgr_gem_init_i915(int fd, int batch_size)
*
* Every 4 was too few for the blender benchmark.
*/
+ alloc_mode = (uint8_t)(batch_size & 0xff);
+ batch_size &= 0xffffff00;
bufmgr_gem->max_relocs = batch_size / sizeof(uint32_t) / 2 - 2;
DRMINITLISTHEAD(&bufmgr_gem->named);
- init_cache_buckets(bufmgr_gem);
+ init_cache_buckets(bufmgr_gem,alloc_mode);
DRMLISTADD(&bufmgr_gem->managers, &bufmgr_list);
diff --git a/media_softlet/linux/common/os/i915_production/mos_bufmgr.c b/media_softlet/linux/common/os/i915_production/mos_bufmgr.c
index 90b5685b1..b3574f7d3 100644
--- a/media_softlet/linux/common/os/i915_production/mos_bufmgr.c
+++ b/media_softlet/linux/common/os/i915_production/mos_bufmgr.c
@@ -5403,6 +5403,7 @@ mos_bufmgr_gem_init_i915(int fd, int batch_size)
*
* Every 4 was too few for the blender benchmark.
*/
+ batch_size &= 0xffffff00;
bufmgr_gem->max_relocs = batch_size / sizeof(uint32_t) / 2 - 2;
DRMINITLISTHEAD(&bufmgr_gem->named);
diff --git a/media_softlet/linux/common/os/mos_context_specific_next.cpp b/media_softlet/linux/common/os/mos_context_specific_next.cpp
index 9e9e3ff7e..543e262d1 100644
--- a/media_softlet/linux/common/os/mos_context_specific_next.cpp
+++ b/media_softlet/linux/common/os/mos_context_specific_next.cpp
@@ -64,6 +64,7 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext)
uint32_t iDeviceId = 0;
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
uint32_t value = 0;
+ uint32_t mode = 0;
MediaUserSettingSharedPtr userSettingPtr = nullptr;
MOS_OS_FUNCTION_ENTER;
@@ -89,7 +90,25 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext)
userSettingPtr = MosInterface::MosGetUserSettingInstance(osDriverContext);
- m_bufmgr = mos_bufmgr_gem_init(m_fd, BATCH_BUFFER_SIZE, &m_deviceType);
+ mode = BATCH_BUFFER_SIZE;
+ ReadUserSetting(
+ userSettingPtr,
+ value,
+ "INTEL MEDIA ALLOC MODE",
+ MediaUserSetting::Group::Device);
+
+ if (value)
+ {
+ mode |= (value & 0x000000ff);
+ }
+ value = 0;
+ /* no need to set batch buffer size after switch to softpin
+ * keep it, just for test during relocation to softpin transition
+ * now , it could be a debug method , but is actually useless
+ * so it is safe to reuse the lowest 8bit to convey addtional information
+ * more suitable solution is deleting it , or add additional parameter*/
+
+ m_bufmgr = mos_bufmgr_gem_init(m_fd, (int)mode, &m_deviceType);
if (nullptr == m_bufmgr)
{
MOS_OS_ASSERTMESSAGE("Not able to allocate buffer manager, fd=0x%d", m_fd);
diff --git a/media_softlet/linux/common/os/mos_user_setting_specific.cpp b/media_softlet/linux/common/os/mos_user_setting_specific.cpp
index 6be8b4298..caed584f4 100644
--- a/media_softlet/linux/common/os/mos_user_setting_specific.cpp
+++ b/media_softlet/linux/common/os/mos_user_setting_specific.cpp
@@ -52,5 +52,12 @@ MOS_STATUS MosUserSetting::InitMosUserSettingSpecific(MediaUserSettingSharedPtr
0,
true); //"Enable VM Bind."
+ DeclareUserSettingKey(
+ userSettingPtr,
+ "INTEL MEDIA ALLOC MODE",
+ MediaUserSetting::Group::Device,
+ 0,
+ false); //
+
return MOS_STATUS_SUCCESS;
}
--
2.40.1

View File

@ -1,78 +0,0 @@
From b1aebef4d342c77fc2b9c5efbf20aeb2aa9d634e Mon Sep 17 00:00:00 2001
From: Wang_Pingli <pingli.wang@intel.com>
Date: Thu, 28 Dec 2023 16:44:40 +0800
Subject: [PATCH 07/12] Skip report keys
Skip to report keys
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/68ce25b0a6fa90614eb4734c8680aa4e149e8323]
Signed-off-by: Lim, Siew Hoon <siew.hoon.lim@intel.com>
---
.../os/osservice/mos_utilities_specific.cpp | 30 +++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp b/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp
index b5df29f06..96785e21e 100644
--- a/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp
+++ b/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp
@@ -67,6 +67,8 @@ int32_t g_mosMemoryFailSimulateAllocCounter = 0;
int32_t *MosUtilities::m_mosAllocMemoryFailSimulateAllocCounter = &g_mosMemoryFailSimulateAllocCounter;
#endif
+static bool s_skipToReportReg = false;
+
double MosUtilities::MosGetTime()
{
struct timespec ts = {};
@@ -1551,6 +1553,10 @@ MOS_STATUS MosUtilities::MosInitializeReg(RegBufferMap &regBufferMap)
{
std::string id = "";
+ static const char *disableReportRegKeyList[] = {
+ "INTEL MEDIA ALLOC MODE"
+ };
+ static const uint32_t disableReportRegKeyListCount = sizeof(disableReportRegKeyList) / sizeof(disableReportRegKeyList[0]);
while(!regStream.eof())
{
std::string line = "";
@@ -1585,8 +1591,22 @@ MOS_STATUS MosUtilities::MosInitializeReg(RegBufferMap &regBufferMap)
{
std::string name = line.substr(0,pos);
std::string value = line.substr(pos+1);
- auto &keys = regBufferMap[id];
- keys[name] = value;
+ if (name.size() > 0 && value.size() > 0)
+ {
+ auto &keys = regBufferMap[id];
+ keys[name] = value;
+ if (s_skipToReportReg == false && id == USER_SETTING_CONFIG_PATH)
+ {
+ for (uint32_t i = 0; i < disableReportRegKeyListCount; i++)
+ {
+ if (strcmp(name.c_str(), disableReportRegKeyList[i]) == 0)
+ {
+ s_skipToReportReg = true;
+ break;
+ }
+ }
+ }
+ }
}
}
}
@@ -1606,6 +1626,12 @@ MOS_STATUS MosUtilities::MosInitializeReg(RegBufferMap &regBufferMap)
MOS_STATUS MosUtilities::MosUninitializeReg(RegBufferMap &regBufferMap)
{
MOS_STATUS status = MOS_STATUS_SUCCESS;
+
+ if (s_skipToReportReg)
+ {
+ return MOS_STATUS_SUCCESS;
+ }
+
if (regBufferMap.size() == 0)
{
return MOS_STATUS_SUCCESS;
--
2.40.1

View File

@ -1,255 +0,0 @@
From ac2ffac8d4aade216cc361c6c7120c13a8780719 Mon Sep 17 00:00:00 2001
From: "Soon, Thean Siew" <thean.siew.soon@intel.com>
Date: Thu, 28 Dec 2023 18:42:59 +0000
Subject: [PATCH 08/12] Limit INTEL MEDIA ALLOC MODE to MTL and ARL only
Upstream-Status: Submitted [https://github.com/intel/media-driver/pull/1754]
Signed-off-by: Soon, Thean Siew <thean.siew.soon@intel.com>
---
.../common/os/i915/include/mos_bufmgr_api.h | 1 +
.../common/os/i915/include/mos_bufmgr_priv.h | 2 +-
.../linux/common/os/i915/mos_bufmgr.c | 69 +++++++++++++++----
.../linux/common/os/i915/mos_bufmgr_api.c | 19 +++++
.../os/i915_production/mos_bufmgr_priv.h | 1 +
.../common/os/mos_context_specific_next.cpp | 36 +++++-----
6 files changed, 94 insertions(+), 34 deletions(-)
diff --git a/media_softlet/linux/common/os/i915/include/mos_bufmgr_api.h b/media_softlet/linux/common/os/i915/include/mos_bufmgr_api.h
index 71cc01099..ab4f1ba89 100644
--- a/media_softlet/linux/common/os/i915/include/mos_bufmgr_api.h
+++ b/media_softlet/linux/common/os/i915/include/mos_bufmgr_api.h
@@ -299,6 +299,7 @@ void mos_bufmgr_enable_vmbind(struct mos_bufmgr *bufmgr);
void mos_bufmgr_disable_object_capture(struct mos_bufmgr *bufmgr);
int mos_bufmgr_get_memory_info(struct mos_bufmgr *bufmgr, char *info, uint32_t length);
int mos_bufmgr_get_devid(struct mos_bufmgr *bufmgr);
+void mos_bufmgr_realloc_cache(struct mos_bufmgr *bufmgr, uint8_t alloc_mode);
int mos_bo_map_unsynchronized(struct mos_linux_bo *bo);
int mos_bo_map_gtt(struct mos_linux_bo *bo);
diff --git a/media_softlet/linux/common/os/i915/include/mos_bufmgr_priv.h b/media_softlet/linux/common/os/i915/include/mos_bufmgr_priv.h
index 63f69f985..6fd58f827 100644
--- a/media_softlet/linux/common/os/i915/include/mos_bufmgr_priv.h
+++ b/media_softlet/linux/common/os/i915/include/mos_bufmgr_priv.h
@@ -358,9 +358,9 @@ struct mos_bufmgr {
void (*disable_object_capture)(struct mos_bufmgr *bufmgr) = nullptr;
int (*get_memory_info)(struct mos_bufmgr *bufmgr, char *info, uint32_t length) = nullptr;
int (*get_devid)(struct mos_bufmgr *bufmgr) = nullptr;
+ void (*realloc_cache)(struct mos_bufmgr *bufmgr, uint8_t alloc_mode) = nullptr;
int (*query_engines_count)(struct mos_bufmgr *bufmgr,
unsigned int *nengine) = nullptr;
-
int (*query_engines)(struct mos_bufmgr *bufmgr,
__u16 engine_class,
__u64 caps,
diff --git a/media_softlet/linux/common/os/i915/mos_bufmgr.c b/media_softlet/linux/common/os/i915/mos_bufmgr.c
index b623d0129..2814ddbb7 100644
--- a/media_softlet/linux/common/os/i915/mos_bufmgr.c
+++ b/media_softlet/linux/common/os/i915/mos_bufmgr.c
@@ -2426,19 +2426,9 @@ mos_gem_bo_start_gtt_access(struct mos_linux_bo *bo, int write_enable)
}
static void
-mos_bufmgr_gem_destroy(struct mos_bufmgr *bufmgr)
+mos_bufmgr_cleanup_cache(struct mos_bufmgr_gem *bufmgr_gem)
{
- struct mos_bufmgr_gem *bufmgr_gem = (struct mos_bufmgr_gem *) bufmgr;
- struct drm_gem_close close_bo;
- int i, ret;
-
- free(bufmgr_gem->exec2_objects);
- free(bufmgr_gem->exec_objects);
- free(bufmgr_gem->exec_bos);
- pthread_mutex_destroy(&bufmgr_gem->lock);
-
- /* Free any cached buffer objects we were going to reuse */
- for (i = 0; i < bufmgr_gem->num_buckets; i++) {
+ for (int i = 0; i < bufmgr_gem->num_buckets; i++) {
struct mos_gem_bo_bucket *bucket =
&bufmgr_gem->cache_bucket[i];
struct mos_bo_gem *bo_gem;
@@ -2450,7 +2440,25 @@ mos_bufmgr_gem_destroy(struct mos_bufmgr *bufmgr)
mos_gem_bo_free(&bo_gem->bo);
}
+ bufmgr_gem->cache_bucket[i].size = 0;
}
+ bufmgr_gem->num_buckets = 0;
+}
+
+static void
+mos_bufmgr_gem_destroy(struct mos_bufmgr *bufmgr)
+{
+ struct mos_bufmgr_gem *bufmgr_gem = (struct mos_bufmgr_gem *)bufmgr;
+ struct drm_gem_close close_bo;
+ int ret;
+
+ free(bufmgr_gem->exec2_objects);
+ free(bufmgr_gem->exec_objects);
+ free(bufmgr_gem->exec_bos);
+ pthread_mutex_destroy(&bufmgr_gem->lock);
+
+ /* Free any cached buffer objects we were going to reuse */
+ mos_bufmgr_cleanup_cache(bufmgr_gem);
/* Release userptr bo kept hanging around for optimisation. */
if (bufmgr_gem->userptr_active.ptr) {
@@ -3852,9 +3860,41 @@ add_bucket(struct mos_bufmgr_gem *bufmgr_gem, int size)
}
static void
-init_cache_buckets(struct mos_bufmgr_gem *bufmgr_gem, uint8_t alloc_mode)
+init_cache_buckets(struct mos_bufmgr_gem *bufmgr_gem)
+{
+ unsigned long size, cache_max_size = 64 * 1024 * 1024;
+
+ /* OK, so power of two buckets was too wasteful of memory.
+ * Give 3 other sizes between each power of two, to hopefully
+ * cover things accurately enough. (The alternative is
+ * probably to just go for exact matching of sizes, and assume
+ * that for things like composited window resize the tiled
+ * width/height alignment and rounding of sizes to pages will
+ * get us useful cache hit rates anyway)
+ */
+ add_bucket(bufmgr_gem, 4096);
+ add_bucket(bufmgr_gem, 4096 * 2);
+ add_bucket(bufmgr_gem, 4096 * 3);
+
+ /* Initialize the linked lists for BO reuse cache. */
+ for (size = 4 * 4096; size <= cache_max_size; size *= 2) {
+ add_bucket(bufmgr_gem, size);
+
+ add_bucket(bufmgr_gem, size + size * 1 / 4);
+ add_bucket(bufmgr_gem, size + size * 2 / 4);
+ add_bucket(bufmgr_gem, size + size * 3 / 4);
+ }
+}
+
+static void
+mos_gem_realloc_cache(struct mos_bufmgr *bufmgr, uint8_t alloc_mode)
{
unsigned long size, cache_max_size = 64 * 1024 * 1024, unit_size;
+ struct mos_bufmgr_gem *bufmgr_gem = (struct mos_bufmgr_gem *)bufmgr;
+
+ // Clean up the pre-allocated cache before re-allocating according
+ // to alloc_mode
+ mos_bufmgr_cleanup_cache(bufmgr_gem);
/* OK, so power of two buckets was too wasteful of memory.
* Give 3 other sizes between each power of two, to hopefully
@@ -5218,6 +5258,7 @@ mos_bufmgr_gem_init_i915(int fd, int batch_size)
bufmgr_gem->bufmgr.disable_object_capture = mos_gem_disable_object_capture;
bufmgr_gem->bufmgr.get_memory_info = mos_gem_get_memory_info;
bufmgr_gem->bufmgr.get_devid = mos_gem_get_devid;
+ bufmgr_gem->bufmgr.realloc_cache = mos_gem_realloc_cache;
bufmgr_gem->bufmgr.set_context_param = mos_gem_set_context_param;
bufmgr_gem->bufmgr.set_context_param_parallel = mos_gem_set_context_param_parallel;
bufmgr_gem->bufmgr.set_context_param_load_balance = mos_gem_set_context_param_load_balance;
@@ -5404,7 +5445,7 @@ mos_bufmgr_gem_init_i915(int fd, int batch_size)
bufmgr_gem->max_relocs = batch_size / sizeof(uint32_t) / 2 - 2;
DRMINITLISTHEAD(&bufmgr_gem->named);
- init_cache_buckets(bufmgr_gem,alloc_mode);
+ init_cache_buckets(bufmgr_gem);
DRMLISTADD(&bufmgr_gem->managers, &bufmgr_list);
diff --git a/media_softlet/linux/common/os/i915/mos_bufmgr_api.c b/media_softlet/linux/common/os/i915/mos_bufmgr_api.c
index abe8ef96a..d0e02c267 100644
--- a/media_softlet/linux/common/os/i915/mos_bufmgr_api.c
+++ b/media_softlet/linux/common/os/i915/mos_bufmgr_api.c
@@ -1204,6 +1204,25 @@ mos_bufmgr_get_devid(struct mos_bufmgr *bufmgr)
}
}
+void
+mos_bufmgr_realloc_cache(struct mos_bufmgr *bufmgr, uint8_t alloc_mode)
+{
+ if(!bufmgr)
+ {
+ MOS_OS_CRITICALMESSAGE("Input null ptr\n");
+ return;
+ }
+
+ if (bufmgr->realloc_cache)
+ {
+ return bufmgr->realloc_cache(bufmgr, alloc_mode);
+ }
+ else
+ {
+ MOS_OS_CRITICALMESSAGE("Unsupported\n");
+ }
+}
+
int
mos_query_engines_count(struct mos_bufmgr *bufmgr,
unsigned int *nengine)
diff --git a/media_softlet/linux/common/os/i915_production/mos_bufmgr_priv.h b/media_softlet/linux/common/os/i915_production/mos_bufmgr_priv.h
index c3b765a4c..1d7f7edb0 100644
--- a/media_softlet/linux/common/os/i915_production/mos_bufmgr_priv.h
+++ b/media_softlet/linux/common/os/i915_production/mos_bufmgr_priv.h
@@ -358,6 +358,7 @@ struct mos_bufmgr {
void (*disable_object_capture)(struct mos_bufmgr *bufmgr) = nullptr;
int (*get_memory_info)(struct mos_bufmgr *bufmgr, char *info, uint32_t length) = nullptr;
int (*get_devid)(struct mos_bufmgr *bufmgr) = nullptr;
+ void (*realloc_cache)(struct mos_bufmgr *bufmgr, uint8_t alloc_mode) = nullptr;
int (*query_engines_count)(struct mos_bufmgr *bufmgr,
unsigned int *nengine) = nullptr;
diff --git a/media_softlet/linux/common/os/mos_context_specific_next.cpp b/media_softlet/linux/common/os/mos_context_specific_next.cpp
index 543e262d1..87059f538 100644
--- a/media_softlet/linux/common/os/mos_context_specific_next.cpp
+++ b/media_softlet/linux/common/os/mos_context_specific_next.cpp
@@ -90,25 +90,7 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext)
userSettingPtr = MosInterface::MosGetUserSettingInstance(osDriverContext);
- mode = BATCH_BUFFER_SIZE;
- ReadUserSetting(
- userSettingPtr,
- value,
- "INTEL MEDIA ALLOC MODE",
- MediaUserSetting::Group::Device);
-
- if (value)
- {
- mode |= (value & 0x000000ff);
- }
- value = 0;
- /* no need to set batch buffer size after switch to softpin
- * keep it, just for test during relocation to softpin transition
- * now , it could be a debug method , but is actually useless
- * so it is safe to reuse the lowest 8bit to convey addtional information
- * more suitable solution is deleting it , or add additional parameter*/
-
- m_bufmgr = mos_bufmgr_gem_init(m_fd, (int)mode, &m_deviceType);
+ m_bufmgr = mos_bufmgr_gem_init(m_fd, BATCH_BUFFER_SIZE, &m_deviceType);
if (nullptr == m_bufmgr)
{
MOS_OS_ASSERTMESSAGE("Not able to allocate buffer manager, fd=0x%d", m_fd);
@@ -151,6 +133,22 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext)
return eStatus;
}
+ if (m_platformInfo.eProductFamily == IGFX_METEORLAKE ||
+ m_platformInfo.eProductFamily == IGFX_ARROWLAKE)
+ {
+ ReadUserSetting(
+ userSettingPtr,
+ value,
+ "INTEL MEDIA ALLOC MODE",
+ MediaUserSetting::Group::Device);
+
+ if (value)
+ {
+ mode = (value & 0x000000ff);
+ }
+ mos_bufmgr_realloc_cache(m_bufmgr, mode);
+ }
+
ReadUserSetting(
userSettingPtr,
value,
--
2.40.1

View File

@ -1,33 +0,0 @@
From 18c32247cbc0e9fabff7a847add099496af9e53f Mon Sep 17 00:00:00 2001
From: "Soon, Thean Siew" <thean.siew.soon@intel.com>
Date: Mon, 8 Jan 2024 18:12:30 +0000
Subject: [PATCH 09/12] Skip cache bucket realloc for default mode 0
Upstream-Status: Submitted [https://github.com/intel/media-driver/pull/1754]
Signed-off-by: Soon, Thean Siew <thean.siew.soon@intel.com>
---
.../linux/common/os/mos_context_specific_next.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/media_softlet/linux/common/os/mos_context_specific_next.cpp b/media_softlet/linux/common/os/mos_context_specific_next.cpp
index 87059f538..9dbd5da79 100644
--- a/media_softlet/linux/common/os/mos_context_specific_next.cpp
+++ b/media_softlet/linux/common/os/mos_context_specific_next.cpp
@@ -146,7 +146,12 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext)
{
mode = (value & 0x000000ff);
}
- mos_bufmgr_realloc_cache(m_bufmgr, mode);
+
+ // Realloc cache only if it's not mode 0
+ if (mode)
+ {
+ mos_bufmgr_realloc_cache(m_bufmgr, mode);
+ }
}
ReadUserSetting(
--
2.40.1

View File

@ -1,195 +0,0 @@
From 7291ab5206c5e172c6c94dcfbe4f1bc258f3b7a5 Mon Sep 17 00:00:00 2001
From: WenshengZhang <wensheng.zhang@intel.com>
Date: Wed, 10 Jan 2024 14:08:37 +0800
Subject: [PATCH 10/12] Fix failed 4k video wall test case and color corruption
of video composition
Fix failed 4k video wall test case from 16CH video only show 1CH output and
corruption observed on certain number of video composition when doing
sample_multi_transcode.
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/38e14b1b97170b51586d00d1fa607e496b0c5825]
Signed-off-by: Lim, Siew Hoon <siew.hoon.lim@intel.com>
---
.../common/vp/kdll/hal_kerneldll_next.h | 1 +
.../vp/hal/packet/vp_render_fc_kernel.cpp | 7 ++
.../common/vp/kdll/hal_kerneldll_next.c | 70 +++++++++++--------
.../linux/common/vp/ddi/ddi_vp_functions.cpp | 20 ++----
4 files changed, 55 insertions(+), 43 deletions(-)
diff --git a/media_common/agnostic/common/vp/kdll/hal_kerneldll_next.h b/media_common/agnostic/common/vp/kdll/hal_kerneldll_next.h
index 6447999b7..8e2ab371e 100644
--- a/media_common/agnostic/common/vp/kdll/hal_kerneldll_next.h
+++ b/media_common/agnostic/common/vp/kdll/hal_kerneldll_next.h
@@ -588,6 +588,7 @@ typedef struct tagKdll_FilterEntry
Kdll_Scalingratio ScalingRatio;
Kdll_RenderMethod RenderMethod;
Kdll_SetCSCCoeffMethod SetCSCCoeffMode;
+ bool forceToTargetColorSpace;
} Kdll_FilterEntry, *PKdll_FilterEntry;
// Structure that defines a compositing filter
diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_fc_kernel.cpp b/media_softlet/agnostic/common/vp/hal/packet/vp_render_fc_kernel.cpp
index 8e982f67e..f8308fed1 100644
--- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_fc_kernel.cpp
+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_fc_kernel.cpp
@@ -775,6 +775,13 @@ MOS_STATUS VpRenderFcKernel::BuildFilter(
for (i = 0; (i < (int)compParams->sourceCount) && (iMaxFilterSize > 0); i++)
{
+ if (i > 0)
+ {
+ if (!RECT1_CONTAINS_RECT2(compParams->source[0].surf->rcDst, compParams->source[i].surf->rcDst))
+ {
+ pFilter->forceToTargetColorSpace = true;
+ }
+ }
src = &compParams->source[i];
//--------------------------------
diff --git a/media_softlet/agnostic/common/vp/kdll/hal_kerneldll_next.c b/media_softlet/agnostic/common/vp/kdll/hal_kerneldll_next.c
index d8f7d429a..151f3b039 100644
--- a/media_softlet/agnostic/common/vp/kdll/hal_kerneldll_next.c
+++ b/media_softlet/agnostic/common/vp/kdll/hal_kerneldll_next.c
@@ -2378,6 +2378,7 @@ bool KernelDll_SetupCSC(
Kdll_CSC_Matrix curr_matrix;
Kdll_CSC_Matrix *matrix = pCSC->Matrix; // Color Space conversion matrix
uint8_t * matrixID = pCSC->MatrixID; // CSC coefficient allocation table
+ bool forceToTargetColorSpace = false;
// Clear all CSC matrices
MOS_ZeroMemory(matrix, sizeof(pCSC->Matrix));
@@ -2395,6 +2396,10 @@ bool KernelDll_SetupCSC(
//---------------------------------------------------------------//
for (i = iFilterSize, pFilter = pSearchState->Filter; i > 0; i--, pFilter++)
{
+ if (pFilter->forceToTargetColorSpace)
+ {
+ forceToTargetColorSpace = true;
+ }
// Disable Procamp for all layers except Main Video
// Disable Procamp if source is RGB
if (pFilter->layer != Layer_MainVideo ||
@@ -2456,44 +2461,51 @@ bool KernelDll_SetupCSC(
//---------------------------------------------------------------//
if (sel_cspace == CSpace_Any)
{
- int cs;
- for (cs = (CSpace_Any + 1); cs < CSpace_Count; cs++)
+ if (forceToTargetColorSpace)
{
- // Skip color spaces not in use
- cspace = (VPHAL_CSPACE)cs;
- if (!cspace_in_use[cspace])
- {
- continue;
- }
-
- // xvYCC and BT are treated as same for CSC considerations (BT.x to xvYCC.x matrix is I)
- cspace = KernelDll_TranslateCspace(cspace);
-
- // Count # of CS conversions and matrices
- csc_count = 0;
- for (i = iFilterSize, pFilter = pSearchState->Filter; i > 0; i--, pFilter++)
+ sel_cspace = out_cspace;
+ }
+ else
+ {
+ int cs;
+ for (cs = (CSpace_Any + 1); cs < CSpace_Count; cs++)
{
- // Ignore layers where the Color Space may be set in software (colorfill, palletized)
- if (pFilter->cspace == CSpace_Any)
+ // Skip color spaces not in use
+ cspace = (VPHAL_CSPACE)cs;
+ if (!cspace_in_use[cspace])
{
continue;
}
- // Check if CSC/PA is required
- if (KernelDll_TranslateCspace(pFilter->cspace) != cspace ||
- pFilter->procamp != DL_PROCAMP_DISABLED)
+ // xvYCC and BT are treated as same for CSC considerations (BT.x to xvYCC.x matrix is I)
+ cspace = KernelDll_TranslateCspace(cspace);
+
+ // Count # of CS conversions and matrices
+ csc_count = 0;
+ for (i = iFilterSize, pFilter = pSearchState->Filter; i > 0; i--, pFilter++)
{
- csc_count++;
+ // Ignore layers where the Color Space may be set in software (colorfill, palletized)
+ if (pFilter->cspace == CSpace_Any)
+ {
+ continue;
+ }
+
+ // Check if CSC/PA is required
+ if (KernelDll_TranslateCspace(pFilter->cspace) != cspace ||
+ pFilter->procamp != DL_PROCAMP_DISABLED)
+ {
+ csc_count++;
+ }
}
- }
- // Save best choice as requiring minimum number of CSC operations
- if ((sel_csc_count < 0) || // Initial value
- (csc_count < sel_csc_count) || // Minimum number of CSC operations
- (csc_count == sel_csc_count && cs == main_cspace)) // Use main cspace as default if same CSC count
- {
- sel_cspace = cspace;
- sel_csc_count = csc_count;
+ // Save best choice as requiring minimum number of CSC operations
+ if ((sel_csc_count < 0) || // Initial value
+ (csc_count < sel_csc_count) || // Minimum number of CSC operations
+ (csc_count == sel_csc_count && cs == main_cspace)) // Use main cspace as default if same CSC count
+ {
+ sel_cspace = cspace;
+ sel_csc_count = csc_count;
+ }
}
}
}
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 40d0b3fad..e60a6c69c 100644
--- a/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
+++ b/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
@@ -2115,9 +2115,8 @@ VAStatus DdiVpFunctions::SetBackgroundColorfill(
{
DDI_VP_FUNC_ENTER;
DDI_VP_CHK_NULL(vpHalRenderParams, "nullptr vpHalRenderParams.", VA_STATUS_ERROR_INVALID_PARAMETER);
- DDI_VP_CHK_NULL(vpHalRenderParams->pTarget[0],"nullptr pTarget[0].", VA_STATUS_ERROR_INVALID_PARAMETER);
- if ((outBackGroundcolor >> 24) != 0 || vpHalRenderParams->pTarget[0]->ColorSpace == CSpace_sRGB)
+ if ((outBackGroundcolor >> 24) != 0)
{
if (vpHalRenderParams->pColorFillParams == nullptr)
{
@@ -2126,18 +2125,11 @@ VAStatus DdiVpFunctions::SetBackgroundColorfill(
DDI_VP_CHK_NULL(vpHalRenderParams->pColorFillParams, "nullptr pColorFillParams.", VA_STATUS_ERROR_UNKNOWN);
- if (vpHalRenderParams->pTarget[0]->ColorSpace == CSpace_sRGB && (outBackGroundcolor >> 24) == 0)
- {
- // set color space for sRGB output
- vpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB;
- }
- else
- {
- // set background colorfill option
- vpHalRenderParams->pColorFillParams->Color = outBackGroundcolor;
- vpHalRenderParams->pColorFillParams->bYCbCr = false;
- vpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB;
- }
+ // set background colorfill option
+ vpHalRenderParams->pColorFillParams->Color = outBackGroundcolor;
+ vpHalRenderParams->pColorFillParams->bYCbCr = false;
+ vpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB;
+
}
else
{
--
2.40.1

View File

@ -1,33 +0,0 @@
From f8b4d982232d4c1330e1e5f5dcd7cd8ca94decba Mon Sep 17 00:00:00 2001
From: WenshengZhang <wensheng.zhang@intel.com>
Date: Thu, 25 Jan 2024 16:35:10 +0800
Subject: [PATCH 11/12] Disable 422H format output
Disable 422H format output.
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/eab411768e61a46e096793291f5f992eecf76cd8]
Signed-off-by: Lim, Siew Hoon <siew.hoon.lim@intel.com>
---
.../agnostic/common/vp/hal/feature_manager/policy.cpp | 6 ++++++
1 file changed, 6 insertions(+)
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 317cec25a..12f1124fa 100644
--- a/media_softlet/agnostic/common/vp/hal/feature_manager/policy.cpp
+++ b/media_softlet/agnostic/common/vp/hal/feature_manager/policy.cpp
@@ -1140,6 +1140,12 @@ MOS_STATUS Policy::GetScalingExecutionCaps(SwFilter *feature, bool isHdrEnabled)
bool isAlphaSettingSupportedByVebox =
IsAlphaSettingSupportedByVebox(scalingParams->formatInput, scalingParams->formatOutput, scalingParams->pCompAlpha);
+ if (scalingParams->formatOutput == Format_422H)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Scaling not support 422H format output.");
+ return MOS_STATUS_UNIMPLEMENTED;
+ }
+
// Clean usedForNextPass flag.
if (scalingEngine->usedForNextPass)
{
--
2.40.1

View File

@ -1,32 +0,0 @@
From b93904533d3ee66c7919fa8e23d26b852a37a917 Mon Sep 17 00:00:00 2001
From: Lim Siew Hoon <siew.hoon.lim@intel.com>
Date: Tue, 30 Jan 2024 13:27:52 +0800
Subject: [PATCH 12/12] [Decode] Fix AVC decode SFC 4K hang issue
Updated VDSFC input width and height for AVC decode
Upstream-Status: Submitted [https://github.com/intel-innersource/drivers.gpu.unified/pull/151401]
Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com>
---
.../hal/dec/avc/packet/decode_avc_downsampling_packet.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_downsampling_packet.cpp b/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_downsampling_packet.cpp
index e75fd8137..9cc236bd7 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_downsampling_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_downsampling_packet.cpp
@@ -59,6 +59,10 @@ MOS_STATUS AvcDownSamplingPkt::InitSfcParams(VDBOX_SFC_PARAMS &sfcParams)
AvcBasicFeature *avcBasicFeature = dynamic_cast<AvcBasicFeature*>(m_basicFeature);
DECODE_CHK_NULL(avcBasicFeature);
+
+ sfcParams.input.width = avcBasicFeature->m_width;
+ sfcParams.input.height = avcBasicFeature->m_height;
+
CODEC_PICTURE curPic = avcBasicFeature->m_avcPicParams->CurrPic;
if (avcBasicFeature->m_avcPicParams->seq_fields.mb_adaptive_frame_field_flag == true)
--
2.40.1

View File

@ -0,0 +1,154 @@
From 8aa866dc650e6b0e0b7425bafc7b1039232c377a Mon Sep 17 00:00:00 2001
From: "Xu, Zhengguo" <zhengguo.xu@intel.com>
Date: Tue, 16 Apr 2024 09:53:41 +0800
Subject: [PATCH] [Decode] Correct condition check when dump avc mv buffer
Fixes: #1791
Signed-off-by: Xu, Zhengguo <zhengguo.xu@intel.com>
Upstream-Status: Backport [https://github.com/intel/media-driver/commit/8aa866dc650e6b0e0b7425bafc7b1039232c377a]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
.../common/codec/hal/codechal_decode_avc.cpp | 33 ++++++++-----------
.../decode_avc_picture_xe_m_base_packet.cpp | 28 +++++++---------
.../avc/packet/decode_avc_picture_packet.cpp | 30 +++++++----------
3 files changed, 37 insertions(+), 54 deletions(-)
diff --git a/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp b/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp
index 3adf6994ce..4bac426802 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp
+++ b/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp
@@ -1619,28 +1619,23 @@ MOS_STATUS CodechalDecodeAvc::InitPicMhwParams(
uint8_t picID = picMhwParams->AvcDirectmodeParams.bPicIdRemappingInUse ? i : refList[idx]->ucFrameId;
uint8_t mvIdx = refList[idx]->ucDMVIdx[0];
- if (&picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[i] != nullptr)
- {
- // dump Reference mvdata
- std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(i);
- CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
- &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[mvIdx],
- CodechalDbgAttr::attrMvData,
- mvBufDumpName.c_str(),
- m_avcDmvBufferSize));
- }
+ // dump Reference mvdata
+ std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(i);
+ CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
+ &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[mvIdx],
+ CodechalDbgAttr::attrMvData,
+ mvBufDumpName.c_str(),
+ m_avcDmvBufferSize));
}
}
- if (&picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[picMhwParams->AvcDirectmodeParams.ucAvcDmvIdx])
- {
- // dump Current mvdata
- CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
- &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[picMhwParams->AvcDirectmodeParams.ucAvcDmvIdx],
- CodechalDbgAttr::attrMvData,
- "DEC_Cur_MV_",
- m_avcDmvBufferSize));
- });
+ // dump Current mvdata
+ CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
+ &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[picMhwParams->AvcDirectmodeParams.ucAvcDmvIdx],
+ CodechalDbgAttr::attrMvData,
+ "DEC_Cur_MV_",
+ m_avcDmvBufferSize));
+ );
return eStatus;
}
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/packet/decode_avc_picture_xe_m_base_packet.cpp b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/packet/decode_avc_picture_xe_m_base_packet.cpp
index bd0611f6fa..035a7e6149 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/packet/decode_avc_picture_xe_m_base_packet.cpp
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/packet/decode_avc_picture_xe_m_base_packet.cpp
@@ -589,26 +589,20 @@ namespace decode{
{
if (m_avcBasicFeature->m_refFrames.m_avcPicIdx[n].bValid)
{
- if (&avcDirectmodeParams.presAvcDmvBuffers[n+1] != nullptr)
- {
- std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
- &avcDirectmodeParams.presAvcDmvBuffers[n+1],
- CodechalDbgAttr::attrMvData,
- mvBufDumpName.c_str(),
- mvBufferSize));
- }
+ std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
+ &avcDirectmodeParams.presAvcDmvBuffers[n+1],
+ CodechalDbgAttr::attrMvData,
+ mvBufDumpName.c_str(),
+ mvBufferSize));
}
}
- if (&avcDirectmodeParams.presAvcDmvBuffers[0] != nullptr)
- {
- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
- &avcDirectmodeParams.presAvcDmvBuffers[0],
- CodechalDbgAttr::attrMvData,
- "DEC_Cur_MV_",
- mvBufferSize));
- }
+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
+ &avcDirectmodeParams.presAvcDmvBuffers[0],
+ CodechalDbgAttr::attrMvData,
+ "DEC_Cur_MV_",
+ mvBufferSize));
return MOS_STATUS_SUCCESS;
}
diff --git a/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_picture_packet.cpp b/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_picture_packet.cpp
index 88ed0bb832..8cdc05e585 100644
--- a/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_picture_packet.cpp
+++ b/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_picture_packet.cpp
@@ -646,26 +646,20 @@ MOS_STATUS AvcDecodePicPkt::DumpResources(uint32_t mvBufferSize) const
CodechalDbgAttr::attrDecodeReferenceSurfaces,
refSurfName.c_str()));
- if (&mvParam.presAvcDmvBuffers[n+1] != nullptr)
- {
- std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
- &mvParam.presAvcDmvBuffers[n+1],
- CodechalDbgAttr::attrMvData,
- mvBufDumpName.c_str(),
- mvBufferSize));
- }
+ std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
+ &mvParam.presAvcDmvBuffers[n+1],
+ CodechalDbgAttr::attrMvData,
+ mvBufDumpName.c_str(),
+ mvBufferSize));
}
}
- if (&mvParam.presAvcDmvBuffers[0] != nullptr)
- {
- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
- &mvParam.presAvcDmvBuffers[0],
- CodechalDbgAttr::attrMvData,
- "DEC_Cur_MV_",
- mvBufferSize));
- }
+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
+ &mvParam.presAvcDmvBuffers[0],
+ CodechalDbgAttr::attrMvData,
+ "DEC_Cur_MV_",
+ mvBufferSize));
return MOS_STATUS_SUCCESS;
}
@@ -699,4 +693,4 @@ MOS_STATUS AvcDecodePicPkt::SetSurfaceMmcState() const
return MOS_STATUS_SUCCESS;
}
-} // namespace decode
\ No newline at end of file
+} // namespace decode

View File

@ -21,18 +21,10 @@ DEPENDS += "libva gmmlib"
SRC_URI = "git://github.com/intel/media-driver.git;protocol=https;nobranch=1 \
file://0001-Disable-vp9-padding-on-mtl.patch \
file://0002-Force-ARGB-surface-to-tile4-for-ACM.patch \
file://0004-Add-device-ID-for-ARL.patch \
file://0005-Add-XR24-support-to-DMABuf.patch \
file://0006-add-INTEL-MEDIA-ALLOC-refineE-to-specify-the-memory-.patch \
file://0007-Skip-report-keys.patch \
file://0008-Limit-INTEL-MEDIA-ALLOC-MODE-to-MTL-and-ARL-only.patch \
file://0009-Skip-cache-bucket-realloc-for-default-mode-0.patch \
file://0010-Fix-failed-4k-video-wall-test-case-and-color-corrupt.patch \
file://0011-Disable-422H-format-output.patch \
file://0012-Decode-Fix-AVC-decode-SFC-4K-hang-issue.patch \
file://8aa866dc650e6b0e0b7425bafc7b1039232c377a.patch \
"
SRCREV = "a9f272496fc0f3e823cc4a814666ea27b443d902"
SRCREV = "8068c2e119ba16c017e5a5f443fac5a55edbee65"
S = "${WORKDIR}/git"
COMPATIBLE_HOST:x86-x32 = "null"