summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia/libva/files
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-multimedia/libva/files')
-rw-r--r--recipes-multimedia/libva/files/0001-Disable-vp9-padding-on-mtl.patch35
-rw-r--r--recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch476
-rw-r--r--recipes-multimedia/libva/files/0002-Force-ARGB-surface-to-tile4-for-ACM.patch44
-rw-r--r--recipes-multimedia/libva/files/8aa866dc650e6b0e0b7425bafc7b1039232c377a.patch154
4 files changed, 233 insertions, 476 deletions
diff --git a/recipes-multimedia/libva/files/0001-Disable-vp9-padding-on-mtl.patch b/recipes-multimedia/libva/files/0001-Disable-vp9-padding-on-mtl.patch
new file mode 100644
index 00000000..90dff8d1
--- /dev/null
+++ b/recipes-multimedia/libva/files/0001-Disable-vp9-padding-on-mtl.patch
@@ -0,0 +1,35 @@
1From 1b303f417113ad1aa6b63fc024fbe4aa0c943f57 Mon Sep 17 00:00:00 2001
2From: Lim Siew Hoon <siew.hoon.lim@intel.com>
3Date: Tue, 5 Sep 2023 16:13:42 +0800
4Subject: [PATCH 01/12] Disable vp9 padding on mtl.
5
6Upstream-Status: Submitted [https://github.com/intel/media-driver/pull/1720]
7
8Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com>
9---
10 media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp | 4 ++--
11 1 file changed, 2 insertions(+), 2 deletions(-)
12
13diff --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
14index 844545a87..72265289c 100644
15--- a/media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp
16+++ b/media_softlet/linux/Xe_M_plus/ddi/media_sku_wa_mtl.cpp
17@@ -284,7 +284,7 @@ static bool InitMtlMediaWaExt(struct GfxDeviceInfo *devInfo,
18
19 MEDIA_WR_WA(waTable, WaDisableSetObjectCapture, 1);
20
21- MEDIA_WR_WA(waTable, Wa_Vp9UnalignedHeight, 1);
22+ MEDIA_WR_WA(waTable, Wa_Vp9UnalignedHeight, 0);
23
24 MEDIA_WR_WA(waTable, Wa_15013355402, 1);
25
26@@ -337,4 +337,4 @@ static struct LinuxDeviceInit arlDeviceInit =
27 };
28
29 static bool arlDeviceRegister = DeviceInfoFactory<LinuxDeviceInit>::
30- RegisterDevice((uint32_t)IGFX_ARROWLAKE, &arlDeviceInit);
31\ No newline at end of file
32+ RegisterDevice((uint32_t)IGFX_ARROWLAKE, &arlDeviceInit);
33--
342.40.1
35
diff --git a/recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch b/recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch
deleted file mode 100644
index 9b9cfe35..00000000
--- a/recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch
+++ /dev/null
@@ -1,476 +0,0 @@
1From b2c07abaf546f84529b39cb4ae443ed2a5bc35e9 Mon Sep 17 00:00:00 2001
2From: jinchung <you@example.com>
3Date: Wed, 3 Nov 2021 14:02:51 +0000
4Subject: [PATCH] [MOS] user setting reentrant
5
6Fix for registry key reentrant on Linux during multiple processes
7
8Upstream-Status: Submitted [internal innersource]
9innersource PR #45124
10
11Signed-off-by: Teng, Jin Chung <jin.chung.teng@intel.com>
12Signed-off-by: Wang, Pingli <pingli.wang@intel.com>
13---
14 .../common/os/mos_utilities_specific.cpp | 2 +-
15 .../linux/common/os/mos_utilities_specific.h | 2 +-
16 .../agnostic/common/os/mos_utilities_next.cpp | 15 ++-
17 .../agnostic/common/os/mos_utilities_next.h | 2 +-
18 .../common/os/mos_utilities_specific_next.cpp | 107 +++++++-----------
19 .../common/os/mos_utilities_specific_next.h | 71 ++++++------
20 6 files changed, 89 insertions(+), 110 deletions(-)
21
22diff --git a/media_driver/linux/common/os/mos_utilities_specific.cpp b/media_driver/linux/common/os/mos_utilities_specific.cpp
23index ae414360..62eb4593 100644
24--- a/media_driver/linux/common/os/mos_utilities_specific.cpp
25+++ b/media_driver/linux/common/os/mos_utilities_specific.cpp
26@@ -589,7 +589,7 @@ static int32_t _UserFeature_FindValue(MOS_UF_KEY UFKey, char * const pcValueName
27
28 iResult = -1;
29
30- for ( i = 0; i < (int32_t)UFKey.ulValueNum; i++ )
31+ for ( i = 0; i < UFKey.ulValueNum; i++ )
32 {
33 iResult = strcmp(UFKey.pValueArray[i].pcValueName, pcValueName);
34 if ( iResult == 0 )
35diff --git a/media_driver/linux/common/os/mos_utilities_specific.h b/media_driver/linux/common/os/mos_utilities_specific.h
36index 81d84537..3d1cda35 100644
37--- a/media_driver/linux/common/os/mos_utilities_specific.h
38+++ b/media_driver/linux/common/os/mos_utilities_specific.h
39@@ -116,7 +116,7 @@ typedef struct _MOS_UF_VALUE {
40 typedef struct _MOS_UF_KEY {
41 void *UFKey;
42 char pcKeyName[MAX_USERFEATURE_LINE_LENGTH];
43- uint32_t ulValueNum;
44+ int32_t ulValueNum;
45 MOS_UF_VALUE *pValueArray;
46 } MOS_UF_KEY;
47
48diff --git a/media_softlet/agnostic/common/os/mos_utilities_next.cpp b/media_softlet/agnostic/common/os/mos_utilities_next.cpp
49index 8427ec17..74ba75b9 100644
50--- a/media_softlet/agnostic/common/os/mos_utilities_next.cpp
51+++ b/media_softlet/agnostic/common/os/mos_utilities_next.cpp
52@@ -1930,9 +1930,18 @@ MOS_STATUS MosUtilities::MosUserFeatureReadValueFromMapID(
53 &ufKey,
54 ufInfo)) != MOS_STATUS_SUCCESS)
55 {
56- MOS_OS_NORMALMESSAGE("Failed to open user feature for reading eStatus:%d.", eStatus);
57- eStatus = MOS_STATUS_USER_FEATURE_KEY_OPEN_FAILED;
58- goto finish;
59+ MOS_OS_NORMALMESSAGE("Failed to open user feature for concurrency.");
60+ if ((eStatus = MosUserFeatureOpen(
61+ pUserFeature->Type,
62+ pUserFeature->pcPath,
63+ KEY_READ,
64+ &ufKey,
65+ ufInfo)) != MOS_STATUS_SUCCESS)
66+ {
67+ MOS_OS_NORMALMESSAGE("Failed to open user feature for reading eStatus:%d.", eStatus);
68+ eStatus = MOS_STATUS_USER_FEATURE_KEY_OPEN_FAILED;
69+ goto finish;
70+ }
71 }
72
73 // Initialize Read Value
74diff --git a/media_softlet/agnostic/common/os/mos_utilities_next.h b/media_softlet/agnostic/common/os/mos_utilities_next.h
75index f492a2c7..65aa3729 100644
76--- a/media_softlet/agnostic/common/os/mos_utilities_next.h
77+++ b/media_softlet/agnostic/common/os/mos_utilities_next.h
78@@ -653,7 +653,7 @@ public:
79 //!
80 //! \brief Unlink the user feature key Desc Fields table items to key value map
81 //! \details Unlink the user feature key Desc Fields table items to key value map
82- //! according to ID sequence and do some post processing by calling MOS_DestroyUserFeatureData
83+ //! according to ID sequence and do some post processing by calling MOSDestroyUserFeatureData
84 //! \param [in] pUserFeatureKey
85 //! Pointer to the User Feature Value needed to be destroyed
86 //! \return MOS_STATUS
87diff --git a/media_softlet/linux/common/os/mos_utilities_specific_next.cpp b/media_softlet/linux/common/os/mos_utilities_specific_next.cpp
88index 81ee4bdf..584ba086 100644
89--- a/media_softlet/linux/common/os/mos_utilities_specific_next.cpp
90+++ b/media_softlet/linux/common/os/mos_utilities_specific_next.cpp
91@@ -47,7 +47,8 @@
92 #include <unistd.h> // fork
93 #include <algorithm>
94
95-const char *MosUtilitiesSpecificNext::m_szUserFeatureFile = USER_FEATURE_FILE;
96+const char *MosUtilitiesSpecificNext::m_szUserFeatureFile = USER_FEATURE_FILE;
97+MOS_PUF_KEYLIST MosUtilitiesSpecificNext::m_ufKeyList = nullptr;
98
99 double MosUtilities::MosGetTime()
100 {
101@@ -540,7 +541,7 @@ void MosUtilities::MosSleep(uint32_t mSec)
102
103 iResult = -1;
104
105- for ( i = 0; i < (int32_t)UFKey.ulValueNum; i++ )
106+ for ( i = 0; i < UFKey.ulValueNum; i++ )
107 {
108 iResult = strcmp(UFKey.pValueArray[i].pcValueName, pcValueName);
109 if ( iResult == 0 )
110@@ -566,7 +567,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureAdd(MOS_PUF_KEYLIST *pKeyList, M
111 return MOS_STATUS_INVALID_PARAMETER;
112 }
113
114- pNewNode = (MOS_UF_KEYNODE*)MOS_AllocMemory(sizeof(MOS_UF_KEYNODE));
115+ pNewNode = (MOS_UF_KEYNODE*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_KEYNODE));
116 if (pNewNode == nullptr)
117 {
118 return MOS_STATUS_NO_SPACE;
119@@ -604,41 +605,34 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureSet(MOS_PUF_KEYLIST *pKeyList, M
120 }
121
122 // Prepare the ValueBuff of the NewKey
123- if ((ulValueBuf = MOS_AllocMemory(NewKey.pValueArray[0].ulValueLen)) == nullptr)
124+ if ((ulValueBuf = MOS_AllocAndZeroMemory(NewKey.pValueArray[0].ulValueLen)) == nullptr)
125 {
126 return MOS_STATUS_NO_SPACE;
127 }
128+ MOS_AtomicIncrement(&MosUtilities::m_mosMemAllocFakeCounter); //ulValueBuf does not count it, because it is freed after the MEMNJA final report.
129+ MOS_OS_NORMALMESSAGE("ulValueBuf %p for key %s", ulValueBuf, NewKey.pValueArray[0].pcValueName);
130
131 if ( (iPos = UserFeatureFindValue(*Key, NewKey.pValueArray[0].pcValueName)) == NOT_FOUND)
132 {
133 //not found, add a new value to key struct.
134 //reallocate memory for appending this value.
135- pValueArray = (MOS_UF_VALUE*)MOS_AllocMemory(sizeof(MOS_UF_VALUE)*(Key->ulValueNum+1));
136- if (pValueArray == nullptr)
137+ iPos = MOS_AtomicIncrement(&Key->ulValueNum);
138+ if (iPos >= UF_CAPABILITY)
139 {
140- MOS_FreeMemory(ulValueBuf);
141- return MOS_STATUS_NO_SPACE;
142+ MOS_OS_ASSERTMESSAGE("user setting value icount %d must less than UF_CAPABILITY(64)", iPos);
143+ return MOS_STATUS_USER_FEATURE_KEY_READ_FAILED;
144 }
145
146- MosUtilities::MosSecureMemcpy(pValueArray,
147- sizeof(MOS_UF_VALUE)*(Key->ulValueNum),
148- Key->pValueArray,
149- sizeof(MOS_UF_VALUE)*(Key->ulValueNum));
150-
151- MOS_FreeMemory(Key->pValueArray);
152-
153- Key->pValueArray = pValueArray;
154-
155- iPos = Key->ulValueNum;
156- MosUtilities::MosSecureStrcpy(Key->pValueArray[Key->ulValueNum].pcValueName,
157+ MosUtilities::MosSecureStrcpy(Key->pValueArray[iPos].pcValueName,
158 MAX_USERFEATURE_LINE_LENGTH,
159 NewKey.pValueArray[0].pcValueName);
160- Key->ulValueNum ++;
161 }
162 else
163 {
164 //if found, the previous value buffer needs to be freed before reallocating
165 MOS_FreeMemory(Key->pValueArray[iPos].ulValueBuf);
166+ MOS_AtomicDecrement(&MosUtilities::m_mosMemAllocFakeCounter);
167+ MOS_OS_NORMALMESSAGE("ulValueBuf %p for key %s", ulValueBuf, NewKey.pValueArray[0].pcValueName);
168 }
169
170 Key->pValueArray[iPos].ulValueLen = NewKey.pValueArray[0].ulValueLen;
171@@ -733,7 +727,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF
172 iCurId = 0;
173 eStatus = MOS_STATUS_SUCCESS;
174
175- CurKey = (MOS_UF_KEY*)MOS_AllocMemory(sizeof(MOS_UF_KEY));
176+ CurKey = (MOS_UF_KEY*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_KEY));
177 if (CurKey == nullptr)
178 {
179 return MOS_STATUS_NO_SPACE;
180@@ -771,7 +765,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF
181 // if the CurKey didn't be added in pKeyList, free it.
182 MOS_FreeMemory(CurKey);
183 }
184- CurKey = (MOS_UF_KEY*)MOS_AllocMemory(sizeof(MOS_UF_KEY));
185+ CurKey = (MOS_UF_KEY*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_KEY));
186 if (CurKey == nullptr)
187 {
188 eStatus = MOS_STATUS_NO_SPACE;
189@@ -796,7 +790,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF
190 CurKey->ulValueNum = 0;
191
192 // allocate capability length for valuearray.
193- CurValue = (MOS_UF_VALUE*)MOS_AllocMemory(sizeof(MOS_UF_VALUE)*UF_CAPABILITY);
194+ CurValue = (MOS_UF_VALUE*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_VALUE)*UF_CAPABILITY);
195 if (CurValue == nullptr)
196 {
197 eStatus = MOS_STATUS_NO_SPACE;
198@@ -826,6 +820,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF
199 if (iCount < 0 || iCount >= UF_CAPABILITY)
200 {
201 eStatus = MOS_STATUS_USER_FEATURE_KEY_READ_FAILED;
202+ MOS_OS_ASSERTMESSAGE("user setting value icount %d, and it must meet 0 < icount < UF_CAPABILITY(64)", iCount);
203 break;
204 }
205
206@@ -987,7 +982,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpDataToFile(const char *szFil
207 fprintf(File, "%s\n", UF_KEY_ID);
208 fprintf(File, "\t0x%.8x\n", (uint32_t)(uintptr_t)pKeyTmp->pElem->UFKey);
209 fprintf(File, "\t%s\n", pKeyTmp->pElem->pcKeyName);
210- for ( j = 0; j < (int32_t)pKeyTmp->pElem->ulValueNum; j ++ )
211+ for ( j = 0; j < pKeyTmp->pElem->ulValueNum; j ++ )
212 {
213 fprintf(File, "\t\t%s\n", UF_VALUE_ID);
214 if ( strlen(pKeyTmp->pElem->pValueArray[j].pcValueName) > 0 )
215@@ -1015,10 +1010,9 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpDataToFile(const char *szFil
216 break;
217 } //switch (pKeyTmp->pElem->pValueArray[j].ulValueType)
218 }
219- } // for ( j = 0; j < (int32_t)pKeyTmp->pElem->ulValueNum; j ++ )
220+ } // for ( j = 0; j < pKeyTmp->pElem->ulValueNum; j ++ )
221 } //for (pKeyTmp = pKeyList; pKeyTmp; pKeyTmp = pKeyTmp->pNext)
222 fclose(File);
223- MosUtilities::MosUserFeatureNotifyChangeKeyValue(nullptr, false, nullptr, true);
224
225 return MOS_STATUS_SUCCESS;
226 }
227@@ -1055,12 +1049,10 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureSetValue(
228 MOS_UF_KEY NewKey;
229 MOS_UF_VALUE NewValue;
230 MOS_STATUS eStatus;
231- MOS_PUF_KEYLIST pKeyList;
232
233 eStatus = MOS_STATUS_UNKNOWN;
234- pKeyList = nullptr;
235
236- if ( (strKey== nullptr) || (pcValueName == nullptr) )
237+ if ((strKey == nullptr) || (pcValueName == nullptr) || (m_ufKeyList == nullptr))
238 {
239 return MOS_STATUS_INVALID_PARAMETER;
240 }
241@@ -1083,18 +1075,11 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureSetValue(
242 NewKey.pValueArray = &NewValue;
243 NewKey.ulValueNum = 1;
244
245- if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) != MOS_STATUS_SUCCESS)
246+ if ( ( eStatus = UserFeatureSet(&MosUtilitiesSpecificNext::m_ufKeyList, NewKey)) == MOS_STATUS_SUCCESS )
247 {
248- UserFeatureFreeKeyList(pKeyList);
249- return eStatus;
250+ MosUtilities::MosUserFeatureNotifyChangeKeyValue(nullptr, false, nullptr, true);
251 }
252
253- if ( ( eStatus = UserFeatureSet(&pKeyList, NewKey)) == MOS_STATUS_SUCCESS )
254- {
255- eStatus = UserFeatureDumpDataToFile(m_szUserFeatureFile, pKeyList);
256- }
257-
258- UserFeatureFreeKeyList(pKeyList);
259 return eStatus;
260 }
261
262@@ -1114,9 +1099,9 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureQueryValue(
263 char strTempValueName[MAX_USERFEATURE_LINE_LENGTH];
264
265 eStatus = MOS_STATUS_UNKNOWN;
266- pKeyList = nullptr;
267+ pKeyList = MosUtilitiesSpecificNext::m_ufKeyList;
268
269- if ( (strKey == nullptr) || (pcValueName == nullptr))
270+ if ( (strKey == nullptr) || (pcValueName == nullptr) || (pKeyList == nullptr))
271 {
272 return MOS_STATUS_INVALID_PARAMETER;
273 }
274@@ -1129,21 +1114,17 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureQueryValue(
275 NewKey.pValueArray = &NewValue;
276 NewKey.ulValueNum = 1;
277
278- if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) == MOS_STATUS_SUCCESS)
279+ if ( (eStatus = UserFeatureQuery(pKeyList, &NewKey)) == MOS_STATUS_SUCCESS )
280 {
281- if ( (eStatus = UserFeatureQuery(pKeyList, &NewKey)) == MOS_STATUS_SUCCESS )
282+ if(uiValueType != nullptr)
283 {
284- if(uiValueType != nullptr)
285- {
286- *uiValueType = NewKey.pValueArray[0].ulValueType;
287- }
288- if (nDataSize != nullptr)
289- {
290- *nDataSize = NewKey.pValueArray[0].ulValueLen;
291- }
292+ *uiValueType = NewKey.pValueArray[0].ulValueType;
293+ }
294+ if (nDataSize != nullptr)
295+ {
296+ *nDataSize = NewKey.pValueArray[0].ulValueLen;
297 }
298 }
299- UserFeatureFreeKeyList(pKeyList);
300
301 return eStatus;
302 }
303@@ -1155,16 +1136,9 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyIdbyName(const char *pcKe
304 MOS_STATUS eStatus;
305 MOS_PUF_KEYLIST pTempNode;
306
307- pKeyList = nullptr;
308+ pKeyList = MosUtilitiesSpecificNext::m_ufKeyList;
309 iResult = -1;
310
311- if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) !=
312- MOS_STATUS_SUCCESS )
313- {
314- UserFeatureFreeKeyList(pKeyList);
315- return eStatus;
316- }
317-
318 eStatus = MOS_STATUS_INVALID_PARAMETER;
319
320 for(pTempNode=pKeyList; pTempNode; pTempNode=pTempNode->pNext)
321@@ -1177,7 +1151,6 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyIdbyName(const char *pcKe
322 break;
323 }
324 }
325- UserFeatureFreeKeyList(pKeyList);
326
327 return eStatus;
328 }
329@@ -1188,7 +1161,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyNamebyId(void *UFKey, cha
330 MOS_PUF_KEYLIST pTempNode;
331 MOS_STATUS eStatus;
332
333- pKeyList = nullptr;
334+ pKeyList = MosUtilitiesSpecificNext::m_ufKeyList;
335
336 switch((uintptr_t)UFKey)
337 {
338@@ -1201,13 +1174,6 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyNamebyId(void *UFKey, cha
339 eStatus = MOS_STATUS_SUCCESS;
340 break;
341 default:
342- if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) !=
343- MOS_STATUS_SUCCESS )
344- {
345- UserFeatureFreeKeyList(pKeyList);
346- return eStatus;
347- }
348-
349 eStatus = MOS_STATUS_UNKNOWN;
350
351 for(pTempNode=pKeyList;pTempNode;pTempNode=pTempNode->pNext)
352@@ -1219,7 +1185,6 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyNamebyId(void *UFKey, cha
353 break;
354 }
355 }
356- UserFeatureFreeKeyList(pKeyList);
357 break;
358 }
359
360@@ -1364,6 +1329,7 @@ MOS_STATUS MosUtilities::MosOsUtilitiesInit(MOS_CONTEXT_HANDLE mosCtx)
361 //Init MOS User Feature Key from mos desc table
362 eStatus = MosDeclareUserFeatureKeysForAllDescFields();
363
364+ MosUtilitiesSpecificNext::UserFeatureDumpFile(MosUtilitiesSpecificNext::m_szUserFeatureFile, &MosUtilitiesSpecificNext::m_ufKeyList);
365 #if _MEDIA_RESERVED
366 m_codecUserFeatureExt = new CodechalUserSettingsMgr();
367 m_vpUserFeatureExt = new VphalUserSettingsMgr();
368@@ -1425,6 +1391,9 @@ MOS_STATUS MosUtilities::MosOsUtilitiesClose(MOS_CONTEXT_HANDLE mosCtx)
369 // so if there still is another active lib instance, logs would still be printed.
370 MosUtilDebug::MosMessageClose();
371 #endif
372+ MosUtilitiesSpecificNext::UserFeatureDumpDataToFile(MosUtilitiesSpecificNext::m_szUserFeatureFile, MosUtilitiesSpecificNext::m_ufKeyList);
373+ MosUtilitiesSpecificNext::UserFeatureFreeKeyList(MosUtilitiesSpecificNext::m_ufKeyList);
374+ MosUtilitiesSpecificNext::m_ufKeyList = nullptr;
375 }
376 m_mutexLock.Unlock();
377 return eStatus;
378diff --git a/media_softlet/linux/common/os/mos_utilities_specific_next.h b/media_softlet/linux/common/os/mos_utilities_specific_next.h
379index 792123a6..878ce4e6 100644
380--- a/media_softlet/linux/common/os/mos_utilities_specific_next.h
381+++ b/media_softlet/linux/common/os/mos_utilities_specific_next.h
382@@ -110,6 +110,41 @@ static MOS_STATUS MosUserFeatureOpenKeyFile(
383 uint32_t samDesired,
384 void **phkResult);
385
386+/*----------------------------------------------------------------------------
387+ | Name : UserFeatureDumpFile
388+ | Purpose : This function read the whole User Feature File and dump User Feature File
389+ | data to key linked list.
390+ | Arguments : szFileName [in] User Feature File name.
391+ | pKeyList [out] Key Linked list.
392+ | Returns : MOS_STATUS_SUCCESS Operation success.
393+ | MOS_STATUS_USER_FEATURE_KEY_READ_FAILED User Feature File can't be open as read.
394+ | MOS_STATUS_NO_SPACE no space left for allocate
395+ | MOS_STATUS_UNKNOWN unknown user feature type found in User Feature File
396+ | MOS_STATUS_INVALID_PARAMETER unknown items found in User Feature File
397+ | Comments :
398+ \---------------------------------------------------------------------------*/
399+static MOS_STATUS UserFeatureDumpFile(const char *const szFileName, MOS_PUF_KEYLIST *pKeyList);
400+
401+/*----------------------------------------------------------------------------
402+| Name : UserFeatureDumpDataToFile
403+| Purpose : This function dump key linked list data to File.
404+| Arguments : szFileName [in] A handle to the File.
405+| pKeyList [in] Reserved, any LPDWORD type value.
406+| Returns : MOS_STATUS_SUCCESS Operation success.
407+| MOS_STATUS_USER_FEATURE_KEY_WRITE_FAILED File can't be written.
408+| Comments :
409+\---------------------------------------------------------------------------*/
410+
411+static MOS_STATUS UserFeatureDumpDataToFile(const char *szFileName, MOS_PUF_KEYLIST pKeyList);
412+
413+/*----------------------------------------------------------------------------
414+| Name : UserFeatureFreeKeyList
415+| Purpose : Free key list
416+| Arguments : pKeyList [in] key list to be free.
417+| Returns : None
418+| Comments :
419+\---------------------------------------------------------------------------*/
420+static void UserFeatureFreeKeyList(MOS_PUF_KEYLIST pKeyList);
421
422 private:
423
424@@ -174,41 +209,6 @@ private:
425
426 static MOS_STATUS UserFeatureReadNextTokenFromFile(FILE *pFile, const char *szFormat, char *szToken);
427
428- /*----------------------------------------------------------------------------
429- | Name : UserFeatureDumpFile
430- | Purpose : This function read the whole User Feature File and dump User Feature File
431- | data to key linked list.
432- | Arguments : szFileName [in] User Feature File name.
433- | pKeyList [out] Key Linked list.
434- | Returns : MOS_STATUS_SUCCESS Operation success.
435- | MOS_STATUS_USER_FEATURE_KEY_READ_FAILED User Feature File can't be open as read.
436- | MOS_STATUS_NO_SPACE no space left for allocate
437- | MOS_STATUS_UNKNOWN unknown user feature type found in User Feature File
438- | MOS_STATUS_INVALID_PARAMETER unknown items found in User Feature File
439- | Comments :
440- \---------------------------------------------------------------------------*/
441- static MOS_STATUS UserFeatureDumpFile(const char * const szFileName, MOS_PUF_KEYLIST* pKeyList);
442-
443- /*----------------------------------------------------------------------------
444- | Name : UserFeatureDumpDataToFile
445- | Purpose : This function dump key linked list data to File.
446- | Arguments : szFileName [in] A handle to the File.
447- | pKeyList [in] Reserved, any LPDWORD type value.
448- | Returns : MOS_STATUS_SUCCESS Operation success.
449- | MOS_STATUS_USER_FEATURE_KEY_WRITE_FAILED File can't be written.
450- | Comments :
451- \---------------------------------------------------------------------------*/
452- static MOS_STATUS UserFeatureDumpDataToFile(const char *szFileName, MOS_PUF_KEYLIST pKeyList);
453-
454- /*----------------------------------------------------------------------------
455- | Name : UserFeatureFreeKeyList
456- | Purpose : Free key list
457- | Arguments : pKeyList [in] key list to be free.
458- | Returns : None
459- | Comments :
460- \---------------------------------------------------------------------------*/
461- static void UserFeatureFreeKeyList(MOS_PUF_KEYLIST pKeyList);
462-
463 /*----------------------------------------------------------------------------
464 | Name : UserFeatureSetValue
465 | Purpose : Modify or add a value of the specified user feature key.
466@@ -290,6 +290,7 @@ private:
467
468 public:
469 static const char* m_szUserFeatureFile;
470+ static MOS_PUF_KEYLIST m_ufKeyList;
471 static int32_t m_mosTraceFd;
472 static const char* const m_mosTracePath;
473 static std::map<std::string, std::map<std::string, std::string>> m_regBuffer;
474--
4752.31.1
476
diff --git a/recipes-multimedia/libva/files/0002-Force-ARGB-surface-to-tile4-for-ACM.patch b/recipes-multimedia/libva/files/0002-Force-ARGB-surface-to-tile4-for-ACM.patch
new file mode 100644
index 00000000..df3d9805
--- /dev/null
+++ b/recipes-multimedia/libva/files/0002-Force-ARGB-surface-to-tile4-for-ACM.patch
@@ -0,0 +1,44 @@
1From 1580f01ec5ad5afdad58c39dded999494275be10 Mon Sep 17 00:00:00 2001
2From: Lim Siew Hoon <siew.hoon.lim@intel.com>
3Date: Wed, 11 Oct 2023 15:36:21 +0800
4Subject: [PATCH 02/12] Force ARGB surface to tile4 for ACM
5
6Upstream-Status: Submitted [https://github.com/intel/media-driver/pull/1728]
7
8Signed-off-by: Soon, Thean Siew <thean.siew.soon@intel.com>
9Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com>
10---
11 media_driver/linux/common/ddi/media_libva_util.cpp | 10 ++++++++++
12 1 file changed, 10 insertions(+)
13
14diff --git a/media_driver/linux/common/ddi/media_libva_util.cpp b/media_driver/linux/common/ddi/media_libva_util.cpp
15index 63c173419..73be76366 100755
16--- a/media_driver/linux/common/ddi/media_libva_util.cpp
17+++ b/media_driver/linux/common/ddi/media_libva_util.cpp
18@@ -504,6 +504,7 @@ VAStatus DdiMediaUtil_AllocateSurface(
19 gmmCustomParams.Flags.Gpu.UnifiedAuxSurface = 0;
20 }
21 }
22+
23 break;
24 case TILING_X:
25 gmmCustomParams.Flags.Info.TiledX = true;
26@@ -685,6 +686,15 @@ VAStatus DdiMediaUtil_AllocateSurface(
27 }
28 }
29 }
30+ // There's no VAAPI interface for modifier query yet. As a workaround, always allocate
31+ // RGB surface as tile4.
32+ if ((format == Media_Format_A8R8G8B8 ||
33+ format == Media_Format_B10G10R10A2 |
34+ format == Media_Format_A8B8G8R8 ||
35+ format == Media_Format_X8R8G8B8) && !MEDIA_IS_SKU(&mediaDrvCtx->SkuTable, FtrTileY))
36+ {
37+ gmmParams.Flags.Info.Tile4 = true;
38+ }
39 break;
40 case TILING_X:
41 gmmParams.Flags.Info.TiledX = true;
42--
432.40.1
44
diff --git a/recipes-multimedia/libva/files/8aa866dc650e6b0e0b7425bafc7b1039232c377a.patch b/recipes-multimedia/libva/files/8aa866dc650e6b0e0b7425bafc7b1039232c377a.patch
new file mode 100644
index 00000000..17b2d635
--- /dev/null
+++ b/recipes-multimedia/libva/files/8aa866dc650e6b0e0b7425bafc7b1039232c377a.patch
@@ -0,0 +1,154 @@
1From 8aa866dc650e6b0e0b7425bafc7b1039232c377a Mon Sep 17 00:00:00 2001
2From: "Xu, Zhengguo" <zhengguo.xu@intel.com>
3Date: Tue, 16 Apr 2024 09:53:41 +0800
4Subject: [PATCH] [Decode] Correct condition check when dump avc mv buffer
5
6Fixes: #1791
7Signed-off-by: Xu, Zhengguo <zhengguo.xu@intel.com>
8
9Upstream-Status: Backport [https://github.com/intel/media-driver/commit/8aa866dc650e6b0e0b7425bafc7b1039232c377a]
10Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
11---
12 .../common/codec/hal/codechal_decode_avc.cpp | 33 ++++++++-----------
13 .../decode_avc_picture_xe_m_base_packet.cpp | 28 +++++++---------
14 .../avc/packet/decode_avc_picture_packet.cpp | 30 +++++++----------
15 3 files changed, 37 insertions(+), 54 deletions(-)
16
17diff --git a/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp b/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp
18index 3adf6994ce..4bac426802 100644
19--- a/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp
20+++ b/media_driver/agnostic/common/codec/hal/codechal_decode_avc.cpp
21@@ -1619,28 +1619,23 @@ MOS_STATUS CodechalDecodeAvc::InitPicMhwParams(
22 uint8_t picID = picMhwParams->AvcDirectmodeParams.bPicIdRemappingInUse ? i : refList[idx]->ucFrameId;
23 uint8_t mvIdx = refList[idx]->ucDMVIdx[0];
24
25- if (&picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[i] != nullptr)
26- {
27- // dump Reference mvdata
28- std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(i);
29- CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
30- &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[mvIdx],
31- CodechalDbgAttr::attrMvData,
32- mvBufDumpName.c_str(),
33- m_avcDmvBufferSize));
34- }
35+ // dump Reference mvdata
36+ std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(i);
37+ CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
38+ &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[mvIdx],
39+ CodechalDbgAttr::attrMvData,
40+ mvBufDumpName.c_str(),
41+ m_avcDmvBufferSize));
42 }
43 }
44
45- if (&picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[picMhwParams->AvcDirectmodeParams.ucAvcDmvIdx])
46- {
47- // dump Current mvdata
48- CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
49- &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[picMhwParams->AvcDirectmodeParams.ucAvcDmvIdx],
50- CodechalDbgAttr::attrMvData,
51- "DEC_Cur_MV_",
52- m_avcDmvBufferSize));
53- });
54+ // dump Current mvdata
55+ CODECHAL_DECODE_CHK_STATUS_RETURN(m_debugInterface->DumpBuffer(
56+ &picMhwParams->AvcDirectmodeParams.presAvcDmvBuffers[picMhwParams->AvcDirectmodeParams.ucAvcDmvIdx],
57+ CodechalDbgAttr::attrMvData,
58+ "DEC_Cur_MV_",
59+ m_avcDmvBufferSize));
60+ );
61
62 return eStatus;
63 }
64diff --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
65index bd0611f6fa..035a7e6149 100644
66--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/packet/decode_avc_picture_xe_m_base_packet.cpp
67+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_M_base/codec/hal/dec/avc/packet/decode_avc_picture_xe_m_base_packet.cpp
68@@ -589,26 +589,20 @@ namespace decode{
69 {
70 if (m_avcBasicFeature->m_refFrames.m_avcPicIdx[n].bValid)
71 {
72- if (&avcDirectmodeParams.presAvcDmvBuffers[n+1] != nullptr)
73- {
74- std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
75- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
76- &avcDirectmodeParams.presAvcDmvBuffers[n+1],
77- CodechalDbgAttr::attrMvData,
78- mvBufDumpName.c_str(),
79- mvBufferSize));
80- }
81+ std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
82+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
83+ &avcDirectmodeParams.presAvcDmvBuffers[n+1],
84+ CodechalDbgAttr::attrMvData,
85+ mvBufDumpName.c_str(),
86+ mvBufferSize));
87 }
88 }
89
90- if (&avcDirectmodeParams.presAvcDmvBuffers[0] != nullptr)
91- {
92- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
93- &avcDirectmodeParams.presAvcDmvBuffers[0],
94- CodechalDbgAttr::attrMvData,
95- "DEC_Cur_MV_",
96- mvBufferSize));
97- }
98+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
99+ &avcDirectmodeParams.presAvcDmvBuffers[0],
100+ CodechalDbgAttr::attrMvData,
101+ "DEC_Cur_MV_",
102+ mvBufferSize));
103 return MOS_STATUS_SUCCESS;
104 }
105
106diff --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
107index 88ed0bb832..8cdc05e585 100644
108--- a/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_picture_packet.cpp
109+++ b/media_softlet/agnostic/common/codec/hal/dec/avc/packet/decode_avc_picture_packet.cpp
110@@ -646,26 +646,20 @@ MOS_STATUS AvcDecodePicPkt::DumpResources(uint32_t mvBufferSize) const
111 CodechalDbgAttr::attrDecodeReferenceSurfaces,
112 refSurfName.c_str()));
113
114- if (&mvParam.presAvcDmvBuffers[n+1] != nullptr)
115- {
116- std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
117- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
118- &mvParam.presAvcDmvBuffers[n+1],
119- CodechalDbgAttr::attrMvData,
120- mvBufDumpName.c_str(),
121- mvBufferSize));
122- }
123+ std::string mvBufDumpName = "_DEC_Ref_MV_" + std::to_string(n);
124+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
125+ &mvParam.presAvcDmvBuffers[n+1],
126+ CodechalDbgAttr::attrMvData,
127+ mvBufDumpName.c_str(),
128+ mvBufferSize));
129 }
130 }
131
132- if (&mvParam.presAvcDmvBuffers[0] != nullptr)
133- {
134- DECODE_CHK_STATUS(debugInterface->DumpBuffer(
135- &mvParam.presAvcDmvBuffers[0],
136- CodechalDbgAttr::attrMvData,
137- "DEC_Cur_MV_",
138- mvBufferSize));
139- }
140+ DECODE_CHK_STATUS(debugInterface->DumpBuffer(
141+ &mvParam.presAvcDmvBuffers[0],
142+ CodechalDbgAttr::attrMvData,
143+ "DEC_Cur_MV_",
144+ mvBufferSize));
145
146 return MOS_STATUS_SUCCESS;
147 }
148@@ -699,4 +693,4 @@ MOS_STATUS AvcDecodePicPkt::SetSurfaceMmcState() const
149 return MOS_STATUS_SUCCESS;
150 }
151
152-} // namespace decode
153\ No newline at end of file
154+} // namespace decode