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 #ifndef __VP_RENDER_VEBOX_UPDATE_CMD_PACKET_EXT_H__ 23 #define __VP_RENDER_VEBOX_UPDATE_CMD_PACKET_EXT_H__ 24 25 #include "vp_platform_interface.h" 26 #include "vp_render_kernel_obj.h" 27 #include "vp_render_fc_types.h" 28 29 namespace vp { 30 31 class VpRenderFcKernel : public VpRenderKernelObj 32 { 33 public: 34 VpRenderFcKernel(PVP_MHWINTERFACE hwInterface, PVpAllocator allocator); ~VpRenderFcKernel()35 virtual ~VpRenderFcKernel() 36 { 37 MOS_Delete(m_fcParams); 38 } 39 40 virtual MOS_STATUS GetCurbeState(void*& curbe, uint32_t& curbeLength) override; 41 42 virtual uint32_t GetInlineDataSize() override; 43 44 virtual MOS_STATUS GetWalkerSetting(KERNEL_WALKER_PARAMS& walkerParam, KERNEL_PACKET_RENDER_DATA &renderData) override; 45 FreeCurbe(void * & curbe)46 virtual MOS_STATUS FreeCurbe(void*& curbe) override 47 { 48 return MOS_STATUS_SUCCESS; 49 } 50 51 virtual MOS_STATUS GetKernelEntry(Kdll_CacheEntry &entry) override; 52 // Should be called after VpRenderCmdPacket::SetupSurfaceState(). 53 virtual MOS_STATUS UpdateCompParams() override; 54 IsKernelCached()55 virtual bool IsKernelCached() override 56 { 57 return true; 58 } 59 GetCachedEntryForKernelLoad()60 virtual Kdll_CacheEntry *GetCachedEntryForKernelLoad() override 61 { 62 return m_kernelEntry; 63 } 64 65 virtual MOS_STATUS SetCacheCntl(PVP_RENDER_CACHE_CNTL surfMemCacheCtl) override; 66 67 virtual MOS_STATUS InitRenderHalSurface( 68 SurfaceType type, 69 VP_SURFACE *surf, 70 PRENDERHAL_SURFACE renderHalSurface) override; 71 72 virtual void OcaDumpKernelInfo(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext) override; 73 74 protected: 75 virtual MOS_STATUS SetupSurfaceState() override; 76 virtual MOS_STATUS SetKernelConfigs(KERNEL_CONFIGS &kernelConfigs) override; 77 virtual MOS_STATUS SetSamplerStates(KERNEL_SAMPLER_STATE_GROUP& samplerStateGroup) override; 78 MOS_STATUS GetSamplerIndex(VPHAL_SCALING_MODE scalingMode, uint32_t yuvPlane, int32_t &samplerIndex, MHW_SAMPLER_TYPE &samplerType); 79 MOS_STATUS SetSurfaceParams(KERNEL_SURFACE_STATE_PARAM &surfParam, VP_FC_LAYER &layer, bool is32MWColorFillKern); 80 81 MOS_STATUS PrintSearchFilter(Kdll_FilterEntry *filter, int32_t filterSize); 82 MOS_STATUS InitRenderHalSurface(VP_FC_LAYER *src, PRENDERHAL_SURFACE renderHalSurface); 83 MOS_STATUS BuildFilter( 84 VP_COMPOSITE_PARAMS *compParams, 85 PKdll_FilterEntry pFilter, 86 int32_t* piFilterSize); 87 MOS_STATUS InitFcCurbeData(); 88 MOS_STATUS InitFcDpBasedCurbeData(); 89 VPHAL_CHROMA_SUBSAMPLING GetChromaSitting(VP_SURFACE &surf); 90 MOS_STATUS InitCscInCurbeData(); 91 MOS_STATUS InitCscInDpCurbeData(); 92 MOS_STATUS InitColorFillInCurbeData(); 93 MOS_STATUS InitOutputFormatInCurbeData(); 94 95 MOS_STATUS InitLayerInCurbeData(VP_FC_LAYER *layer); 96 bool IsEufusionBypassed(); 97 void PrintCurbeData(VP_FC_CURBE_DATA &curbeData); 98 99 VP_EXECUTE_CAPS m_executeCaps = {}; 100 Kdll_FilterDesc m_searchFilter = {}; 101 Kdll_SearchState m_kernelSearch = {}; 102 Kdll_State *m_kernelDllState = nullptr; //!< Compositing Kernel DLL/Search state 103 104 // Procamp 105 int32_t m_maxProcampEntries = VP_MAX_PROCAMP; 106 Kdll_Procamp m_Procamp[VP_MAX_PROCAMP] = {}; 107 108 PRENDERHAL_INTERFACE m_renderHal = nullptr; 109 110 VP_FC_DP_BASED_CURBE_DATA m_curbeDataDp = {}; 111 VP_FC_CURBE_DATA m_curbeData = {}; 112 Kdll_CacheEntry *m_kernelEntry = nullptr; 113 114 // CSC parameters 115 VPHAL_COLOR_SAMPLE_8 m_srcColor = {}; 116 VPHAL_COLOR_SAMPLE_8 m_dstColor = {}; 117 MEDIA_CSPACE m_srcCspace = CSpace_None; 118 MEDIA_CSPACE m_dstCspace = CSpace_None; 119 120 PRENDER_FC_PARAMS m_fcParams = nullptr; 121 122 bool m_cscCoeffPatchModeEnabled = false; //!< Set CSC Coeff using patch mode 123 bool m_computeWalkerEnabled = false; 124 125 // Cache attributes 126 VPHAL_COMPOSITE_CACHE_CNTL m_surfMemCacheCtl = {}; 127 128 static const int32_t s_bindingTableIndex[]; 129 static const int32_t s_bindingTableIndexField[]; 130 131 MEDIA_CLASS_DEFINE_END(vp__VpRenderFcKernel) 132 }; 133 } 134 135 136 #endif // __VP_RENDER_VEBOX_UPDATE_CMD_PACKET_EXT_H__