1 /* 2 * Copyright (c) 2009-2021, 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 renderhal_platform_interface.h 24 //! \brief abstract the platfrom specific APIs into one class 25 //! 26 //! 27 //! \file renderhal_platform_interface.h 28 //! \brief Render Engine Interfaces shared across platforms 29 //! \details Platform Independent Hardware Interfaces 30 //! 31 #ifndef __RENDERHAL_PLATFORM_INTERFACE_H__ 32 #define __RENDERHAL_PLATFORM_INTERFACE_H__ 33 34 #include "mos_os.h" 35 #include "renderhal.h" 36 37 class XRenderHal_Platform_Interface 38 { 39 public: XRenderHal_Platform_Interface()40 XRenderHal_Platform_Interface() {} ~XRenderHal_Platform_Interface()41 virtual ~XRenderHal_Platform_Interface() {} 42 43 //! 44 //! \brief Setup Surface State 45 //! \details Setup Surface States 46 //! \param PRENDERHAL_INTERFACE pRenderHal 47 //! [in] Pointer to Hardware Interface Structure 48 //! \param PRENDERHAL_SURFACE pRenderHalSurface 49 //! [in] Pointer to Render Hal Surface 50 //! \param PRENDERHAL_SURFACE_STATE_PARAMS pParams 51 //! [in] Pointer to Surface State Params 52 //! \param int32_t *piNumEntries 53 //! [out] Pointer to Number of Surface State Entries (Num Planes) 54 //! \param PRENDERHAL_SURFACE_STATE_ENTRY * ppSurfaceEntries 55 //! [out] Array of Surface State Entries 56 //! \param PRENDERHAL_OFFSET_OVERRIDE pOffsetOverride 57 //! [in] If not nullptr, provides adjustments to Y, UV plane offsets, 58 //! used for kernel in a few cases. nullptr is the most common usage. 59 //! \return MOS_STATUS 60 //! 61 virtual MOS_STATUS SetupSurfaceState( 62 PRENDERHAL_INTERFACE pRenderHal, 63 PRENDERHAL_SURFACE pRenderHalSurface, 64 PRENDERHAL_SURFACE_STATE_PARAMS pParams, 65 int32_t *piNumEntries, 66 PRENDERHAL_SURFACE_STATE_ENTRY *ppSurfaceEntries, 67 PRENDERHAL_OFFSET_OVERRIDE pOffsetOverride) = 0; 68 69 //! 70 //! \brief Check if Sampler128Elements is supported 71 //! \return true of false 72 //! 73 virtual bool IsSampler128ElementsSupported() = 0; 74 75 //! 76 //! \brief Checks how per thread scratch space size bits in VFE state are interpreted by HW 77 //! \details For BDW GT1/2/3 A0 steppings, per thread scratch space size in VFE state 78 //! is 11 bits indicating [2k bytes, 2 Mbytes]: 0=2k, 1=4k, 2=8k ... 10=2M 79 //! BDW+ excluding A0 step is 12 bits indicating [1k bytes, 2 Mbytes]: 0=1k, 1=2k, 2=4k, 3=8k ... 11=2M 80 //! \param PRENDERHAL_INTERFACE pRenderHal 81 //! [in] Pointer to RenderHal interface 82 //! \return true if BDW A0 stepping, false otherwise 83 //! 84 virtual bool PerThreadScratchSpaceStart2K( 85 PRENDERHAL_INTERFACE pRenderHal) = 0; 86 87 //! 88 //! \brief Checks how per thread scratch space size bits in VFE state are interpreted by HW 89 //! \details On some new platforms, per thread scratch space size can be 2^n (n >= 6) bytes. 90 //! If this is supported, total scratch space size can be reduced. 91 //! \return 64-byte base size is supported on specific platforms, so false is returned in 92 //! base class implementation. 93 //! PerThreadScratchSpaceStart64Byte(RENDERHAL_INTERFACE * renderHal)94 virtual bool PerThreadScratchSpaceStart64Byte( 95 RENDERHAL_INTERFACE *renderHal) { return false; } 96 97 //! 98 //! \brief Encode SLM Size for Interface Descriptor 99 //! \details Setup SLM size 100 //! \param uint32_t SLMSize 101 //! [in] SLM size in 1K 102 //! \return encoded output 103 //! 104 virtual uint32_t EncodeSLMSize(uint32_t SLMSize) = 0; 105 106 //! 107 //! \brief Set Chroma Direction 108 //! \details Setup Chroma Direction 109 //! \param PRENDERHAL_INTERFACE pRenderHal 110 //! [in] Pointer to Hardware Interface 111 //! \param PRENDERHAL_SURFACE pRenderHalSurface 112 //! [in] Pointer to Render Hal Surface 113 //! \return uint8_t 114 //! 115 virtual uint8_t SetChromaDirection( 116 PRENDERHAL_INTERFACE pRenderHal, 117 PRENDERHAL_SURFACE pRenderHalSurface) = 0; 118 119 //! 120 //! \brief Convert To Nano Seconds 121 //! \details Convert to Nano Seconds 122 //! \param PRENDERHAL_INTERFACE pRenderHal 123 //! [in] Pointer to Hardware Interface Structure 124 //! \param uint64_t iTicks 125 //! [in] Ticks 126 //! \param uint64_t *piNs 127 //! [in] Nano Seconds 128 //! \return void 129 //! 130 virtual void ConvertToNanoSeconds( 131 PRENDERHAL_INTERFACE pRenderHal, 132 uint64_t iTicks, 133 uint64_t *piNs) = 0; 134 135 //! 136 //! \brief Initialize the State Heap Settings per platform 137 //! \param PRENDERHAL_INTERFACE pRenderHal 138 //! [out] Pointer to PRENDERHAL_INTERFACE 139 //! \return void 140 //! 141 virtual void InitStateHeapSettings( 142 PRENDERHAL_INTERFACE pRenderHal) = 0; 143 144 //! 145 //! \brief Initialize the default surface type and advanced surface type per platform 146 //! \param PRENDERHAL_INTERFACE pRenderHal 147 //! [out] Pointer to PRENDERHAL_INTERFACE 148 //! \return void 149 //! 150 virtual void InitSurfaceTypes( 151 PRENDERHAL_INTERFACE pRenderHal) = 0; 152 153 //! 154 //! \brief Check if YV12 Single Pass is supported 155 //! \param PRENDERHAL_INTERFACE pRenderHal 156 //! [in] Pointer to Hardware Interface 157 //! \return true of false 158 //! 159 virtual bool IsEnableYV12SinglePass( 160 PRENDERHAL_INTERFACE pRenderHal) = 0; 161 162 //! 163 //! \brief Get the Size of AVS Sampler State 164 //! \param PRENDERHAL_INTERFACE pRenderHal 165 //! [in] Pointer to Hardware Interface 166 //! \return size 167 //! 168 virtual uint32_t GetSizeSamplerStateAvs( 169 PRENDERHAL_INTERFACE pRenderHal) = 0; 170 171 //! 172 //! \brief Enables L3 cacheing flag and sets related registers/values 173 //! \param PRENDERHAL_INTERFACE pRenderHal 174 //! [in] Pointer to Hardware Interface 175 //! \param pCacheSettings 176 //! [in] L3 Cache Configurations 177 //! \return MOS_STATUS 178 //! MOS_STATUS_SUCCESS if success, else fail reason 179 //! 180 virtual MOS_STATUS EnableL3Caching( 181 PRENDERHAL_INTERFACE pRenderHal, 182 PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings) = 0; 183 184 //! 185 //! \brief Get offset and/or pointer to sampler state 186 //! \details Get offset and/or pointer to sampler state in General State Heap 187 //! \param PRENDERHAL_INTERFACE pRenderHal 188 //! [in] Pointer to RenderHal Interface 189 //! \param int32_t iMediaID 190 //! [in] Media ID associated with sampler 191 //! \param int32_t iSamplerID 192 //! [in] Sampler ID 193 //! \param uint32_t *pdwSamplerOffset 194 //! [out] optional; offset of sampler state from GSH base 195 //! \param void **ppSampler 196 //! [out] optional; pointer to sampler state in GSH 197 //! \return MOS_STATUS 198 //! GetSamplerOffsetAndPtr_DSH(PRENDERHAL_INTERFACE pRenderHal,int32_t iMediaID,int32_t iSamplerID,PMHW_SAMPLER_STATE_PARAM pSamplerParams,uint32_t * pdwSamplerOffset,void ** ppSampler)199 virtual MOS_STATUS GetSamplerOffsetAndPtr_DSH( 200 PRENDERHAL_INTERFACE pRenderHal, 201 int32_t iMediaID, 202 int32_t iSamplerID, 203 PMHW_SAMPLER_STATE_PARAM pSamplerParams, 204 uint32_t *pdwSamplerOffset, 205 void **ppSampler) 206 { 207 return MOS_STATUS_SUCCESS; 208 } 209 210 //! 211 //! \brief Initialize the DSH Settings 212 //! \details Initialize the structure DynamicHeapSettings in pRenderHal 213 //! \param PRENDERHAL_INTERFACE pRenderHal 214 //! [in] Pointer to HW interface 215 //! \return void 216 //! InitDynamicHeapSettings(PRENDERHAL_INTERFACE pRenderHal)217 virtual void InitDynamicHeapSettings( 218 PRENDERHAL_INTERFACE pRenderHal) 219 { 220 } 221 222 //! 223 //! \brief Get the depth bit mask for buffer 224 //! \details Get the depth bit mask for buffer 225 //! \return uint32_t 226 //! depth bit mask for buffer 227 //! GetDepthBitMaskForBuffer()228 virtual uint32_t GetDepthBitMaskForBuffer() { return MOS_MASKBITS32(21, 29); }; 229 230 //! 231 //! \brief Get the depth bit mask for raw buffer 232 //! \details Get the depth bit mask for raw buffer 233 //! \return uint32_t 234 //! depth bit mask for raw buffer 235 //! GetDepthBitMaskForRawBuffer()236 virtual uint32_t GetDepthBitMaskForRawBuffer() { return MOS_MASKBITS32(21, 29);}; 237 238 //! 239 //! \brief Get the pointer to the MHW_VFE_PARAMS 240 //! \return MHW_VFE_PARAMS* 241 //! pointer to the MHW_VFE_PARAMS 242 //! 243 virtual MHW_VFE_PARAMS* GetVfeStateParameters() = 0; 244 245 //! 246 //! \brief Get the size of render hal media state 247 //! \return size_t 248 //! The size of render hal media state 249 //! 250 virtual size_t GetRenderHalMediaStateSize() = 0; 251 252 //! 253 //! \brief Get the size of render hal state heap 254 //! \return size_t 255 //! The size of render hal state heap 256 //! 257 virtual size_t GetRenderHalStateHeapSize() = 0; 258 259 //! 260 //! \brief Set Power Option Status 261 //! \param [in] pRenderHal 262 //! Pointer to Hardware Interface 263 //! \param [in,out] pCmdBuffer 264 //! Pointer to Command Buffer 265 //! \return MOS_STATUS 266 //! MOS_STATUS_SUCCESS if success, else fail reason 267 //! 268 virtual MOS_STATUS SetPowerOptionStatus( 269 PRENDERHAL_INTERFACE pRenderHal, 270 PMOS_COMMAND_BUFFER pCmdBuffer) = 0; 271 272 //! 273 //! \brief Set Composite Prolog CMD 274 //! \param [in] pRenderHal 275 //! Pointer to Hardware Interface 276 //! \param [in,out] pCmdBuffer 277 //! Pointer to Command Buffer 278 //! \return MOS_STATUS 279 //! MOS_STATUS_SUCCESS if success, else fail reason 280 //! SetCompositePrologCmd(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer)281 virtual MOS_STATUS SetCompositePrologCmd( 282 PRENDERHAL_INTERFACE pRenderHal, 283 PMOS_COMMAND_BUFFER pCmdBuffer) 284 { 285 return MOS_STATUS_SUCCESS; 286 } 287 288 //! 289 //! \brief Get Render Hal MMC Enable/Disable Flag 290 //! \param [in] pRenderHal 291 //! Pointer to Hardware Interface 292 //! \return MOS_STATUS 293 //! MOS_STATUS_SUCCESS if success, else fail reason 294 //! IsRenderHalMMCEnabled(PRENDERHAL_INTERFACE pRenderHal)295 virtual MOS_STATUS IsRenderHalMMCEnabled( 296 PRENDERHAL_INTERFACE pRenderHal) 297 { 298 MOS_UNUSED(pRenderHal); 299 300 return MOS_STATUS_SUCCESS; 301 } 302 303 //! 304 //! \brief Check if Override is needed or not 305 //! \param [in] pRenderHal 306 //! Pointer to Hardware Interface 307 //! \param [in,out] pCmdBuffer 308 //! Pointer to Command Buffer 309 //! \param [in] pGenericPrologParam 310 //! Pointer to MHW generic prolog parameters 311 //! \return MOS_STATUS 312 //! MOS_STATUS_SUCCESS if success, else fail reason 313 //! IsOvrdNeeded(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer,PRENDERHAL_GENERIC_PROLOG_PARAMS pGenericPrologParams)314 virtual MOS_STATUS IsOvrdNeeded( 315 PRENDERHAL_INTERFACE pRenderHal, 316 PMOS_COMMAND_BUFFER pCmdBuffer, 317 PRENDERHAL_GENERIC_PROLOG_PARAMS pGenericPrologParams) {return MOS_STATUS_SUCCESS;}; 318 319 //! 320 //! \brief Check if Chromasiting is enabled 321 //! \param [in] pRenderHal 322 //! Pointer to Hardware Interface 323 //! \param [in] pParams 324 //! Pointer to Surface State Params 325 //! \return bool 326 //! true or false 327 //! IsChromasitingEnabled(PRENDERHAL_INTERFACE pRenderHal,PRENDERHAL_SURFACE_STATE_PARAMS pParams)328 virtual bool IsChromasitingEnabled( 329 PRENDERHAL_INTERFACE pRenderHal, 330 PRENDERHAL_SURFACE_STATE_PARAMS pParams) {return false;}; 331 332 //! 333 //! \brief Get PlaneDefinition for Format_Y216 334 //! \param [in] isRenderTarget 335 //! The flag to indicate if the surface is rendertarget or not 336 //! \param [in] pRenderHal 337 //! Pointer to Hardware Interface 338 //! \param [in,out] PlaneDefinition 339 //! Pointer to PlaneDefinition 340 //! \return MOS_STATUS 341 //! MOS_STATUS_SUCCESS if success, else fail reason 342 //! GetPlaneDefForFormatY216(bool isRenderTarget,PRENDERHAL_INTERFACE pRenderHal,RENDERHAL_PLANE_DEFINITION & PlaneDefinition)343 virtual MOS_STATUS GetPlaneDefForFormatY216( 344 bool isRenderTarget, 345 PRENDERHAL_INTERFACE pRenderHal, 346 RENDERHAL_PLANE_DEFINITION &PlaneDefinition) 347 { 348 PlaneDefinition = isRenderTarget ? RENDERHAL_PLANES_Y210_RT : (pRenderHal->bIsAVS ? RENDERHAL_PLANES_Y210_ADV : RENDERHAL_PLANES_Y210); 349 return MOS_STATUS_SUCCESS; 350 }; 351 352 //! 353 //! \brief Get PlaneDefinition for NV12 354 //! \param [in,out] PlaneDefinition 355 //! Pointer to PlaneDefinition 356 //! \return MOS_STATUS 357 //! MOS_STATUS_SUCCESS if success, else fail reason 358 //! GetPlaneDefForFormatNV12(RENDERHAL_PLANE_DEFINITION & PlaneDefinition)359 virtual MOS_STATUS GetPlaneDefForFormatNV12( 360 RENDERHAL_PLANE_DEFINITION &PlaneDefinition) 361 { 362 PlaneDefinition = RENDERHAL_PLANES_NV12; 363 return MOS_STATUS_SUCCESS; 364 }; 365 366 //! \brief Set L3 cache override config parameters 367 //! \param [in] pRenderHal 368 //! Pointer to RenderHal Interface Structure 369 //! \param [in,out] pCacheSettings 370 //! Pointer to pCacheSettings 371 //! \param [in] bEnableSLM 372 //! Flag to enable SLM 373 //! \return MOS_STATUS 374 //! MOS_STATUS_SUCCESS if success. Error code otherwise 375 //! 376 virtual MOS_STATUS SetCacheOverrideParams( 377 PRENDERHAL_INTERFACE pRenderHal, 378 PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings, 379 bool bEnableSLM) = 0; 380 381 //! \brief Get the size of Render Surface State Command 382 //! \return size_t 383 //! the size of render surface state command 384 virtual size_t GetSurfaceStateCmdSize() = 0; 385 386 //! \brief Get the address of the ith Palette Data 387 //! \param [in] i 388 //! Index of the palette data 389 //! \return void * 390 //! address of the ith palette data table 391 virtual void* GetPaletteDataAddress(int i) = 0; 392 393 //! \brief Get the size of Binding Table State Command 394 //! \return size_t 395 //! the size of binding table state command 396 virtual size_t GetBTStateCmdSize() = 0; 397 398 //! \brief Check if compute context in use 399 //! \param PRENDERHAL_INTERFACE pRenderHal 400 //! [in] Pointer to RenderHal Interface 401 //! \return true or false 402 virtual bool IsComputeContextInUse( 403 PRENDERHAL_INTERFACE pRenderHal) = 0; 404 405 //! \brief Add Pipeline SelectCmd 406 //! \details Add Pipeline SelectCmd 407 //! \param PRENDERHAL_INTERFACE pRenderHal 408 //! [in] Pointer to RenderHal Interface Structure 409 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 410 //! [in] Pointer to Command Buffer 411 //! \return MOS_STATUS 412 virtual MOS_STATUS AddPipelineSelectCmd( 413 PRENDERHAL_INTERFACE pRenderHal, 414 PMOS_COMMAND_BUFFER pCmdBuffer, 415 bool gpGpuPipe) = 0; 416 417 //! \brief Send StateBase Address 418 //! \details Send StateBase Address 419 //! \param PRENDERHAL_INTERFACE pRenderHal 420 //! [in] Pointer to RenderHal Interface Structure 421 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 422 //! [in] Pointer to Command Buffer 423 //! \return MOS_STATUS 424 virtual MOS_STATUS SendStateBaseAddress( 425 PRENDERHAL_INTERFACE pRenderHal, 426 PMOS_COMMAND_BUFFER pCmdBuffer) = 0; 427 428 //! \brief Add Sip State Cmd 429 //! \details Add Sip State Cmd 430 //! \param PRENDERHAL_INTERFACE pRenderHal 431 //! [in] Pointer to RenderHal Interface Structure 432 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 433 //! [in] Pointer to Command Buffer 434 //! \return MOS_STATUS 435 virtual MOS_STATUS AddSipStateCmd( 436 PRENDERHAL_INTERFACE pRenderHal, 437 PMOS_COMMAND_BUFFER pCmdBuffer) = 0; 438 439 //! \brief Add Cfe State Cmd 440 //! \details Add Cfe State Cmd 441 //! \param PRENDERHAL_INTERFACE pRenderHal 442 //! [in] Pointer to RenderHal Interface Structure 443 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 444 //! [in] Pointer to Command Buffer 445 //! \return MOS_STATUS 446 virtual MOS_STATUS AddCfeStateCmd( 447 PRENDERHAL_INTERFACE pRenderHal, 448 PMOS_COMMAND_BUFFER pCmdBuffer, 449 PMHW_VFE_PARAMS params) = 0; 450 451 //! \brief Send ChromaKey 452 //! \details Send ChromaKey 453 //! \param PRENDERHAL_INTERFACE pRenderHal 454 //! [in] Pointer to RenderHal Interface Structure 455 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 456 //! [in] Pointer to Command Buffer 457 //! \return MOS_STATUS 458 virtual MOS_STATUS SendChromaKey( 459 PRENDERHAL_INTERFACE pRenderHal, 460 PMOS_COMMAND_BUFFER pCmdBuffer, 461 PMHW_CHROMAKEY_PARAMS pChromaKeyParams) = 0; 462 463 //! \brief Send Palette 464 //! \details Send Palette 465 //! \param PRENDERHAL_INTERFACE pRenderHal 466 //! [in] Pointer to RenderHal Interface Structure 467 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 468 //! [in] Pointer to Command Buffer 469 //! \return MOS_STATUS 470 virtual MOS_STATUS SendPalette( 471 PRENDERHAL_INTERFACE pRenderHal, 472 PMOS_COMMAND_BUFFER pCmdBuffer, 473 PMHW_PALETTE_PARAMS pPaletteLoadParams) = 0; 474 475 //! \brief Set L3Cache 476 //! \details Set L3Cache 477 //! \param PRENDERHAL_INTERFACE pRenderHal 478 //! [in] Pointer to RenderHal Interface Structure 479 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 480 //! [in] Pointer to Command Buffer 481 //! \return MOS_STATUS 482 virtual MOS_STATUS SetL3Cache( 483 PRENDERHAL_INTERFACE pRenderHal, 484 PMOS_COMMAND_BUFFER pCmdBuffer) = 0; 485 486 virtual PMHW_MI_MMIOREGISTERS GetMmioRegisters( 487 PRENDERHAL_INTERFACE pRenderHal) = 0; 488 489 virtual MOS_STATUS EnablePreemption( 490 PRENDERHAL_INTERFACE pRenderHal, 491 PMOS_COMMAND_BUFFER pCmdBuffer) = 0; 492 493 virtual MOS_STATUS SendPredicationCommand( 494 PRENDERHAL_INTERFACE pRenderHal, 495 PMOS_COMMAND_BUFFER pCmdBuffer) = 0; 496 497 //! \brief Adds marker attributes in command buffer 498 //! \param PRENDERHAL_INTERFACE pRenderHal 499 //! [in] Pointer to RenderHal Interface Structure 500 //! \param PMOS_COMMAND_BUFFER pcmdBuffer 501 //! [in] Pointer to Command Buffer 502 //! \param bool isRender 503 //! [in] Flag of Render Engine 504 //! \return MOS_STATUS 505 virtual MOS_STATUS SendMarkerCommand( 506 PRENDERHAL_INTERFACE pRenderHal, 507 PMOS_COMMAND_BUFFER cmdBuffer, 508 bool isRender) = 0; 509 510 virtual MOS_STATUS AddMiPipeControl( 511 PRENDERHAL_INTERFACE pRenderHal, 512 PMOS_COMMAND_BUFFER pCmdBuffer, 513 MHW_PIPE_CONTROL_PARAMS* params) = 0; 514 515 //! 516 //! \brief Adds MI_LOAD_REGISTER_IMM to the command buffer 517 //! \param PRENDERHAL_INTERFACE pRenderHal 518 //! [in] Pointer to RenderHal Interface Structure 519 //! \param [in] pCmdBuffer 520 //! Command buffer to which requested command is added 521 //! \param [in] params 522 //! Parameters used to populate the requested command 523 //! \return MOS_STATUS 524 //! MOS_STATUS_SUCCESS if success, else fail reason 525 //! 526 virtual MOS_STATUS AddMiLoadRegisterImmCmd( 527 PRENDERHAL_INTERFACE pRenderHal, 528 PMOS_COMMAND_BUFFER pCmdBuffer, 529 PMHW_MI_LOAD_REGISTER_IMM_PARAMS params) = 0; 530 531 virtual MOS_STATUS SendGenericPrologCmd( 532 PRENDERHAL_INTERFACE pRenderHal, 533 PMOS_COMMAND_BUFFER pCmdBuffer, 534 PMHW_GENERIC_PROLOG_PARAMS pParams, 535 MHW_MI_MMIOREGISTERS* pMmioReg = nullptr) = 0; 536 537 //! \brief Send Compute Walker 538 //! \details Send Compute Walker 539 //! \param PRENDERHAL_INTERFACE pRenderHal 540 //! [in] Pointer to RenderHal Interface Structure 541 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 542 //! [in] Pointer to Command Buffer 543 //! \param PRENDERHAL_GPGPU_WALKER_PARAMS pGpGpuWalkerParams 544 //! [in] Pointer to GPGPU walker parameters 545 //! \return MOS_STATUS SendComputeWalker(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer,PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams)546 virtual MOS_STATUS SendComputeWalker( 547 PRENDERHAL_INTERFACE pRenderHal, 548 PMOS_COMMAND_BUFFER pCmdBuffer, 549 PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams) 550 { 551 return MOS_STATUS_SUCCESS; 552 }; 553 554 //! \brief Send To 3DState Binding Table Pool Alloc 555 //! \details Send To 3DState Binding Table Pool Alloc 556 //! \param PRENDERHAL_INTERFACE pRenderHal 557 //! [in] Pointer to RenderHal Interface Structure 558 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 559 //! [in] Pointer to Command Buffer 560 //! \return MOS_STATUS SendTo3DStateBindingTablePoolAlloc(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer)561 virtual MOS_STATUS SendTo3DStateBindingTablePoolAlloc( 562 PRENDERHAL_INTERFACE pRenderHal, 563 PMOS_COMMAND_BUFFER pCmdBuffer) 564 { 565 return MOS_STATUS_SUCCESS; 566 }; 567 IsBindlessHeapInUse(PRENDERHAL_INTERFACE pRenderHal)568 virtual bool IsBindlessHeapInUse( 569 PRENDERHAL_INTERFACE pRenderHal) 570 { 571 return false; 572 } 573 574 //! \brief Allocates scratch space buffer. 575 //! \details On some new pltforms, a single scratch space buffer may be allocated and used for 576 //! all threads. 577 //! \return Single scratch space buffer is supported on specific platforms, so 578 //! MOS_STATUS_UNIMPLEMENTED is returned in base class implementation. AllocateScratchSpaceBuffer(uint32_t perThreadScratchSpace,RENDERHAL_INTERFACE * renderHal)579 virtual MOS_STATUS AllocateScratchSpaceBuffer( 580 uint32_t perThreadScratchSpace, 581 RENDERHAL_INTERFACE *renderHal) { return MOS_STATUS_UNIMPLEMENTED; } 582 583 //! \brief Frees scratch space buffer. 584 //! \details On some new pltforms, a single scratch space buffer may be allocated and used for 585 //! all threads. 586 //! \return Single scratch space buffer is supported on specific platforms, so 587 //! MOS_STATUS_UNIMPLEMENTED is returned in base class implementation. FreeScratchSpaceBuffer(RENDERHAL_INTERFACE * renderHal)588 virtual MOS_STATUS FreeScratchSpaceBuffer( 589 RENDERHAL_INTERFACE *renderHal) { return MOS_STATUS_UNIMPLEMENTED; } 590 591 //! 592 //! \brief enable/disable the fusedEUDispatch flag in the VFE_PARAMS 593 //! \return no return value 594 //! SetFusedEUDispatch(bool enable)595 virtual void SetFusedEUDispatch(bool enable) 596 { 597 MOS_UNUSED(enable); 598 599 return; 600 } 601 602 virtual MOS_STATUS CreateMhwInterfaces( 603 PRENDERHAL_INTERFACE pRenderHal, 604 PMOS_INTERFACE pOsInterface) = 0; 605 606 virtual MOS_STATUS On1stLevelBBStart( 607 PRENDERHAL_INTERFACE pRenderHal, 608 PMOS_COMMAND_BUFFER pCmdBuffer, 609 PMOS_CONTEXT pOsContext, 610 uint32_t gpuContextHandle, 611 MHW_MI_MMIOREGISTERS *pMmioReg) = 0; 612 613 virtual MOS_STATUS OnDispatch( 614 PRENDERHAL_INTERFACE pRenderHal, 615 PMOS_COMMAND_BUFFER pCmdBuffer, 616 PMOS_INTERFACE pOsInterface, 617 MHW_MI_MMIOREGISTERS *pMmioReg) = 0; 618 619 virtual MOS_STATUS CreatePerfProfiler( 620 PRENDERHAL_INTERFACE pRenderHal) = 0; 621 622 virtual MOS_STATUS DestroyPerfProfiler( 623 PRENDERHAL_INTERFACE pRenderHal) = 0; 624 625 virtual MOS_STATUS AddPerfCollectStartCmd( 626 PRENDERHAL_INTERFACE pRenderHal, 627 MOS_INTERFACE *osInterface, 628 MOS_COMMAND_BUFFER *cmdBuffer) = 0; 629 630 virtual MOS_STATUS StartPredicate( 631 PRENDERHAL_INTERFACE pRenderHal, 632 PMOS_COMMAND_BUFFER cmdBuffer) = 0; 633 634 virtual MOS_STATUS StopPredicate( 635 PRENDERHAL_INTERFACE pRenderHal, 636 PMOS_COMMAND_BUFFER cmdBuffer) = 0; 637 638 virtual MOS_STATUS AddPerfCollectEndCmd( 639 PRENDERHAL_INTERFACE pRenderHal, 640 PMOS_INTERFACE pOsInterface, 641 MOS_COMMAND_BUFFER *cmdBuffer) = 0; 642 643 virtual MOS_STATUS AddMediaVfeCmd( 644 PRENDERHAL_INTERFACE pRenderHal, 645 PMOS_COMMAND_BUFFER pCmdBuffer, 646 MHW_VFE_PARAMS *params) = 0; 647 648 virtual MOS_STATUS AddMediaStateFlush( 649 PRENDERHAL_INTERFACE pRenderHal, 650 PMOS_COMMAND_BUFFER pCmdBuffer, 651 MHW_MEDIA_STATE_FLUSH_PARAM *params) = 0; 652 653 virtual MOS_STATUS AddMiBatchBufferEnd( 654 PRENDERHAL_INTERFACE pRenderHal, 655 PMOS_COMMAND_BUFFER pCmdBuffer, 656 PMHW_BATCH_BUFFER batchBuffer) = 0; 657 658 virtual MOS_STATUS AddMediaObjectWalkerCmd( 659 PRENDERHAL_INTERFACE pRenderHal, 660 PMOS_COMMAND_BUFFER pCmdBuffer, 661 PMHW_WALKER_PARAMS params) = 0; 662 663 virtual MOS_STATUS AddGpGpuWalkerStateCmd( 664 PRENDERHAL_INTERFACE pRenderHal, 665 PMOS_COMMAND_BUFFER pCmdBuffer, 666 PMHW_GPGPU_WALKER_PARAMS params) = 0; 667 668 virtual MOS_STATUS AllocateHeaps( 669 PRENDERHAL_INTERFACE pRenderHal, 670 MHW_STATE_HEAP_SETTINGS MhwStateHeapSettings) = 0; 671 672 virtual PMHW_STATE_HEAP_INTERFACE GetStateHeapInterface( 673 PRENDERHAL_INTERFACE pRenderHal) = 0; 674 675 virtual MOS_STATUS DestoryMhwInterface( 676 PRENDERHAL_INTERFACE pRenderHal) = 0; 677 678 virtual MOS_STATUS AddMediaCurbeLoadCmd( 679 PRENDERHAL_INTERFACE pRenderHal, 680 PMOS_COMMAND_BUFFER pCmdBuffer, 681 PMHW_CURBE_LOAD_PARAMS params) = 0; 682 683 virtual MOS_STATUS AddMediaIDLoadCmd( 684 PRENDERHAL_INTERFACE pRenderHal, 685 PMOS_COMMAND_BUFFER pCmdBuffer, 686 PMHW_ID_LOAD_PARAMS params) = 0; 687 688 virtual bool IsPreemptionEnabled( 689 PRENDERHAL_INTERFACE pRenderHal) = 0; 690 691 virtual void GetSamplerResolutionAlignUnit( 692 PRENDERHAL_INTERFACE pRenderHal, 693 bool isAVSSampler, 694 uint32_t &widthAlignUnit, 695 uint32_t &heightAlignUnit) = 0; 696 697 virtual PMHW_RENDER_ENGINE_CAPS GetHwCaps( 698 PRENDERHAL_INTERFACE pRenderHal) = 0; 699 700 virtual std::shared_ptr<mhw::mi::Itf> GetMhwMiItf() = 0; 701 702 }; 703 704 #endif // __RENDERHAL_PLATFORM_INTERFACE_H__ 705