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__