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 //!
23 //! \file      renderhal_platform_interface_legacy.h
24 //! \brief     abstract the platfrom specific APIs into one class
25 //!
26 //!
27 //! \file     renderhal_platform_interface_legacy.h
28 //! \brief    Render Engine Interfaces shared across platforms
29 //! \details  Platform Independent Hardware Interfaces
30 //!
31 #ifndef __RENDERHAL_PLATFORM_INTERFACE_LEGACY_H__
32 #define __RENDERHAL_PLATFORM_INTERFACE_LEGACY_H__
33 
34 #include "mos_os.h"
35 #include "renderhal_legacy.h"
36 #include "renderhal_platform_interface.h"
37 #include "media_interfaces_mhw.h"
38 
39 class XRenderHal_Platform_Interface_Legacy : public XRenderHal_Platform_Interface
40 {
41 public:
XRenderHal_Platform_Interface_Legacy()42     XRenderHal_Platform_Interface_Legacy() {}
~XRenderHal_Platform_Interface_Legacy()43     virtual ~XRenderHal_Platform_Interface_Legacy() {}
44 
45     //! \brief    Add Pipeline SelectCmd
46     //! \details  Add Pipeline SelectCmd
47     //! \param    PRENDERHAL_INTERFACE pRenderHal
48     //!           [in] Pointer to RenderHal Interface Structure
49     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
50     //!           [in] Pointer to Command Buffer
51     //! \return   MOS_STATUS
52     MOS_STATUS AddPipelineSelectCmd(
53         PRENDERHAL_INTERFACE        pRenderHal,
54         PMOS_COMMAND_BUFFER         pCmdBuffer,
55         bool                        gpGpuPipe);
56 
57     //! \brief    Send StateBase Address
58     //! \details  Send StateBase Address
59     //! \param    PRENDERHAL_INTERFACE pRenderHal
60     //!           [in] Pointer to RenderHal Interface Structure
61     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
62     //!           [in] Pointer to Command Buffer
63     //! \return   MOS_STATUS
64     MOS_STATUS SendStateBaseAddress(
65         PRENDERHAL_INTERFACE        pRenderHal,
66         PMOS_COMMAND_BUFFER         pCmdBuffer);
67 
68     //! \brief    Add Sip State Cmd
69     //! \details  Add Sip State Cmd
70     //! \param    PRENDERHAL_INTERFACE pRenderHal
71     //!           [in] Pointer to RenderHal Interface Structure
72     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
73     //!           [in] Pointer to Command Buffer
74     //! \return   MOS_STATUS
75     MOS_STATUS AddSipStateCmd(
76         PRENDERHAL_INTERFACE        pRenderHal,
77         PMOS_COMMAND_BUFFER         pCmdBuffer);
78 
79     //! \brief    Add Cfe State Cmd
80     //! \details  Add Cfe State Cmd
81     //! \param    PRENDERHAL_INTERFACE pRenderHal
82     //!           [in] Pointer to RenderHal Interface Structure
83     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
84     //!           [in] Pointer to Command Buffer
85     //! \return   MOS_STATUS
86     MOS_STATUS AddCfeStateCmd(
87         PRENDERHAL_INTERFACE        pRenderHal,
88         PMOS_COMMAND_BUFFER         pCmdBuffer,
89         PMHW_VFE_PARAMS             params);
90 
91     //! \brief    Send ChromaKey
92     //! \details  Send ChromaKey
93     //! \param    PRENDERHAL_INTERFACE pRenderHal
94     //!           [in] Pointer to RenderHal Interface Structure
95     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
96     //!           [in] Pointer to Command Buffer
97     //! \return   MOS_STATUS
98     MOS_STATUS SendChromaKey(
99         PRENDERHAL_INTERFACE        pRenderHal,
100         PMOS_COMMAND_BUFFER         pCmdBuffer,
101         PMHW_CHROMAKEY_PARAMS       pChromaKeyParams);
102 
103     //! \brief    Send Palette
104     //! \details  Send Palette
105     //! \param    PRENDERHAL_INTERFACE pRenderHal
106     //!           [in] Pointer to RenderHal Interface Structure
107     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
108     //!           [in] Pointer to Command Buffer
109     //! \return   MOS_STATUS
110     MOS_STATUS SendPalette(
111         PRENDERHAL_INTERFACE        pRenderHal,
112         PMOS_COMMAND_BUFFER         pCmdBuffer,
113         PMHW_PALETTE_PARAMS         pPaletteLoadParams);
114 
115     //! \brief    Set L3Cache
116     //! \details  Set L3Cache
117     //! \param    PRENDERHAL_INTERFACE pRenderHal
118     //!           [in] Pointer to RenderHal Interface Structure
119     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
120     //!           [in] Pointer to Command Buffer
121     //! \return   MOS_STATUS
122     MOS_STATUS SetL3Cache(
123         PRENDERHAL_INTERFACE        pRenderHal,
124         PMOS_COMMAND_BUFFER         pCmdBuffer);
125 
126     //!
127     //! \brief    Get the size of render hal media state
128     //! \return   size_t
129     //!           The size of render hal media state
130     //!
131     size_t GetRenderHalMediaStateSize();
132 
133     //!
134     //! \brief    Get the size of render hal state heap
135     //! \return   size_t
136     //!           The size of render hal state heap
137     //!
138     size_t GetRenderHalStateHeapSize();
139 
140     PMHW_MI_MMIOREGISTERS GetMmioRegisters(
141         PRENDERHAL_INTERFACE        pRenderHal);
142 
143     MOS_STATUS EnablePreemption(
144         PRENDERHAL_INTERFACE            pRenderHal,
145         PMOS_COMMAND_BUFFER             pCmdBuffer);
146 
147     MOS_STATUS SendPredicationCommand(
148         PRENDERHAL_INTERFACE        pRenderHal,
149         PMOS_COMMAND_BUFFER         pCmdBuffer);
150 
151     //! \brief    Adds marker attributes in command buffer
152     //! \param    PRENDERHAL_INTERFACE pRenderHal
153     //!           [in] Pointer to RenderHal Interface Structure
154     //! \param    PMOS_COMMAND_BUFFER pcmdBuffer
155     //!           [in] Pointer to Command Buffer
156     //! \param    bool isRender
157     //!           [in] Flag of Render Engine
158     //! \return   MOS_STATUS
159     MOS_STATUS SendMarkerCommand(
160         PRENDERHAL_INTERFACE    pRenderHal,
161         PMOS_COMMAND_BUFFER     cmdBuffer,
162         bool                    isRender);
163 
164     MOS_STATUS AddMiPipeControl(
165         PRENDERHAL_INTERFACE       pRenderHal,
166         PMOS_COMMAND_BUFFER        pCmdBuffer,
167         MHW_PIPE_CONTROL_PARAMS*   params);
168 
169     MOS_STATUS AddMiLoadRegisterImmCmd(
170         PRENDERHAL_INTERFACE             pRenderHal,
171         PMOS_COMMAND_BUFFER              pCmdBuffer,
172         PMHW_MI_LOAD_REGISTER_IMM_PARAMS params);
173 
174     MOS_STATUS SendGenericPrologCmd(
175         PRENDERHAL_INTERFACE        pRenderHal,
176         PMOS_COMMAND_BUFFER         pCmdBuffer,
177         PMHW_GENERIC_PROLOG_PARAMS  pParams,
178         MHW_MI_MMIOREGISTERS* pMmioReg = nullptr);
179 
180     MOS_STATUS CreateMhwInterfaces(
181         PRENDERHAL_INTERFACE        pRenderHal,
182         PMOS_INTERFACE              pOsInterface);
183 
184     MOS_STATUS On1stLevelBBStart(
185         PRENDERHAL_INTERFACE pRenderHal,
186         PMOS_COMMAND_BUFFER  pCmdBuffer,
187         PMOS_CONTEXT         pOsContext,
188         uint32_t             gpuContextHandle,
189         MHW_MI_MMIOREGISTERS *pMmioReg);
190 
191     MOS_STATUS OnDispatch(
192         PRENDERHAL_INTERFACE pRenderHal,
193         PMOS_COMMAND_BUFFER  pCmdBuffer,
194         PMOS_INTERFACE     pOsInterface,
195         MHW_MI_MMIOREGISTERS *pMmioReg);
196 
197     MOS_STATUS CreatePerfProfiler(
198         PRENDERHAL_INTERFACE pRenderHal);
199 
200     MOS_STATUS DestroyPerfProfiler(
201         PRENDERHAL_INTERFACE pRenderHal);
202 
203     MOS_STATUS AddPerfCollectStartCmd(
204         PRENDERHAL_INTERFACE pRenderHal,
205         MOS_INTERFACE        *osInterface,
206         MOS_COMMAND_BUFFER   *cmdBuffer);
207 
208     MOS_STATUS StartPredicate(
209         PRENDERHAL_INTERFACE pRenderHal,
210         PMOS_COMMAND_BUFFER  cmdBuffer);
211 
212     MOS_STATUS StopPredicate(
213         PRENDERHAL_INTERFACE pRenderHal,
214         PMOS_COMMAND_BUFFER  cmdBuffer);
215 
216     MOS_STATUS AddPerfCollectEndCmd(
217         PRENDERHAL_INTERFACE pRenderHal,
218         MOS_INTERFACE        *osInterface,
219         MOS_COMMAND_BUFFER   *cmdBuffer);
220 
221     MOS_STATUS AddMediaVfeCmd(
222         PRENDERHAL_INTERFACE    pRenderHal,
223         PMOS_COMMAND_BUFFER     pCmdBuffer,
224         MHW_VFE_PARAMS          *params);
225 
226     MOS_STATUS AddMediaStateFlush(
227         PRENDERHAL_INTERFACE         pRenderHal,
228         PMOS_COMMAND_BUFFER          pCmdBuffer,
229         MHW_MEDIA_STATE_FLUSH_PARAM  *params);
230 
231     MOS_STATUS AddMiBatchBufferEnd(
232         PRENDERHAL_INTERFACE         pRenderHal,
233         PMOS_COMMAND_BUFFER          pCmdBuffer,
234         PMHW_BATCH_BUFFER            batchBuffer);
235 
236     MOS_STATUS AddMediaObjectWalkerCmd(
237         PRENDERHAL_INTERFACE         pRenderHal,
238         PMOS_COMMAND_BUFFER          pCmdBuffer,
239         PMHW_WALKER_PARAMS           params);
240 
241     MOS_STATUS AddGpGpuWalkerStateCmd(
242             PRENDERHAL_INTERFACE     pRenderHal,
243             PMOS_COMMAND_BUFFER      pCmdBuffer,
244             PMHW_GPGPU_WALKER_PARAMS params);
245 
246     MOS_STATUS AllocateHeaps(
247         PRENDERHAL_INTERFACE     pRenderHal,
248         MHW_STATE_HEAP_SETTINGS  MhwStateHeapSettings);
249 
250     PMHW_STATE_HEAP_INTERFACE GetStateHeapInterface(
251         PRENDERHAL_INTERFACE     pRenderHal);
252 
253     MOS_STATUS DestoryMhwInterface(
254         PRENDERHAL_INTERFACE     pRenderHal);
255 
256     MOS_STATUS AddMediaCurbeLoadCmd(
257         PRENDERHAL_INTERFACE         pRenderHal,
258         PMOS_COMMAND_BUFFER          pCmdBuffer,
259         PMHW_CURBE_LOAD_PARAMS       params);
260 
261     MOS_STATUS AddMediaIDLoadCmd(
262         PRENDERHAL_INTERFACE         pRenderHal,
263         PMOS_COMMAND_BUFFER          pCmdBuffer,
264         PMHW_ID_LOAD_PARAMS          params);
265 
266     bool IsPreemptionEnabled(
267         PRENDERHAL_INTERFACE         pRenderHal);
268 
269     void GetSamplerResolutionAlignUnit(
270         PRENDERHAL_INTERFACE         pRenderHal,
271         bool                         isAVSSampler,
272         uint32_t                     &widthAlignUnit,
273         uint32_t                     &heightAlignUnit);
274 
275     PMHW_RENDER_ENGINE_CAPS GetHwCaps(
276         PRENDERHAL_INTERFACE         pRenderHal);
277 
278     std::shared_ptr<mhw::mi::Itf> GetMhwMiItf();
279 
280 };
281 
282 #endif // __RENDERHAL_PLATFORM_INTERFACE_LEGACY_H__
283