1 /* 2 * Copyright (c) 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 render_copy.h 24 //! \brief header file of render copy base functions 25 //! \details define render copy basic API 26 //! 27 #ifndef __MEDIA_RENDER_COPY_H__ 28 #define __MEDIA_RENDER_COPY_H__ 29 30 #include <stdint.h> 31 #include "mos_os_specific.h" 32 #include "media_copy_common.h" 33 #include "media_interfaces_mhw.h" 34 #include "hal_kerneldll_next.h" 35 #include "mhw_render.h" 36 #include "mos_defs.h" 37 #include "mos_os.h" 38 #include "mos_resource_defs.h" 39 #include "renderhal.h" 40 #include "umKmInc/UmKmDmaPerfTimer.h" 41 #include "vp_common.h" 42 #include "vphal.h" 43 class MhwCpInterface; 44 class MhwInterfaces; 45 46 const VphalSseuSetting VpDefaultSSEUTable[baseKernelMaxNumID] = 47 {// Slice Sub-Slice EU Rsvd(freq) 48 {2, 3, 8, 0}, 49 }; 50 51 // Kernel Params --------------------------------------------------------------- 52 const RENDERHAL_KERNEL_PARAM g_rendercopy_KernelParam[RENDER_COPY_NUM] = 53 { 54 ///* GRF_Count 55 // | BT_Count 56 // | | Sampler_Count 57 // | | | Thread_Count 58 // | | | | GRF_Start_Register 59 // | | | | | CURBE_Length 60 // | | | | | | block_width 61 // | | | | | | | block_height 62 // | | | | | | | | blocks_x 63 // | | | | | | | | | blocks_y 64 // | | | | | | | | | |*/ 65 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_1D_to_2D_NV12 66 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_2D_to_1D_NV12 67 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_2D_to_2D_NV12 68 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_1D_to_2D_Planar 69 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_2D_to_1D_Planar 70 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_2D_to_2D_Planar 71 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_1D_to_2D_Packed 72 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_2D_to_1D_Packed 73 {4, 34, 0, RENDER_COPY_THREADS_MAX, 0, 0, 64, 8, 1, 1}, // CopyKernel_2D_to_2D_Packed 74 }; 75 76 typedef struct _RENDER_COPY_CACHE_CNTL 77 { 78 bool bL3CachingEnabled; 79 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 80 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 81 82 }RENDER_COPY_CACHE_CNTL, *PRENDER_COPY_CACHE_CNTL; 83 84 typedef struct _MEDIACOPY_RENDER_DATA 85 { 86 int32_t iBlocksX; 87 int32_t iBlocksY; 88 int32_t iBindingTable; 89 int32_t iMediaID;; 90 PRENDERHAL_MEDIA_STATE pMediaState; 91 92 // Kernel Information 93 PRENDERHAL_KERNEL_PARAM pKernelParam; //!< Kernel Parameter 94 Kdll_CacheEntry KernelEntry; //!< Kernel Entry 95 int32_t iCurbeLength; 96 int32_t iInlineLength; 97 98 // Perf 99 VPHAL_PERFTAG PerfTag; 100 RENDER_COPY_CACHE_CNTL SurfMemObjCtl; 101 102 // Debug parameters 103 char* pKernelName; //!< Kernel Used for current rendering 104 int32_t iCurbeOffset; //!< The offset of curbe data 105 } MEDIACOPY_RENDER_DATA, *PMEDIACOPY_RENDER_DATA; 106 107 class RenderCopyState 108 { 109 public: 110 RenderCopyState(PMOS_INTERFACE osInterface, MhwInterfaces *mhwInterfaces); 111 112 virtual ~RenderCopyState(); 113 114 //! 115 //! \brief RenderCopyState initialize 116 //! \details Initialize the RenderCopyState, create BLT context. 117 //! \return MOS_STATUS 118 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 119 //! 120 virtual MOS_STATUS Initialize(); 121 122 //! 123 //! \brief GetBytesPerPixel 124 //! \details Get Bytes Per each pixel for different format 125 //! \param Formate 126 //! [in] Surface's Format 127 //! \return int32_t 128 //! Return the numb for Byte 129 //! 130 int32_t GetBytesPerPixelPerPlane(MOS_FORMAT Format); 131 132 //! 133 //! \brief Get kernel ID 134 //! \details choose the kernel ID for each loop. 135 //! \return MOS_STATUS 136 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 137 //! 138 MOS_STATUS GetCurentKernelID(); 139 140 //! 141 //! \brief Render copy omputer walker setup 142 //! \details Computer walker setup for render copy 143 //! \param PMHW_WALKER_PARAMS pWalkerParams 144 //! [in/out] Pointer to Walker params 145 //! \return MOS_STATUS 146 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 147 //! 148 virtual MOS_STATUS RenderCopyComputerWalker( 149 PMHW_GPGPU_WALKER_PARAMS pWalkerParams); 150 151 //! 152 //! \brief setup surface states 153 //! \details Setup surface states for fast 1toN 154 155 //! \return MOS_STATUS 156 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 157 //! 158 MOS_STATUS SetupSurfaceStates(); 159 160 MOS_STATUS LoadStaticData(int32_t *piCurbeOffset); 161 162 protected: 163 164 //! 165 //! \brief Submit command 166 //! \details Submit render command 167 //! \return MOS_STATUS 168 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 169 //! 170 virtual MOS_STATUS SubmitCMD( ); 171 172 public: 173 PMOS_INTERFACE m_osInterface = nullptr; 174 MhwInterfaces *m_mhwInterfaces = nullptr; 175 MhwRenderInterface *m_renderInterface = nullptr; 176 RENDERHAL_INTERFACE_LEGACY *m_renderHal = nullptr; 177 MhwCpInterface *m_cpInterface = nullptr; 178 void *m_pKernelBin = nullptr; 179 Kdll_State *m_pKernelDllState = nullptr;//!< Kernel DLL state 180 181 volatile RENDERCOPY_KERNELID m_currKernelId = KERNEL_CopyKernel_1D_to_2D_NV12; 182 MOS_RESOURCE m_KernelResource = {}; //!<Graphics memory for Kernel acces s 183 MEDIACOPY_RENDER_DATA m_RenderData = {}; 184 VPHAL_SURFACE m_Source = {}; 185 VPHAL_SURFACE m_Target = {}; 186 bool m_bNullHwRenderCopy = false; 187 }; 188 189 #endif // __MEDIA_RENDER_COPY_H__ 190