1 /* 2 * Copyright (c) 2018-2022, 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 vp_vebox_cmd_packet.h 24 //! \brief vebox packet which used in by mediapipline. 25 //! \details vebox packet provide the structures and generate the cmd buffer which mediapipline will used. 26 //! 27 28 #ifndef __VP_VEBOX_CMD_PACKET_LEGACY_H__ 29 #define __VP_VEBOX_CMD_PACKET_LEGACY_H__ 30 31 #include "mhw_vebox_g12_X.h" 32 #include "vp_vebox_cmd_packet.h" 33 #include "vp_vebox_common.h" 34 #include "vp_render_sfc_base.h" 35 #include "vp_filter.h" 36 #include "vp_user_feature_control.h" 37 38 namespace vp { 39 40 class VpVeboxCmdPacketLegacy : virtual public VpVeboxCmdPacketBase 41 { 42 public: 43 VpVeboxCmdPacketLegacy(MediaTask * task, PVP_MHWINTERFACE hwInterface, PVpAllocator &allocator, VPMediaMemComp *mmc); 44 45 virtual ~VpVeboxCmdPacketLegacy(); 46 47 virtual MOS_STATUS Submit(MOS_COMMAND_BUFFER* commandBuffer, uint8_t packetPhase = otherPacket) override; 48 49 virtual MOS_STATUS Init() override; 50 Destory()51 virtual MOS_STATUS Destory() { return MOS_STATUS_SUCCESS; }; 52 53 virtual MOS_STATUS Prepare() override; 54 55 virtual MOS_STATUS PrepareState() override; 56 AllocateExecRenderData()57 virtual MOS_STATUS AllocateExecRenderData() 58 { 59 MOS_STATUS eStatus = MOS_STATUS_SUCCESS; 60 61 if (!m_lastExecRenderData) 62 { 63 m_lastExecRenderData = MOS_New(VpVeboxRenderData); 64 if (!m_lastExecRenderData) 65 { 66 return MOS_STATUS_NO_SPACE; 67 } 68 69 eStatus = m_lastExecRenderData->Init(); 70 if (eStatus != MOS_STATUS_SUCCESS) 71 { 72 MOS_Delete(m_lastExecRenderData); 73 } 74 75 } 76 return eStatus; 77 } 78 GetLastExecRenderData()79 virtual VpVeboxRenderData *GetLastExecRenderData() 80 { 81 if (!m_lastExecRenderData) 82 { 83 AllocateExecRenderData(); 84 } 85 return m_lastExecRenderData; 86 } 87 IsIECPEnabled()88 virtual bool IsIECPEnabled() 89 { 90 if (GetLastExecRenderData() != NULL) 91 { 92 return GetLastExecRenderData()->IECP.IsIecpEnabled(); 93 } 94 return false; 95 } 96 97 virtual MOS_STATUS ValidateHDR3DLutParameters(bool is3DLutTableFilled); 98 99 //! 100 //! \brief Setup surface states for Vebox 101 //! \details Setup surface states for use in the current Vebox Operation 102 //! \param [in] bDiVarianceEnable 103 //! Is DI/Variances report enabled 104 //! \param [in,out] pVeboxSurfaceStateCmdParams 105 //! Pointer to VEBOX_SURFACE_STATE command parameters 106 //! \return void 107 //! 108 virtual void SetupSurfaceStates( 109 PVP_VEBOX_SURFACE_STATE_CMD_PARAMS pVeboxSurfaceStateCmdParams); 110 111 //! 112 //! \brief Setup surface states for Vebox 113 //! \details Setup surface states for use in the current Vebox Operation 114 //! \param [in] pRenderHal 115 //! Pointer to Render Hal 116 //! \param [in] CmdBuffer 117 //! Pointer to command buffer 118 //! \param [in] pGenericPrologParams 119 //! pointer to Generic prolog params struct to send to cmd buffer header 120 //! \return void 121 //! 122 virtual MOS_STATUS InitCmdBufferWithVeParams( 123 PRENDERHAL_INTERFACE pRenderHal, 124 MOS_COMMAND_BUFFER &CmdBuffer, 125 PRENDERHAL_GENERIC_PROLOG_PARAMS pGenericPrologParams); 126 127 //! 128 //! \brief Setup Scaling Params for Vebox/SFC 129 //! \details Setup surface Scaling Params for Vebox/SFC 130 //! \param [in] scalingParams 131 //! Scaling Params 132 //! \return MOS_STATUS 133 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 134 //! 135 virtual MOS_STATUS SetScalingParams(PSFC_SCALING_PARAMS scalingParams) override; 136 137 virtual MOS_STATUS ConfigureSteParams(VpVeboxRenderData *renderData, bool bEnableSte, uint32_t dwSTEFactor, bool bEnableStd, uint32_t stdparaSizeInBytes, void *stdparam); 138 virtual MOS_STATUS ConfigureTccParams(VpVeboxRenderData *renderData, bool bEnableTcc, uint8_t magenta, uint8_t red, uint8_t yellow, uint8_t green, uint8_t cyan, uint8_t blue); 139 virtual MOS_STATUS ConfigureProcampParams(VpVeboxRenderData *renderData, bool bEnableProcamp, float fBrightness, float fContrast, float fHue, float fSaturation); 140 virtual MOS_STATUS ConfigureDenoiseParams(VpVeboxRenderData *renderData, float fDenoiseFactor); 141 142 virtual MOS_STATUS UpdateCscParams(FeatureParamCsc ¶ms) override; 143 virtual MOS_STATUS UpdateDenoiseParams(FeatureParamDenoise ¶ms) override; 144 virtual MOS_STATUS UpdateTccParams(FeatureParamTcc ¶ms) override; 145 virtual MOS_STATUS UpdateSteParams(FeatureParamSte ¶ms) override; 146 virtual MOS_STATUS UpdateProcampParams(FeatureParamProcamp ¶ms) override; 147 148 virtual void AddCommonOcaMessage(PMOS_COMMAND_BUFFER pCmdBufferInUse, MOS_CONTEXT *pOsContext, PMOS_INTERFACE pOsInterface, PRENDERHAL_INTERFACE pRenderHal, PMHW_MI_MMIOREGISTERS pMmioRegisters, PMHW_MI_INTERFACE pMhwMiInterface); 149 150 151 //! 152 //! \brief Setup CSC Params for Vebox/SFC 153 //! \details Setup surface CSC Params for Vebox/SFC 154 //! \param [in] cscParams 155 //! CSC/IEF Params 156 //! \return MOS_STATUS 157 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 158 //! 159 virtual MOS_STATUS SetSfcCSCParams(PSFC_CSC_PARAMS cscParams) override; 160 161 //! 162 //! \brief Setup CSC Params for Vebox back end 163 //! \details Setup surface CSC Params for Vebox 164 //! \param [in] cscParams 165 //! CSC Params 166 //! \return MOS_STATUS 167 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 168 //! 169 virtual MOS_STATUS SetVeboxBeCSCParams(PVEBOX_CSC_PARAMS cscParams) override; 170 171 //! 172 //! \brief Setup Vebox Output Alpha Value 173 //! \details Setup Vebox Output Alpha Value 174 //! \param [in] cscParams 175 //! CSC Params 176 //! \return MOS_STATUS 177 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 178 //! 179 virtual MOS_STATUS SetVeboxOutputAlphaParams(PVEBOX_CSC_PARAMS cscParams); 180 181 //! 182 //! \brief Setup Vebox Chroma sub sampling 183 //! \details Setup Vebox Chroma sub sampling 184 //! \param [in] cscParams 185 //! CSC Params 186 //! \return MOS_STATUS 187 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 188 //! 189 virtual MOS_STATUS SetVeboxChromasitingParams(PVEBOX_CSC_PARAMS cscParams); 190 191 //! 192 //! \brief Setup Roattion/Mirror Params for Vebox/SFC 193 //! \details Setup surface Roattion/Mirror Params for Vebox/SFC 194 //! \param [in] rotMirParams 195 //! Rotation/Mirror Params 196 //! \return MOS_STATUS 197 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 198 //! 199 virtual MOS_STATUS SetSfcRotMirParams(PSFC_ROT_MIR_PARAMS rotMirParams) override; 200 201 //! 202 //! \brief Setup DN Params for Vebox 203 //! \details Setup surface DN Params for Vebox 204 //! \param [in] dnParams 205 //! DN Params 206 //! \return MOS_STATUS 207 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 208 //! 209 virtual MOS_STATUS SetDnParams(PVEBOX_DN_PARAMS dnParams) override; 210 211 //! 212 //! \brief Setup STE Params for Vebox 213 //! \details Setup surface STE Params for Vebox 214 //! \param [in] steParams 215 //! STE Params 216 //! \return MOS_STATUS 217 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 218 //! 219 virtual MOS_STATUS SetSteParams(PVEBOX_STE_PARAMS steParams) override; 220 221 //! 222 //! \brief Setup HDR Params for Vebox 223 //! \details Setup surface HDR Params for Vebox 224 //! \param [in] HDRParams 225 //! HDR Params 226 //! \return MOS_STATUS 227 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 228 //! 229 virtual MOS_STATUS SetHdrParams(PVEBOX_HDR_PARAMS hdrParams) override; 230 231 //! 232 //! \brief Setup TCC Params for Vebox 233 //! \details Setup surface TCC Params for Vebox 234 //! \param [in] tccParams 235 //! TCC Params 236 //! \return MOS_STATUS 237 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 238 //! 239 virtual MOS_STATUS SetTccParams(PVEBOX_TCC_PARAMS tccParams) override; 240 241 //! 242 //! \brief Setup Procamp Params for Vebox 243 //! \details Setup surface Procamp Params for Vebox 244 //! \param [in] procampParams 245 //! Procamp Params 246 //! \return MOS_STATUS 247 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 248 //! 249 virtual MOS_STATUS SetProcampParams(PVEBOX_PROCAMP_PARAMS procampParams) override; 250 251 //! 252 //! \brief Setup DI Params for Vebox 253 //! \details Setup surface DN Params for Vebox 254 //! \param [in] diParams 255 //! DI Params 256 //! \return MOS_STATUS 257 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 258 //! 259 virtual MOS_STATUS SetDiParams(PVEBOX_DI_PARAMS diParams) override; 260 261 //! 262 //! \brief Setup CGC Params for Vebox 263 //! \details Setup surface CGC Params for Vebox 264 //! \param [in] cgcParams 265 //! CGC Params 266 //! \return MOS_STATUS 267 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 268 //! 269 virtual MOS_STATUS SetCgcParams(PVEBOX_CGC_PARAMS cgcParams) override; 270 271 //! 272 //! \brief Get DN luma parameters 273 //! \details Get DN luma parameters 274 //! \param [in] bDnEnabled 275 //! true if DN being enabled 276 //! \param [in] bAutoDetect 277 //! true if auto DN being enabled 278 //! \param [in] fDnFactor 279 //! DN factor 280 //! \param [in] bRefValid 281 //! true if reference surface available 282 //! \param [out] pLumaParams 283 //! DN luma parameters 284 //! \return MOS_STATUS 285 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 286 //! GetDnLumaParams(bool bDnEnabled,bool bAutoDetect,float fDnFactor,bool bRefValid,PVP_SAMPLER_STATE_DN_PARAM pLumaParams)287 virtual MOS_STATUS GetDnLumaParams( 288 bool bDnEnabled, 289 bool bAutoDetect, 290 float fDnFactor, 291 bool bRefValid, 292 PVP_SAMPLER_STATE_DN_PARAM pLumaParams) { return MOS_STATUS_SUCCESS; } 293 294 //! 295 //! \brief Get DN chroma parameters 296 //! \details Get DN chroma parameters 297 //! \param [in] bChromaDenoise 298 //! true if chroma DN being enabled 299 //! \param [in] bAutoDetect 300 //! true if auto DN being enabled 301 //! \param [in] fDnFactor 302 //! DN factor 303 //! \param [out] pChromaParams 304 //! DN chroma parameters 305 //! \return MOS_STATUS 306 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 307 //! GetDnChromaParams(bool bChromaDenoise,bool bAutoDetect,float fDnFactor,PVPHAL_DNUV_PARAMS pChromaParams)308 virtual MOS_STATUS GetDnChromaParams( 309 bool bChromaDenoise, 310 bool bAutoDetect, 311 float fDnFactor, 312 PVPHAL_DNUV_PARAMS pChromaParams) { return MOS_STATUS_SUCCESS; } 313 314 //! 315 //! \brief Config DN luma pix range 316 //! \details Config DN luma pix range threshold and weight 317 //! \param [in] bDnEnabled 318 //! true if DN being enabled 319 //! \param [in] bAutoDetect 320 //! true if auto DN being enabled 321 //! \param [in] fDnFactor 322 //! DN factor 323 //! \return MOS_STATUS 324 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 325 //! ConfigLumaPixRange(bool bDnEnabled,bool bAutoDetect,float fDnFactor)326 virtual MOS_STATUS ConfigLumaPixRange( 327 bool bDnEnabled, 328 bool bAutoDetect, 329 float fDnFactor) { return MOS_STATUS_SUCCESS; } 330 331 //! 332 //! \brief Config DN chroma pix range 333 //! \details Config DN chroma pix range threshold and weight 334 //! \param [in] bChromaDenoise 335 //! true if chroma DN being enabled 336 //! \param [in] bAutoDetect 337 //! true if auto DN being enabled 338 //! \param [in] fDnFactor 339 //! DN factor 340 //! \return MOS_STATUS 341 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 342 //! ConfigChromaPixRange(bool bChromaDenoise,bool bAutoDetect,float fDnFactor)343 virtual MOS_STATUS ConfigChromaPixRange( 344 bool bChromaDenoise, 345 bool bAutoDetect, 346 float fDnFactor) { return MOS_STATUS_SUCCESS; } 347 348 virtual MOS_STATUS InitSTMMHistory(); 349 350 //! 351 //! \brief Vebox Populate VEBOX parameters 352 //! \details Populate the Vebox VEBOX state parameters to VEBOX RenderData 353 //! \param [in] bDnEnabled 354 //! true if DN being enabled 355 //! \param [in] bChromaDenoise 356 //! true if chroma DN being enabled 357 //! \param [in] pLumaParams 358 //! Pointer to Luma DN and DI parameter 359 //! \param [in] pChromaParams 360 //! Pointer to Chroma DN parameter 361 //! \return MOS_STATUS 362 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 363 //! 364 virtual MOS_STATUS ConfigDnLumaChromaParams( 365 bool bDnEnabled, 366 bool bChromaDenoise, 367 PVP_SAMPLER_STATE_DN_PARAM pLumaParams, 368 PVPHAL_DNUV_PARAMS pChromaParams 369 ); 370 371 //! 372 //! \brief Calculate offsets of statistics surface address based on the 373 //! functions which were enabled in the previous call, 374 //! and store the width and height of the per-block statistics into DNDI_STATE 375 //! \details 376 //! Layout of Statistics surface when Temporal DI enabled 377 //! --------------------------------------------------------------\n 378 //! | 16 bytes for x=0, Y=0 | 16 bytes for x=16, Y=0 | ...\n 379 //! |-------------------------------------------------------------\n 380 //! | 16 bytes for x=0, Y=4 | ...\n 381 //! |------------------------------\n 382 //! | ...\n 383 //! |------------------------------\n 384 //! | 16 bytes for x=0, Y=height-4| ...\n 385 //! |-----------------------------------------------Pitch----------------------------------------------------------\n 386 //! | 256 DW of ACE histogram Slice 0 (Previous)| 17 DW Reserved | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n 387 //! |--------------------------------------------------------------------------------------------------------------\n 388 //! | 256 DW of ACE histogram Slice 0 (Current) | 11 DW FMD0 | 6 DW GNE0 | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n 389 //! |--------------------------------------------------------------------------------------------------------------\n 390 //! | 256 DW of ACE histogram Slice 1 (Previous)| 17 DW Reserved | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n 391 //! |--------------------------------------------------------------------------------------------------------------\n 392 //! | 256 DW of ACE histogram Slice 1 (Current) | 11 DW FMD1 | 6 DW GNE1 | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n 393 //! ---------------------------------------------------------------------------------------------------------------\n 394 //! 395 //! Layout of Statistics surface when DN or Spatial DI enabled (and Temporal DI disabled) 396 //! --------------------------------------------------------------\n 397 //! | 16 bytes for x=0, Y=0 | 16 bytes for x=16, Y=0 | ...\n 398 //! |-------------------------------------------------------------\n 399 //! | 16 bytes for x=0, Y=4 | ...\n 400 //! |------------------------------\n 401 //! | ...\n 402 //! |------------------------------\n 403 //! | 16 bytes for x=0, Y=height-4| ...\n 404 //! |-----------------------------------------------Pitch----------------------------------------------------------\n 405 //! | 256 DW of ACE histogram Slice 0 (Input) | 11 DW FMD0 | 6 DW GNE0 | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n 406 //! |--------------------------------------------------------------------------------------------------------------\n 407 //! | 256 DW of ACE histogram Slice 1 (Input) | 11 DW FMD1 | 6 DW GNE1 | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n 408 //! ---------------------------------------------------------------------------------------------------------------\n 409 //! 410 //! Layout of Statistics surface when both DN and DI are disabled 411 //! ------------------------------------------------Pitch----------------------------------------------------------\n 412 //! | 256 DW of ACE histogram Slice 0 (Input) | 17 DW Reserved | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n 413 //! |--------------------------------------------------------------------------------------------------------------\n 414 //! | 256 DW of ACE histogram Slice 1 (Input) | 17 DW Reserved | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n 415 //! ---------------------------------------------------------------------------------------------------------------\n 416 //! \param [out] pStatSlice0Offset 417 //! Statistics surface Slice 0 base pointer 418 //! \param [out] pStatSlice1Offset 419 //! Statistics surface Slice 1 base pointer 420 //! \return MOS_STATUS 421 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 422 //! 423 virtual MOS_STATUS GetStatisticsSurfaceOffsets( 424 int32_t* pStatSlice0Offset, 425 int32_t* pStatSlice1Offset); 426 427 //! 428 //! \brief Configure FMD parameter 429 //! \details Configure FMD parameters for DNDI State 430 //! \param [in] bProgressive 431 //! true if sample being progressive 432 //! \param [in] bAutoDenoise 433 //! true if auto denoise being enabled 434 //! \param [out] pLumaParams 435 //! Pointer to DNDI Param for set FMD parameters 436 //! \return MOS_STATUS 437 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 438 //! 439 virtual MOS_STATUS ConfigFMDParams(bool bProgressive, bool bAutoDenoise, bool bFmdEnabled); 440 441 //! 442 //! \brief Setup Vebox_State Command parameter 443 //! \param [in,out] pVeboxStateCmdParams 444 //! Pointer to VEBOX_STATE command parameters 445 //! \return MOS_STATUS 446 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 447 //! 448 virtual MOS_STATUS SetupVeboxState( 449 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams); 450 451 //! 452 //! \brief Setup Vebox_DI_IECP Command params 453 //! \details Setup Vebox_DI_IECP Command params 454 //! \param [in] bDiScdEnable 455 //! Is DI/Variances report enabled 456 //! \param [in,out] pVeboxDiIecpCmdParams 457 //! Pointer to VEBOX_DI_IECP command parameters 458 //! \return MOS_STATUS 459 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 460 //! 461 virtual MOS_STATUS SetupDiIecpState( 462 bool bDiScdEnable, 463 PMHW_VEBOX_DI_IECP_CMD_PARAMS pVeboxDiIecpCmdParams); 464 465 //! 466 //! \brief Check Vebox using kernel resource or not 467 //! \details Check Vebox using kernel resource or not 468 //! \return bool 469 //! Return true if use kernel resource 470 //! 471 virtual bool UseKernelResource(); 472 473 //! 474 //! \brief Vebox send Vebox ring HW commands 475 //! \details Send Vebox ring Commands. 476 //! \return MOS_STATUS 477 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 478 //! 479 virtual MOS_STATUS SendVeboxCmd(MOS_COMMAND_BUFFER* commandBuffer); 480 481 //! 482 //! \brief enable or disable SFC output path. 483 //! \details enable or disable SFC output path 484 //! \return void 485 //! SetSfcOutputPath(bool bSfcUsed)486 virtual void SetSfcOutputPath(bool bSfcUsed) { m_IsSfcUsed = bSfcUsed; }; 487 GetSfcRenderInstance()488 virtual SfcRenderBase* GetSfcRenderInstance() { return m_sfcRender; }; 489 490 virtual MOS_STATUS PacketInit( 491 VP_SURFACE *inputSurface, 492 VP_SURFACE *outputSurface, 493 VP_SURFACE *previousSurface, 494 VP_SURFACE_SETTING &surfSetting, 495 VP_EXECUTE_CAPS packetCaps)override; 496 497 virtual MOS_STATUS SetUpdatedExecuteResource( 498 VP_SURFACE *inputSurface, 499 VP_SURFACE *outputSurface, 500 VP_SURFACE *previousSurface, 501 VP_SURFACE_SETTING &surfSetting) override; 502 503 //! 504 //! \brief Check whether the Vebox command parameters are correct 505 //! \param [in] VeboxStateCmdParams 506 //! MHW vebox state cmd params 507 //! \param [in] VeboxDiIecpCmdParams 508 //! DiIecpCmd params struct 509 //! \return MOS_STATUS 510 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 511 //! 512 virtual MOS_STATUS IsCmdParamsValid( 513 const MHW_VEBOX_STATE_CMD_PARAMS &VeboxStateCmdParams, 514 const MHW_VEBOX_DI_IECP_CMD_PARAMS &VeboxDiIecpCmdParams, 515 const VP_VEBOX_SURFACE_STATE_CMD_PARAMS &VeboxSurfaceStateCmdParams); 516 QueryStatLayout(VEBOX_STAT_QUERY_TYPE QueryType,uint32_t * pQuery)517 virtual MOS_STATUS QueryStatLayout( 518 VEBOX_STAT_QUERY_TYPE QueryType, 519 uint32_t* pQuery) {return MOS_STATUS_SUCCESS;}; 520 521 //! 522 //! \brief Determine if the Batch Buffer End is needed to add in the end 523 //! \details Detect platform OS and return the flag whether the Batch Buffer End is needed to add in the end 524 //! \param [in] pOsInterface 525 //! Pointer to MOS_INTERFACE 526 //! \return bool 527 //! The flag of adding Batch Buffer End 528 //! 529 virtual bool RndrCommonIsMiBBEndNeeded( 530 PMOS_INTERFACE pOsInterface); 531 532 //! 533 //! \brief Vebox perftag 534 //! \details set vebox perftag 535 //! \return MOS_STATUS 536 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 537 //! 538 virtual MOS_STATUS VeboxSetPerfTag(); 539 540 //! 541 //! \brief Vebox perftag for NV12 source 542 //! \details set vebox perftag for NV12 source 543 //! \return MOS_STATUS 544 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 545 //! 546 virtual MOS_STATUS VeboxSetPerfTagNv12(); 547 548 //! 549 //! \brief Vebox perftag for Pa format source 550 //! \details set vebox perftag for Pa format source 551 //! \return MOS_STATUS 552 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 553 //! 554 virtual MOS_STATUS VeboxSetPerfTagPaFormat(); 555 556 //! 557 //! \brief Vebox state heap update for auto mode features 558 //! \details Update Vebox indirect states for auto mode features 559 //! \return MOS_STATUS 560 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 561 //! 562 virtual MOS_STATUS UpdateVeboxStates(); 563 564 //! \brief Vebox get statistics surface base 565 //! \details Calculate address of statistics surface address based on the 566 //! functions which were enabled in the previous call. 567 //! \param uint8_t* pStat 568 //! [in] Pointer to Statistics surface 569 //! \param uint8_t* * pStatSlice0Base 570 //! [out] Statistics surface Slice 0 base pointer 571 //! \param uint8_t* * pStatSlice1Base 572 //! [out] Statistics surface Slice 1 base pointer 573 //! \return MOS_STATUS 574 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 575 //! 576 virtual MOS_STATUS GetStatisticsSurfaceBase( 577 uint8_t *pStat, 578 uint8_t **pStatSlice0Base, 579 uint8_t **pStatSlice1Base); 580 QueryStatLayoutGNE(VEBOX_STAT_QUERY_TYPE QueryType,uint32_t * pQuery,uint8_t * pStatSlice0Base,uint8_t * pStatSlice1Base)581 virtual MOS_STATUS QueryStatLayoutGNE( 582 VEBOX_STAT_QUERY_TYPE QueryType, 583 uint32_t *pQuery, 584 uint8_t *pStatSlice0Base, 585 uint8_t *pStatSlice1Base) { return MOS_STATUS_SUCCESS; }; 586 587 //! 588 //! \brief Vebox update HVS DN states 589 //! \details CPU update for VEBOX DN states 590 //! \param bDnEnabled 591 //! [in] true if DN enabled 592 //! \param bChromaDenoise 593 //! [in] true if chroma DN enabled 594 //! \param bAutoDenoise 595 //! [in] true if auto DN enabled 596 //! \param uint32_t* pStatSlice0GNEPtr 597 //! [out] Pointer to Vebox slice0 GNE data 598 //! \param uint32_t* pStatSlice1GNEPtr 599 //! [out] Pointer to Vebox slice1 GNE data 600 //! \return MOS_STATUS 601 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 602 //! 603 virtual MOS_STATUS UpdateDnHVSParameters( 604 uint32_t *pStatSlice0GNEPtr, 605 uint32_t *pStatSlice1GNEPtr); 606 607 //! 608 //! \brief Vebox state adjust boundary for statistics surface 609 //! \details Adjust boundary for statistics surface block 610 //! \return MOS_STATUS 611 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 612 //! 613 virtual MOS_STATUS AdjustBlockStatistics(); 614 615 protected: 616 617 //! 618 //! \brief Doing prepare stage tasks for SendVeboxCmd 619 //! Parameters might remain unchanged in case 620 //! \param [out] CmdBuffer 621 //! reference to Cmd buffer control struct 622 //! \param [out] GenericPrologParams 623 //! GpuStatusBuffer resource to be set 624 //! \param [out] iRemaining 625 //! integer showing initial cmd buffer usage 626 //! \return MOS_STATUS 627 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 628 //! 629 virtual MOS_STATUS PrepareVeboxCmd( 630 MOS_COMMAND_BUFFER* CmdBuffer, 631 RENDERHAL_GENERIC_PROLOG_PARAMS& GenericPrologParams, 632 int32_t& iRemaining); 633 634 //! 635 //! \brief Render the Vebox Cmd buffer for SendVeboxCmd 636 //! Parameters might remain unchanged in case 637 //! \param [in,out] CmdBuffer 638 //! reference to Cmd buffer control struct 639 //! \param [out] VeboxDiIecpCmdParams 640 //! DiIecpCmd params struct to be set 641 //! \param [out] VeboxSurfaceStateCmdParams 642 //! VPHAL surface state cmd to be set 643 //! \param [out] MhwVeboxSurfaceStateCmdParams 644 //! MHW surface state cmd to be set 645 //! \param [out] VeboxStateCmdParams 646 //! MHW vebox state cmd to be set 647 //! \param [out] FlushDwParams 648 //! MHW MI_FLUSH_DW cmd to be set 649 //! \param [in] pGenericPrologParams 650 //! pointer to Generic prolog params struct to send to cmd buffer header 651 //! \return MOS_STATUS 652 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 653 //! 654 virtual MOS_STATUS RenderVeboxCmd( 655 MOS_COMMAND_BUFFER *CmdBuffer, 656 MHW_VEBOX_DI_IECP_CMD_PARAMS &VeboxDiIecpCmdParams, 657 VP_VEBOX_SURFACE_STATE_CMD_PARAMS &VeboxSurfaceStateCmdParams, 658 MHW_VEBOX_SURFACE_STATE_CMD_PARAMS &MhwVeboxSurfaceStateCmdParams, 659 MHW_VEBOX_STATE_CMD_PARAMS &VeboxStateCmdParams, 660 MHW_MI_FLUSH_DW_PARAMS &FlushDwParams, 661 PRENDERHAL_GENERIC_PROLOG_PARAMS pGenericPrologParams); 662 663 //! 664 //! \brief handle Cmd buffer's offset when error occur 665 //! \details handle Cmd buffer's offset when error occur 666 //! \param [in,out] CmdBuffer 667 //! reference to Cmd buffer control struct 668 //! \return void 669 void CmdErrorHanlde( 670 MOS_COMMAND_BUFFER *CmdBuffer, 671 int32_t &iRemaining); 672 673 //! 674 //! \brief Send Vecs Status Tag 675 //! \details Add MI Flush with write back into command buffer for GPU to write 676 //! back GPU Tag. This should be the last command in 1st level batch. 677 //! This ensures sync tag will be written after rendering is complete. 678 //! \param [in] pMhwMiInterface 679 //! MHW MI interface 680 //! \param [in] pOsInterface 681 //! Pointer to OS Interface 682 //! \param [out] pCmdBuffer 683 //! Pointer to Command Buffer 684 //! \return MOS_STATUS 685 //! 686 virtual MOS_STATUS SendVecsStatusTag( 687 PMHW_MI_INTERFACE pMhwMiInterface, 688 PMOS_INTERFACE pOsInterface, 689 PMOS_COMMAND_BUFFER pCmdBuffer); 690 691 virtual MOS_STATUS InitVeboxSurfaceStateCmdParams( 692 PVP_VEBOX_SURFACE_STATE_CMD_PARAMS pVpHalVeboxSurfaceStateCmdParams, 693 PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS pMhwVeboxSurfaceStateCmdParams); 694 695 virtual MOS_STATUS InitVeboxSurfaceParams( 696 PVP_SURFACE pVpHalVeboxSurface, 697 PMHW_VEBOX_SURFACE_PARAMS pMhwVeboxSurface); 698 699 //! 700 //! \brief Copy Surface value 701 //! \param [in] pTargetSurface 702 //! Pointer to surface copy value to 703 //! \param [in] pSourceSurface 704 //! Pointer to surface copy value from 705 //! \return void 706 //! 707 virtual void CopySurfaceValue( 708 PVP_SURFACE pTargetSurface, 709 PVP_SURFACE pSourceSurface); 710 711 //! 712 //! \brief Add vebox DNDI state 713 //! \details Add vebox DNDI state 714 //! \return MOS_STATUS 715 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 716 //! 717 virtual MOS_STATUS AddVeboxDndiState(); 718 719 //! 720 //! \brief Add vebox IECP state 721 //! \details Add vebox IECP state 722 //! \return MOS_STATUS 723 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 724 //! 725 virtual MOS_STATUS AddVeboxIECPState(); 726 727 //! 728 //! \brief Add vebox Hdr state 729 //! \details Add vebox Hdr state 730 //! \return MOS_STATUS 731 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 732 //! 733 virtual MOS_STATUS AddVeboxHdrState(); 734 735 virtual bool IsVeboxGamutStateNeeded(); 736 737 //! 738 //! \brief Add vebox Gamut state 739 //! \details Add vebox Gamut state 740 //! \return MOS_STATUS 741 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 742 //! 743 virtual MOS_STATUS AddVeboxGamutState(); 744 745 //! 746 //! \brief Vebox set up vebox state heap 747 //! \details Setup Vebox indirect states: DNDI and etc 748 //! \return MOS_STATUS 749 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 750 //! 751 virtual MOS_STATUS SetupIndirectStates(); 752 753 //! 754 //! \brief Vebox get the back-end colorspace conversion matrix 755 //! \details When the i/o is A8R8G8B8 or X8R8G8B8, the transfer matrix 756 //! needs to be updated accordingly 757 //! \param [in] inputColorSpace 758 //! color space of vebox input surface 759 //! \param [in] outputColorSpace 760 //! color space of vebox output surface 761 //! \param [in] inputFormat 762 //! format of vebox input surface 763 //! \return void 764 //! 765 virtual void VeboxGetBeCSCMatrix( 766 VPHAL_CSPACE inputColorSpace, 767 VPHAL_CSPACE outputColorSpace, 768 MOS_FORMAT inputFormat); 769 770 virtual MOS_STATUS SetDiParams( 771 bool bDiEnabled, 772 bool bSCDEnabled, 773 bool bHDContent, 774 VPHAL_SAMPLE_TYPE sampleTypeInput, 775 MHW_VEBOX_DNDI_PARAMS ¶m); 776 777 bool IsTopField(VPHAL_SAMPLE_TYPE sampleType); 778 bool IsTopFieldFirst(VPHAL_SAMPLE_TYPE sampleType); 779 780 //! 781 //! \brief Get surface by type 782 //! \details Get surface by type 783 //! \param [in] type 784 //! surface type 785 //! \return VP_SURFACE* 786 //! Pointer to surface of specified type 787 //! 788 virtual VP_SURFACE* GetSurface(SurfaceType type); 789 790 virtual MOS_STATUS InitSurfMemCacheControl(VP_EXECUTE_CAPS packetCaps); 791 792 virtual MHW_CSPACE VpHalCspace2MhwCspace(VPHAL_CSPACE cspace); 793 794 virtual MOS_STATUS SetupDNTableForHVS( 795 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams); 796 797 virtual MOS_STATUS SetupHDRLuts( 798 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams); 799 800 virtual MOS_STATUS Init3DLutTable(PVP_SURFACE surf3DLut); 801 802 void UpdateCpPrepareResources(); 803 804 MOS_STATUS SetupVebox3DLutForHDR( 805 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams); 806 807 MOS_STATUS SetupVeboxExternal3DLutforHDR( 808 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams); 809 810 protected: 811 #if (_DEBUG || _RELEASE_INTERNAL) StallBatchBuffer(PMOS_COMMAND_BUFFER cmdBuffer)812 virtual MOS_STATUS StallBatchBuffer( 813 PMOS_COMMAND_BUFFER cmdBuffer) 814 { 815 return MOS_STATUS_SUCCESS; 816 } 817 #endif 818 819 private: 820 821 //! 822 //! \brief IsFormatMMCSupported 823 //! \details Check if the format of vebox output surface is supported by MMC 824 //! \param [in] Format 825 //! \return bool true if suported, otherwise not supported 826 //! 827 bool IsFormatMMCSupported( 828 MOS_FORMAT Format); 829 830 //! 831 //! \brief SetSfcMmcParams 832 //! \details set sfc state mmc related params 833 //! \return bool success if succeeded, otherwise failure 834 //! 835 virtual MOS_STATUS SetSfcMmcParams(); 836 MOS_STATUS InitSfcRender(); 837 838 //! 839 //! \brief Dump Vebox State Heap 840 //! \details Dump Vebox State Heap 841 //! \return MOS_STATUS MOS_STATUS_SUCCESS if succeeded, otherwise failure 842 //! 843 MOS_STATUS DumpVeboxStateHeap(); 844 845 MOS_STATUS SetVeboxSurfaceControlBits( 846 PMHW_VEBOX_INTERFACE pVeboxInterface, 847 MHW_VEBOX_SURFACE_CNTL_PARAMS *pVeboxSurfCntlParams, 848 uint32_t *pSurfCtrlBits); 849 850 MOS_STATUS setVeboxProCmd( 851 PMHW_MI_INTERFACE pMhwMiInterface, 852 PMHW_VEBOX_INTERFACE pVeboxInterface, 853 MOS_COMMAND_BUFFER* CmdBuffer); 854 855 MOS_STATUS SetVeboxIndex( 856 PMHW_VEBOX_INTERFACE pVeboxInterface, 857 uint32_t dwVeboxIndex, 858 uint32_t dwVeboxCount, 859 uint32_t dwUsingSFC); 860 861 MOS_STATUS SetVeboxState( 862 PMHW_VEBOX_INTERFACE pVeboxInterface, 863 PMOS_COMMAND_BUFFER pCmdBufferInUse, 864 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams, 865 bool bCmBuffer); 866 867 MOS_STATUS SetVeboxSurfaces( 868 PMHW_VEBOX_INTERFACE pVeboxInterface, 869 PMOS_COMMAND_BUFFER pCmdBufferInUse, 870 PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS pMhwVeboxSurfaceStateCmdParams); 871 872 MOS_STATUS SetVeboxDiIecp( 873 PMHW_VEBOX_INTERFACE pVeboxInterface, 874 PMOS_COMMAND_BUFFER pCmdBufferInUse, 875 PMHW_VEBOX_DI_IECP_CMD_PARAMS pVeboxDiIecpCmdParams); 876 877 protected: 878 879 // Execution state 880 VpVeboxRenderData *m_lastExecRenderData = nullptr; //!< Cache last render operation info 881 882 VPHAL_CSPACE m_CscOutputCspace = {}; //!< Cspace of Output Frame 883 VPHAL_CSPACE m_CscInputCspace = {}; //!< Cspace of Input frame 884 float m_fCscCoeff[9]; //!< [3x3] Coeff matrix for CSC 885 float m_fCscInOffset[3]; //!< [3x1] Input Offset matrix for CSC 886 float m_fCscOutOffset[3]; //!< [3x1] Output Offset matrix for CSC 887 SfcRenderBase *m_sfcRender = nullptr; 888 bool m_IsSfcUsed = false; 889 890 VEBOX_PACKET_SURFACE_PARAMS m_veboxPacketSurface = {}; 891 892 VP_SURFACE *m_currentSurface = nullptr; //!< Current frame 893 VP_SURFACE *m_previousSurface = nullptr; //!< Previous frame 894 VP_SURFACE *m_renderTarget = nullptr; //!< Render Target frame 895 896 uint32_t m_dwGlobalNoiseLevelU = 0; //!< Global Noise Level for U 897 uint32_t m_dwGlobalNoiseLevelV = 0; //!< Global Noise Level for V 898 uint32_t m_dwGlobalNoiseLevel = 0; //!< Global Noise Level 899 PVP_VEBOX_CACHE_CNTL m_surfMemCacheCtl = nullptr; //!< Surface memory cache control 900 uint32_t m_DIOutputFrames = MEDIA_VEBOX_DI_OUTPUT_CURRENT; //!< default value is 2 for non-DI case. 901 902 // Statistics 903 uint32_t m_dwVeboxPerBlockStatisticsWidth = 0; //!< Per block statistics width 904 uint32_t m_dwVeboxPerBlockStatisticsHeight = 0; //!< Per block statistics height 905 906 // STE factor LUT 907 static const uint32_t m_satP1Table[MHW_STE_FACTOR_MAX + 1]; 908 static const uint32_t m_satS0Table[MHW_STE_FACTOR_MAX + 1]; 909 static const uint32_t m_satS1Table[MHW_STE_FACTOR_MAX + 1]; 910 911 MediaScalability *m_scalability = nullptr; //!< scalability 912 bool m_useKernelResource = false; //!< Use Vebox Kernel Resource 913 uint32_t m_inputDepth = 0; 914 std::shared_ptr<mhw::vebox::Itf> m_veboxItf = nullptr; 915 vp::VpUserFeatureControl *m_vpUserFeatureControl = nullptr; 916 917 MEDIA_CLASS_DEFINE_END(vp__VpVeboxCmdPacketLegacy) 918 }; 919 920 } 921 #endif // !__VP_VEBOX_CMD_PACKET_H__ 922