1 /*===================== begin_copyright_notice ==================================
2 
3 * Copyright (c) 2024, Intel Corporation
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 * OTHER DEALINGS IN THE SOFTWARE.
22 
23 ======================= end_copyright_notice ==================================*/
24 //!
25 //! \file     media_interfaces_lnl.h
26 //! \brief    All interfaces used for LNL that require factory creation
27 //!
28 
29 #ifndef __MEDIA_INTERFACES_XE2_LPM_H__
30 #define __MEDIA_INTERFACES_XE2_LPM_H__
31 
32 #include "media_interfaces_mhw_next.h"
33 #include "media_interfaces_codechal_next.h"
34 #include "media_interfaces_vphal.h"
35 #include "media_interfaces_renderhal.h"
36 #include "media_interfaces_hwinfo_device.h"
37 #include "media_interfaces_mcpy_next.h"
38 
39 #include "mhw_cp_interface.h"
40 #include "mhw_state_heap_xe2_hpg.h"
41 #include "mhw_vdbox_hcp_impl_xe2_lpm.h"
42 
43 #include "mhw_vdbox_mfx_impl_xe2_lpm.h"
44 
45 #include "mhw_vdbox_vvcp_impl_xe2_lpm.h"
46 #include "mhw_vdbox_avp_impl_xe2_lpm.h"
47 
48 #include "mhw_vdbox_huc_impl_xe2_lpm.h"
49 
50 #include "mhw_vdbox_vdenc_impl_xe2_lpm.h"
51 
52 #ifdef _MEDIA_RESERVED
53 #include "codec_hw_xe2_lpm_base.h"
54 #endif
55 
56 #ifdef _AVC_DECODE_SUPPORTED
57 #include "decode_avc_pipeline_adapter_xe2_lpm_base.h"
58 #endif
59 
60 #ifdef _HEVC_DECODE_SUPPORTED
61 #include "decode_hevc_pipeline_adapter_xe2_lpm_base.h"
62 #endif
63 
64 #ifdef _JPEG_DECODE_SUPPORTED
65 #include "decode_jpeg_pipeline_adapter_xe2_lpm_base.h"
66 #endif
67 
68 #ifdef _MPEG2_DECODE_SUPPORTED
69 #include "decode_mpeg2_pipeline_adapter_xe2_lpm_base.h"
70 #endif
71 
72 #ifdef _VP9_DECODE_SUPPORTED
73 #include "decode_vp9_pipeline_adapter_xe2_lpm_base.h"
74 #endif
75 
76 #ifdef _VP8_DECODE_SUPPORTED
77 #include "decode_vp8_pipeline_adapter_xe2_lpm_base.h"
78 #endif
79 
80 #ifdef _AV1_DECODE_SUPPORTED
81 #include "decode_av1_pipeline_adapter_xe2_lpm_base.h"
82 #endif
83 
84 #ifdef _VVC_DECODE_SUPPORTED
85 #include "decode_vvc_pipeline_adapter_xe2_lpm.h"
86 #endif
87 
88 #ifdef _JPEG_ENCODE_SUPPORTED
89 #include "encode_jpeg_pipeline_adapter.h"
90 #endif
91 
92 #ifdef _AVC_ENCODE_VDENC_SUPPORTED
93 #include "encode_avc_vdenc_pipeline_adapter_xe2_lpm.h"
94 #endif
95 
96 #ifdef _HEVC_ENCODE_VDENC_SUPPORTED
97 #include "encode_hevc_vdenc_pipeline_adapter_xe2_lpm_base.h"
98 #endif
99 
100 #ifdef _AV1_ENCODE_VDENC_SUPPORTED
101 #include "encode_av1_vdenc_pipeline_adapter_xe2_lpm.h"
102 #endif
103 
104 #ifdef _MEDIA_RESERVED
105 #ifdef _VP9_ENCODE_VDENC_SUPPORTED
106 #include "encode_vp9_vdenc_pipeline_adapter_xe2_lpm.h"
107 #endif
108 #endif
109 
110 #include "renderhal_xe2_hpg_next.h"
111 #include "decode_scalability_singlepipe_next.h"
112 #include "decode_scalability_multipipe_next.h"
113 
114 #include "media_copy_xe2_lpm.h"
115 
116 class MhwInterfacesLnl_Next : public MhwInterfacesNext
117 {
118 public:
119 
120     using Cp        = MhwCpInterface;
121     using StateHeap = MHW_STATE_HEAP_INTERFACE_XE2_HPG;
122 
123     virtual MOS_STATUS Initialize(
124         CreateParams   params,
125         PMOS_INTERFACE osInterface);
126 
127     //!
128     //! \brief    Destroys all created MHW interfaces
129     //! \details  If the HAL creation fails, this is used for cleanup
130     //!
131     virtual void Destroy();
132 MEDIA_CLASS_DEFINE_END(MhwInterfacesLnl_Next)
133 };
134 
135 class CodechalDecodeInterfacesXe2_Lpm
136 {
137 public:
138 #ifdef _AVC_DECODE_SUPPORTED
139     using Avc = DecodeAvcPipelineAdapterXe2_Lpm_Base;
140 #endif
141 #ifdef _HEVC_DECODE_SUPPORTED
142     using Hevc = DecodeHevcPipelineAdapterXe2_Lpm_Base;
143 #endif
144 #ifdef _JPEG_DECODE_SUPPORTED
145     using Jpeg = DecodeJpegPipelineAdapterXe2_Lpm_Base;
146 #endif
147 #ifdef _MPEG2_DECODE_SUPPORTED
148     using Mpeg2 = DecodeMpeg2PipelineAdapterXe2_Lpm_Base;
149 #endif
150 #ifdef _VP9_DECODE_SUPPORTED
151     using Vp9 = DecodeVp9PipelineAdapterXe2_Lpm_Base;
152 #endif
153 #ifdef _VP8_DECODE_SUPPORTED
154     using Vp8 = DecodeVp8PipelineAdapterXe2_Lpm_Base;
155 #endif
156 #ifdef _AV1_DECODE_SUPPORTED
157     using Av1 = DecodeAv1PipelineAdapterXe2_Lpm_Base;
158 #endif
159 #ifdef _VVC_DECODE_SUPPORTED
160     using Vvc = DecodeVvcPipelineAdapterXe2Lpm;
161 #endif
162 
163 MEDIA_CLASS_DEFINE_END(CodechalDecodeInterfacesXe2_Lpm)
164 };
165 
166 class CodechalInterfacesXe2_Lpm : public CodechalDeviceNext
167 {
168 public:
169     using Decode = CodechalDecodeInterfacesXe2_Lpm;
170     using Hw     = CodechalHwInterfaceXe2_Lpm_Base;
171 
172     MOS_STATUS Initialize(
173         void *         standardInfo,
174         void *         settings,
175         MhwInterfacesNext *mhwInterfaces,
176         PMOS_INTERFACE osInterface) override;
177 
178 MEDIA_CLASS_DEFINE_END(CodechalInterfacesXe2_Lpm)
179 };
180 
181 class VphalInterfacesXe2_Lpm : public VphalDevice
182 {
183 public:
184     MOS_STATUS Initialize(
185         PMOS_INTERFACE osInterface,
186         bool           bInitVphalState,
187         MOS_STATUS *   eStatus,
188         bool           clearViewMode = false);
189 
190     MOS_STATUS CreateVpPlatformInterface(
191         PMOS_INTERFACE           osInterface,
192         MOS_STATUS *             eStatus);
193 
194 private:
195     void InitPlatformKernelBinary(
196         vp::VpPlatformInterface  *&vpPlatformInterface);
197 
198 MEDIA_CLASS_DEFINE_END(VphalInterfacesXe2_Lpm)
199 };
200 
201 class RenderHalInterfacesXe2_Lpc : public RenderHalDevice
202 {
203 protected:
204     using XRenderHal = XRenderHal_Interface_Xe2_Hpg_Next;
205     MOS_STATUS Initialize();
206 
207 MEDIA_CLASS_DEFINE_END(RenderHalInterfacesXe2_Lpc)
208 };
209 
210 class MediaInterfacesHwInfoDeviceXe2_Lpm : public MediaInterfacesHwInfoDevice
211 {
212 public:
213     virtual MOS_STATUS Initialize(PLATFORM platform) override;
214 
215 MEDIA_CLASS_DEFINE_END(MediaInterfacesHwInfoDeviceXe2_Lpm)
216 };
217 
218 class McpyDeviceXe2_Lpm : public McpyDeviceNext
219 {
220 public:
221 using Mcpy = MediaCopyStateXe2_Lpm;
222 MOS_STATUS Initialize(
223     PMOS_INTERFACE     osInterface,
224     MhwInterfacesNext *mhwInterfaces);
225 
226 MEDIA_CLASS_DEFINE_END(McpyDeviceXe2_Lpm)
227 };
228 #endif  // __MEDIA_INTERFACES_XE2_LPM_H__
229