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