1 /* 2 * Copyright (c) 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_legacy.h 24 //! \brief abstract the platfrom specific APIs into one class 25 //! 26 //! 27 //! \file renderhal_platform_interface_legacy.h 28 //! \brief Render Engine Interfaces shared across platforms 29 //! \details Platform Independent Hardware Interfaces 30 //! 31 #ifndef __RENDERHAL_PLATFORM_INTERFACE_LEGACY_H__ 32 #define __RENDERHAL_PLATFORM_INTERFACE_LEGACY_H__ 33 34 #include "mos_os.h" 35 #include "renderhal_legacy.h" 36 #include "renderhal_platform_interface.h" 37 #include "media_interfaces_mhw.h" 38 39 class XRenderHal_Platform_Interface_Legacy : public XRenderHal_Platform_Interface 40 { 41 public: XRenderHal_Platform_Interface_Legacy()42 XRenderHal_Platform_Interface_Legacy() {} ~XRenderHal_Platform_Interface_Legacy()43 virtual ~XRenderHal_Platform_Interface_Legacy() {} 44 45 //! \brief Add Pipeline SelectCmd 46 //! \details Add Pipeline SelectCmd 47 //! \param PRENDERHAL_INTERFACE pRenderHal 48 //! [in] Pointer to RenderHal Interface Structure 49 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 50 //! [in] Pointer to Command Buffer 51 //! \return MOS_STATUS 52 MOS_STATUS AddPipelineSelectCmd( 53 PRENDERHAL_INTERFACE pRenderHal, 54 PMOS_COMMAND_BUFFER pCmdBuffer, 55 bool gpGpuPipe); 56 57 //! \brief Send StateBase Address 58 //! \details Send StateBase Address 59 //! \param PRENDERHAL_INTERFACE pRenderHal 60 //! [in] Pointer to RenderHal Interface Structure 61 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 62 //! [in] Pointer to Command Buffer 63 //! \return MOS_STATUS 64 MOS_STATUS SendStateBaseAddress( 65 PRENDERHAL_INTERFACE pRenderHal, 66 PMOS_COMMAND_BUFFER pCmdBuffer); 67 68 //! \brief Add Sip State Cmd 69 //! \details Add Sip State Cmd 70 //! \param PRENDERHAL_INTERFACE pRenderHal 71 //! [in] Pointer to RenderHal Interface Structure 72 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 73 //! [in] Pointer to Command Buffer 74 //! \return MOS_STATUS 75 MOS_STATUS AddSipStateCmd( 76 PRENDERHAL_INTERFACE pRenderHal, 77 PMOS_COMMAND_BUFFER pCmdBuffer); 78 79 //! \brief Add Cfe State Cmd 80 //! \details Add Cfe State Cmd 81 //! \param PRENDERHAL_INTERFACE pRenderHal 82 //! [in] Pointer to RenderHal Interface Structure 83 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 84 //! [in] Pointer to Command Buffer 85 //! \return MOS_STATUS 86 MOS_STATUS AddCfeStateCmd( 87 PRENDERHAL_INTERFACE pRenderHal, 88 PMOS_COMMAND_BUFFER pCmdBuffer, 89 PMHW_VFE_PARAMS params); 90 91 //! \brief Send ChromaKey 92 //! \details Send ChromaKey 93 //! \param PRENDERHAL_INTERFACE pRenderHal 94 //! [in] Pointer to RenderHal Interface Structure 95 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 96 //! [in] Pointer to Command Buffer 97 //! \return MOS_STATUS 98 MOS_STATUS SendChromaKey( 99 PRENDERHAL_INTERFACE pRenderHal, 100 PMOS_COMMAND_BUFFER pCmdBuffer, 101 PMHW_CHROMAKEY_PARAMS pChromaKeyParams); 102 103 //! \brief Send Palette 104 //! \details Send Palette 105 //! \param PRENDERHAL_INTERFACE pRenderHal 106 //! [in] Pointer to RenderHal Interface Structure 107 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 108 //! [in] Pointer to Command Buffer 109 //! \return MOS_STATUS 110 MOS_STATUS SendPalette( 111 PRENDERHAL_INTERFACE pRenderHal, 112 PMOS_COMMAND_BUFFER pCmdBuffer, 113 PMHW_PALETTE_PARAMS pPaletteLoadParams); 114 115 //! \brief Set L3Cache 116 //! \details Set L3Cache 117 //! \param PRENDERHAL_INTERFACE pRenderHal 118 //! [in] Pointer to RenderHal Interface Structure 119 //! \param PMOS_COMMAND_BUFFER pCmdBuffer 120 //! [in] Pointer to Command Buffer 121 //! \return MOS_STATUS 122 MOS_STATUS SetL3Cache( 123 PRENDERHAL_INTERFACE pRenderHal, 124 PMOS_COMMAND_BUFFER pCmdBuffer); 125 126 //! 127 //! \brief Get the size of render hal media state 128 //! \return size_t 129 //! The size of render hal media state 130 //! 131 size_t GetRenderHalMediaStateSize(); 132 133 //! 134 //! \brief Get the size of render hal state heap 135 //! \return size_t 136 //! The size of render hal state heap 137 //! 138 size_t GetRenderHalStateHeapSize(); 139 140 PMHW_MI_MMIOREGISTERS GetMmioRegisters( 141 PRENDERHAL_INTERFACE pRenderHal); 142 143 MOS_STATUS EnablePreemption( 144 PRENDERHAL_INTERFACE pRenderHal, 145 PMOS_COMMAND_BUFFER pCmdBuffer); 146 147 MOS_STATUS SendPredicationCommand( 148 PRENDERHAL_INTERFACE pRenderHal, 149 PMOS_COMMAND_BUFFER pCmdBuffer); 150 151 //! \brief Adds marker attributes in command buffer 152 //! \param PRENDERHAL_INTERFACE pRenderHal 153 //! [in] Pointer to RenderHal Interface Structure 154 //! \param PMOS_COMMAND_BUFFER pcmdBuffer 155 //! [in] Pointer to Command Buffer 156 //! \param bool isRender 157 //! [in] Flag of Render Engine 158 //! \return MOS_STATUS 159 MOS_STATUS SendMarkerCommand( 160 PRENDERHAL_INTERFACE pRenderHal, 161 PMOS_COMMAND_BUFFER cmdBuffer, 162 bool isRender); 163 164 MOS_STATUS AddMiPipeControl( 165 PRENDERHAL_INTERFACE pRenderHal, 166 PMOS_COMMAND_BUFFER pCmdBuffer, 167 MHW_PIPE_CONTROL_PARAMS* params); 168 169 MOS_STATUS AddMiLoadRegisterImmCmd( 170 PRENDERHAL_INTERFACE pRenderHal, 171 PMOS_COMMAND_BUFFER pCmdBuffer, 172 PMHW_MI_LOAD_REGISTER_IMM_PARAMS params); 173 174 MOS_STATUS SendGenericPrologCmd( 175 PRENDERHAL_INTERFACE pRenderHal, 176 PMOS_COMMAND_BUFFER pCmdBuffer, 177 PMHW_GENERIC_PROLOG_PARAMS pParams, 178 MHW_MI_MMIOREGISTERS* pMmioReg = nullptr); 179 180 MOS_STATUS CreateMhwInterfaces( 181 PRENDERHAL_INTERFACE pRenderHal, 182 PMOS_INTERFACE pOsInterface); 183 184 MOS_STATUS On1stLevelBBStart( 185 PRENDERHAL_INTERFACE pRenderHal, 186 PMOS_COMMAND_BUFFER pCmdBuffer, 187 PMOS_CONTEXT pOsContext, 188 uint32_t gpuContextHandle, 189 MHW_MI_MMIOREGISTERS *pMmioReg); 190 191 MOS_STATUS OnDispatch( 192 PRENDERHAL_INTERFACE pRenderHal, 193 PMOS_COMMAND_BUFFER pCmdBuffer, 194 PMOS_INTERFACE pOsInterface, 195 MHW_MI_MMIOREGISTERS *pMmioReg); 196 197 MOS_STATUS CreatePerfProfiler( 198 PRENDERHAL_INTERFACE pRenderHal); 199 200 MOS_STATUS DestroyPerfProfiler( 201 PRENDERHAL_INTERFACE pRenderHal); 202 203 MOS_STATUS AddPerfCollectStartCmd( 204 PRENDERHAL_INTERFACE pRenderHal, 205 MOS_INTERFACE *osInterface, 206 MOS_COMMAND_BUFFER *cmdBuffer); 207 208 MOS_STATUS StartPredicate( 209 PRENDERHAL_INTERFACE pRenderHal, 210 PMOS_COMMAND_BUFFER cmdBuffer); 211 212 MOS_STATUS StopPredicate( 213 PRENDERHAL_INTERFACE pRenderHal, 214 PMOS_COMMAND_BUFFER cmdBuffer); 215 216 MOS_STATUS AddPerfCollectEndCmd( 217 PRENDERHAL_INTERFACE pRenderHal, 218 MOS_INTERFACE *osInterface, 219 MOS_COMMAND_BUFFER *cmdBuffer); 220 221 MOS_STATUS AddMediaVfeCmd( 222 PRENDERHAL_INTERFACE pRenderHal, 223 PMOS_COMMAND_BUFFER pCmdBuffer, 224 MHW_VFE_PARAMS *params); 225 226 MOS_STATUS AddMediaStateFlush( 227 PRENDERHAL_INTERFACE pRenderHal, 228 PMOS_COMMAND_BUFFER pCmdBuffer, 229 MHW_MEDIA_STATE_FLUSH_PARAM *params); 230 231 MOS_STATUS AddMiBatchBufferEnd( 232 PRENDERHAL_INTERFACE pRenderHal, 233 PMOS_COMMAND_BUFFER pCmdBuffer, 234 PMHW_BATCH_BUFFER batchBuffer); 235 236 MOS_STATUS AddMediaObjectWalkerCmd( 237 PRENDERHAL_INTERFACE pRenderHal, 238 PMOS_COMMAND_BUFFER pCmdBuffer, 239 PMHW_WALKER_PARAMS params); 240 241 MOS_STATUS AddGpGpuWalkerStateCmd( 242 PRENDERHAL_INTERFACE pRenderHal, 243 PMOS_COMMAND_BUFFER pCmdBuffer, 244 PMHW_GPGPU_WALKER_PARAMS params); 245 246 MOS_STATUS AllocateHeaps( 247 PRENDERHAL_INTERFACE pRenderHal, 248 MHW_STATE_HEAP_SETTINGS MhwStateHeapSettings); 249 250 PMHW_STATE_HEAP_INTERFACE GetStateHeapInterface( 251 PRENDERHAL_INTERFACE pRenderHal); 252 253 MOS_STATUS DestoryMhwInterface( 254 PRENDERHAL_INTERFACE pRenderHal); 255 256 MOS_STATUS AddMediaCurbeLoadCmd( 257 PRENDERHAL_INTERFACE pRenderHal, 258 PMOS_COMMAND_BUFFER pCmdBuffer, 259 PMHW_CURBE_LOAD_PARAMS params); 260 261 MOS_STATUS AddMediaIDLoadCmd( 262 PRENDERHAL_INTERFACE pRenderHal, 263 PMOS_COMMAND_BUFFER pCmdBuffer, 264 PMHW_ID_LOAD_PARAMS params); 265 266 bool IsPreemptionEnabled( 267 PRENDERHAL_INTERFACE pRenderHal); 268 269 void GetSamplerResolutionAlignUnit( 270 PRENDERHAL_INTERFACE pRenderHal, 271 bool isAVSSampler, 272 uint32_t &widthAlignUnit, 273 uint32_t &heightAlignUnit); 274 275 PMHW_RENDER_ENGINE_CAPS GetHwCaps( 276 PRENDERHAL_INTERFACE pRenderHal); 277 278 std::shared_ptr<mhw::mi::Itf> GetMhwMiItf(); 279 280 }; 281 282 #endif // __RENDERHAL_PLATFORM_INTERFACE_LEGACY_H__ 283