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 = ¶ms.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