1 /*
2 * Copyright (c) 2009-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.h
24 //! \brief     abstract the platfrom specific APIs into one class
25 //!
26 //!
27 //! \file     renderhal_platform_interface.h
28 //! \brief    Render Engine Interfaces shared across platforms
29 //! \details  Platform Independent Hardware Interfaces
30 //!
31 #ifndef __RENDERHAL_PLATFORM_INTERFACE_H__
32 #define __RENDERHAL_PLATFORM_INTERFACE_H__
33 
34 #include "mos_os.h"
35 #include "renderhal.h"
36 
37 class XRenderHal_Platform_Interface
38 {
39 public:
XRenderHal_Platform_Interface()40     XRenderHal_Platform_Interface() {}
~XRenderHal_Platform_Interface()41     virtual ~XRenderHal_Platform_Interface() {}
42 
43     //!
44     //! \brief    Setup Surface State
45     //! \details  Setup Surface States
46     //! \param    PRENDERHAL_INTERFACE pRenderHal
47     //!           [in] Pointer to Hardware Interface Structure
48     //! \param    PRENDERHAL_SURFACE pRenderHalSurface
49     //!           [in] Pointer to Render Hal Surface
50     //! \param    PRENDERHAL_SURFACE_STATE_PARAMS pParams
51     //!           [in] Pointer to Surface State Params
52     //! \param    int32_t *piNumEntries
53     //!           [out] Pointer to Number of Surface State Entries (Num Planes)
54     //! \param    PRENDERHAL_SURFACE_STATE_ENTRY * ppSurfaceEntries
55     //!           [out] Array of Surface State Entries
56     //! \param    PRENDERHAL_OFFSET_OVERRIDE pOffsetOverride
57     //!           [in] If not nullptr, provides adjustments to Y, UV plane offsets,
58     //!           used for kernel in a few cases. nullptr is the most common usage.
59     //! \return   MOS_STATUS
60     //!
61     virtual MOS_STATUS SetupSurfaceState(
62         PRENDERHAL_INTERFACE            pRenderHal,
63         PRENDERHAL_SURFACE              pRenderHalSurface,
64         PRENDERHAL_SURFACE_STATE_PARAMS pParams,
65         int32_t                         *piNumEntries,
66         PRENDERHAL_SURFACE_STATE_ENTRY  *ppSurfaceEntries,
67         PRENDERHAL_OFFSET_OVERRIDE      pOffsetOverride) = 0;
68 
69     //!
70     //! \brief    Check if Sampler128Elements is supported
71     //! \return   true of false
72     //!
73     virtual bool IsSampler128ElementsSupported() = 0;
74 
75     //!
76     //! \brief      Checks how per thread scratch space size bits in VFE state are interpreted by HW
77     //! \details    For BDW GT1/2/3 A0 steppings, per thread scratch space size in VFE state
78     //!             is 11 bits indicating [2k bytes, 2 Mbytes]: 0=2k, 1=4k, 2=8k ... 10=2M
79     //!             BDW+ excluding A0 step is 12 bits indicating [1k bytes, 2 Mbytes]: 0=1k, 1=2k, 2=4k, 3=8k ... 11=2M
80     //! \param      PRENDERHAL_INTERFACE pRenderHal
81     //!             [in]    Pointer to RenderHal interface
82     //! \return     true if BDW A0 stepping, false otherwise
83     //!
84     virtual bool PerThreadScratchSpaceStart2K(
85         PRENDERHAL_INTERFACE pRenderHal) = 0;
86 
87     //!
88     //! \brief      Checks how per thread scratch space size bits in VFE state are interpreted by HW
89     //! \details    On some new platforms, per thread scratch space size can be 2^n (n >= 6) bytes.
90     //!             If this is supported, total scratch space size can be reduced.
91     //! \return     64-byte base size is supported on specific platforms, so false is returned in
92     //!             base class implementation.
93     //!
PerThreadScratchSpaceStart64Byte(RENDERHAL_INTERFACE * renderHal)94     virtual bool PerThreadScratchSpaceStart64Byte(
95         RENDERHAL_INTERFACE *renderHal) { return false; }
96 
97     //!
98     //! \brief    Encode SLM Size for Interface Descriptor
99     //! \details  Setup SLM size
100     //! \param    uint32_t SLMSize
101     //!           [in] SLM size in 1K
102     //! \return   encoded output
103     //!
104     virtual uint32_t EncodeSLMSize(uint32_t SLMSize) = 0;
105 
106     //!
107     //! \brief    Set Chroma Direction
108     //! \details  Setup Chroma Direction
109     //! \param    PRENDERHAL_INTERFACE pRenderHal
110     //!           [in]  Pointer to Hardware Interface
111     //! \param    PRENDERHAL_SURFACE pRenderHalSurface
112     //!           [in]  Pointer to Render Hal Surface
113     //! \return   uint8_t
114     //!
115     virtual uint8_t SetChromaDirection(
116         PRENDERHAL_INTERFACE pRenderHal,
117         PRENDERHAL_SURFACE   pRenderHalSurface) = 0;
118 
119     //!
120     //! \brief    Convert To Nano Seconds
121     //! \details  Convert to Nano Seconds
122     //! \param    PRENDERHAL_INTERFACE pRenderHal
123     //!           [in] Pointer to Hardware Interface Structure
124     //! \param    uint64_t iTicks
125     //!           [in] Ticks
126     //! \param    uint64_t *piNs
127     //!           [in] Nano Seconds
128     //! \return   void
129     //!
130     virtual void ConvertToNanoSeconds(
131         PRENDERHAL_INTERFACE    pRenderHal,
132         uint64_t                iTicks,
133         uint64_t                *piNs) = 0;
134 
135     //!
136     //! \brief    Initialize the State Heap Settings per platform
137     //! \param    PRENDERHAL_INTERFACE    pRenderHal
138     //!           [out] Pointer to PRENDERHAL_INTERFACE
139     //! \return   void
140     //!
141     virtual void InitStateHeapSettings(
142         PRENDERHAL_INTERFACE    pRenderHal) = 0;
143 
144     //!
145     //! \brief    Initialize the default surface type and advanced surface type  per platform
146     //! \param    PRENDERHAL_INTERFACE    pRenderHal
147     //!           [out] Pointer to PRENDERHAL_INTERFACE
148     //! \return   void
149     //!
150     virtual void InitSurfaceTypes(
151         PRENDERHAL_INTERFACE    pRenderHal) = 0;
152 
153     //!
154     //! \brief    Check if YV12 Single Pass is supported
155     //! \param    PRENDERHAL_INTERFACE    pRenderHal
156     //!           [in]  Pointer to Hardware Interface
157     //! \return   true of false
158     //!
159     virtual bool IsEnableYV12SinglePass(
160         PRENDERHAL_INTERFACE    pRenderHal) = 0;
161 
162     //!
163     //! \brief     Get the Size of AVS Sampler State
164     //! \param    PRENDERHAL_INTERFACE    pRenderHal
165     //!           [in]  Pointer to Hardware Interface
166     //! \return   size
167     //!
168     virtual uint32_t GetSizeSamplerStateAvs(
169         PRENDERHAL_INTERFACE    pRenderHal) = 0;
170 
171     //!
172     //! \brief    Enables L3 cacheing flag and sets related registers/values
173     //! \param    PRENDERHAL_INTERFACE    pRenderHal
174     //!           [in]  Pointer to Hardware Interface
175     //! \param    pCacheSettings
176     //!           [in] L3 Cache Configurations
177     //! \return   MOS_STATUS
178     //!           MOS_STATUS_SUCCESS if success, else fail reason
179     //!
180     virtual MOS_STATUS EnableL3Caching(
181         PRENDERHAL_INTERFACE         pRenderHal,
182         PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings) = 0;
183 
184     //!
185     //! \brief    Get offset and/or pointer to sampler state
186     //! \details  Get offset and/or pointer to sampler state in General State Heap
187     //! \param    PRENDERHAL_INTERFACE pRenderHal
188     //!           [in] Pointer to RenderHal Interface
189     //! \param    int32_t iMediaID
190     //!           [in] Media ID associated with sampler
191     //! \param    int32_t iSamplerID
192     //!           [in] Sampler ID
193     //! \param    uint32_t *pdwSamplerOffset
194     //!           [out] optional; offset of sampler state from GSH base
195     //! \param    void  **ppSampler
196     //!           [out] optional; pointer to sampler state in GSH
197     //! \return   MOS_STATUS
198     //!
GetSamplerOffsetAndPtr_DSH(PRENDERHAL_INTERFACE pRenderHal,int32_t iMediaID,int32_t iSamplerID,PMHW_SAMPLER_STATE_PARAM pSamplerParams,uint32_t * pdwSamplerOffset,void ** ppSampler)199     virtual MOS_STATUS GetSamplerOffsetAndPtr_DSH(
200         PRENDERHAL_INTERFACE     pRenderHal,
201         int32_t                  iMediaID,
202         int32_t                  iSamplerID,
203         PMHW_SAMPLER_STATE_PARAM pSamplerParams,
204         uint32_t                 *pdwSamplerOffset,
205         void                    **ppSampler)
206     {
207         return MOS_STATUS_SUCCESS;
208     }
209 
210     //!
211     //! \brief      Initialize the DSH Settings
212     //! \details    Initialize the structure DynamicHeapSettings in pRenderHal
213     //! \param      PRENDERHAL_INTERFACE pRenderHal
214     //!             [in]    Pointer to HW interface
215     //! \return     void
216     //!
InitDynamicHeapSettings(PRENDERHAL_INTERFACE pRenderHal)217     virtual void InitDynamicHeapSettings(
218         PRENDERHAL_INTERFACE  pRenderHal)
219     {
220     }
221 
222     //!
223     //! \brief      Get the depth bit mask for buffer
224     //! \details    Get the depth bit mask for buffer
225     //! \return     uint32_t
226     //!             depth bit mask for buffer
227     //!
GetDepthBitMaskForBuffer()228     virtual uint32_t GetDepthBitMaskForBuffer() { return MOS_MASKBITS32(21, 29); };
229 
230     //!
231     //! \brief      Get the depth bit mask for raw buffer
232     //! \details    Get the depth bit mask for raw buffer
233     //! \return     uint32_t
234     //!             depth bit mask for raw buffer
235     //!
GetDepthBitMaskForRawBuffer()236     virtual uint32_t GetDepthBitMaskForRawBuffer() { return MOS_MASKBITS32(21, 29);};
237 
238     //!
239     //! \brief      Get the pointer to the MHW_VFE_PARAMS
240     //! \return     MHW_VFE_PARAMS*
241     //!             pointer to the MHW_VFE_PARAMS
242     //!
243     virtual MHW_VFE_PARAMS* GetVfeStateParameters() = 0;
244 
245     //!
246     //! \brief      Get the size of render hal media state
247     //! \return     size_t
248     //!             The size of render hal media state
249     //!
250     virtual size_t GetRenderHalMediaStateSize() = 0;
251 
252     //!
253     //! \brief      Get the size of render hal state heap
254     //! \return     size_t
255     //!             The size of render hal state heap
256     //!
257     virtual size_t GetRenderHalStateHeapSize() = 0;
258 
259     //!
260     //! \brief    Set Power Option Status
261     //! \param    [in] pRenderHal
262     //!           Pointer to Hardware Interface
263     //! \param    [in,out] pCmdBuffer
264     //!           Pointer to Command Buffer
265     //! \return   MOS_STATUS
266     //!           MOS_STATUS_SUCCESS if success, else fail reason
267     //!
268     virtual MOS_STATUS SetPowerOptionStatus(
269         PRENDERHAL_INTERFACE         pRenderHal,
270         PMOS_COMMAND_BUFFER          pCmdBuffer) = 0;
271 
272     //!
273     //! \brief    Set Composite Prolog CMD
274     //! \param    [in] pRenderHal
275     //!           Pointer to Hardware Interface
276     //! \param    [in,out] pCmdBuffer
277     //!           Pointer to Command Buffer
278     //! \return   MOS_STATUS
279     //!           MOS_STATUS_SUCCESS if success, else fail reason
280     //!
SetCompositePrologCmd(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer)281     virtual MOS_STATUS SetCompositePrologCmd(
282         PRENDERHAL_INTERFACE         pRenderHal,
283         PMOS_COMMAND_BUFFER          pCmdBuffer)
284     {
285         return MOS_STATUS_SUCCESS;
286     }
287 
288     //!
289     //! \brief    Get Render Hal MMC Enable/Disable Flag
290     //! \param    [in] pRenderHal
291     //!           Pointer to Hardware Interface
292     //! \return   MOS_STATUS
293     //!           MOS_STATUS_SUCCESS if success, else fail reason
294     //!
IsRenderHalMMCEnabled(PRENDERHAL_INTERFACE pRenderHal)295     virtual MOS_STATUS IsRenderHalMMCEnabled(
296         PRENDERHAL_INTERFACE         pRenderHal)
297     {
298         MOS_UNUSED(pRenderHal);
299 
300         return MOS_STATUS_SUCCESS;
301     }
302 
303     //!
304     //! \brief    Check if Override is needed or not
305     //! \param    [in] pRenderHal
306     //!           Pointer to Hardware Interface
307     //! \param    [in,out] pCmdBuffer
308     //!           Pointer to Command Buffer
309     //! \param    [in] pGenericPrologParam
310     //!           Pointer to MHW generic prolog parameters
311     //! \return   MOS_STATUS
312     //!           MOS_STATUS_SUCCESS if success, else fail reason
313     //!
IsOvrdNeeded(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer,PRENDERHAL_GENERIC_PROLOG_PARAMS pGenericPrologParams)314     virtual MOS_STATUS IsOvrdNeeded(
315         PRENDERHAL_INTERFACE              pRenderHal,
316         PMOS_COMMAND_BUFFER               pCmdBuffer,
317         PRENDERHAL_GENERIC_PROLOG_PARAMS  pGenericPrologParams) {return MOS_STATUS_SUCCESS;};
318 
319     //!
320     //! \brief    Check if Chromasiting is enabled
321     //! \param    [in] pRenderHal
322     //!           Pointer to Hardware Interface
323     //! \param    [in] pParams
324     //!           Pointer to Surface State Params
325     //! \return   bool
326     //!           true or false
327     //!
IsChromasitingEnabled(PRENDERHAL_INTERFACE pRenderHal,PRENDERHAL_SURFACE_STATE_PARAMS pParams)328     virtual bool IsChromasitingEnabled(
329         PRENDERHAL_INTERFACE            pRenderHal,
330         PRENDERHAL_SURFACE_STATE_PARAMS pParams) {return false;};
331 
332     //!
333     //! \brief    Get PlaneDefinition for Format_Y216
334     //! \param    [in] isRenderTarget
335     //!           The flag to indicate if the surface is rendertarget or not
336     //! \param    [in] pRenderHal
337     //!           Pointer to Hardware Interface
338     //! \param    [in,out] PlaneDefinition
339     //!           Pointer to PlaneDefinition
340     //! \return   MOS_STATUS
341     //!           MOS_STATUS_SUCCESS if success, else fail reason
342     //!
GetPlaneDefForFormatY216(bool isRenderTarget,PRENDERHAL_INTERFACE pRenderHal,RENDERHAL_PLANE_DEFINITION & PlaneDefinition)343     virtual MOS_STATUS GetPlaneDefForFormatY216(
344         bool                       isRenderTarget,
345         PRENDERHAL_INTERFACE       pRenderHal,
346         RENDERHAL_PLANE_DEFINITION &PlaneDefinition)
347     {
348         PlaneDefinition = isRenderTarget ? RENDERHAL_PLANES_Y210_RT : (pRenderHal->bIsAVS ? RENDERHAL_PLANES_Y210_ADV : RENDERHAL_PLANES_Y210);
349         return MOS_STATUS_SUCCESS;
350     };
351 
352     //!
353     //! \brief    Get PlaneDefinition for NV12
354     //! \param    [in,out] PlaneDefinition
355     //!           Pointer to PlaneDefinition
356     //! \return   MOS_STATUS
357     //!           MOS_STATUS_SUCCESS if success, else fail reason
358     //!
GetPlaneDefForFormatNV12(RENDERHAL_PLANE_DEFINITION & PlaneDefinition)359     virtual MOS_STATUS GetPlaneDefForFormatNV12(
360         RENDERHAL_PLANE_DEFINITION &PlaneDefinition)
361     {
362         PlaneDefinition = RENDERHAL_PLANES_NV12;
363         return MOS_STATUS_SUCCESS;
364     };
365 
366     //! \brief      Set L3 cache override config parameters
367     //! \param      [in] pRenderHal
368     //!             Pointer to RenderHal Interface Structure
369     //! \param      [in,out] pCacheSettings
370     //!             Pointer to pCacheSettings
371     //! \param      [in] bEnableSLM
372     //!             Flag to enable SLM
373     //! \return     MOS_STATUS
374     //!             MOS_STATUS_SUCCESS if success. Error code otherwise
375     //!
376     virtual MOS_STATUS SetCacheOverrideParams(
377         PRENDERHAL_INTERFACE            pRenderHal,
378         PRENDERHAL_L3_CACHE_SETTINGS    pCacheSettings,
379         bool                            bEnableSLM) = 0;
380 
381     //! \brief      Get the size of Render Surface State Command
382     //! \return     size_t
383     //!             the size of render surface state command
384     virtual size_t GetSurfaceStateCmdSize() = 0;
385 
386     //! \brief      Get the address of the ith Palette Data
387     //! \param      [in] i
388     //!             Index of the palette data
389     //! \return     void *
390     //!             address of the ith palette data table
391     virtual void* GetPaletteDataAddress(int i) = 0;
392 
393     //! \brief      Get the size of Binding Table State Command
394     //! \return     size_t
395     //!             the size of binding table state command
396     virtual size_t GetBTStateCmdSize() = 0;
397 
398     //! \brief    Check if compute context in use
399     //! \param    PRENDERHAL_INTERFACE    pRenderHal
400     //!           [in]  Pointer to RenderHal Interface
401     //! \return   true or false
402     virtual bool IsComputeContextInUse(
403         PRENDERHAL_INTERFACE    pRenderHal) = 0;
404 
405     //! \brief    Add Pipeline SelectCmd
406     //! \details  Add Pipeline SelectCmd
407     //! \param    PRENDERHAL_INTERFACE pRenderHal
408     //!           [in] Pointer to RenderHal Interface Structure
409     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
410     //!           [in] Pointer to Command Buffer
411     //! \return   MOS_STATUS
412     virtual MOS_STATUS AddPipelineSelectCmd(
413         PRENDERHAL_INTERFACE        pRenderHal,
414         PMOS_COMMAND_BUFFER         pCmdBuffer,
415         bool                        gpGpuPipe) = 0;
416 
417     //! \brief    Send StateBase Address
418     //! \details  Send StateBase Address
419     //! \param    PRENDERHAL_INTERFACE pRenderHal
420     //!           [in] Pointer to RenderHal Interface Structure
421     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
422     //!           [in] Pointer to Command Buffer
423     //! \return   MOS_STATUS
424     virtual MOS_STATUS SendStateBaseAddress(
425         PRENDERHAL_INTERFACE        pRenderHal,
426         PMOS_COMMAND_BUFFER         pCmdBuffer) = 0;
427 
428     //! \brief    Add Sip State Cmd
429     //! \details  Add Sip State Cmd
430     //! \param    PRENDERHAL_INTERFACE pRenderHal
431     //!           [in] Pointer to RenderHal Interface Structure
432     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
433     //!           [in] Pointer to Command Buffer
434     //! \return   MOS_STATUS
435     virtual MOS_STATUS AddSipStateCmd(
436         PRENDERHAL_INTERFACE        pRenderHal,
437         PMOS_COMMAND_BUFFER         pCmdBuffer) = 0;
438 
439     //! \brief    Add Cfe State Cmd
440     //! \details  Add Cfe State Cmd
441     //! \param    PRENDERHAL_INTERFACE pRenderHal
442     //!           [in] Pointer to RenderHal Interface Structure
443     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
444     //!           [in] Pointer to Command Buffer
445     //! \return   MOS_STATUS
446     virtual MOS_STATUS AddCfeStateCmd(
447         PRENDERHAL_INTERFACE        pRenderHal,
448         PMOS_COMMAND_BUFFER         pCmdBuffer,
449         PMHW_VFE_PARAMS             params) = 0;
450 
451     //! \brief    Send ChromaKey
452     //! \details  Send ChromaKey
453     //! \param    PRENDERHAL_INTERFACE pRenderHal
454     //!           [in] Pointer to RenderHal Interface Structure
455     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
456     //!           [in] Pointer to Command Buffer
457     //! \return   MOS_STATUS
458     virtual MOS_STATUS SendChromaKey(
459         PRENDERHAL_INTERFACE        pRenderHal,
460         PMOS_COMMAND_BUFFER         pCmdBuffer,
461         PMHW_CHROMAKEY_PARAMS       pChromaKeyParams) = 0;
462 
463     //! \brief    Send Palette
464     //! \details  Send Palette
465     //! \param    PRENDERHAL_INTERFACE pRenderHal
466     //!           [in] Pointer to RenderHal Interface Structure
467     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
468     //!           [in] Pointer to Command Buffer
469     //! \return   MOS_STATUS
470     virtual MOS_STATUS SendPalette(
471         PRENDERHAL_INTERFACE        pRenderHal,
472         PMOS_COMMAND_BUFFER         pCmdBuffer,
473         PMHW_PALETTE_PARAMS         pPaletteLoadParams) = 0;
474 
475     //! \brief    Set L3Cache
476     //! \details  Set L3Cache
477     //! \param    PRENDERHAL_INTERFACE pRenderHal
478     //!           [in] Pointer to RenderHal Interface Structure
479     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
480     //!           [in] Pointer to Command Buffer
481     //! \return   MOS_STATUS
482     virtual MOS_STATUS SetL3Cache(
483         PRENDERHAL_INTERFACE        pRenderHal,
484         PMOS_COMMAND_BUFFER         pCmdBuffer) = 0;
485 
486     virtual PMHW_MI_MMIOREGISTERS GetMmioRegisters(
487         PRENDERHAL_INTERFACE        pRenderHal) = 0;
488 
489     virtual MOS_STATUS EnablePreemption(
490         PRENDERHAL_INTERFACE            pRenderHal,
491         PMOS_COMMAND_BUFFER             pCmdBuffer) = 0;
492 
493     virtual MOS_STATUS SendPredicationCommand(
494         PRENDERHAL_INTERFACE        pRenderHal,
495         PMOS_COMMAND_BUFFER         pCmdBuffer) = 0;
496 
497     //! \brief    Adds marker attributes in command buffer
498     //! \param    PRENDERHAL_INTERFACE pRenderHal
499     //!           [in] Pointer to RenderHal Interface Structure
500     //! \param    PMOS_COMMAND_BUFFER pcmdBuffer
501     //!           [in] Pointer to Command Buffer
502     //! \param    bool isRender
503     //!           [in] Flag of Render Engine
504     //! \return   MOS_STATUS
505     virtual MOS_STATUS SendMarkerCommand(
506         PRENDERHAL_INTERFACE    pRenderHal,
507         PMOS_COMMAND_BUFFER     cmdBuffer,
508         bool                    isRender) = 0;
509 
510     virtual MOS_STATUS AddMiPipeControl(
511         PRENDERHAL_INTERFACE    pRenderHal,
512         PMOS_COMMAND_BUFFER        pCmdBuffer,
513         MHW_PIPE_CONTROL_PARAMS*   params) = 0;
514 
515     //!
516     //! \brief    Adds MI_LOAD_REGISTER_IMM to the command buffer
517     //! \param    PRENDERHAL_INTERFACE pRenderHal
518     //!           [in] Pointer to RenderHal Interface Structure
519     //! \param    [in] pCmdBuffer
520     //!           Command buffer to which requested command is added
521     //! \param    [in] params
522     //!           Parameters used to populate the requested command
523     //! \return   MOS_STATUS
524     //!           MOS_STATUS_SUCCESS if success, else fail reason
525     //!
526     virtual MOS_STATUS AddMiLoadRegisterImmCmd(
527         PRENDERHAL_INTERFACE             pRenderHal,
528         PMOS_COMMAND_BUFFER              pCmdBuffer,
529         PMHW_MI_LOAD_REGISTER_IMM_PARAMS params) = 0;
530 
531     virtual MOS_STATUS SendGenericPrologCmd(
532         PRENDERHAL_INTERFACE        pRenderHal,
533         PMOS_COMMAND_BUFFER         pCmdBuffer,
534         PMHW_GENERIC_PROLOG_PARAMS  pParams,
535         MHW_MI_MMIOREGISTERS* pMmioReg = nullptr) = 0;
536 
537     //! \brief    Send Compute Walker
538     //! \details  Send Compute Walker
539     //! \param    PRENDERHAL_INTERFACE pRenderHal
540     //!           [in] Pointer to RenderHal Interface Structure
541     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
542     //!           [in] Pointer to Command Buffer
543     //! \param    PRENDERHAL_GPGPU_WALKER_PARAMS pGpGpuWalkerParams
544     //!           [in]    Pointer to GPGPU walker parameters
545     //! \return   MOS_STATUS
SendComputeWalker(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer,PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams)546     virtual MOS_STATUS SendComputeWalker(
547         PRENDERHAL_INTERFACE        pRenderHal,
548         PMOS_COMMAND_BUFFER         pCmdBuffer,
549         PMHW_GPGPU_WALKER_PARAMS    pGpGpuWalkerParams)
550     {
551         return MOS_STATUS_SUCCESS;
552     };
553 
554     //! \brief    Send To 3DState Binding Table Pool Alloc
555     //! \details  Send To 3DState Binding Table Pool Alloc
556     //! \param    PRENDERHAL_INTERFACE pRenderHal
557     //!           [in] Pointer to RenderHal Interface Structure
558     //! \param    PMOS_COMMAND_BUFFER pCmdBuffer
559     //!           [in] Pointer to Command Buffer
560     //! \return   MOS_STATUS
SendTo3DStateBindingTablePoolAlloc(PRENDERHAL_INTERFACE pRenderHal,PMOS_COMMAND_BUFFER pCmdBuffer)561     virtual MOS_STATUS SendTo3DStateBindingTablePoolAlloc(
562         PRENDERHAL_INTERFACE        pRenderHal,
563         PMOS_COMMAND_BUFFER         pCmdBuffer)
564     {
565         return MOS_STATUS_SUCCESS;
566     };
567 
IsBindlessHeapInUse(PRENDERHAL_INTERFACE pRenderHal)568     virtual bool IsBindlessHeapInUse(
569         PRENDERHAL_INTERFACE pRenderHal)
570     {
571         return false;
572     }
573 
574     //! \brief    Allocates scratch space buffer.
575     //! \details  On some new pltforms, a single scratch space buffer may be allocated and used for
576     //!           all threads.
577     //! \return   Single scratch space buffer is supported on specific platforms, so
578     //!           MOS_STATUS_UNIMPLEMENTED is returned in base class implementation.
AllocateScratchSpaceBuffer(uint32_t perThreadScratchSpace,RENDERHAL_INTERFACE * renderHal)579     virtual MOS_STATUS AllocateScratchSpaceBuffer(
580         uint32_t perThreadScratchSpace,
581         RENDERHAL_INTERFACE *renderHal) { return MOS_STATUS_UNIMPLEMENTED; }
582 
583     //! \brief    Frees scratch space buffer.
584     //! \details  On some new pltforms, a single scratch space buffer may be allocated and used for
585     //!           all threads.
586     //! \return   Single scratch space buffer is supported on specific platforms, so
587     //!           MOS_STATUS_UNIMPLEMENTED is returned in base class implementation.
FreeScratchSpaceBuffer(RENDERHAL_INTERFACE * renderHal)588     virtual MOS_STATUS FreeScratchSpaceBuffer(
589         RENDERHAL_INTERFACE *renderHal) { return MOS_STATUS_UNIMPLEMENTED; }
590 
591     //!
592     //! \brief      enable/disable the fusedEUDispatch flag in the VFE_PARAMS
593     //! \return     no return value
594     //!
SetFusedEUDispatch(bool enable)595     virtual void SetFusedEUDispatch(bool enable)
596     {
597         MOS_UNUSED(enable);
598 
599         return;
600     }
601 
602     virtual MOS_STATUS CreateMhwInterfaces(
603         PRENDERHAL_INTERFACE        pRenderHal,
604         PMOS_INTERFACE              pOsInterface) = 0;
605 
606     virtual MOS_STATUS On1stLevelBBStart(
607         PRENDERHAL_INTERFACE pRenderHal,
608         PMOS_COMMAND_BUFFER  pCmdBuffer,
609         PMOS_CONTEXT         pOsContext,
610         uint32_t             gpuContextHandle,
611         MHW_MI_MMIOREGISTERS *pMmioReg) = 0;
612 
613     virtual MOS_STATUS OnDispatch(
614         PRENDERHAL_INTERFACE pRenderHal,
615         PMOS_COMMAND_BUFFER  pCmdBuffer,
616         PMOS_INTERFACE       pOsInterface,
617         MHW_MI_MMIOREGISTERS *pMmioReg) = 0;
618 
619     virtual MOS_STATUS CreatePerfProfiler(
620         PRENDERHAL_INTERFACE pRenderHal) = 0;
621 
622     virtual MOS_STATUS DestroyPerfProfiler(
623         PRENDERHAL_INTERFACE pRenderHal) = 0;
624 
625     virtual MOS_STATUS AddPerfCollectStartCmd(
626         PRENDERHAL_INTERFACE pRenderHal,
627         MOS_INTERFACE        *osInterface,
628         MOS_COMMAND_BUFFER   *cmdBuffer) = 0;
629 
630     virtual MOS_STATUS StartPredicate(
631         PRENDERHAL_INTERFACE pRenderHal,
632         PMOS_COMMAND_BUFFER  cmdBuffer) = 0;
633 
634     virtual MOS_STATUS StopPredicate(
635         PRENDERHAL_INTERFACE pRenderHal,
636         PMOS_COMMAND_BUFFER  cmdBuffer) = 0;
637 
638     virtual MOS_STATUS AddPerfCollectEndCmd(
639         PRENDERHAL_INTERFACE pRenderHal,
640         PMOS_INTERFACE       pOsInterface,
641         MOS_COMMAND_BUFFER   *cmdBuffer) = 0;
642 
643     virtual MOS_STATUS AddMediaVfeCmd(
644         PRENDERHAL_INTERFACE    pRenderHal,
645         PMOS_COMMAND_BUFFER     pCmdBuffer,
646         MHW_VFE_PARAMS          *params) = 0;
647 
648     virtual MOS_STATUS AddMediaStateFlush(
649         PRENDERHAL_INTERFACE         pRenderHal,
650         PMOS_COMMAND_BUFFER          pCmdBuffer,
651         MHW_MEDIA_STATE_FLUSH_PARAM  *params) = 0;
652 
653     virtual MOS_STATUS AddMiBatchBufferEnd(
654         PRENDERHAL_INTERFACE         pRenderHal,
655         PMOS_COMMAND_BUFFER          pCmdBuffer,
656         PMHW_BATCH_BUFFER            batchBuffer) = 0;
657 
658     virtual MOS_STATUS AddMediaObjectWalkerCmd(
659         PRENDERHAL_INTERFACE         pRenderHal,
660         PMOS_COMMAND_BUFFER          pCmdBuffer,
661         PMHW_WALKER_PARAMS           params) = 0;
662 
663     virtual MOS_STATUS AddGpGpuWalkerStateCmd(
664         PRENDERHAL_INTERFACE        pRenderHal,
665         PMOS_COMMAND_BUFFER         pCmdBuffer,
666         PMHW_GPGPU_WALKER_PARAMS    params) = 0;
667 
668     virtual MOS_STATUS AllocateHeaps(
669         PRENDERHAL_INTERFACE     pRenderHal,
670         MHW_STATE_HEAP_SETTINGS  MhwStateHeapSettings) = 0;
671 
672     virtual PMHW_STATE_HEAP_INTERFACE GetStateHeapInterface(
673         PRENDERHAL_INTERFACE     pRenderHal) = 0;
674 
675     virtual MOS_STATUS DestoryMhwInterface(
676         PRENDERHAL_INTERFACE     pRenderHal) = 0;
677 
678     virtual MOS_STATUS AddMediaCurbeLoadCmd(
679         PRENDERHAL_INTERFACE         pRenderHal,
680         PMOS_COMMAND_BUFFER          pCmdBuffer,
681         PMHW_CURBE_LOAD_PARAMS       params) = 0;
682 
683     virtual MOS_STATUS AddMediaIDLoadCmd(
684         PRENDERHAL_INTERFACE         pRenderHal,
685         PMOS_COMMAND_BUFFER          pCmdBuffer,
686         PMHW_ID_LOAD_PARAMS          params) = 0;
687 
688     virtual bool IsPreemptionEnabled(
689         PRENDERHAL_INTERFACE     pRenderHal) = 0;
690 
691     virtual void GetSamplerResolutionAlignUnit(
692         PRENDERHAL_INTERFACE         pRenderHal,
693         bool                         isAVSSampler,
694         uint32_t                     &widthAlignUnit,
695         uint32_t                     &heightAlignUnit) = 0;
696 
697     virtual PMHW_RENDER_ENGINE_CAPS GetHwCaps(
698         PRENDERHAL_INTERFACE         pRenderHal) = 0;
699 
700     virtual std::shared_ptr<mhw::mi::Itf> GetMhwMiItf() = 0;
701 
702 };
703 
704 #endif // __RENDERHAL_PLATFORM_INTERFACE_H__
705