1 /* 2 * Copyright (c) 2020-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 #ifndef __VP_RENDER_CMD_PACKET_H__ 23 #define __VP_RENDER_CMD_PACKET_H__ 24 #include "media_render_cmd_packet.h" 25 #include "vp_allocator.h" 26 #include "vp_cmd_packet.h" 27 #include "vp_kernelset.h" 28 #include "vp_render_common.h" 29 #include "vp_render_kernel_obj.h" 30 #include "mhw_mi_itf.h" 31 32 namespace vp 33 { 34 35 class VpRenderCmdPacket : virtual public RenderCmdPacket, virtual public VpCmdPacket 36 { 37 public: 38 VpRenderCmdPacket(MediaTask* task, PVP_MHWINTERFACE hwInterface, PVpAllocator& allocator, VPMediaMemComp* mmc, VpKernelSet* kernelSet); 39 40 virtual ~VpRenderCmdPacket(); 41 42 MOS_STATUS Prepare() override; 43 44 MOS_STATUS Init() override; 45 Destroy()46 MOS_STATUS Destroy() override 47 { 48 return RenderCmdPacket::Destroy(); 49 } 50 51 MOS_STATUS SetEuThreadSchedulingMode(uint32_t mode); 52 53 virtual MOS_STATUS Submit(MOS_COMMAND_BUFFER* commandBuffer, uint8_t packetPhase = otherPacket) override; 54 55 virtual MOS_STATUS SubmitWithMultiKernel(MOS_COMMAND_BUFFER* commandBuffer, uint8_t packetPhase = otherPacket); 56 57 MOS_STATUS PacketInit( 58 VP_SURFACE* inputSurface, 59 VP_SURFACE* outputSurface, 60 VP_SURFACE* previousSurface, 61 VP_SURFACE_SETTING& surfSetting, 62 VP_EXECUTE_CAPS packetCaps) override; 63 64 virtual MOS_STATUS SetFcParams(PRENDER_FC_PARAMS params); 65 66 virtual MOS_STATUS SetHdr3DLutParams(PRENDER_HDR_3DLUT_CAL_PARAMS params); 67 68 virtual MOS_STATUS SetDnHVSParams(PRENDER_DN_HVS_CAL_PARAMS params); 69 70 virtual MOS_STATUS SetL0FcParams(PRENDER_L0_FC_PARAMS params); 71 72 virtual MOS_STATUS DumpOutput() override; 73 74 void PrintWalkerParas(MHW_WALKER_PARAMS &WalkerParams); 75 void PrintWalkerParas(MHW_GPGPU_WALKER_PARAMS &WalkerParams); 76 77 virtual MOS_STATUS SetHdrParams(PRENDER_HDR_PARAMS params); 78 virtual bool IsRenderUncompressedWriteNeeded(PVP_SURFACE VpSurface); 79 80 void RenderMMCLimitationCheck(VP_SURFACE *vpSurface, RENDERHAL_SURFACE_NEXT &renderHalSurface, SurfaceType type); 81 82 protected: 83 84 virtual MOS_STATUS LoadKernel() override; 85 86 MOS_STATUS KernelStateSetup(); 87 88 virtual MOS_STATUS SetupSamplerStates(); 89 90 virtual MOS_STATUS SetupSurfaceState(); 91 92 virtual MOS_STATUS SetupCurbeState(); 93 94 virtual VP_SURFACE* GetSurface(SurfaceType type); 95 96 virtual MOS_STATUS SetupWalkerParams(); 97 98 virtual MOS_STATUS SetupMediaWalker() override; 99 100 virtual void UpdateKernelConfigParam(RENDERHAL_KERNEL_PARAM &kernelParam) override; 101 102 virtual void OcaDumpDbgInfo(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext) override; 103 104 virtual MOS_STATUS SetMediaFrameTracking(RENDERHAL_GENERIC_PROLOG_PARAMS &genericPrologParams) override; 105 106 MOS_STATUS SendMediaStates(PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); 107 108 MOS_STATUS InitRenderHalSurface( 109 VP_SURFACE &surface, 110 RENDERHAL_SURFACE &renderSurface); 111 112 MOS_STATUS InitStateHeapSurface( 113 SurfaceType type, 114 RENDERHAL_SURFACE& renderSurface); 115 116 // comments here: Hight overwite params if needed 117 MOS_STATUS UpdateRenderSurface(RENDERHAL_SURFACE_NEXT &renderSurface, KERNEL_SURFACE_STATE_PARAM& kernelParams); 118 119 MOS_STATUS SamplerAvsCalcScalingTable( 120 MHW_AVS_PARAMS& avsParameters, 121 MOS_FORMAT SrcFormat, 122 bool bVertical, 123 float fLumaScale, 124 float fChromaScale, 125 uint32_t dwChromaSiting, 126 bool b8TapAdaptiveEnable); 127 128 MOS_STATUS SetNearestModeTable( 129 int32_t * iCoefs, 130 uint32_t dwPlane, 131 bool bBalancedFilter); 132 133 MOS_STATUS CalcPolyphaseTablesUV( 134 int32_t * piCoefs, 135 float fLanczosT, 136 float fInverseScaleFactor); 137 138 MOS_STATUS CalcPolyphaseTablesY( 139 int32_t *iCoefs, 140 float fScaleFactor, 141 uint32_t dwPlane, 142 MOS_FORMAT srcFmt, 143 float fHPStrength, 144 bool bUse8x8Filter, 145 uint32_t dwHwPhase); 146 147 MOS_STATUS CalcPolyphaseTablesUVOffset( 148 int32_t* piCoefs, 149 float fLanczosT, 150 float fInverseScaleFactor, 151 int32_t iUvPhaseOffset); 152 153 virtual MOS_STATUS InitFcMemCacheControlForTarget(PVP_RENDER_CACHE_CNTL settings); 154 virtual MOS_STATUS InitFcMemCacheControl(PVP_RENDER_CACHE_CNTL settings); 155 MOS_STATUS InitSurfMemCacheControl(VP_EXECUTE_CAPS packetCaps); 156 157 MHW_SETPAR_DECL_HDR(PIPE_CONTROL); 158 159 protected: 160 161 KERNEL_OBJECTS m_kernelObjs; 162 // Only for MULTI_KERNELS_WITH_ONE_MEDIA_STATE case. 163 KERNEL_RENDER_DATA m_kernelRenderData; 164 165 KERNEL_CONFIGS m_kernelConfigs; // Kernel parameters for legacy kernels. 166 167 bool m_firstFrame = true; 168 VpKernelSet *m_kernelSet = nullptr; 169 VpRenderKernelObj *m_kernel = nullptr; // processing kernel pointer 170 171 KERNEL_PARAMS_LIST m_renderKernelParams; 172 KERNEL_SAMPLER_STATE_GROUP m_kernelSamplerStateGroup; 173 174 KERNEL_SUBMISSION_MODE m_submissionMode = SINGLE_KERNEL_ONLY; 175 uint32_t m_slmSize = 0; 176 uint32_t m_totalCurbeSize = 0; 177 uint32_t m_totoalInlineSize = 0; 178 179 VP_SURFACE *m_currentSurface = nullptr; //!< Current frame 180 PVP_RENDER_CACHE_CNTL m_surfMemCacheCtl = nullptr; //!< Surface memory cache control 181 vp::VpUserFeatureControl *m_vpUserFeatureControl = nullptr; 182 183 MEDIA_CLASS_DEFINE_END(vp__VpRenderCmdPacket) 184 }; 185 } 186 187 #endif 188