xref: /aosp_15_r20/external/intel-media-driver/media_softlet/agnostic/common/hw/vdbox/mhw_vdbox_avp_impl.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2020-2023, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     mhw_vdbox_avp_impl.h
24 //! \brief    MHW VDBOX AVP interface common base
25 //! \details
26 //!
27 
28 #ifndef __MHW_VDBOX_AVP_IMPL_H__
29 #define __MHW_VDBOX_AVP_IMPL_H__
30 
31 #include "mhw_vdbox_avp_itf.h"
32 #include "mhw_impl.h"
33 #include "mos_interface.h"
34 
35 namespace mhw
36 {
37 namespace vdbox
38 {
39 namespace avp
40 {
41 static constexpr uint32_t AVP_AVP_BITSTREAM_BYTECOUNT_TILE_WITH_HEADER_AWM_REG0       = 0x1C2B48;
42 static constexpr uint32_t AVP_ENC_BITSTREAM_BYTE_COUNT_TILE_NO_HEADER_REG_OFFSET_INIT = 0x1C2B4C;
43 static constexpr uint32_t AVP_ENC_CABAC_BIN_COUNT_TILE_REG_OFFSET_INIT                = 0x1C2B50;
44 static constexpr uint32_t AVP_ENC_CABAC_INSERTION_COUNT_REG_OFFSET_INIT               = 0x1C2B54;
45 static constexpr uint32_t AVP_ENC_MIN_SIZE_PADDING_COUNT_REG_OFFSET_INIT              = 0x1C2B58;
46 static constexpr uint32_t AVP_ENC_IMAGE_STATUS_MASK_REG_OFFSET_INIT                   = 0x1C2B5C;
47 static constexpr uint32_t AVP_ENC_IMAGE_STATUS_CONTROL_REG_OFFSET_INIT                = 0x1C2B60;
48 static constexpr uint32_t AVP_ENC_QP_STATUS_COUNT_REG_OFFSET_INIT                     = 0x1C2B64;
49 static constexpr uint32_t AVP_DEC_ERROR_STATUS_ADDR_REG_OFFSET_INIT                   = 0x1C2B08;
50 
51 static constexpr uint32_t MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK = 0xFFFFFF81;
52 
53 template <typename cmd_t>
54 class Impl : public Itf, public mhw::Impl
55 {
56     _AVP_CMD_DEF(_MHW_CMD_ALL_DEF_FOR_IMPL);
57 
58 public:
SetCacheabilitySettings(MHW_MEMORY_OBJECT_CONTROL_PARAMS settings[MOS_CODEC_RESOURCE_USAGE_END_CODEC])59     MOS_STATUS SetCacheabilitySettings(MHW_MEMORY_OBJECT_CONTROL_PARAMS settings[MOS_CODEC_RESOURCE_USAGE_END_CODEC]) override
60     {
61         MHW_FUNCTION_ENTER;
62 
63         MHW_CHK_NULL_RETURN(settings);
64 
65         size_t size = MOS_CODEC_RESOURCE_USAGE_END_CODEC * sizeof(MHW_MEMORY_OBJECT_CONTROL_PARAMS);
66 
67         return MOS_SecureMemcpy(m_cacheabilitySettings, size, settings, size);
68     }
69 
GetAvpBufSize(AvpBufferType bufferType,AvpBufferSizePar * avpBufSizeParam)70     MOS_STATUS GetAvpBufSize(AvpBufferType bufferType, AvpBufferSizePar *avpBufSizeParam) override
71     {
72         MHW_FUNCTION_ENTER;
73 
74         MHW_MI_CHK_NULL(avpBufSizeParam);
75         MHW_ASSERT(avpBufSizeParam->bitDepthIdc == 0 || avpBufSizeParam->bitDepthIdc == 1);
76 
77         uint32_t bufferSize = 0;
78 
79         MHW_MI_CHK_STATUS(CalculateBufferSize(bufferType, avpBufSizeParam, avpBufferSize, avpBufferSizeExt, bufferSize));
80 
81         avpBufSizeParam->bufferSize = bufferSize * MHW_CACHELINE_SIZE;
82 
83         return MOS_STATUS_SUCCESS;
84     }
85 
CalculateBufferSize(AvpBufferType bufferType,AvpBufferSizePar * avpBufSizeParam,const uint8_t avpBufferSizeTbl[][2][2],const uint8_t avpBufferSizeExtTbl[][2][2],uint32_t & bufferSize)86     MOS_STATUS CalculateBufferSize(AvpBufferType    bufferType,
87                                    AvpBufferSizePar *avpBufSizeParam,
88                                    const uint8_t    avpBufferSizeTbl[][2][2],
89                                    const uint8_t    avpBufferSizeExtTbl[][2][2],
90                                    uint32_t         &bufferSize)
91     {
92         MHW_FUNCTION_ENTER;
93 
94         uint32_t sbPerFrmWid     = avpBufSizeParam->width;
95         uint32_t sbPerFrmHgt     = avpBufSizeParam->height;
96         uint32_t sbPerTileWid    = avpBufSizeParam->tileWidth;
97         uint32_t totalSbPerFrame = sbPerFrmWid * sbPerFrmHgt;
98         uint32_t index           = (uint32_t)bufferType;
99         uint32_t maxCuPerSB      = avpBufSizeParam->isSb128x128 ? 256 : 64;
100 
101         switch (bufferType)
102         {
103             //Rowstore buffers, Total CLs = (#CLs_per_SB * num_of_SB_per_tile_width)
104             case bsdLineBuffer:
105             case spatialMvLineBuffer:
106             case intraPredLineBuffer:
107             case deblockLineYBuffer:
108             case deblockLineUBuffer:
109             case deblockLineVBuffer:
110                 bufferSize = sbPerTileWid * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
111                 break;
112             case cdefLineBuffer:
113                 bufferSize = sbPerTileWid * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128]
114                     + avpBufferSizeExtTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
115                 break;
116                 //Tile storage - tile line buffers, Total CLs = (#CLs_per_SB * num_of_SB_per_row) = (#CLs_per_SB * num_of_SB_per_frame_width)
117             case bsdTileLineBuffer:
118             case spatialMvTileLineBuffer:
119             case intraPredTileLineBuffer:
120             case deblockTileLineYBuffer:
121             case deblockTileLineUBuffer:
122             case deblockTileLineVBuffer:
123                 bufferSize = sbPerFrmWid * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
124                 break;
125                 //Tile storage - tile column buffers, Total CLs = (#CLs_per_SB * num_of_SB_per_column) = (#CLs_per_SB * num_of_SB_per_frame_height)
126             case deblockTileColYBuffer:
127             case deblockTileColUBuffer:
128             case deblockTileColVBuffer:
129                 bufferSize = sbPerFrmHgt * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
130                 break;
131                 // Tile storage, per tile number
132             case cdefTopLeftCornerBuffer:
133                 bufferSize = avpBufSizeParam->curFrameTileNum * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
134                 break;
135             case cdefMetaTileLineBuffer:
136                 bufferSize = avpBufSizeParam->numTileCol;
137                 break;
138             case lrTileLineYBuffer:
139                 bufferSize = avpBufSizeParam->numTileCol * 7;
140                 break;
141             case lrTileLineUBuffer:
142             case lrTileLineVBuffer:
143                 bufferSize = avpBufSizeParam->numTileCol * 5;
144                 break;
145                 // Tile storage, - tile line buffers, with extra size
146             case cdefTileLineBuffer:
147                 bufferSize = sbPerFrmWid * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128]
148                     + avpBufferSizeExtTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
149                 break;
150                 // Tile storage, - tile column buffers, with extra size
151             case cdefTileColBuffer:
152             case cdefMetaTileColBuffer:
153             case superResTileColYBuffer:
154             case superResTileColUBuffer:
155             case superResTileColVBuffer:
156             case lrTileColYBuffer:
157             case lrTileColUBuffer:
158             case lrTileColVBuffer:
159             case lrMetaTileColBuffer:
160                 bufferSize = sbPerFrmHgt * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128]
161                     + avpBufferSizeExtTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
162                 break;
163                 //frame buffer
164             case segmentIdBuffer:
165                 bufferSize = ((avpBufSizeParam->isSb128x128)? 8 : 2) * totalSbPerFrame;
166                 break;
167             case mvTemporalBuffer:
168                 bufferSize = ((avpBufSizeParam->isSb128x128) ? 16 : 4) * totalSbPerFrame;
169                 break;
170             case frameStatusErrBuffer:
171             case dbdStreamoutBuffer:
172                 bufferSize = 1;
173                 break;
174             case tileSzStreamOutBuffer:
175                 bufferSize = avpBufSizeParam->numTileCol * avpBufSizeParam->numTileCol * MHW_CACHELINE_SIZE;
176                 break;
177             case tileStatStreamOutBuffer:
178                 bufferSize = 512;
179                 break;
180             case cuStreamoutBuffer:
181                 bufferSize = MOS_ALIGN_CEIL(totalSbPerFrame * maxCuPerSB * 8, MHW_CACHELINE_SIZE); // Each CU streams out 8 bytes
182                 break;
183             case sseLineBuffer:
184             case sseTileLineBuffer:
185                 if (avpBufSizeParam->numOfActivePipes > 1)
186                 {
187                     // To be added for scalability case
188                 }
189                 else
190                 {
191                     bufferSize = (sbPerFrmWid + 3) * MHW_CACHELINE_SIZE * (8 + 8) << 1; // 8 for Luma, 8 for Chroma
192                 }
193                 break;
194             case lrTileColAlignBuffer:
195             case fgTileColBuffer:
196                 bufferSize = sbPerFrmHgt * avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128]
197                     + avpBufferSizeExtTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
198                 break;
199             case fgSampleTmpBuffer:
200                 bufferSize = avpBufferSizeTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128]
201                     + avpBufferSizeExtTbl[index][avpBufSizeParam->bitDepthIdc][avpBufSizeParam->isSb128x128];
202                 break;
203             default:
204                 return MOS_STATUS_INVALID_PARAMETER;
205         }
206 
207         return MOS_STATUS_SUCCESS;
208     }
209 
IsRowStoreCachingSupported()210     bool IsRowStoreCachingSupported() override
211     {
212         return m_rowstoreCachingSupported;
213     }
214 
IsBufferRowstoreCacheEnabled(AvpBufferType bufferType)215     bool IsBufferRowstoreCacheEnabled(AvpBufferType bufferType) override
216     {
217         bool rowstoreCacheEnabled = false;
218         switch (bufferType)
219         {
220             case bsdLineBuffer:
221                 rowstoreCacheEnabled = m_btdlRowstoreCache.enabled ? true : false;
222                 break;
223             case spatialMvLineBuffer:
224                 rowstoreCacheEnabled = m_smvlRowstoreCache.enabled ? true : false;
225                 break;
226             case intraPredLineBuffer:
227                 rowstoreCacheEnabled = m_ipdlRowstoreCache.enabled ? true : false;
228                 break;
229             case deblockLineYBuffer:
230                 rowstoreCacheEnabled = m_dflyRowstoreCache.enabled ? true : false;
231                 break;
232             case deblockLineUBuffer:
233                 rowstoreCacheEnabled = m_dfluRowstoreCache.enabled ? true : false;
234                 break;
235             case deblockLineVBuffer:
236                 rowstoreCacheEnabled = m_dflvRowstoreCache.enabled ? true : false;
237                 break;
238             case cdefLineBuffer:
239                 rowstoreCacheEnabled = m_cdefRowstoreCache.enabled ? true : false;
240                 break;
241             default:
242                 return false;
243         }
244 
245         return rowstoreCacheEnabled;
246     }
247 
GetAvpStateCmdSize(uint32_t * commandsSize,uint32_t * patchListSize,PMHW_VDBOX_STATE_CMDSIZE_PARAMS params)248     MOS_STATUS GetAvpStateCmdSize(uint32_t* commandsSize, uint32_t* patchListSize, PMHW_VDBOX_STATE_CMDSIZE_PARAMS params) override
249     {
250         // Just return success here, please implement logic in platform sepecific impl class.
251         return MOS_STATUS_SUCCESS;
252     }
253 
GetAvpPrimitiveCmdSize(uint32_t * commandsSize,uint32_t * patchListSize,PMHW_VDBOX_STATE_CMDSIZE_PARAMS params)254     MOS_STATUS GetAvpPrimitiveCmdSize(uint32_t* commandsSize, uint32_t* patchListSize, PMHW_VDBOX_STATE_CMDSIZE_PARAMS params) override
255     {
256         // Just return success here, please implement logic in platform sepecific impl class.
257         return MOS_STATUS_SUCCESS;
258     }
259 
GetMmioRegisters(MHW_VDBOX_NODE_IND index)260     AvpMmioRegisters* GetMmioRegisters(MHW_VDBOX_NODE_IND index) override
261     {
262         if (index < MHW_VDBOX_NODE_MAX)
263         {
264             return (&m_mmioRegisters[index]);
265         }
266         else
267         {
268             MHW_ASSERT("index is out of range!");
269             return (&m_mmioRegisters[MHW_VDBOX_NODE_1]);
270         }
271     }
272 
273 private:
274     bool                 m_rowstoreCachingSupported            = false;
275     AvpMmioRegisters     m_mmioRegisters[MHW_VDBOX_NODE_MAX]   = {};    //!< AVP mmio registers
276 
InitMmioRegisters()277     void InitMmioRegisters()
278     {
279         AvpMmioRegisters *mmioRegisters = &m_mmioRegisters[MHW_VDBOX_NODE_1];
280 
281         mmioRegisters->avpAv1BitstreamByteCountTileRegOffset         = AVP_AVP_BITSTREAM_BYTECOUNT_TILE_WITH_HEADER_AWM_REG0;
282         mmioRegisters->avpAv1BitstreamByteCountTileNoHeaderRegOffset = AVP_ENC_BITSTREAM_BYTE_COUNT_TILE_NO_HEADER_REG_OFFSET_INIT;
283         mmioRegisters->avpAv1CabacBinCountTileRegOffset              = AVP_ENC_CABAC_BIN_COUNT_TILE_REG_OFFSET_INIT;
284         mmioRegisters->avpAv1CabacInsertionCountRegOffset            = AVP_ENC_CABAC_INSERTION_COUNT_REG_OFFSET_INIT;
285         mmioRegisters->avpAv1MinSizePaddingCountRegOffset            = AVP_ENC_MIN_SIZE_PADDING_COUNT_REG_OFFSET_INIT;
286         mmioRegisters->avpAv1ImageStatusMaskRegOffset                = AVP_ENC_IMAGE_STATUS_MASK_REG_OFFSET_INIT;
287         mmioRegisters->avpAv1ImageStatusControlRegOffset             = AVP_ENC_IMAGE_STATUS_CONTROL_REG_OFFSET_INIT;
288         mmioRegisters->avpAv1QpStatusCountRegOffset                  = AVP_ENC_QP_STATUS_COUNT_REG_OFFSET_INIT;
289         mmioRegisters->avpAv1DecErrorStatusAddrRegOffset             = AVP_DEC_ERROR_STATUS_ADDR_REG_OFFSET_INIT;
290 
291         m_mmioRegisters[MHW_VDBOX_NODE_2] = m_mmioRegisters[MHW_VDBOX_NODE_1];
292     }
293 
InitRowstoreUserFeatureSettings()294     MOS_STATUS InitRowstoreUserFeatureSettings()
295     {
296         MHW_FUNCTION_ENTER;
297 
298         bool rowstoreCachingDisableDefaultValue = false;
299         if (m_osItf->bSimIsActive)
300         {
301             // Disable RowStore Cache on simulation by default
302             rowstoreCachingDisableDefaultValue = true;
303         }
304         else
305         {
306             rowstoreCachingDisableDefaultValue = false;
307         }
308         m_rowstoreCachingSupported = !rowstoreCachingDisableDefaultValue;
309 #if (_DEBUG || _RELEASE_INTERNAL)
310         auto userSettingPtr = m_osItf->pfnGetUserSettingInstance(m_osItf);
311         {
312             MediaUserSetting::Value outValue;
313             ReadUserSettingForDebug(userSettingPtr,
314                 outValue,
315                 "Disable RowStore Cache",
316                 MediaUserSetting::Group::Device,
317                 rowstoreCachingDisableDefaultValue,
318                 true);
319             m_rowstoreCachingSupported = !(outValue.Get<bool>());
320         }
321 #endif  // _DEBUG || _RELEASE_INTERNAL
322 
323         if (m_rowstoreCachingSupported)
324         {
325             m_btdlRowstoreCache.supported = true;
326 #if (_DEBUG || _RELEASE_INTERNAL)
327             {
328                 MediaUserSetting::Value outValue;
329                 ReadUserSettingForDebug(userSettingPtr,
330                     outValue,
331                     "DisableAv1BtdlRowstoreCache",
332                     MediaUserSetting::Group::Device);
333                 m_btdlRowstoreCache.supported = !(outValue.Get<bool>());
334             }
335 #endif // _DEBUG || _RELEASE_INTERNAL
336 
337             m_smvlRowstoreCache.supported = true;
338 #if (_DEBUG || _RELEASE_INTERNAL)
339             {
340                 MediaUserSetting::Value outValue;
341                 ReadUserSettingForDebug(userSettingPtr,
342                     outValue,
343                     "DisableAv1SmvlRowstoreCache",
344                     MediaUserSetting::Group::Device);
345                 m_smvlRowstoreCache.supported = !(outValue.Get<bool>());
346             }
347 #endif // _DEBUG || _RELEASE_INTERNAL
348 
349             m_ipdlRowstoreCache.supported = true;
350 #if (_DEBUG || _RELEASE_INTERNAL)
351             {
352                 MediaUserSetting::Value outValue;
353                 ReadUserSettingForDebug(userSettingPtr,
354                     outValue,
355                     "DisableAv1IpdlRowstoreCache",
356                     MediaUserSetting::Group::Device);
357                 m_ipdlRowstoreCache.supported = !(outValue.Get<bool>());
358             }
359 #endif // _DEBUG || _RELEASE_INTERNAL
360 
361             m_dflyRowstoreCache.supported = true;
362 #if (_DEBUG || _RELEASE_INTERNAL)
363             {
364                 MediaUserSetting::Value outValue;
365                 ReadUserSettingForDebug(userSettingPtr,
366                     outValue,
367                     "DisableAv1DflyRowstoreCache",
368                     MediaUserSetting::Group::Device);
369                 m_dflyRowstoreCache.supported = !(outValue.Get<bool>());
370             }
371 #endif // _DEBUG || _RELEASE_INTERNAL
372 
373             m_dfluRowstoreCache.supported = true;
374 #if (_DEBUG || _RELEASE_INTERNAL)
375             {
376                 MediaUserSetting::Value outValue;
377                 ReadUserSettingForDebug(userSettingPtr,
378                     outValue,
379                     "DisableAv1DfluRowstoreCache",
380                     MediaUserSetting::Group::Device);
381                 m_dfluRowstoreCache.supported = !(outValue.Get<bool>());
382             }
383 #endif // _DEBUG || _RELEASE_INTERNAL
384 
385             m_dflvRowstoreCache.supported = true;
386 #if (_DEBUG || _RELEASE_INTERNAL)
387             {
388                 MediaUserSetting::Value outValue;
389                 ReadUserSettingForDebug(userSettingPtr,
390                     outValue,
391                     "DisableAv1DflvRowstoreCache",
392                     MediaUserSetting::Group::Device);
393                 m_dflvRowstoreCache.supported = !(outValue.Get<bool>());
394             }
395 #endif // _DEBUG || _RELEASE_INTERNAL
396 
397             m_cdefRowstoreCache.supported = true;
398 #if (_DEBUG || _RELEASE_INTERNAL)
399             {
400                 MediaUserSetting::Value outValue;
401                 ReadUserSettingForDebug(userSettingPtr,
402                     outValue,
403                     "DisableAv1CdefRowstoreCache",
404                     MediaUserSetting::Group::Device);
405                 m_cdefRowstoreCache.supported = !(outValue.Get<bool>());
406             }
407 #endif // _DEBUG || _RELEASE_INTERNAL
408         }
409 
410         return MOS_STATUS_SUCCESS;
411     }
412 
413     //AVP internal buffer size table [buffer_index][bitdepthIdc][IsSb128x128]
414     const uint8_t avpBufferSize[avpInternalBufferMax][2][2] =
415     {
416         { 2 ,   8   ,   2   ,    8 },  //segmentIdBuffer,
417         { 4 ,   16  ,   4   ,    16 }, //mvTemporalBuffer,
418         { 2 ,   4   ,   2   ,    4 },  //bsdLineBuffer,
419         { 2 ,   4   ,   2   ,    4 },  //bsdTileLineBuffer,
420         { 2 ,   4   ,   4   ,    8 },  //intraPredLineBuffer,
421         { 2 ,   4   ,   4   ,    8 },  //intraPredTileLineBuffer,
422         { 4 ,   8   ,   4   ,    8 },  //spatialMvLineBuffer,
423         { 4 ,   8   ,   4   ,    8 },  //spatialMvTileLineBuffer,
424         { 1 ,   1   ,   1   ,    1 },  //lrMetaTileColBuffer,
425         { 7 ,   7   ,   7   ,    7 },  //lrTileLineYBuffer,
426         { 5 ,   5   ,   5   ,    5 },  //lrTileLineUBuffer,
427         { 5 ,   5   ,   5   ,    5 },  //lrTileLineVBuffer,
428         { 9 ,   17  ,   11  ,    21 }, //deblockLineYBuffer,
429         { 3 ,   4   ,   3   ,    5 },  //deblockLineUBuffer,
430         { 3 ,   4   ,   3   ,    5 },  //deblockLineVBuffer,
431         { 9 ,   17  ,   11  ,    21 }, //deblockTileLineYBuffer,
432         { 3 ,   4   ,   3   ,    5 },  //deblockTileLineVBuffer,
433         { 3 ,   4   ,   3   ,    5 },  //deblockTileLineUBuffer,
434         { 8 ,   16  ,   10  ,    20 }, //deblockTileColYBuffer,
435         { 2 ,   4   ,   3   ,    5 },  //deblockTileColUBuffer,
436         { 2 ,   4   ,   3   ,    5 },  //deblockTileColVBuffer,
437         { 8 ,   16  ,   10  ,    20 }, //cdefLineBufferBuffer,
438         { 8 ,   16  ,   10  ,    20 }, //cdefTileLineBufBuffer,
439         { 8 ,   16  ,   10  ,    20 }, //cdefTileColBufBuffer,
440         { 1 ,   1   ,   1   ,    1 },  //cdefMetaTileLineBuffer,
441         { 1 ,   1   ,   1   ,    1 },  //cdefMetaTileColBuffer,
442         { 1 ,   1   ,   1   ,    1 },  //cdefTopLeftCornerBuffer,
443         { 22,   44  ,   29  ,    58 }, //superResTileColYBuffer,
444         { 8 ,   16  ,   10  ,    20 }, //superResTileColUBuffer,
445         { 8 ,   16  ,   10  ,    20 }, //superResTileColVBuffer,
446         { 9 ,   17  ,   11  ,    22 }, //lrTileColYBuffer,
447         { 5 ,   9   ,   6   ,    12 }, //lrTileColUBuffer,
448         { 5 ,   9   ,   6   ,    12 }, //lrTileColVBuffer,
449         { 0 ,   0   ,   0   ,    0 },  //frameStatusErrBuffer,
450         { 0 ,   0   ,   0   ,    0 },  //dbdStreamoutBuffer,
451         { 2 ,   4   ,   3   ,    5 },  //fgTileColBuffer
452         { 96,   96  ,   192 ,    192 },//fgSampleTmpBuffer
453         { 4,    8   ,   5   ,    10 }, //lrTileColAlignBuffer
454     };
455 
456     const uint8_t avpBufferSizeExt[avpInternalBufferMax][2][2] =
457     {
458         { 0 ,    0    ,    0    ,    0 },  //segmentIdBuffer,
459         { 0 ,    0    ,    0    ,    0 },  //mvTemporalBuffer,
460         { 0 ,    0    ,    0    ,    0 },  //bsdLineBuffer,
461         { 0 ,    0    ,    0    ,    0 },  //bsdTileLineBuffer,
462         { 0 ,    0    ,    0    ,    0 },  //intraPredLineBuffer,
463         { 0 ,    0    ,    0    ,    0 },  //intraPredTileLineBuffer,
464         { 0 ,    0    ,    0    ,    0 },  //spatialMvLineBuffer,
465         { 0 ,    0    ,    0    ,    0 },  //spatialMvTileLineBuffer,
466         { 1 ,    1    ,    1    ,    1 },  //lrMetaTileColBuffer,
467         { 0 ,    0    ,    0    ,    0 },  //lrTileLineYBuffer,
468         { 0 ,    0    ,    0    ,    0 },  //lrTileLineUBuffer,
469         { 0 ,    0    ,    0    ,    0 },  //lrTileLineVBuffer,
470         { 0 ,    0    ,    0    ,    0 },  //deblockLineYBuffer,
471         { 0 ,    0    ,    0    ,    0 },  //deblockLineUBuffer,
472         { 0 ,    0    ,    0    ,    0 },  //deblockLineVBuffer,
473         { 0 ,    0    ,    0    ,    0 },  //deblockTileLineYBuffer,
474         { 0 ,    0    ,    0    ,    0 },  //deblockTileLineVBuffer,
475         { 0 ,    0    ,    0    ,    0 },  //deblockTileLineUBuffer,
476         { 0 ,    0    ,    0    ,    0 },  //deblockTileColYBuffer,
477         { 0 ,    0    ,    0    ,    0 },  //deblockTileColUBuffer,
478         { 0 ,    0    ,    0    ,    0 },  //deblockTileColVBuffer,
479         { 1 ,    1    ,    2    ,    2 },  //cdefLineBuffer,
480         { 1 ,    1    ,    2    ,    2 },  //cdefTileLineBuffer,
481         { 1 ,    1    ,    2    ,    2 },  //cdefTileColBuffer,
482         { 0 ,    0    ,    0    ,    0 },  //cdefMetaTileLineBuffer,
483         { 1 ,    1    ,    1    ,    1 },  //cdefMetaTileColBuffer,
484         { 0 ,    0    ,    0    ,    0 },  //cdefTopLeftCornerBuffer,
485         { 22,    44   ,    29   ,    58 }, //superResTileColYBuffer,
486         { 8 ,    16   ,    10   ,    20 }, //superResTileColUBuffer,
487         { 8 ,    16   ,    10   ,    20 }, //superResTileColVBuffer,
488         { 2 ,    2    ,    2    ,    2 },  //lrTileColYBuffer,
489         { 1 ,    1    ,    1    ,    1 },  //lrTileColUBuffer,
490         { 1 ,    1    ,    1    ,    1 },  //lrTileColVBuffer,
491         { 0 ,    0    ,    0    ,    0 },  //frameStatusErrBuffer,
492         { 0 ,    0    ,    0    ,    0 },  //dbdStreamoutBuffer,
493         { 1 ,    1    ,    1    ,    1 },  //fgTileColBuffer,
494         { 0 ,    0    ,    0    ,    0 },   //fgSampleTmpBuffer,
495         { 1 ,    1    ,    1    ,    1 },  //lrTileColAlignBuffer,
496     };
497 
498 protected:
499     using base_t = Itf;
500 
501     MHW_MEMORY_OBJECT_CONTROL_PARAMS m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_END_CODEC] = {};
502 
503     vdbox::RowStoreCache    m_btdlRowstoreCache = {};   //! Bitstream Decoder/Encode Line Rowstore (BTDL)
504     vdbox::RowStoreCache    m_smvlRowstoreCache = {};   //! Spatial Motion Vector Line Rowstore (SMVL)
505     vdbox::RowStoreCache    m_ipdlRowstoreCache = {};   //! Intra Prediction Line Rowstore (IPDL)
506     vdbox::RowStoreCache    m_dflyRowstoreCache = {};   //! Deblocker Filter Line Y Buffer (DFLY)
507     vdbox::RowStoreCache    m_dfluRowstoreCache = {};   //! Deblocker Filter Line U Buffe (DFLU)
508     vdbox::RowStoreCache    m_dflvRowstoreCache = {};   //! Deblocker Filter Line V Buffe (DFLV)
509     vdbox::RowStoreCache    m_cdefRowstoreCache = {};   //! CDEF Filter Line Buffer (CDEF)
510 
Impl(PMOS_INTERFACE osItf)511     Impl(PMOS_INTERFACE osItf) : mhw::Impl(osItf)
512     {
513         MHW_FUNCTION_ENTER;
514 
515         InitRowstoreUserFeatureSettings();
516         InitMmioRegisters();
517     }
518 
~Impl()519     virtual ~Impl()
520     {
521         MHW_FUNCTION_ENTER;
522 
523 #if (_DEBUG || _RELEASE_INTERNAL)
524         if (m_btdlRowstoreCache.enabled ||
525             m_smvlRowstoreCache.enabled ||
526             m_ipdlRowstoreCache.enabled ||
527             m_dflyRowstoreCache.enabled ||
528             m_dfluRowstoreCache.enabled ||
529             m_dflvRowstoreCache.enabled ||
530             m_cdefRowstoreCache.enabled)
531         {
532             // Report rowstore cache usage status to regkey
533             ReportUserSettingForDebug(
534                 m_userSettingPtr,
535                 __MEDIA_USER_FEATURE_VALUE_IS_CODEC_ROW_STORE_CACHE_ENABLED,
536                 1,
537                 MediaUserSetting::Group::Device);
538         }
539 #endif
540 
541     }
542 
GetRowstoreCachingAddrs(mhw::vdbox::avp::AvpVdboxRowStorePar rowstoreParams)543     MOS_STATUS GetRowstoreCachingAddrs(mhw::vdbox::avp::AvpVdboxRowStorePar rowstoreParams) override
544     {
545         //BTDL
546         if (m_btdlRowstoreCache.supported)
547         {
548             m_btdlRowstoreCache.enabled   = true;
549             m_btdlRowstoreCache.dwAddress = 0;
550         }
551 
552         //SMVL
553         if (m_smvlRowstoreCache.supported)
554         {
555             m_smvlRowstoreCache.enabled   = true;
556             m_smvlRowstoreCache.dwAddress = 128;
557         }
558 
559         //IPDL
560         if (m_ipdlRowstoreCache.supported)
561         {
562             m_ipdlRowstoreCache.enabled   = true;
563             m_ipdlRowstoreCache.dwAddress = 384;
564         }
565 
566         //DFLY
567         if (m_dflyRowstoreCache.supported)
568         {
569             m_dflyRowstoreCache.enabled   = true;
570             m_dflyRowstoreCache.dwAddress = 640;
571         }
572 
573         //DFLU
574         if (m_dfluRowstoreCache.supported)
575         {
576             m_dfluRowstoreCache.enabled   = true;
577             m_dfluRowstoreCache.dwAddress = 1344;
578         }
579 
580         //DFLV
581         if (m_dflvRowstoreCache.supported)
582         {
583             m_dflvRowstoreCache.enabled   = true;
584             m_dflvRowstoreCache.dwAddress = 1536;
585         }
586 
587         //CDEF
588         if (m_cdefRowstoreCache.supported)
589         {
590             m_cdefRowstoreCache.enabled   = true;
591             m_cdefRowstoreCache.dwAddress = 1728;
592         }
593 
594         return MOS_STATUS_SUCCESS;
595     }
596 
597     // Programming Note: CodecHAL layer must add MFX wait command
598     //                   for both KIN and VRT before and after AVP_PIPE_MODE_SELECT
599 
_MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_MODE_SELECT)600     _MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_MODE_SELECT)
601     {
602         _MHW_SETCMD_CALLBASE(AVP_PIPE_MODE_SELECT);
603 
604 #define DO_FIELDS()                                                                                     \
605     DO_FIELD(DW1, CodecSelect, params.codecSelect);                                                     \
606     DO_FIELD(DW1, PicStatusErrorReportEnable, params.picStatusErrorReportEnable ? 1 : 0);               \
607     DO_FIELD(DW1, CodecStandardSelect, params.codecStandardSelect);                                     \
608     DO_FIELD(DW1, MultiEngineMode, params.multiEngineMode);                                             \
609     DO_FIELD(DW1, PipeWorkingMode, params.pipeWorkingMode);                                             \
610     DO_FIELD(DW1, TileBasedEngine, params.tileBasedReplayMode ? 1 : 0);                                 \
611     DO_FIELD(DW3, PicStatusErrorReportId, params.picStatusErrorReportEnable ? 1 : 0);                   \
612     DO_FIELD(DW5, PhaseIndicator, params.phaseIndicator);                                               \
613                                                                                                         \
614     DO_FIELD(DW1, FrameReconstructionDisable, params.frameReconDisable);                                \
615     DO_FIELD(DW1, VdencMode, params.vdencMode);                                                         \
616     DO_FIELD(DW1, MotionCompMemTrackerCounterEnable, params.motionCompMemTrackerCounterEnable ? 1 : 0)
617 
618 #include "mhw_hwcmd_process_cmdfields.h"
619     }
620 
_MHW_SETCMD_OVERRIDE_DECL(AVP_PIC_STATE)621     _MHW_SETCMD_OVERRIDE_DECL(AVP_PIC_STATE)
622     {
623         _MHW_SETCMD_CALLBASE(AVP_PIC_STATE);
624 
625         //DW9..DW29
626         //It specifies the Warp Parameter set for each of the 7reference frames [LAST_FRAME .. ALTREF_FRAME]
627         MOS_SecureMemcpy(cmd.WarpParametersArrayReference1To7Projectioncoeff0To5,
628             sizeof(params.warpParamsArrayProjection),
629             params.warpParamsArrayProjection,
630             sizeof(params.warpParamsArrayProjection)
631         );
632 
633 #define DO_FIELDS()                                                                                          \
634     DO_FIELD(DW1, FrameWidthInPixelMinus1, params.frameWidthMinus1);                                         \
635     DO_FIELD(DW1, FrameHeightInPixelMinus1, params.frameHeightMinus1);                                       \
636                                                                                                              \
637     DO_FIELD(DW2, SequenceChromaSubsamplingFormat, params.chromaFormat);                                     \
638     DO_FIELD(DW2, SequencePixelBitDepthIdc, params.bitDepthIdc);                                             \
639     DO_FIELD(DW2, SequenceSuperblockSizeUsed, params.superblockSizeUsed);                                    \
640     DO_FIELD(DW2, SequenceEnableOrderHintFlag, params.enableOrderHint ? 1 : 0);                              \
641     DO_FIELD(DW2, SequenceOrderHintBitsMinus1, params.orderHintBitsMinus1);                                  \
642     DO_FIELD(DW2, SequenceEnableFilterIntraFlag, params.enableFilterIntra ? 1 : 0);                          \
643     DO_FIELD(DW2, SequenceEnableIntraEdgeFilterFlag, params.enableIntraEdgeFilter ? 1 : 0);                  \
644     DO_FIELD(DW2, SequenceEnableDualFilterFlag, params.enableDualFilter ? 1 : 0);                            \
645     DO_FIELD(DW2, SequenceEnableInterIntraCompoundFlag, params.enableInterIntraCompound ? 1 : 0);            \
646     DO_FIELD(DW2, SequenceEnableMaskedCompoundFlag, params.enableMaskedCompound ? 1 : 0);                    \
647     DO_FIELD(DW2, SequenceEnableJointCompoundFlag, params.enableJointCompound ? 1 : 0);                      \
648     DO_FIELD(DW2, HeaderPresentFlag, params.headerPresent ? 1 : 0);                                          \
649     DO_FIELD(DW2, EnableBistreamStitchingInHardware, params.autoBistreamStitchingInHardware);                \
650                                                                                                              \
651     DO_FIELD(DW3, AllowScreenContentToolsFlag, params.allowScreenContentTools ? 1 : 0);                      \
652     DO_FIELD(DW3, ForceIntegerMvFlag, params.forceIntegerMv ? 1 : 0);                                        \
653     DO_FIELD(DW3, AllowWarpedMotionFlag, params.allowWarpedMotion ? 1: 0);                                   \
654     DO_FIELD(DW3, UseCdefFilterFlag, params.enableCDEF ? 1 : 0);                                             \
655     DO_FIELD(DW3, UseSuperResFlag, params.enableSuperres ? 1 : 0);                                           \
656     DO_FIELD(DW3, FrameLevelLoopRestorationFilterEnableFlag, params.enableRestoration ? 1 : 0);              \
657     DO_FIELD(DW3, LargeScaleTileEnableFlag, params.enableLargeScaleTile ? 1 : 0);                            \
658     DO_FIELD(DW3, PostCdefFilteredReconPixelsWriteoutEn, params.postCdefReconPixelStreamoutEn ? 1 : 0);      \
659     DO_FIELD(DW3, FrameType, params.frameType);                                                              \
660     DO_FIELD(DW3, IntraonlyFlag, (params.frameType == keyFrame || params.frameType == intraOnlyFrame));      \
661     DO_FIELD(DW3, ErrorResilientModeFlag, params.errorResilientMode);                                        \
662     DO_FIELD(DW3, AllowIntrabcFlag, params.allowIntraBC ? 1 : 0);                                            \
663     DO_FIELD(DW3, PrimaryReferenceFrameIdx, params.primaryRefFrame);                                         \
664     DO_FIELD(DW3, ApplyFilmGrainFlag, params.applyFilmGrainFlag);                                            \
665                                                                                                              \
666     DO_FIELD(DW4, SegmentationEnableFlag, params.segmentParams.m_enabled);                                   \
667     DO_FIELD(DW4, SegmentationUpdateMapFlag, params.segmentParams.m_updateMap);                              \
668     DO_FIELD(DW4, SegmentationTemporalUpdateFlag, params.segmentParams.m_temporalUpdate);                    \
669     DO_FIELD(DW4, LastActiveSegmentId, params.segmentParams.m_lastActiveSegmentId);                          \
670     DO_FIELD(DW4, PreSkipSegmentIdFlag, params.segmentParams.m_preSkipSegmentIdFlag);                        \
671     DO_FIELD(DW4, DeltaQPresentFlag, params.deltaQPresentFlag ? 1 : 0);                                      \
672     DO_FIELD(DW4, DeltaQRes, params.log2DeltaQRes);                                                          \
673     DO_FIELD(DW4, FrameCodedLosslessMode, params.codedLossless);                                             \
674     DO_FIELD(DW4, SegmentMapIsZeroFlag, params.segmentParams.m_segmentMapIsZeroFlag);                        \
675     DO_FIELD(DW4, SegmentIdBufferStreamInEnableFlag, params.segmentParams.m_segIdBufStreamInEnable);         \
676     DO_FIELD(DW4, SegmentIdBufferStreamOutEnableFlag, params.segmentParams.m_segIdBufStreamOutEnable);       \
677     DO_FIELD(DW4, BaseQindex, params.baseQindex);                                                            \
678     DO_FIELD(DW4, YDcDeltaQ, params.yDcDeltaQ);                                                              \
679                                                                                                              \
680     DO_FIELD(DW5, UDcDeltaQ, params.uDcDeltaQ);                                                              \
681     DO_FIELD(DW5, UAcDeltaQ, params.uAcDeltaQ);                                                              \
682     DO_FIELD(DW5, VDcDeltaQ, params.vDcDeltaQ);                                                              \
683     DO_FIELD(DW5, VAcDeltaQ, params.vAcDeltaQ);                                                              \
684                                                                                                              \
685     DO_FIELD(DW6, AllowHighPrecisionMv, params.allowHighPrecisionMV);                                        \
686     DO_FIELD(DW6, FrameLevelReferenceModeSelect, params.referenceSelect ? 1 : 0);                            \
687     DO_FIELD(DW6, McompFilterType, params.interpFilter);                                                     \
688     DO_FIELD(DW6, MotionModeSwitchableFlag, params.motionModeSwitchable);                                    \
689     DO_FIELD(DW6, UseReferenceFrameMvSetFlag, params.useReferenceFrameMvSet);                                \
690     DO_FIELD(DW6, ReferenceFrameSignBiasI0To7, params.refFrameBiasFlag);                                     \
691     DO_FIELD(DW6, CurrentFrameOrderHint, params.currentOrderHint);                                           \
692                                                                                                              \
693     DO_FIELD(DW7, ReducedTxSetUsed, params.reducedTxSetUsed ? 1 : 0);                                        \
694     DO_FIELD(DW7, FrameTransformMode, params.txMode);                                                        \
695     DO_FIELD(DW7, SkipModePresentFlag, params.skipModePresent ? 1 : 0);                                      \
696     DO_FIELD(DW7, SkipModeFrame0, params.skipModeFrame[0]);                                                  \
697     DO_FIELD(DW7, SkipModeFrame1, params.skipModeFrame[1]);                                                  \
698     DO_FIELD(DW7, ReferenceFrameSideI0To7, params.refFrameSide);                                             \
699                                                                                                              \
700     DO_FIELD(DW8, GlobalMotionType1, params.globalMotionType[0]);                                            \
701     DO_FIELD(DW8, GlobalMotionType2, params.globalMotionType[1]);                                            \
702     DO_FIELD(DW8, GlobalMotionType3, params.globalMotionType[2]);                                            \
703     DO_FIELD(DW8, GlobalMotionType4, params.globalMotionType[3]);                                            \
704     DO_FIELD(DW8, GlobalMotionType5, params.globalMotionType[4]);                                            \
705     DO_FIELD(DW8, GlobalMotionType6, params.globalMotionType[5]);                                            \
706     DO_FIELD(DW8, GlobalMotionType7, params.globalMotionType[6]);                                            \
707     DO_FIELD(DW8, FrameLevelGlobalMotionInvalidFlags, params.frameLevelGlobalMotionInvalidFlags);            \
708                                                                                                              \
709     DO_FIELD(DW30, ReferenceFrameIdx0, params.refFrameIdx[intraFrame]);                                      \
710     DO_FIELD(DW30, ReferenceFrameIdx1, params.refFrameIdx[lastFrame]);                                       \
711     DO_FIELD(DW30, ReferenceFrameIdx2, params.refFrameIdx[last2Frame]);                                      \
712     DO_FIELD(DW30, ReferenceFrameIdx3, params.refFrameIdx[last3Frame]);                                      \
713     DO_FIELD(DW30, ReferenceFrameIdx4, params.refFrameIdx[goldenFrame]);                                     \
714     DO_FIELD(DW30, ReferenceFrameIdx5, params.refFrameIdx[bwdRefFrame]);                                     \
715     DO_FIELD(DW30, ReferenceFrameIdx6, params.refFrameIdx[altRef2Frame]);                                    \
716     DO_FIELD(DW30, ReferenceFrameIdx7, params.refFrameIdx[altRefFrame]);                                     \
717                                                                                                              \
718     DO_FIELD(DW31, Value, params.refFrameRes[intraFrame]);                                                   \
719                                                                                                              \
720     DO_FIELD(DW32, Value, params.refFrameRes[lastFrame]);                                                    \
721                                                                                                              \
722     DO_FIELD(DW33, Value, params.refFrameRes[last2Frame]);                                                   \
723                                                                                                              \
724     DO_FIELD(DW34, Value, params.refFrameRes[last3Frame]);                                                   \
725                                                                                                              \
726     DO_FIELD(DW35, Value, params.refFrameRes[goldenFrame]);                                                  \
727                                                                                                              \
728     DO_FIELD(DW36, Value, params.refFrameRes[bwdRefFrame]);                                                  \
729                                                                                                              \
730     DO_FIELD(DW37, Value, params.refFrameRes[altRef2Frame]);                                                 \
731                                                                                                              \
732     DO_FIELD(DW38, Value, params.refFrameRes[altRefFrame]);                                                  \
733                                                                                                              \
734     DO_FIELD(DW39, Value, params.refScaleFactor[intraFrame]);                                                \
735                                                                                                              \
736     DO_FIELD(DW40, Value, params.refScaleFactor[lastFrame]);                                                 \
737                                                                                                              \
738     DO_FIELD(DW41, Value, params.refScaleFactor[last2Frame]);                                                \
739                                                                                                              \
740     DO_FIELD(DW42, Value, params.refScaleFactor[last3Frame]);                                                \
741                                                                                                              \
742     DO_FIELD(DW43, Value, params.refScaleFactor[goldenFrame]);                                               \
743                                                                                                              \
744     DO_FIELD(DW44, Value, params.refScaleFactor[bwdRefFrame]);                                               \
745                                                                                                              \
746     DO_FIELD(DW45, Value, params.refScaleFactor[altRef2Frame]);                                              \
747                                                                                                              \
748     DO_FIELD(DW46, Value, params.refScaleFactor[altRefFrame]);                                               \
749                                                                                                              \
750     DO_FIELD(DW47, ReferenceFrameOrderHint0ForIntraFrame, params.refOrderHints[intraFrame]);                 \
751     DO_FIELD(DW47, ReferenceFrameOrderHint1ForLastFrame, params.refOrderHints[lastFrame]);                   \
752     DO_FIELD(DW47, ReferenceFrameOrderHint2ForLast2Frame, params.refOrderHints[last2Frame]);                 \
753     DO_FIELD(DW47, ReferenceFrameOrderHint3ForLast3Frame, params.refOrderHints[last3Frame]);                 \
754                                                                                                              \
755     DO_FIELD(DW48, ReferenceFrameOrderHint4ForGoldenFrame, params.refOrderHints[goldenFrame]);               \
756     DO_FIELD(DW48, ReferenceFrameOrderHint5ForBwdrefFrame, params.refOrderHints[bwdRefFrame]);               \
757     DO_FIELD(DW48, ReferenceFrameOrderHint6ForAltref2Frame, params.refOrderHints[altRef2Frame]);             \
758     DO_FIELD(DW48, ReferenceFrameOrderHint7ForAltrefFrame, params.refOrderHints[altRefFrame]);               \
759                                                                                                              \
760     DO_FIELD(DW51, Nonfirstpassflag, params.notFirstPass ? 1 : 0);                                           \
761     DO_FIELD(DW51, VdencPakOnlyPass, params.vdencPackOnlyPass ? 1 : 0);                                      \
762     DO_FIELD(DW51, FrameszoverstatusenFramebitratemaxreportmask, params.frameBitRateMaxReportMask ? 1 : 0);  \
763     DO_FIELD(DW51, FrameszunderstatusenFramebitrateminreportmask, params.frameBitRateMinReportMask ? 1 : 0); \
764                                                                                                              \
765     DO_FIELD(DW52, Framebitratemax, params.frameBitRateMax);                                                 \
766     DO_FIELD(DW52, Framebitratemaxunit, params.frameBitRateMaxUnit);                                         \
767                                                                                                              \
768     DO_FIELD(DW53, Framebitratemin, params.frameBitRateMin);                                                 \
769     DO_FIELD(DW53, Framebitrateminunit, params.frameBitRateMinUnit);                                         \
770                                                                                                              \
771     DO_FIELD(DW54_55, Value[0], params.frameDeltaQindexMax[0]);                                              \
772     DO_FIELD(DW54_55, Value[1], params.frameDeltaQindexMax[1]);                                              \
773                                                                                                              \
774     DO_FIELD(DW56, Framedeltaqindexmin, params.frameDeltaQindexMin);                                         \
775                                                                                                              \
776     DO_FIELD(DW57_58, Value[0], params.frameDeltaLFMax[0]);                                                  \
777     DO_FIELD(DW57_58, Value[1], params.frameDeltaLFMax[1]);                                                  \
778                                                                                                              \
779     DO_FIELD(DW59, Framedeltalfmin, params.frameDeltaLFMin);                                                 \
780                                                                                                              \
781     DO_FIELD(DW60_61, Value[0], params.frameDeltaQindexLFMaxRange[0]);                                       \
782     DO_FIELD(DW60_61, Value[1], params.frameDeltaQindexLFMaxRange[1]);                                       \
783                                                                                                              \
784     DO_FIELD(DW62, Framedeltaqindexlfminrange, params.frameDeltaQindexLFMinRange);                           \
785                                                                                                              \
786     DO_FIELD(DW63, Minframsize, params.minFramSize);                                                         \
787     DO_FIELD(DW63, Minframesizeunits, params.minFramSizeUnits);                                              \
788                                                                                                              \
789     DO_FIELD(DW65, Class0SseThreshold0, params.class0_SSE_Threshold0);                                       \
790     DO_FIELD(DW65, Class0SseThreshold1, params.class0_SSE_Threshold1);                                       \
791                                                                                                              \
792     DO_FIELD(DW74, Rdmult, params.rdmult);
793 
794 #include "mhw_hwcmd_process_cmdfields.h"
795     }
796 
_MHW_SETCMD_OVERRIDE_DECL(AVP_INLOOP_FILTER_STATE)797     _MHW_SETCMD_OVERRIDE_DECL(AVP_INLOOP_FILTER_STATE)
798     {
799         _MHW_SETCMD_CALLBASE(AVP_INLOOP_FILTER_STATE);
800 
801 #define DO_FIELDS()                                                                                             \
802     DO_FIELD(DW1, LumaYDeblockerFilterLevelVertical, params.loopFilterLevel[0]);                                \
803     DO_FIELD(DW1, LumaYDeblockerFilterLevelHorizontal, params.loopFilterLevel[1]);                              \
804     DO_FIELD(DW1, ChromaUDeblockerFilterLevel, params.loopFilterLevel[2]);                                      \
805     DO_FIELD(DW1, ChromaVDeblockerFilterLevel, params.loopFilterLevel[3]);                                      \
806     DO_FIELD(DW1, DeblockerFilterSharpnessLevel, params.loopFilterSharpness);                                   \
807     DO_FIELD(DW1, DeblockerFilterModeRefDeltaEnableFlag, params.loopFilterDeltaEnabled);                        \
808     DO_FIELD(DW1, DeblockerDeltaLfResolution, params.deltaLfRes);                                               \
809     DO_FIELD(DW1, DeblockerFilterDeltaLfMultiFlag, params.deltaLfMulti);                                        \
810     DO_FIELD(DW1, DeblockerFilterDeltaLfPresentFlag, params.loopFilterDeltaUpdate);                             \
811                                                                                                                 \
812     DO_FIELD(DW2, DeblockerFilterRefDeltas0, params.loopFilterRefDeltas[0]);                                    \
813     DO_FIELD(DW2, DeblockerFilterRefDeltas1, params.loopFilterRefDeltas[1]);                                    \
814     DO_FIELD(DW2, DeblockerFilterRefDeltas2, params.loopFilterRefDeltas[2]);                                    \
815     DO_FIELD(DW2, DeblockerFilterRefDeltas3, params.loopFilterRefDeltas[3]);                                    \
816                                                                                                                 \
817     DO_FIELD(DW3, DeblockerFilterRefDeltas4, params.loopFilterRefDeltas[4]);                                    \
818     DO_FIELD(DW3, DeblockerFilterRefDeltas5, params.loopFilterRefDeltas[5]);                                    \
819     DO_FIELD(DW3, DeblockerFilterRefDeltas6, params.loopFilterRefDeltas[6]);                                    \
820     DO_FIELD(DW3, DeblockerFilterRefDeltas7, params.loopFilterRefDeltas[7]);                                    \
821                                                                                                                 \
822     DO_FIELD(DW4, DeblockerFilterModeDeltas0, params.loopFilterModeDeltas[0]);                                  \
823     DO_FIELD(DW4, DeblockerFilterModeDeltas1, params.loopFilterModeDeltas[1]);                                  \
824                                                                                                                 \
825     DO_FIELD(DW5, CdefYStrength0, params.cdefYStrength[0]);                                                     \
826     DO_FIELD(DW5, CdefYStrength1, params.cdefYStrength[1]);                                                     \
827     DO_FIELD(DW5, CdefYStrength2, params.cdefYStrength[2]);                                                     \
828     DO_FIELD(DW5, CdefYStrength3, params.cdefYStrength[3]);                                                     \
829     DO_FIELD(DW5, CdefBits, params.cdefBits);                                                                   \
830     DO_FIELD(DW5, CdefFilterDampingFactorMinus3, params.cdefDampingMinus3);                                     \
831                                                                                                                 \
832     DO_FIELD(DW6, CdefYStrength4, params.cdefYStrength[4]);                                                     \
833     DO_FIELD(DW6, CdefYStrength5, params.cdefYStrength[5]);                                                     \
834     DO_FIELD(DW6, CdefYStrength6, params.cdefYStrength[6]);                                                     \
835     DO_FIELD(DW6, CdefYStrength7, params.cdefYStrength[7]);                                                     \
836                                                                                                                 \
837     DO_FIELD(DW7, CdefUvStrength0, params.cdefUVStrength[0]);                                                   \
838     DO_FIELD(DW7, CdefUvStrength1, params.cdefUVStrength[1]);                                                   \
839     DO_FIELD(DW7, CdefUvStrength2, params.cdefUVStrength[2]);                                                   \
840     DO_FIELD(DW7, CdefUvStrength3, params.cdefUVStrength[3]);                                                   \
841                                                                                                                 \
842     DO_FIELD(DW8, CdefUvStrength4, params.cdefUVStrength[4]);                                                   \
843     DO_FIELD(DW8, CdefUvStrength5, params.cdefUVStrength[5]);                                                   \
844     DO_FIELD(DW8, CdefUvStrength6, params.cdefUVStrength[6]);                                                   \
845     DO_FIELD(DW8, CdefUvStrength7, params.cdefUVStrength[7]);                                                   \
846                                                                                                                 \
847     DO_FIELD(DW9, SuperResUpscaledFrameWidthMinus1, params.superresUpscaledWidthMinus1);                        \
848     DO_FIELD(DW9, SuperResDenom, params.superresDenom);                                                         \
849                                                                                                                 \
850     DO_FIELD(DW10, FrameLoopRestorationFilterTypeForLumaY, params.LoopRestorationType[0]);                      \
851     DO_FIELD(DW10, FrameLoopRestorationFilterTypeForChromaU, params.LoopRestorationType[1]);                    \
852     DO_FIELD(DW10, FrameLoopRestorationFilterTypeForChromaV, params.LoopRestorationType[2]);                    \
853     DO_FIELD(DW10, LoopRestorationUnitSizeForLumaY, params.LoopRestorationSizeLuma);                            \
854     DO_FIELD(DW10, UseSameLoopRestorationUnitSizeForChromasUvFlag, params.UseSameLoopRestorationSizeForChroma); \
855                                                                                                                 \
856     DO_FIELD(DW11, LumaPlaneXStepQn, params.lumaPlaneXStepQn);                                                  \
857                                                                                                                 \
858     DO_FIELD(DW12, LumaPlaneX0Qn, params.lumaPlaneX0Qn);                                                        \
859                                                                                                                 \
860     DO_FIELD(DW13, ChromaPlaneXStepQn, params.chromaPlaneXStepQn);                                              \
861                                                                                                                 \
862     DO_FIELD(DW14, ChromaPlaneX0Qn, params.chromaPlaneX0Qn)
863 
864 #include "mhw_hwcmd_process_cmdfields.h"
865     }
866 
_MHW_SETCMD_OVERRIDE_DECL(AVP_TILE_CODING)867     _MHW_SETCMD_OVERRIDE_DECL(AVP_TILE_CODING)
868     {
869         _MHW_SETCMD_CALLBASE(AVP_TILE_CODING);
870 
871 #define DO_FIELDS()                                                                             \
872     DO_FIELD(DW1, FrameTileId, params.tileId);                                                  \
873     DO_FIELD(DW1, TgTileNum, params.tgTileNum);                                                   \
874     DO_FIELD(DW1, TileGroupId, params.tileGroupId);                                             \
875                                                                                                 \
876     DO_FIELD(DW2, TileColumnPositionInSbUnit, params.tileColPositionInSb);                      \
877     DO_FIELD(DW2, TileRowPositionInSbUnit, params.tileRowPositionInSb);                         \
878                                                                                                 \
879     DO_FIELD(DW3, TileWidthInSuperblockUnitMinus1, params.tileWidthInSbMinus1);                 \
880     DO_FIELD(DW3, TileHeightInSuperblockUnitMinus1, params.tileHeightInSbMinus1);               \
881                                                                                                 \
882     DO_FIELD(DW4, FirstTileInAFrame, params.firstTileInAFrame ? 1 : 0);                         \
883     DO_FIELD(DW4, IslasttileofcolumnFlag, params.lastTileOfColumn ? 1 : 0);                     \
884     DO_FIELD(DW4, IslasttileofrowFlag, params.lastTileOfRow ? 1 : 0);                           \
885     DO_FIELD(DW4, IsstarttileoftilegroupFlag, params.firstTileOfTileGroup ? 1 : 0);             \
886     DO_FIELD(DW4, IsendtileoftilegroupFlag, params.lastTileOfTileGroup ? 1 : 0);                \
887     DO_FIELD(DW4, IslasttileofframeFlag, params.lastTileOfFrame ? 1 : 0);                       \
888     DO_FIELD(DW4, DisableCdfUpdateFlag, params.disableCdfUpdateFlag ? 1 : 0);                   \
889     DO_FIELD(DW4, DisableFrameContextUpdateFlag, params.disableFrameContextUpdateFlag ? 1 : 0); \
890                                                                                                 \
891     DO_FIELD(DW5, NumberOfActiveBePipes, params.numOfActiveBePipes);                            \
892     DO_FIELD(DW5, NumOfTileColumnsMinus1InAFrame, params.numOfTileColumnsInFrame - 1);          \
893     DO_FIELD(DW5, NumOfTileRowsMinus1InAFrame, params.numOfTileRowsInFrame - 1);                \
894                                                                                                 \
895     DO_FIELD(DW6, OutputDecodedTileColumnPositionInSbUnit, params.outputDecodedTileColPos);     \
896     DO_FIELD(DW6, OutputDecodedTileRowPositionInSbUnit, params.outputDecodedTileRowPos)
897 
898 #include "mhw_hwcmd_process_cmdfields.h"
899     }
900 
_MHW_SETCMD_OVERRIDE_DECL(AVP_SEGMENT_STATE)901     _MHW_SETCMD_OVERRIDE_DECL(AVP_SEGMENT_STATE)
902     {
903         _MHW_SETCMD_CALLBASE(AVP_SEGMENT_STATE);
904 
905         const uint8_t seg = params.currentSegmentId;
906 
907 #define DO_FIELDS()                                                                                                      \
908     DO_FIELD(DW1, SegmentId, seg);                                                                                       \
909                                                                                                                          \
910     DO_FIELD(DW2, SegmentFeatureMask, params.av1SegmentParams.m_featureMask[seg]);                                       \
911     DO_FIELD(DW2, SegmentDeltaQindex, params.av1SegmentParams.m_featureData[seg][segLvlAltQ]);                           \
912     DO_FIELD(DW2, SegmentBlockSkipFlag, params.av1SegmentParams.m_featureData[seg][segLvlSkip]);                         \
913     DO_FIELD(DW2, SegmentBlockGlobalmvFlag, params.av1SegmentParams.m_featureData[seg][segLvlGlobalMv]);                 \
914     DO_FIELD(DW2, SegmentLosslessFlag, params.av1SegmentParams.m_losslessFlag[seg]);                                     \
915     DO_FIELD(DW2, SegmentLumaYQmLevel, params.av1SegmentParams.m_qmLevelY[seg]);                                         \
916     DO_FIELD(DW2, SegmentChromaUQmLevel, params.av1SegmentParams.m_qmLevelU[seg]);                                       \
917     DO_FIELD(DW2, SegmentChromaVQmLevel, params.av1SegmentParams.m_qmLevelV[seg]);                                       \
918                                                                                                                          \
919     DO_FIELD(DW3, SegmentDeltaLoopFilterLevelLumaVertical, params.av1SegmentParams.m_featureData[seg][segLvlAltLfYv]);   \
920     DO_FIELD(DW3, SegmentDeltaLoopFilterLevelLumaHorizontal, params.av1SegmentParams.m_featureData[seg][segLvlAltLfYh]); \
921     DO_FIELD(DW3, SegmentDeltaLoopFilterLevelChromaU, params.av1SegmentParams.m_featureData[seg][segLvlAltLfU]);         \
922     DO_FIELD(DW3, SegmentDeltaLoopFilterLevelChromaV, params.av1SegmentParams.m_featureData[seg][segLvlAltLfV]);         \
923     DO_FIELD(DW3, SegmentReferenceFrame, params.av1SegmentParams.m_featureData[seg][segLvlRefFrame])
924 
925 #include "mhw_hwcmd_process_cmdfields.h"
926     }
927 
_MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_BUF_ADDR_STATE)928     _MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_BUF_ADDR_STATE)
929     {
930         _MHW_SETCMD_CALLBASE(AVP_PIPE_BUF_ADDR_STATE);
931 
932         MHW_RESOURCE_PARAMS resourceParams = {};
933 
934         resourceParams.dwLsbNum      = MHW_VDBOX_HCP_GENERAL_STATE_SHIFT;
935         resourceParams.HwCommandType = MOS_MFX_PIPE_BUF_ADDR;
936 
937         // Reference Picture Base Address. Only one control DW17 for all references
938 
939         bool firstRefPic = true;
940 
941         // m_references[8] follows the order INTRA_FRAME->LAST_FRAME->LAST2_FRAME->LAST3_FRAME->GOLDEN_FRAME->
942         // BWDREF_FRAME-.ALTREF2_FRAME->ALTREF_FRAME.
943         for (uint32_t i = 0; i < av1TotalRefsPerFrame; i++)
944         {
945             // Reference Picture Buffer
946             if (!Mos_ResourceIsNull(params.refs[i]))
947             {
948                 MOS_SURFACE details = {};
949                 MOS_ZeroMemory(&details, sizeof(details));
950                 details.Format = Format_Invalid;
951                 MHW_MI_CHK_STATUS(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.refs[i], &details));
952 
953                 if (firstRefPic)
954                 {
955                     cmd.ReferenceFrameBufferBaseAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = MmcEnabled(params.mmcStatePreDeblock);
956                     cmd.ReferenceFrameBufferBaseAddressAttributes.DW0.CompressionType                    = MmcRcEnabled(params.mmcStatePreDeblock);
957                     cmd.ReferenceFrameBufferBaseAddressAttributes.DW0.TileMode                           = GetHwTileType(details.TileType, details.TileModeGMM, details.bGMMTileEnabled);
958                     firstRefPic                                                                          = false;
959                 }
960 
961                 resourceParams.presResource       = params.refs[i];
962                 resourceParams.pdwCmd             = (cmd.ReferenceFrameBufferBaseAddressRefaddr07[i].DW0_1.Value);
963                 resourceParams.dwOffset           = details.RenderOffset.YUV.Y.BaseOffset;
964                 resourceParams.dwLocationInCmd    = _MHW_CMD_DW_LOCATION(ReferenceFrameBufferBaseAddressRefaddr07[i]);
965                 resourceParams.bIsWritable        = false;
966                 resourceParams.dwSharedMocsOffset = 17 - resourceParams.dwLocationInCmd;
967 
968                 InitMocsParams(resourceParams, &cmd.ReferenceFrameBufferBaseAddressAttributes.DW0.Value, 1, 6);
969 
970                 MHW_MI_CHK_STATUS(AddResourceToCmd(
971                     this->m_osItf,
972                     this->m_currentCmdBuf,
973                     &resourceParams));
974             }
975         }
976 
977         //Decoded Output Frame Buffer
978         cmd.DecodedOutputFrameBufferAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = MmcEnabled(params.mmcStatePreDeblock);
979         cmd.DecodedOutputFrameBufferAddressAttributes.DW0.CompressionType                    = MmcRcEnabled(params.mmcStatePreDeblock);
980         cmd.DecodedOutputFrameBufferAddressAttributes.DW0.TileMode                           = GetHwTileType(params.decodedPic->TileType, params.decodedPic->TileModeGMM, params.decodedPic->bGMMTileEnabled);
981 
982         resourceParams.presResource    = &(params.decodedPic->OsResource);
983         resourceParams.dwOffset        = params.decodedPic->dwOffset;
984         resourceParams.pdwCmd          = (cmd.DecodedOutputFrameBufferAddress.DW0_1.Value);
985         resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DecodedOutputFrameBufferAddress);
986         resourceParams.bIsWritable     = true;
987 
988         InitMocsParams(resourceParams, &cmd.DecodedOutputFrameBufferAddressAttributes.DW0.Value, 1, 6);
989 
990         MHW_MI_CHK_STATUS(AddResourceToCmd(
991             this->m_osItf,
992             this->m_currentCmdBuf,
993             &resourceParams));
994 
995         //IntraBC Decoded Output Frame buffer
996         if (!Mos_ResourceIsNull(params.intrabcDecodedOutputFrameBuffer))
997         {
998             resourceParams.presResource    = params.intrabcDecodedOutputFrameBuffer;
999             resourceParams.dwOffset        = 0;
1000             resourceParams.pdwCmd          = (cmd.IntrabcDecodedOutputFrameBufferAddress.DW0_1.Value);
1001             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(IntrabcDecodedOutputFrameBufferAddress);
1002             resourceParams.bIsWritable     = true;
1003 
1004             InitMocsParams(resourceParams, &cmd.IntrabcDecodedOutputFrameBufferAddressAttributes.DW0.Value, 1, 6);
1005 
1006             MHW_MI_CHK_STATUS(AddResourceToCmd(
1007                 this->m_osItf,
1008                 this->m_currentCmdBuf,
1009                 &resourceParams));
1010 
1011             //This surface should not have memory compression turned on
1012             cmd.IntrabcDecodedOutputFrameBufferAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = 0;
1013             cmd.IntrabcDecodedOutputFrameBufferAddressAttributes.DW0.CompressionType                    = 0;
1014             cmd.IntrabcDecodedOutputFrameBufferAddressAttributes.DW0.TileMode                           = GetHwTileType(params.intrabcDecodedOutputFrameBuffer->TileType, params.intrabcDecodedOutputFrameBuffer->TileModeGMM, params.intrabcDecodedOutputFrameBuffer->bGMMTileEnabled);
1015         }
1016 
1017         // CDF Table Initialization Buffer
1018         if (!Mos_ResourceIsNull(params.cdfTableInitBuffer))
1019         {
1020             resourceParams.presResource    = params.cdfTableInitBuffer;
1021             resourceParams.dwOffset        = params.cdfTableInitBufferOffset;
1022             resourceParams.pdwCmd          = (cmd.CdfTablesInitializationBufferAddress.DW0_1.Value);
1023             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdfTablesInitializationBufferAddress);
1024             resourceParams.bIsWritable     = false;
1025 
1026             InitMocsParams(resourceParams, &cmd.CdfTablesInitializationBufferAddressAttributes.DW0.Value, 1, 6);
1027 
1028             MHW_MI_CHK_STATUS(AddResourceToCmd(
1029                 this->m_osItf,
1030                 this->m_currentCmdBuf,
1031                 &resourceParams));
1032         }
1033 
1034         if (!Mos_ResourceIsNull(params.cdfTableBwdAdaptBuffer))
1035         {
1036             resourceParams.presResource    = params.cdfTableBwdAdaptBuffer;
1037             resourceParams.dwOffset        = 0;
1038             resourceParams.pdwCmd          = (cmd.CdfTablesBackwardAdaptationBufferAddress.DW0_1.Value);
1039             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdfTablesBackwardAdaptationBufferAddress);
1040             resourceParams.bIsWritable     = true;
1041 
1042             InitMocsParams(resourceParams, &cmd.CdfTablesBackwardAdaptationBufferAddressAttributes.DW0.Value, 1, 6);
1043 
1044             MHW_MI_CHK_STATUS(AddResourceToCmd(
1045                 this->m_osItf,
1046                 this->m_currentCmdBuf,
1047                 &resourceParams));
1048         }
1049 
1050         // Reset dwSharedMocsOffset
1051         //resourceParams.dwSharedMocsOffset = 0;
1052 
1053         if (!Mos_ResourceIsNull(params.segmentIdReadBuffer))
1054         {
1055             resourceParams.presResource    = params.segmentIdReadBuffer;
1056             resourceParams.dwOffset        = 0;
1057             resourceParams.pdwCmd          = (cmd.Av1SegmentIdReadBufferAddress.DW0_1.Value);
1058             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(Av1SegmentIdReadBufferAddress);
1059             resourceParams.bIsWritable     = true;
1060 
1061             resourceParams.dwSharedMocsOffset = 35 - resourceParams.dwLocationInCmd;
1062 
1063             InitMocsParams(resourceParams, &cmd.Av1SegmentIdReadBufferAddressAttributes.DW0.Value, 1, 6);
1064 
1065             MHW_MI_CHK_STATUS(AddResourceToCmd(
1066                 this->m_osItf,
1067                 this->m_currentCmdBuf,
1068                 &resourceParams));
1069         }
1070 
1071         // AV1 Segment Id Write Buffer
1072         if (!Mos_ResourceIsNull(params.segmentIdWriteBuffer))
1073         {
1074             resourceParams.presResource    = params.segmentIdWriteBuffer;
1075             resourceParams.dwOffset        = 0;
1076             resourceParams.pdwCmd          = (cmd.Av1SegmentIdWriteBufferAddress.DW0_1.Value);
1077             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(Av1SegmentIdWriteBufferAddress);
1078             resourceParams.bIsWritable     = true;
1079 
1080             resourceParams.dwSharedMocsOffset = 38 - resourceParams.dwLocationInCmd;
1081 
1082             InitMocsParams(resourceParams, &cmd.Av1SegmentIdWriteBufferAddressAttributes.DW0.Value, 1, 6);
1083 
1084             MHW_MI_CHK_STATUS(AddResourceToCmd(
1085                 this->m_osItf,
1086                 this->m_currentCmdBuf,
1087                 &resourceParams));
1088         }
1089 
1090         //Collocated MV Temporal buffers
1091         for (uint32_t i = 0; i < av1TotalRefsPerFrame; i++)
1092         {
1093             if (!Mos_ResourceIsNull(params.colMvTempBuffer[i]))
1094             {
1095                 resourceParams.presResource       = params.colMvTempBuffer[i];
1096                 resourceParams.dwOffset           = 0;
1097                 resourceParams.pdwCmd             = (cmd.CollocatedMotionVectorTemporalBufferBaseAddressTmvaddr07[i].DW0_1.Value);
1098                 resourceParams.dwLocationInCmd    = _MHW_CMD_DW_LOCATION(CollocatedMotionVectorTemporalBufferBaseAddressTmvaddr07[i]);
1099                 resourceParams.bIsWritable        = true;
1100                 resourceParams.dwSharedMocsOffset = 55 - resourceParams.dwLocationInCmd;
1101 
1102                 InitMocsParams(resourceParams, &cmd.CollocatedMotionVectorTemporalBufferBaseAddressAttributes.DW0.Value, 1, 6);
1103 
1104                 MHW_MI_CHK_STATUS(AddResourceToCmd(
1105                     this->m_osItf,
1106                     this->m_currentCmdBuf,
1107                     &resourceParams));
1108             }
1109         }
1110 
1111         // Current Motion Vector Temporal Buffer
1112         if (!Mos_ResourceIsNull(params.curMvTempBuffer))
1113         {
1114             resourceParams.presResource    = params.curMvTempBuffer;
1115             resourceParams.dwOffset        = 0;
1116             resourceParams.pdwCmd          = (cmd.CurrentFrameMotionVectorWriteBufferAddress.DW0_1.Value);
1117             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CurrentFrameMotionVectorWriteBufferAddress);
1118             resourceParams.bIsWritable     = true;
1119 
1120             InitMocsParams(resourceParams, &cmd.CurrentFrameMotionVectorWriteBufferAddressAttributes.DW0.Value, 1, 6);
1121 
1122             MHW_MI_CHK_STATUS(AddResourceToCmd(
1123                 this->m_osItf,
1124                 this->m_currentCmdBuf,
1125                 &resourceParams));
1126         }
1127 
1128         // Reset dwSharedMocsOffset
1129         resourceParams.dwSharedMocsOffset = 0;
1130         // Bitstream Decode Line Rowstore Buffer
1131         if (m_btdlRowstoreCache.enabled)
1132         {
1133             cmd.BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1134             cmd.BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddress.DW0_1.BaseAddress                                         = m_btdlRowstoreCache.dwAddress;
1135         }
1136         else if (!Mos_ResourceIsNull(params.bsLineRowstoreBuffer))
1137         {
1138             resourceParams.presResource    = params.bsLineRowstoreBuffer;
1139             resourceParams.dwOffset        = 0;
1140             resourceParams.pdwCmd          = (cmd.BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddress.DW0_1.Value);
1141             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddress);
1142             resourceParams.bIsWritable     = true;
1143 
1144             InitMocsParams(resourceParams, &cmd.BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1145 
1146             MHW_MI_CHK_STATUS(AddResourceToCmd(
1147                 this->m_osItf,
1148                 this->m_currentCmdBuf,
1149                 &resourceParams));
1150         }
1151 
1152         // Bitstream Decode Tile Line Rowstore Buffer
1153         if (!Mos_ResourceIsNull(params.bsTileLineRowstoreBuffer))
1154         {
1155             resourceParams.presResource    = params.bsTileLineRowstoreBuffer;
1156             resourceParams.dwOffset        = 0;
1157             resourceParams.pdwCmd          = (cmd.BitstreamDecoderEncoderTileLineRowstoreReadWriteBufferAddress.DW0_1.Value);
1158             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(BitstreamDecoderEncoderTileLineRowstoreReadWriteBufferAddress);
1159             resourceParams.bIsWritable     = true;
1160 
1161             InitMocsParams(resourceParams, &cmd.BitstreamDecoderEncoderTileLineRowstoreReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1162 
1163             MHW_MI_CHK_STATUS(AddResourceToCmd(
1164                 this->m_osItf,
1165                 this->m_currentCmdBuf,
1166                 &resourceParams));
1167         }
1168 
1169         // Reset dwSharedMocsOffset
1170         resourceParams.dwSharedMocsOffset = 0;
1171         // Intra Prediction Line Rowstore Read/Write Buffer
1172         if (m_ipdlRowstoreCache.enabled)
1173         {
1174             cmd.IntraPredictionLineRowstoreReadWriteBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.IntraPredictionLineRowstoreReadWriteBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1175             cmd.IntraPredictionLineRowstoreReadWriteBufferAddress.DW0_1.BaseAddress                                         = m_ipdlRowstoreCache.dwAddress;
1176         }
1177         else if (!Mos_ResourceIsNull(params.intraPredLineRowstoreBuffer))
1178         {
1179             resourceParams.presResource    = params.intraPredLineRowstoreBuffer;
1180             resourceParams.dwOffset        = 0;
1181             resourceParams.pdwCmd          = (cmd.IntraPredictionLineRowstoreReadWriteBufferAddress.DW0_1.Value);
1182             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(IntraPredictionLineRowstoreReadWriteBufferAddress);
1183             resourceParams.bIsWritable     = true;
1184 
1185             InitMocsParams(resourceParams, &cmd.IntraPredictionLineRowstoreReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1186 
1187             MHW_MI_CHK_STATUS(AddResourceToCmd(
1188                 this->m_osItf,
1189                 this->m_currentCmdBuf,
1190                 &resourceParams));
1191         }
1192 
1193         if (!Mos_ResourceIsNull(params.intraPredTileLineRowstoreBuffer))
1194         {
1195             resourceParams.presResource    = params.intraPredTileLineRowstoreBuffer;
1196             resourceParams.dwOffset        = 0;
1197             resourceParams.pdwCmd          = (cmd.IntraPredictionTileLineRowstoreReadWriteBufferAddress.DW0_1.Value);
1198             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(IntraPredictionTileLineRowstoreReadWriteBufferAddress);
1199             resourceParams.bIsWritable     = true;
1200 
1201             InitMocsParams(resourceParams, &cmd.IntraPredictionTileLineRowstoreReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1202 
1203             MHW_MI_CHK_STATUS(AddResourceToCmd(
1204                 this->m_osItf,
1205                 this->m_currentCmdBuf,
1206                 &resourceParams));
1207         }
1208 
1209         // Spatial Motion Vector Line Buffer
1210         if (m_smvlRowstoreCache.enabled)
1211         {
1212             cmd.SpatialMotionVectorLineReadWriteBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.SpatialMotionVectorLineReadWriteBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1213             cmd.SpatialMotionVectorLineReadWriteBufferAddress.DW0_1.BaseAddress                                         = m_smvlRowstoreCache.dwAddress;
1214         }
1215         else if (!Mos_ResourceIsNull(params.spatialMVLineBuffer))
1216         {
1217             resourceParams.presResource    = params.spatialMVLineBuffer;
1218             resourceParams.dwOffset        = 0;
1219             resourceParams.pdwCmd          = (cmd.SpatialMotionVectorLineReadWriteBufferAddress.DW0_1.Value);
1220             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SpatialMotionVectorLineReadWriteBufferAddress);
1221             resourceParams.bIsWritable     = true;
1222 
1223             InitMocsParams(resourceParams, &cmd.SpatialMotionVectorLineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1224 
1225             MHW_MI_CHK_STATUS(AddResourceToCmd(
1226                 this->m_osItf,
1227                 this->m_currentCmdBuf,
1228                 &resourceParams));
1229         }
1230 
1231         // Spatial Motion Vector Tile Line Buffer
1232         if (!Mos_ResourceIsNull(params.spatialMVCodingTileLineBuffer))
1233         {
1234             resourceParams.presResource    = params.spatialMVCodingTileLineBuffer;
1235             resourceParams.dwOffset        = 0;
1236             resourceParams.pdwCmd          = (cmd.SpatialMotionVectorCodingTileLineReadWriteBufferAddress.DW0_1.Value);
1237             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SpatialMotionVectorCodingTileLineReadWriteBufferAddress);
1238             resourceParams.bIsWritable     = true;
1239 
1240             InitMocsParams(resourceParams, &cmd.SpatialMotionVectorTileLineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1241 
1242             MHW_MI_CHK_STATUS(AddResourceToCmd(
1243                 this->m_osItf,
1244                 this->m_currentCmdBuf,
1245                 &resourceParams));
1246         }
1247 
1248         //Loop Restoration Meta Tile Column Read/Write Buffer
1249         if (!Mos_ResourceIsNull(params.lrMetaTileColumnBuffer))
1250         {
1251             resourceParams.presResource    = params.lrMetaTileColumnBuffer;
1252             resourceParams.dwOffset        = 0;
1253             resourceParams.pdwCmd          = (cmd.LoopRestorationMetaTileColumnReadWriteBufferAddress.DW0_1.Value);
1254             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationMetaTileColumnReadWriteBufferAddress);
1255             resourceParams.bIsWritable     = true;
1256 
1257             InitMocsParams(resourceParams, &cmd.LoopRestorationMetaTileColumnReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1258 
1259             MHW_MI_CHK_STATUS(AddResourceToCmd(
1260                 this->m_osItf,
1261                 this->m_currentCmdBuf,
1262                 &resourceParams));
1263         }
1264 
1265         //Deblocker Filter Control Parameters Line Read Write Buffer
1266         if (!Mos_ResourceIsNull(params.lrTileLineYBuffer))
1267         {
1268             resourceParams.presResource    = params.lrTileLineYBuffer;
1269             resourceParams.dwOffset        = 0;
1270             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileReadWriteLineYBufferAddress.DW0_1.Value);
1271             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileReadWriteLineYBufferAddress);
1272             resourceParams.bIsWritable     = true;
1273 
1274             InitMocsParams(resourceParams, &cmd.LoopRestorationFilterTileReadWriteLineYBufferAddressAttributes.DW0.Value, 1, 6);
1275 
1276             MHW_MI_CHK_STATUS(AddResourceToCmd(
1277                 this->m_osItf,
1278                 this->m_currentCmdBuf,
1279                 &resourceParams));
1280         }
1281 
1282         //Deblocker Filter Control Parameters Tile Line Read Write Buffer
1283         if (!Mos_ResourceIsNull(params.lrTileLineUBuffer))
1284         {
1285             resourceParams.presResource    = params.lrTileLineUBuffer;
1286             resourceParams.dwOffset        = 0;
1287             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileReadWriteLineUBufferAddress.DW0_1.Value);
1288             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileReadWriteLineUBufferAddress);
1289             resourceParams.bIsWritable     = true;
1290 
1291             InitMocsParams(resourceParams, &cmd.LoopRestorationFilterTileReadWriteLineUBufferAddressAttributes.DW0.Value, 1, 6);
1292 
1293             MHW_MI_CHK_STATUS(AddResourceToCmd(
1294                 this->m_osItf,
1295                 this->m_currentCmdBuf,
1296                 &resourceParams));
1297         }
1298 
1299         //Deblocker Filter Control Parameters Tile Column Read Write Buffer
1300         if (!Mos_ResourceIsNull(params.lrTileLineVBuffer))
1301         {
1302             resourceParams.presResource    = params.lrTileLineVBuffer;
1303             resourceParams.dwOffset        = 0;
1304             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileReadWriteLineVBufferAddress.DW0_1.Value);
1305             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileReadWriteLineVBufferAddress);
1306             resourceParams.bIsWritable     = true;
1307 
1308             InitMocsParams(resourceParams, &cmd.LoopRestorationFilterTileReadWriteLineVBufferAddressAttributes.DW0.Value, 1, 6);
1309 
1310             MHW_MI_CHK_STATUS(AddResourceToCmd(
1311                 this->m_osItf,
1312                 this->m_currentCmdBuf,
1313                 &resourceParams));
1314         }
1315 
1316         // Deblocker Filter Line Read Write Y Buffer
1317         if (m_dflyRowstoreCache.enabled)
1318         {
1319             cmd.DeblockerFilterLineReadWriteYBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.DeblockerFilterLineReadWriteYBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1320             cmd.DeblockerFilterLineReadWriteYBufferAddress.DW0_1.BaseAddress                                         = m_dflyRowstoreCache.dwAddress;
1321         }
1322         else if (!Mos_ResourceIsNull(params.deblockLineYBuffer))
1323         {
1324             resourceParams.presResource    = params.deblockLineYBuffer;
1325             resourceParams.dwOffset        = 0;
1326             resourceParams.pdwCmd          = (cmd.DeblockerFilterLineReadWriteYBufferAddress.DW0_1.Value);
1327             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterLineReadWriteYBufferAddress);
1328             resourceParams.bIsWritable     = true;
1329 
1330             InitMocsParams(resourceParams, &cmd.DeblockerFilterLineReadWriteYBufferAddressAttributes.DW0.Value, 1, 6);
1331 
1332             MHW_MI_CHK_STATUS(AddResourceToCmd(
1333                 this->m_osItf,
1334                 this->m_currentCmdBuf,
1335                 &resourceParams));
1336         }
1337 
1338         // Deblocker Filter Line Read Write U Buffer
1339         if (m_dfluRowstoreCache.enabled)
1340         {
1341             cmd.DeblockerFilterLineReadWriteUBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.DeblockerFilterLineReadWriteUBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1342             cmd.DeblockerFilterLineReadWriteUBufferAddress.DW0_1.BaseAddress                                         = m_dfluRowstoreCache.dwAddress;
1343         }
1344         else if(!Mos_ResourceIsNull(params.deblockLineUBuffer))
1345         {
1346             resourceParams.presResource    = params.deblockLineUBuffer;
1347             resourceParams.dwOffset        = 0;
1348             resourceParams.pdwCmd          = (cmd.DeblockerFilterLineReadWriteUBufferAddress.DW0_1.Value);
1349             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterLineReadWriteUBufferAddress);
1350             resourceParams.bIsWritable     = true;
1351 
1352             InitMocsParams(resourceParams, &cmd.DeblockerFilterLineReadWriteUBufferAddressAttributes.DW0.Value, 1, 6);
1353 
1354             MHW_MI_CHK_STATUS(AddResourceToCmd(
1355                 this->m_osItf,
1356                 this->m_currentCmdBuf,
1357                 &resourceParams));
1358         }
1359         // Deblocker Filter Line Read Write V Buffer
1360         if (m_dflvRowstoreCache.enabled)
1361         {
1362             cmd.DeblockerFilterLineReadWriteVBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.DeblockerFilterLineReadWriteVBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1363             cmd.DeblockerFilterLineReadWriteVBufferAddress.DW0_1.BaseAddress                                         = m_dflvRowstoreCache.dwAddress;
1364         }
1365         else if (!Mos_ResourceIsNull(params.deblockLineVBuffer))
1366         {
1367             resourceParams.presResource    = params.deblockLineVBuffer;
1368             resourceParams.dwOffset        = 0;
1369             resourceParams.pdwCmd          = (cmd.DeblockerFilterLineReadWriteVBufferAddress.DW0_1.Value);
1370             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterLineReadWriteVBufferAddress);
1371             resourceParams.bIsWritable     = true;
1372 
1373             InitMocsParams(resourceParams, &cmd.DeblockerFilterLineReadWriteVBufferAddressAttributes.DW0.Value, 1, 6);
1374 
1375             MHW_MI_CHK_STATUS(AddResourceToCmd(
1376                 this->m_osItf,
1377                 this->m_currentCmdBuf,
1378                 &resourceParams));
1379         }
1380 
1381         // Deblocker Filter Tile Line Read Write Y Buffer
1382         if (!Mos_ResourceIsNull(params.deblockTileLineYBuffer))
1383         {
1384             resourceParams.presResource    = params.deblockTileLineYBuffer;
1385             resourceParams.dwOffset        = 0;
1386             resourceParams.pdwCmd          = (cmd.DeblockerFilterTileLineReadWriteYBufferAddress.DW0_1.Value);
1387             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterTileLineReadWriteYBufferAddress);
1388             resourceParams.bIsWritable     = true;
1389 
1390             InitMocsParams(resourceParams, &cmd.DeblockerFilterTileLineReadWriteYBufferAddressAttributes.DW0.Value, 1, 6);
1391 
1392             MHW_MI_CHK_STATUS(AddResourceToCmd(
1393                 this->m_osItf,
1394                 this->m_currentCmdBuf,
1395                 &resourceParams));
1396         }
1397 
1398         // Deblocker Filter Tile Line Read Write V Buffer
1399         if (!Mos_ResourceIsNull(params.deblockTileLineVBuffer))
1400         {
1401             resourceParams.presResource    = params.deblockTileLineVBuffer;
1402             resourceParams.dwOffset        = 0;
1403             resourceParams.pdwCmd          = (cmd.DeblockerFilterTileLineReadWriteVBufferAddress.DW0_1.Value);
1404             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterTileLineReadWriteVBufferAddress);
1405             resourceParams.bIsWritable     = true;
1406 
1407             InitMocsParams(resourceParams, &cmd.DeblockerFilterTileLineReadWriteVBufferAddressAttributes.DW0.Value, 1, 6);
1408 
1409             MHW_MI_CHK_STATUS(AddResourceToCmd(
1410                 this->m_osItf,
1411                 this->m_currentCmdBuf,
1412                 &resourceParams));
1413         }
1414 
1415         // Deblocker Filter Tile Line Read Write U Buffer
1416         if (!Mos_ResourceIsNull(params.deblockTileLineUBuffer))
1417         {
1418             resourceParams.presResource    = params.deblockTileLineUBuffer;
1419             resourceParams.dwOffset        = 0;
1420             resourceParams.pdwCmd          = (cmd.DeblockerFilterTileLineReadWriteUBufferAddress.DW0_1.Value);
1421             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterTileLineReadWriteUBufferAddress);
1422             resourceParams.bIsWritable     = true;
1423 
1424             InitMocsParams(resourceParams, &cmd.DeblockerFilterTileLineReadWriteUBufferAddressAttributes.DW0.Value, 1, 6);
1425 
1426             MHW_MI_CHK_STATUS(AddResourceToCmd(
1427                 this->m_osItf,
1428                 this->m_currentCmdBuf,
1429                 &resourceParams));
1430         }
1431 
1432         // Deblocker Filter Tile Column Read Write Y Buffer
1433         if (!Mos_ResourceIsNull(params.deblockTileColumnYBuffer))
1434         {
1435             resourceParams.presResource    = params.deblockTileColumnYBuffer;
1436             resourceParams.dwOffset        = 0;
1437             resourceParams.pdwCmd          = (cmd.DeblockerFilterTileColumnReadWriteYBufferAddress.DW0_1.Value);
1438             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterTileColumnReadWriteYBufferAddress);
1439             resourceParams.bIsWritable     = true;
1440 
1441             InitMocsParams(resourceParams, &cmd.DeblockerFilterTileColumnReadWriteYBufferAddressAttributes.DW0.Value, 1, 6);
1442 
1443             MHW_MI_CHK_STATUS(AddResourceToCmd(
1444                 this->m_osItf,
1445                 this->m_currentCmdBuf,
1446                 &resourceParams));
1447         }
1448 
1449         // Deblocker Filter Tile Column Read Write U Buffer
1450         if (!Mos_ResourceIsNull(params.deblockTileColumnUBuffer))
1451         {
1452             resourceParams.presResource    = params.deblockTileColumnUBuffer;
1453             resourceParams.dwOffset        = 0;
1454             resourceParams.pdwCmd          = (cmd.DeblockerFilterTileColumnReadWriteUBufferAddress.DW0_1.Value);
1455             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterTileColumnReadWriteUBufferAddress);
1456             resourceParams.bIsWritable     = true;
1457 
1458             InitMocsParams(resourceParams, &cmd.DeblockerFilterTileColumnReadWriteUBufferAddressAttributes.DW0.Value, 1, 6);
1459 
1460             MHW_MI_CHK_STATUS(AddResourceToCmd(
1461                 this->m_osItf,
1462                 this->m_currentCmdBuf,
1463                 &resourceParams));
1464         }
1465 
1466         // Deblocker Filter Tile Column Read Write V Buffer
1467         if (!Mos_ResourceIsNull(params.deblockTileColumnVBuffer))
1468         {
1469             resourceParams.presResource    = params.deblockTileColumnVBuffer;
1470             resourceParams.dwOffset        = 0;
1471             resourceParams.pdwCmd          = (cmd.DeblockerFilterTileColumnReadWriteVBufferAddress.DW0_1.Value);
1472             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockerFilterTileColumnReadWriteVBufferAddress);
1473             resourceParams.bIsWritable     = true;
1474 
1475             InitMocsParams(resourceParams, &cmd.DeblockerFilterTileColumnReadWriteVBufferAddressAttributes.DW0.Value, 1, 6);
1476 
1477             MHW_MI_CHK_STATUS(AddResourceToCmd(
1478                 this->m_osItf,
1479                 this->m_currentCmdBuf,
1480                 &resourceParams));
1481         }
1482 
1483         // Cdef Filter Line Read Write Y Buffer
1484         if (m_cdefRowstoreCache.enabled)
1485         {
1486             cmd.CdefFilterLineReadWriteBufferAddressAttributes.DW0.BaseAddressRowStoreScratchBufferCacheSelect = cmd.CdefFilterLineReadWriteBufferAddressAttributes.BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1;
1487             cmd.CdefFilterLineReadWriteBufferAddress.DW0_1.BaseAddress                                         = m_cdefRowstoreCache.dwAddress;
1488         }
1489         else if (!Mos_ResourceIsNull(params.cdefLineBuffer))
1490         {
1491             resourceParams.presResource    = params.cdefLineBuffer;
1492             resourceParams.dwOffset        = 0;
1493             resourceParams.pdwCmd          = (cmd.CdefFilterLineReadWriteBufferAddress.DW0_1.Value);
1494             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdefFilterLineReadWriteBufferAddress);
1495             resourceParams.bIsWritable     = true;
1496 
1497             InitMocsParams(resourceParams, &cmd.CdefFilterLineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1498 
1499             MHW_MI_CHK_STATUS(AddResourceToCmd(
1500                 this->m_osItf,
1501                 this->m_currentCmdBuf,
1502                 &resourceParams));
1503         }
1504 
1505         // Cdef Filter Tile Line Read Write Y Buffer
1506         if (!Mos_ResourceIsNull(params.cdefTileLineBuffer))
1507         {
1508             resourceParams.presResource    = params.cdefTileLineBuffer;
1509             resourceParams.dwOffset        = 0;
1510             resourceParams.pdwCmd          = (cmd.CdefFilterTileLineReadWriteBufferAddress.DW0_1.Value);
1511             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdefFilterTileLineReadWriteBufferAddress);
1512             resourceParams.bIsWritable     = true;
1513 
1514             InitMocsParams(resourceParams, &cmd.CdefFilterTileLineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1515 
1516             MHW_MI_CHK_STATUS(AddResourceToCmd(
1517                 this->m_osItf,
1518                 this->m_currentCmdBuf,
1519                 &resourceParams));
1520         }
1521 
1522         // Cdef Filter Tile Line Read Write U Buffer
1523         if (!Mos_ResourceIsNull(params.cdefTileColumnBuffer))
1524         {
1525             resourceParams.presResource    = params.cdefTileColumnBuffer;
1526             resourceParams.dwOffset        = 0;
1527             resourceParams.pdwCmd          = (cmd.CdefFilterTileColumnReadWriteBufferAddress.DW0_1.Value);
1528             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdefFilterTileColumnReadWriteBufferAddress);
1529             resourceParams.bIsWritable     = true;
1530 
1531             InitMocsParams(resourceParams, &cmd.CdefFilterTileColumnReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1532 
1533             MHW_MI_CHK_STATUS(AddResourceToCmd(
1534                 this->m_osItf,
1535                 this->m_currentCmdBuf,
1536                 &resourceParams));
1537         }
1538 
1539         // Cdef Filter Tile Line Read Write V Buffer
1540         if (!Mos_ResourceIsNull(params.cdefMetaTileLineBuffer))
1541         {
1542             resourceParams.presResource    = params.cdefMetaTileLineBuffer;
1543             resourceParams.dwOffset        = 0;
1544             resourceParams.pdwCmd          = (cmd.CdefFilterMetaTileLineReadWriteBufferAddress.DW0_1.Value);
1545             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdefFilterMetaTileLineReadWriteBufferAddress);
1546             resourceParams.bIsWritable     = true;
1547 
1548             InitMocsParams(resourceParams, &cmd.CdefFilterMetaTileLineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1549 
1550             MHW_MI_CHK_STATUS(AddResourceToCmd(
1551                 this->m_osItf,
1552                 this->m_currentCmdBuf,
1553                 &resourceParams));
1554         }
1555 
1556         // Cdef Filter Tile Column Read Write Y Buffer
1557         if (!Mos_ResourceIsNull(params.cdefMetaTileColumnBuffer))
1558         {
1559             resourceParams.presResource    = params.cdefMetaTileColumnBuffer;
1560             resourceParams.dwOffset        = 0;
1561             resourceParams.pdwCmd          = (cmd.CdefFilterMetaTileColumnReadWriteBufferAddress.DW0_1.Value);
1562             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdefFilterMetaTileColumnReadWriteBufferAddress);
1563             resourceParams.bIsWritable     = true;
1564 
1565             InitMocsParams(resourceParams, &cmd.CdefFilterMetaTileColumnReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1566 
1567             MHW_MI_CHK_STATUS(AddResourceToCmd(
1568                 this->m_osItf,
1569                 this->m_currentCmdBuf,
1570                 &resourceParams));
1571         }
1572 
1573         // Cdef Filter Top Left Corner Read Write Buffer
1574         if (!Mos_ResourceIsNull(params.cdefTopLeftCornerBuffer))
1575         {
1576             resourceParams.presResource    = params.cdefTopLeftCornerBuffer;
1577             resourceParams.dwOffset        = 0;
1578             resourceParams.pdwCmd          = (cmd.CdefFilterTopLeftCornerReadWriteBufferAddress.DW0_1.Value);
1579             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CdefFilterTopLeftCornerReadWriteBufferAddress);
1580             resourceParams.bIsWritable     = true;
1581 
1582             InitMocsParams(resourceParams, &cmd.CdefFilterTopLeftCornerReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1583 
1584             MHW_MI_CHK_STATUS(AddResourceToCmd(
1585                 this->m_osItf,
1586                 this->m_currentCmdBuf,
1587                 &resourceParams));
1588         }
1589 
1590         // Super-Res Tile Column Read Write Y Buffer
1591         if (!Mos_ResourceIsNull(params.superResTileColumnYBuffer))
1592         {
1593             resourceParams.presResource    = params.superResTileColumnYBuffer;
1594             resourceParams.dwOffset        = 0;
1595             resourceParams.pdwCmd          = (cmd.SuperResTileColumnReadWriteYBufferAddress.DW0_1.Value);
1596             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SuperResTileColumnReadWriteYBufferAddress);
1597             resourceParams.bIsWritable     = true;
1598 
1599             InitMocsParams(resourceParams, &cmd.SuperResTileColumnReadWriteYBufferAddressAttributes.DW0.Value, 1, 6);
1600 
1601             MHW_MI_CHK_STATUS(AddResourceToCmd(
1602                 this->m_osItf,
1603                 this->m_currentCmdBuf,
1604                 &resourceParams));
1605         }
1606 
1607         // Super-Res Tile Column Read Write U Buffer
1608         if (!Mos_ResourceIsNull(params.superResTileColumnUBuffer))
1609         {
1610             resourceParams.presResource    = params.superResTileColumnUBuffer;
1611             resourceParams.dwOffset        = 0;
1612             resourceParams.pdwCmd          = (cmd.SuperResTileColumnReadWriteUBufferAddress.DW0_1.Value);
1613             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SuperResTileColumnReadWriteUBufferAddress);
1614             resourceParams.bIsWritable     = true;
1615 
1616             InitMocsParams(resourceParams, &cmd.SuperResTileColumnReadWriteUBufferAddressAttributes.DW0.Value, 1, 6);
1617 
1618             MHW_MI_CHK_STATUS(AddResourceToCmd(
1619                 this->m_osItf,
1620                 this->m_currentCmdBuf,
1621                 &resourceParams));
1622         }
1623 
1624         // Super-Res Tile Column Read Write V Buffer
1625         if (!Mos_ResourceIsNull(params.superResTileColumnVBuffer))
1626         {
1627             resourceParams.presResource    = params.superResTileColumnVBuffer;
1628             resourceParams.dwOffset        = 0;
1629             resourceParams.pdwCmd          = (cmd.SuperResTileColumnReadWriteVBufferAddress.DW0_1.Value);
1630             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SuperResTileColumnReadWriteVBufferAddress);
1631             resourceParams.bIsWritable     = true;
1632 
1633             InitMocsParams(resourceParams, &cmd.SuperResTileColumnReadWriteVBufferAddressAttributes.DW0.Value, 1, 6);
1634 
1635             MHW_MI_CHK_STATUS(AddResourceToCmd(
1636                 this->m_osItf,
1637                 this->m_currentCmdBuf,
1638                 &resourceParams));
1639         }
1640 
1641         // Loop Restoration Filter Tile Column Read Write Y Buffer
1642         if (!Mos_ResourceIsNull(params.lrTileColumnYBuffer))
1643         {
1644             resourceParams.presResource    = params.lrTileColumnYBuffer;
1645             resourceParams.dwOffset        = 0;
1646             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileColumnReadWriteYBufferAddress.DW0_1.Value);
1647             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileColumnReadWriteYBufferAddress);
1648             resourceParams.bIsWritable     = true;
1649 
1650             InitMocsParams(resourceParams, &cmd.LoopRestorationFilterTileColumnReadWriteYBufferAddressAttributes.DW0.Value, 1, 6);
1651 
1652             MHW_MI_CHK_STATUS(AddResourceToCmd(
1653                 this->m_osItf,
1654                 this->m_currentCmdBuf,
1655                 &resourceParams));
1656         }
1657 
1658         // Loop Restoration Filter Tile Column Read Write U Buffer
1659         if (!Mos_ResourceIsNull(params.lrTileColumnUBuffer))
1660         {
1661             resourceParams.presResource    = params.lrTileColumnUBuffer;
1662             resourceParams.dwOffset        = 0;
1663             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileColumnReadWriteUBufferAddress.DW0_1.Value);
1664             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileColumnReadWriteUBufferAddress);
1665             resourceParams.bIsWritable     = true;
1666 
1667             InitMocsParams(resourceParams, &cmd.LoopRestorationFilterTileColumnReadWriteUBufferAddressAttributes.DW0.Value, 1, 6);
1668 
1669             MHW_MI_CHK_STATUS(AddResourceToCmd(
1670                 this->m_osItf,
1671                 this->m_currentCmdBuf,
1672                 &resourceParams));
1673         }
1674 
1675         // Loop Restoration Filter Tile Column Read Write V Buffer
1676         if (!Mos_ResourceIsNull(params.lrTileColumnVBuffer))
1677         {
1678             resourceParams.presResource    = params.lrTileColumnVBuffer;
1679             resourceParams.dwOffset        = 0;
1680             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileColumnReadWriteVBufferAddress.DW0_1.Value);
1681             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileColumnReadWriteVBufferAddress);
1682             resourceParams.bIsWritable     = true;
1683 
1684             InitMocsParams(resourceParams, &cmd.LoopRestorationFilterTileColumnReadWriteVBufferAddressAttributes.DW0.Value, 1, 6);
1685 
1686             MHW_MI_CHK_STATUS(AddResourceToCmd(
1687                 this->m_osItf,
1688                 this->m_currentCmdBuf,
1689                 &resourceParams));
1690         }
1691 
1692         // Decoded Frame Status Error Buffer
1693         if (!Mos_ResourceIsNull(params.decodedFrameStatusErrorBuffer))
1694         {
1695             resourceParams.presResource    = params.decodedFrameStatusErrorBuffer;
1696             resourceParams.dwOffset        = 0;
1697             resourceParams.pdwCmd          = (cmd.DecodedFrameStatusErrorBufferBaseAddress.DW0_1.Value);
1698             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DecodedFrameStatusErrorBufferBaseAddress);
1699             resourceParams.bIsWritable     = true;
1700 
1701             InitMocsParams(resourceParams, &cmd.DecodedFrameStatusErrorBufferBaseAddressAttributes.DW0.Value, 1, 6);
1702 
1703             MHW_MI_CHK_STATUS(AddResourceToCmd(
1704                 this->m_osItf,
1705                 this->m_currentCmdBuf,
1706                 &resourceParams));
1707         }
1708 
1709         // Decoded Block Data Streamout Buffer
1710         if (!Mos_ResourceIsNull(params.decodedBlockDataStreamoutBuffer))
1711         {
1712             resourceParams.presResource    = params.decodedBlockDataStreamoutBuffer;
1713             resourceParams.dwOffset        = 0;
1714             resourceParams.pdwCmd          = (cmd.DecodedBlockDataStreamoutBufferAddress.DW0_1.Value);
1715             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DecodedBlockDataStreamoutBufferAddress);
1716             resourceParams.bIsWritable     = true;
1717 
1718             InitMocsParams(resourceParams, &cmd.DecodedBlockDataStreamoutBufferAddressAttributes.DW0.Value, 1, 6);
1719 
1720             MHW_MI_CHK_STATUS(AddResourceToCmd(
1721                 this->m_osItf,
1722                 this->m_currentCmdBuf,
1723                 &resourceParams));
1724         }
1725 
1726         // below is encode part
1727 
1728         // Original Uncompressed Picture Source Buffer
1729         if (!Mos_ResourceIsNull(params.originalPicSourceBuffer))
1730         {
1731             MOS_SURFACE details = {};
1732             MOS_ZeroMemory(&details, sizeof(details));
1733             details.Format = Format_Invalid;
1734             MHW_MI_CHK_STATUS(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.originalPicSourceBuffer, &details));
1735 
1736             cmd.OriginalUncompressedPictureSourceBufferAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = MmcEnabled(params.mmcStateRawSurf);
1737             cmd.OriginalUncompressedPictureSourceBufferAddressAttributes.DW0.CompressionType                    = MmcRcEnabled(params.mmcStateRawSurf);
1738             cmd.OriginalUncompressedPictureSourceBufferAddressAttributes.DW0.TileMode                           = GetHwTileType(details.TileType, details.TileModeGMM, details.bGMMTileEnabled);
1739 
1740             resourceParams.presResource    = params.originalPicSourceBuffer;
1741             resourceParams.dwOffset        = 0;
1742             resourceParams.pdwCmd          = (cmd.OriginalUncompressedPictureSourceBufferAddress.DW0_1.Value);
1743             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(OriginalUncompressedPictureSourceBufferAddress);
1744             resourceParams.bIsWritable     = false;
1745 
1746             InitMocsParams(resourceParams, &cmd.OriginalUncompressedPictureSourceBufferAddressAttributes.DW0.Value, 1, 6);
1747 
1748             MHW_MI_CHK_STATUS(AddResourceToCmd(
1749                 this->m_osItf,
1750                 this->m_currentCmdBuf,
1751                 &resourceParams));
1752         }
1753 
1754         // Downscaled Uncompressed Picture Source Buffer
1755         if (!Mos_ResourceIsNull(params.dsPictureSourceBuffer))
1756         {
1757             MOS_SURFACE details = {};
1758             MOS_ZeroMemory(&details, sizeof(details));
1759             details.Format = Format_Invalid;
1760             MHW_MI_CHK_STATUS(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.dsPictureSourceBuffer, &details));
1761 
1762             cmd.DownscaledUncompressedPictureSourceBufferAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = MmcEnabled(params.mmcStateRawSurf);
1763             cmd.DownscaledUncompressedPictureSourceBufferAddressAttributes.DW0.CompressionType                    = MmcRcEnabled(params.mmcStateRawSurf);
1764             cmd.DownscaledUncompressedPictureSourceBufferAddressAttributes.DW0.TileMode                           = GetHwTileType(details.TileType, details.TileModeGMM, details.bGMMTileEnabled);
1765 
1766             resourceParams.presResource    = params.dsPictureSourceBuffer;
1767             resourceParams.dwOffset        = 0;
1768             resourceParams.pdwCmd          = (cmd.DownscaledUncompressedPictureSourceBufferAddress.DW0_1.Value);
1769             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DownscaledUncompressedPictureSourceBufferAddress);
1770             resourceParams.bIsWritable     = false;
1771 
1772             InitMocsParams(resourceParams, &cmd.DownscaledUncompressedPictureSourceBufferAddressAttributes.DW0.Value, 1, 6);
1773 
1774             MHW_MI_CHK_STATUS(AddResourceToCmd(
1775                 this->m_osItf,
1776                 this->m_currentCmdBuf,
1777                 &resourceParams));
1778         }
1779 
1780         // Tile Size Streamout Buffer
1781 
1782         if (!Mos_ResourceIsNull(params.tileSizeStreamoutBuffer))
1783         {
1784             resourceParams.presResource    = params.tileSizeStreamoutBuffer;
1785             resourceParams.dwOffset        = params.tileSizeStreamoutBufferOffset;
1786             resourceParams.pdwCmd          = (cmd.TileSizeStreamoutBufferAddress.DW0_1.Value);
1787             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(TileSizeStreamoutBufferAddress);
1788             resourceParams.bIsWritable     = true;
1789 
1790             InitMocsParams(resourceParams, &cmd.TileSizeStreamoutBufferAddressAttributes.DW0.Value, 1, 6);
1791 
1792             MHW_MI_CHK_STATUS(AddResourceToCmd(
1793                 this->m_osItf,
1794                 this->m_currentCmdBuf,
1795                 &resourceParams));
1796         }
1797 
1798         // Tile Statistics Streamout Buffer
1799         if (!Mos_ResourceIsNull(params.tileStatisticsPakStreamoutBuffer))
1800         {
1801             resourceParams.presResource    = params.tileStatisticsPakStreamoutBuffer;
1802             resourceParams.dwOffset        = 0;
1803             resourceParams.pdwCmd          = (cmd.TileStatisticsStreamoutBufferAddress.DW0_1.Value);
1804             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(TileStatisticsStreamoutBufferAddress);
1805             resourceParams.bIsWritable     = true;
1806 
1807             InitMocsParams(resourceParams, &cmd.TileStatisticsStreamoutBufferAddressAttributes.DW0.Value, 1, 6);
1808 
1809             MHW_MI_CHK_STATUS(AddResourceToCmd(
1810                 this->m_osItf,
1811                 this->m_currentCmdBuf,
1812                 &resourceParams));
1813         }
1814 
1815         // CU Streamout Buffer
1816         if (!Mos_ResourceIsNull(params.cuStreamoutBuffer))
1817         {
1818             resourceParams.presResource    = params.cuStreamoutBuffer;
1819             resourceParams.dwOffset        = 0;
1820             resourceParams.pdwCmd          = (cmd.CUStreamoutBufferAddress.DW0_1.Value);
1821             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CUStreamoutBufferAddress);
1822             resourceParams.bIsWritable     = true;
1823 
1824             InitMocsParams(resourceParams, &cmd.CUStreamoutBufferAddressAttributes.DW0.Value, 1, 6);
1825 
1826             MHW_MI_CHK_STATUS(AddResourceToCmd(
1827                 this->m_osItf,
1828                 this->m_currentCmdBuf,
1829                 &resourceParams));
1830         }
1831 
1832         // SSE Line Read / Write Buffer
1833         if (!Mos_ResourceIsNull(params.sseLineBuffer))
1834         {
1835             resourceParams.presResource    = params.sseLineBuffer;
1836             resourceParams.dwOffset        = 0;
1837             resourceParams.pdwCmd          = (cmd.SSELineReadWriteBufferAddress.DW0_1.Value);
1838             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SSELineReadWriteBufferAddress);
1839             resourceParams.bIsWritable     = true;
1840 
1841             InitMocsParams(resourceParams, &cmd.SSELineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1842 
1843             MHW_MI_CHK_STATUS(AddResourceToCmd(
1844                 this->m_osItf,
1845                 this->m_currentCmdBuf,
1846                 &resourceParams));
1847         }
1848 
1849         // SSE Tile Line Read/Write Buffer
1850         if (!Mos_ResourceIsNull(params.sseTileLineBuffer))
1851         {
1852             resourceParams.presResource    = params.sseTileLineBuffer;
1853             resourceParams.dwOffset        = 0;
1854             resourceParams.pdwCmd          = (cmd.SSETileLineReadWriteBufferAddress.DW0_1.Value);
1855             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SSETileLineReadWriteBufferAddress);
1856             resourceParams.bIsWritable     = true;
1857 
1858             InitMocsParams(resourceParams, &cmd.SSETileLineReadWriteBufferAddressAttributes.DW0.Value, 1, 6);
1859 
1860             MHW_MI_CHK_STATUS(AddResourceToCmd(
1861                 this->m_osItf,
1862                 this->m_currentCmdBuf,
1863                 &resourceParams));
1864         }
1865 
1866         // PostCDEF pixels Buffer
1867         if (params.postCDEFpixelsBuffer != nullptr)
1868         {
1869             cmd.PostCDEFpixelsBufferAddressAttributes.DW0.BaseAddressMemoryCompressionEnable                   = MmcEnabled(params.postCdefSurfMmcState);
1870             cmd.PostCDEFpixelsBufferAddressAttributes.DW0.CompressionType                                      = MmcRcEnabled(params.postCdefSurfMmcState);
1871             cmd.PostCDEFpixelsBufferAddressAttributes.DW0.TileMode                                             = GetHwTileType(params.postCDEFpixelsBuffer->TileType,
1872                 params.postCDEFpixelsBuffer->TileModeGMM,
1873                 params.postCDEFpixelsBuffer->bGMMTileEnabled);
1874 
1875             resourceParams.presResource    = &params.postCDEFpixelsBuffer->OsResource;
1876             resourceParams.dwOffset        = 0;
1877             resourceParams.pdwCmd          = (cmd.PostCDEFpixelsBufferAddress.DW0_1.Value);
1878             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(PostCDEFpixelsBufferAddress);
1879             resourceParams.bIsWritable     = true;
1880 
1881             InitMocsParams(resourceParams, &cmd.PostCDEFpixelsBufferAddressAttributes.DW0.Value, 1, 6);
1882 
1883             MHW_MI_CHK_STATUS(AddResourceToCmd(
1884                 this->m_osItf,
1885                 this->m_currentCmdBuf,
1886                 &resourceParams));
1887         }
1888 
1889         return MOS_STATUS_SUCCESS;
1890     }
1891 
_MHW_SETCMD_OVERRIDE_DECL(AVP_INTER_PRED_STATE)1892     _MHW_SETCMD_OVERRIDE_DECL(AVP_INTER_PRED_STATE)
1893     {
1894         _MHW_SETCMD_CALLBASE(AVP_INTER_PRED_STATE);
1895 
1896 #define DO_FIELDS()                                                                      \
1897     DO_FIELD(DW1, SavedOrderHintsForAllReferences00, params.savedRefOrderHints[0][0]);   \
1898     DO_FIELD(DW1, SavedOrderHintsForAllReferences01, params.savedRefOrderHints[0][1]);   \
1899     DO_FIELD(DW1, SavedOrderHintsForAllReferences02, params.savedRefOrderHints[0][2]);   \
1900     DO_FIELD(DW1, SavedOrderHintsForAllReferences03, params.savedRefOrderHints[0][3]);   \
1901                                                                                          \
1902     DO_FIELD(DW2, SavedOrderHintsForAllReferences04, params.savedRefOrderHints[0][4]);   \
1903     DO_FIELD(DW2, SavedOrderHintsForAllReferences05, params.savedRefOrderHints[0][5]);   \
1904     DO_FIELD(DW2, SavedOrderHintsForAllReferences06, params.savedRefOrderHints[0][6]);   \
1905     DO_FIELD(DW2, ActiveReferenceBitmaskForMotionFieldProjection, params.refMaskMfProj); \
1906                                                                                          \
1907     DO_FIELD(DW3, SavedOrderHintsForAllReferences10, params.savedRefOrderHints[1][0]);   \
1908     DO_FIELD(DW3, SavedOrderHintsForAllReferences11, params.savedRefOrderHints[1][1]);   \
1909     DO_FIELD(DW3, SavedOrderHintsForAllReferences12, params.savedRefOrderHints[1][2]);   \
1910     DO_FIELD(DW3, SavedOrderHintsForAllReferences13, params.savedRefOrderHints[1][3]);   \
1911                                                                                          \
1912     DO_FIELD(DW4, SavedOrderHintsForAllReferences14, params.savedRefOrderHints[1][4]);   \
1913     DO_FIELD(DW4, SavedOrderHintsForAllReferences15, params.savedRefOrderHints[1][5]);   \
1914     DO_FIELD(DW4, SavedOrderHintsForAllReferences16, params.savedRefOrderHints[1][6]);   \
1915                                                                                          \
1916     DO_FIELD(DW5, SavedOrderHintsForAllReferences20, params.savedRefOrderHints[2][0]);   \
1917     DO_FIELD(DW5, SavedOrderHintsForAllReferences21, params.savedRefOrderHints[2][1]);   \
1918     DO_FIELD(DW5, SavedOrderHintsForAllReferences22, params.savedRefOrderHints[2][2]);   \
1919     DO_FIELD(DW5, SavedOrderHintsForAllReferences23, params.savedRefOrderHints[2][3]);   \
1920                                                                                          \
1921     DO_FIELD(DW6, SavedOrderHintsForAllReferences24, params.savedRefOrderHints[2][4]);   \
1922     DO_FIELD(DW6, SavedOrderHintsForAllReferences25, params.savedRefOrderHints[2][5]);   \
1923     DO_FIELD(DW6, SavedOrderHintsForAllReferences26, params.savedRefOrderHints[2][6]);   \
1924                                                                                          \
1925     DO_FIELD(DW7, SavedOrderHintsForAllReferences30, params.savedRefOrderHints[3][0]);   \
1926     DO_FIELD(DW7, SavedOrderHintsForAllReferences31, params.savedRefOrderHints[3][1]);   \
1927     DO_FIELD(DW7, SavedOrderHintsForAllReferences32, params.savedRefOrderHints[3][2]);   \
1928     DO_FIELD(DW7, SavedOrderHintsForAllReferences33, params.savedRefOrderHints[3][3]);   \
1929                                                                                          \
1930     DO_FIELD(DW8, SavedOrderHintsForAllReferences34, params.savedRefOrderHints[3][4]);   \
1931     DO_FIELD(DW8, SavedOrderHintsForAllReferences35, params.savedRefOrderHints[3][5]);   \
1932     DO_FIELD(DW8, SavedOrderHintsForAllReferences36, params.savedRefOrderHints[3][6]);   \
1933                                                                                          \
1934     DO_FIELD(DW9, SavedOrderHintsForAllReferences40, params.savedRefOrderHints[4][0]);   \
1935     DO_FIELD(DW9, SavedOrderHintsForAllReferences41, params.savedRefOrderHints[4][1]);   \
1936     DO_FIELD(DW9, SavedOrderHintsForAllReferences42, params.savedRefOrderHints[4][2]);   \
1937     DO_FIELD(DW9, SavedOrderHintsForAllReferences43, params.savedRefOrderHints[4][3]);   \
1938                                                                                          \
1939     DO_FIELD(DW10, SavedOrderHintsForAllReferences44, params.savedRefOrderHints[4][4]);  \
1940     DO_FIELD(DW10, SavedOrderHintsForAllReferences45, params.savedRefOrderHints[4][5]);  \
1941     DO_FIELD(DW10, SavedOrderHintsForAllReferences46, params.savedRefOrderHints[4][6]);  \
1942                                                                                          \
1943     DO_FIELD(DW11, SavedOrderHintsForAllReferences50, params.savedRefOrderHints[5][0]);  \
1944     DO_FIELD(DW11, SavedOrderHintsForAllReferences51, params.savedRefOrderHints[5][1]);  \
1945     DO_FIELD(DW11, SavedOrderHintsForAllReferences52, params.savedRefOrderHints[5][2]);  \
1946     DO_FIELD(DW11, SavedOrderHintsForAllReferences53, params.savedRefOrderHints[5][3]);  \
1947                                                                                          \
1948     DO_FIELD(DW12, SavedOrderHintsForAllReferences54, params.savedRefOrderHints[5][4]);  \
1949     DO_FIELD(DW12, SavedOrderHintsForAllReferences55, params.savedRefOrderHints[5][5]);  \
1950     DO_FIELD(DW12, SavedOrderHintsForAllReferences56, params.savedRefOrderHints[5][6]);  \
1951                                                                                          \
1952     DO_FIELD(DW13, SavedOrderHintsForAllReferences60, params.savedRefOrderHints[6][0]);  \
1953     DO_FIELD(DW13, SavedOrderHintsForAllReferences61, params.savedRefOrderHints[6][1]);  \
1954     DO_FIELD(DW13, SavedOrderHintsForAllReferences62, params.savedRefOrderHints[6][2]);  \
1955     DO_FIELD(DW13, SavedOrderHintsForAllReferences63, params.savedRefOrderHints[6][3]);  \
1956                                                                                          \
1957     DO_FIELD(DW14, SavedOrderHintsForAllReferences64, params.savedRefOrderHints[6][4]);  \
1958     DO_FIELD(DW14, SavedOrderHintsForAllReferences65, params.savedRefOrderHints[6][5]);  \
1959     DO_FIELD(DW14, SavedOrderHintsForAllReferences66, params.savedRefOrderHints[6][6])
1960 
1961 #include "mhw_hwcmd_process_cmdfields.h"
1962     }
1963 
_MHW_SETCMD_OVERRIDE_DECL(AVP_IND_OBJ_BASE_ADDR_STATE)1964     _MHW_SETCMD_OVERRIDE_DECL(AVP_IND_OBJ_BASE_ADDR_STATE)
1965     {
1966         _MHW_SETCMD_CALLBASE(AVP_IND_OBJ_BASE_ADDR_STATE);
1967 
1968         MHW_RESOURCE_PARAMS resourceParams = {};
1969 
1970         resourceParams.dwLsbNum      = MHW_VDBOX_HCP_UPPER_BOUND_STATE_SHIFT;
1971         resourceParams.HwCommandType = MOS_MFX_INDIRECT_OBJ_BASE_ADDR;
1972 
1973         if (!Mos_ResourceIsNull(params.dataBuffer))
1974         {
1975             resourceParams.presResource    = params.dataBuffer;
1976             resourceParams.dwOffset        = params.dataOffset;
1977             resourceParams.pdwCmd          = &(cmd.AvpIndirectBitstreamObjectBaseAddress.DW0_1.Value[0]);
1978             resourceParams.dwLocationInCmd = 1;
1979             resourceParams.dwSize          = params.dataSize;
1980             resourceParams.bIsWritable     = false;
1981 
1982             // upper bound of the allocated resource will be set at 3 DW apart from address location
1983             resourceParams.dwUpperBoundLocationOffsetFromCmd = 3;
1984 
1985             InitMocsParams(resourceParams, &cmd.AvpIndirectBitstreamObjectMemoryAddressAttributes.DW0.Value, 1, 6);
1986 
1987             MHW_MI_CHK_STATUS(AddResourceToCmd(
1988                 this->m_osItf,
1989                 this->m_currentCmdBuf,
1990                 &resourceParams));
1991 
1992             resourceParams.dwUpperBoundLocationOffsetFromCmd = 0;
1993         }
1994 
1995         if (!Mos_ResourceIsNull(params.pakBaseObjectBuffer))
1996         {
1997             resourceParams.presResource    = params.pakBaseObjectBuffer;
1998             resourceParams.dwOffset        = params.pakBaseObjectOffset;
1999             resourceParams.pdwCmd          = &(cmd.AvpIndirectBitstreamObjectBaseAddress.DW0_1.Value[0]);
2000             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(AvpIndirectBitstreamObjectBaseAddress);
2001             resourceParams.dwSize          = MOS_ALIGN_FLOOR(params.pakBaseObjectSize, PAGE_SIZE);
2002             resourceParams.bIsWritable     = true;
2003             // upper bound of the allocated resource will be set at 3 DW apart from address location
2004             resourceParams.dwUpperBoundLocationOffsetFromCmd = 3;
2005 
2006             InitMocsParams(resourceParams, &cmd.AvpIndirectBitstreamObjectMemoryAddressAttributes.DW0.Value, 1, 6);
2007 
2008             MHW_MI_CHK_STATUS(AddResourceToCmd(
2009                 this->m_osItf,
2010                 this->m_currentCmdBuf,
2011                 &resourceParams));
2012         }
2013 
2014         if (!Mos_ResourceIsNull(params.mvObjectBuffer))
2015         {
2016             resourceParams.presResource    = params.mvObjectBuffer;
2017             resourceParams.dwOffset        = params.mvObjectOffset;
2018             resourceParams.pdwCmd          = &(cmd.AvpIndirectCuObjectBaseAddress.DW0_1.Value[0]);
2019             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(AvpIndirectCuObjectBaseAddress);
2020             resourceParams.dwSize          = MOS_ALIGN_CEIL(params.mvObjectSize, PAGE_SIZE);
2021             resourceParams.bIsWritable     = false;
2022 
2023             // no upper bound for indirect CU object
2024             resourceParams.dwUpperBoundLocationOffsetFromCmd = 0;
2025 
2026             InitMocsParams(resourceParams, &cmd.AvpIndirectCuObjectMemoryAddressAttributes.DW0.Value, 1, 6);
2027 
2028             MHW_MI_CHK_STATUS(AddResourceToCmd(
2029                 this->m_osItf,
2030                 this->m_currentCmdBuf,
2031                 &resourceParams));
2032         }
2033 
2034         return MOS_STATUS_SUCCESS;
2035     }
2036 
_MHW_SETCMD_OVERRIDE_DECL(AVP_SURFACE_STATE)2037     _MHW_SETCMD_OVERRIDE_DECL(AVP_SURFACE_STATE)
2038     {
2039         _MHW_SETCMD_CALLBASE(AVP_SURFACE_STATE);
2040 
2041 #define DO_FIELDS()                                                             \
2042     DO_FIELD(DW1, SurfaceId, params.surfaceStateId);                            \
2043     DO_FIELD(DW1, SurfacePitchMinus1, params.pitch - 1);                        \
2044                                                                                 \
2045     DO_FIELD(DW2, SurfaceFormat, static_cast<uint32_t>(params.srcFormat));      \
2046     DO_FIELD(DW2, YOffsetForUCbInPixel, params.uOffset);                        \
2047     DO_FIELD(DW3, YOffsetForVCr, params.vOffset);                               \
2048                                                                                 \
2049     DO_FIELD(DW4, CompressionFormat, params.compressionFormat)
2050 
2051 #include "mhw_hwcmd_process_cmdfields.h"
2052     }
2053 
_MHW_SETCMD_OVERRIDE_DECL(AVP_BSD_OBJECT)2054     _MHW_SETCMD_OVERRIDE_DECL(AVP_BSD_OBJECT)
2055     {
2056         _MHW_SETCMD_CALLBASE(AVP_BSD_OBJECT);
2057 
2058 #define DO_FIELDS()                                                              \
2059         DO_FIELD(DW1, TileIndirectBsdDataLength, params.bsdDataLength);          \
2060         DO_FIELD(DW2, TileIndirectDataStartAddress, params.bsdDataStartOffset)
2061 
2062 #include "mhw_hwcmd_process_cmdfields.h"
2063     }
2064 
_MHW_SETCMD_OVERRIDE_DECL(AVP_PAK_INSERT_OBJECT)2065     _MHW_SETCMD_OVERRIDE_DECL(AVP_PAK_INSERT_OBJECT)
2066     {
2067         _MHW_SETCMD_CALLBASE(AVP_PAK_INSERT_OBJECT);
2068 
2069         uint32_t dwordsUsed = cmd.dwSize;
2070 
2071         uint32_t byteSize         = (params.bitSize + 7) >> 3;
2072         uint32_t dataBitsInLastDw = params.bitSize % 32;
2073         if (dataBitsInLastDw == 0)
2074         {
2075             dataBitsInLastDw = 32;
2076         }
2077 
2078         dwordsUsed += (MOS_ALIGN_CEIL(byteSize, sizeof(uint32_t))) / sizeof(uint32_t);
2079 
2080 #define DO_FIELDS()                                                                                 \
2081     DO_FIELD(DW0, DwordLength, OP_LENGTH(dwordsUsed));                                              \
2082                                                                                                     \
2083     DO_FIELD(DW1, EndofsliceflagLastdstdatainsertcommandflag, params.endOfHeaderInsertion ? 1 : 0); \
2084     DO_FIELD(DW1, LastheaderflagLastsrcheaderdatainsertcommandflag, params.lastHeader ? 1 : 0);     \
2085     DO_FIELD(DW1, DatabitsinlastdwSrcdataendingbitinclusion50, dataBitsInLastDw);                   \
2086     DO_FIELD(DW1, DatabyteoffsetSrcdatastartingbyteoffset10, 0);                                    \
2087     DO_FIELD(DW1, IndirectPayloadEnable, 0)
2088 
2089 #include "mhw_hwcmd_process_cmdfields.h"
2090     }
2091 MEDIA_CLASS_DEFINE_END(mhw__vdbox__avp__Impl)
2092 };
2093 }  // namespace avp
2094 }  // namespace vdbox
2095 }  // namespace mhw
2096 
2097 #endif  // __MHW_VDBOX_AVP_IMPL_H__
2098