1 /* 2 * Copyright (c) 2011-2018, 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 vphal_render_vebox_g8_base.h 24 //! \brief Interface and structure specific for BDW (GEN8) Vebox 25 //! \details Interface and structure specific for BDW (GEN8) Vebox 26 //! 27 #ifndef __VPHAL_RENDER_VEBOX_G8_BASE_H__ 28 #define __VPHAL_RENDER_VEBOX_G8_BASE_H__ 29 30 #include "vphal_render_vebox_base.h" 31 32 //! 33 //! \brief Vebox Statistics Surface definition 34 //! 35 #define VPHAL_VEBOX_STATISTICS_SIZE_G8 (288 * 4) // in DWORDs, twice per frame for 2 slices 36 #define VPHAL_VEBOX_STATISTICS_PER_FRAME_SIZE_G8 (288 * sizeof(uint32_t)) 37 #define VPHAL_VEBOX_STATISTICS_SURFACE_FMD_OFFSET_G8 0x400 38 #define VPHAL_VEBOX_STATISTICS_SURFACE_GNE_OFFSET_G8 0x42C 39 #define VPHAL_VEBOX_STATISTICS_SURFACE_STD_OFFSET_G8 0x444 40 41 #define NOISE_ABSSUMTEMPORALDIFF_THRESHOLD_DEFAULT 32 42 #define NOISE_SPATIALCOMPLEXITYMATRIX_THRESHOLD_DEFAULT 32 43 44 struct VEBOX_STATE_UPDATE_STATIC_DATA_G8 45 { 46 // DWORD 0 - GRF R1.0 47 union 48 { 49 // DN State Update 50 struct 51 { 52 uint32_t OffsetToSlice0; 53 }; 54 55 uint32_t Value; 56 } DW00; 57 58 // DWORD 1 - GRF R1.1 59 union 60 { 61 // DN State Update 62 struct 63 { 64 uint32_t OffsetToSlice1; 65 }; 66 67 uint32_t Value; 68 } DW01; 69 70 // DWORD 2 - GRF R1.2 71 union 72 { 73 // DN State Update 74 struct 75 { 76 uint32_t FirstFrameFlag : 16; 77 uint32_t NoiseLevel : 16; 78 }; 79 80 uint32_t Value; 81 } DW02; 82 83 // DWORD 3 - GRF R1.3 84 union 85 { 86 // Vebox Statistics Surface 87 struct 88 { 89 uint32_t VeboxStatisticsSurface; 90 }; 91 92 uint32_t Value; 93 } DW03; 94 95 // DWORD 4 - GRF R1.4 96 union 97 { 98 // Vebox DnDi State Surface 99 struct 100 { 101 uint32_t VeboxDndiStateSurface; 102 }; 103 104 uint32_t Value; 105 } DW04; 106 107 // DWORD 5 - GRF R1.5 108 union 109 { 110 // Vebox GNE surface 111 struct 112 { 113 uint32_t VeboxTempSurface; 114 }; 115 116 uint32_t Value; 117 } DW05; 118 uint32_t dwPad[2]; 119 }; 120 121 typedef class VPHAL_VEBOX_STATE_G8_BASE *PVPHAL_VEBOX_STATE_G8_BASE; 122 class VPHAL_VEBOX_STATE_G8_BASE :virtual public VPHAL_VEBOX_STATE 123 { 124 public: 125 VPHAL_VEBOX_STATE_G8_BASE( 126 PMOS_INTERFACE pOsInterface, 127 PMHW_VEBOX_INTERFACE pVeboxInterface, 128 PRENDERHAL_INTERFACE pRenderHal, 129 PVPHAL_VEBOX_EXEC_STATE pVeboxExecState, 130 PVPHAL_RNDR_PERF_DATA pPerfData, 131 const VPHAL_DNDI_CACHE_CNTL &dndiCacheCntl, 132 MOS_STATUS *peStatus); 133 ~VPHAL_VEBOX_STATE_G8_BASE()134 virtual ~VPHAL_VEBOX_STATE_G8_BASE() { } 135 136 virtual MOS_STATUS AllocateResources(); 137 138 virtual void FreeResources(); 139 140 virtual MOS_STATUS SetupVeboxKernel( 141 int32_t iKDTIndex); 142 143 virtual MOS_STATUS SetupDiIecpState( 144 bool bDiScdEnable, 145 PMHW_VEBOX_DI_IECP_CMD_PARAMS 146 pVeboxDiIecpCmdParams); 147 148 virtual void SetupSurfaceStates( 149 bool bDiVarianceEnable, 150 PVPHAL_VEBOX_SURFACE_STATE_CMD_PARAMS 151 pVeboxSurfaceStateCmdParams); 152 153 virtual MOS_STATUS SetupVeboxState( 154 bool bDiVarianceEnable, 155 PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams); 156 157 virtual bool IsNeeded( 158 PCVPHAL_RENDER_PARAMS pcRenderParams, 159 RenderpassData *pRenderPassData); 160 161 #if VEBOX_AUTO_DENOISE_SUPPORTED 162 virtual MOS_STATUS LoadUpdateDenoiseKernelStaticData( 163 int32_t* iCurbeOffsetOutDN); 164 165 virtual MOS_STATUS SetupSurfaceStatesForDenoise(); 166 #endif 167 168 virtual bool IsFormatSupported( 169 PVPHAL_SURFACE pSrcSurface); 170 171 virtual bool IsRTFormatSupported( 172 PVPHAL_SURFACE pSrcSurface, 173 PVPHAL_SURFACE pRTSurface); 174 175 virtual bool IsDnFormatSupported( 176 PVPHAL_SURFACE pSrcSurface); 177 178 virtual bool IsDiFormatSupported( 179 PVPHAL_SURFACE pSrcSurface); 180 181 virtual VPHAL_OUTPUT_PIPE_MODE GetOutputPipe( 182 PCVPHAL_RENDER_PARAMS pcRenderParams, 183 PVPHAL_SURFACE pSrcSurface, 184 bool* pbCompNeeded); 185 186 virtual bool UseKernelResource(); 187 188 virtual void VeboxGetBeCSCMatrix( 189 PVPHAL_SURFACE pSrcSurface, 190 PVPHAL_SURFACE pOutSurface); 191 192 protected: 193 //! 194 //! \brief Setup Vebox_DI_IECP Command params for VEBOX final output surface on G75 195 //! \details Setup Vebox_DI_IECP Command params for VEBOX final output surface on G75 196 //! \param bDiScdEnable 197 //! [in] Is DI/Variances report enabled 198 //! \param pVeboxDiIecpCmdParams 199 //! [in/out] Pointer to VEBOX_DI_IECP command parameters 200 //! \return MOS_STATUS 201 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 202 //! 203 virtual MOS_STATUS SetupDiIecpStateForOutputSurf( 204 bool bDiScdEnable, 205 PMHW_VEBOX_DI_IECP_CMD_PARAMS pVeboxDiIecpCmdParams); 206 207 //! 208 //! \brief Get related surf parameters needed when allocate FFDI surface 209 //! \details Get related surf parameters needed when allocate FFDI surface 210 //! \param Format 211 //! [out] Format of FFDI surface 212 //! \param TileType 213 //! [out] Tile type of FFDI surface 214 //! \param ColorSpace 215 //! [out] Color space of FFDI surface 216 //! \param SampleType 217 //! [out] Sample type of FFDI surface 218 //! \return MOS_STATUS 219 //! Return MOS_STATUS_SUCCESS if success, otherwise failed 220 //! 221 virtual MOS_STATUS GetFFDISurfParams( 222 MOS_FORMAT &Format, 223 MOS_TILE_TYPE &TileType, 224 VPHAL_CSPACE &ColorSpace, 225 VPHAL_SAMPLE_TYPE &SampleType); 226 227 //! 228 //! \brief Check whether FFDI Surf is needed 229 //! \details For decide whether FFDI surf should be allocated or will be used 230 //! \return bool 231 //! Return true is needed, otherwise false 232 //! 233 virtual bool IsFFDISurfNeeded(); 234 235 //! 236 //! \brief Check whether FFDN Surf is needed 237 //! \details For decide whether FFDN surf should be allocated or will be used 238 //! \return bool 239 //! Return true is needed, otherwise false 240 //! 241 virtual bool IsFFDNSurfNeeded(); 242 243 //! 244 //! \brief Check whether STMM Surf is needed 245 //! \details For decide whether STMM surf should be allocated or will be used 246 //! \return bool 247 //! Return true is needed, otherwise false 248 //! 249 virtual bool IsSTMMSurfNeeded(); 250 251 virtual MOS_STATUS VeboxQueryStatLayout( 252 VEBOX_STAT_QUERY_TYPE QueryType, 253 uint32_t* pQuery); 254 255 virtual void GetLumaDefaultValue( 256 PVPHAL_SAMPLER_STATE_DNDI_PARAM pLumaParams); 257 258 virtual MOS_STATUS SetDNDIParams( 259 PVPHAL_SURFACE pSrcSurface, 260 PVPHAL_SAMPLER_STATE_DNDI_PARAM pLumaParams, 261 PVPHAL_DNUV_PARAMS pChromaParams); 262 CreateSfcState()263 virtual VphalSfcState* CreateSfcState() { return nullptr; } 264 265 virtual bool IsDNOnly(); 266 }; 267 268 #endif // __VPHAL_RENDER_VEBOX_G8_BASE_H__ 269