xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/common/os/mos_context.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2017-2020, 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     mos_context.h
24 //! \brief    Container for parameters shared across different GPU contexts of the same device instance
25 //!
26 
27 #ifndef __MOS_CONTEXT_H__
28 #define __MOS_CONTEXT_H__
29 
30 #include "mos_os.h"
31 
32 class OsContext
33 {
34 public:
35     enum MOS_S3D_CHANNEL
36     {
37         MOS_S3D_NONE,        //!< Not in 3D mode
38         MOS_S3D_LEFT,        //!< Left eye channel
39         MOS_S3D_RIGHT        //!< Right eye channel
40     };
41 
42     struct MOS_PLANE_OFFSET
43     {
44         int    iSurfaceOffset;              //!< Plane surface offset
45         int    iXOffset;                    //!< Tile X offset
46         int    iYOffset;                    //!< Tile Y offset
47         int    iLockSurfaceOffset;          //!< Offset in Locked Surface
48     };
49 
50 protected:
51     //!
52     //! \brief Constructor for the OsContext
53     //!
OsContext()54     OsContext(){};
55 
56 public:
57     //!
58     //! \brief Destructor for the OsContext
59     //!
~OsContext()60     virtual ~OsContext(){};
61 
62     //!
63     //! \brief  Initialzie the OS Context Object
64     //! \return MOS_STATUS_SUCCESS on success case, MOS error status on fail cases
65     //!
66     virtual MOS_STATUS Init(MOS_CONTEXT* osDriverContext) = 0;
67 
68 private:
69     //!
70     //! \brief  Destory the OS Context Object, internal function, called by cleanup
71     //!
72     virtual void Destroy() = 0;
73 
74 public:
75     //!
76     //! \brief  Static entrypoint, get the OS Context Object
77     //! \return the os specific object for OS context
78     //!
79     static class OsContext* GetOsContextObject();
80 
81     //!
82     //! \brief  Clean up the smartptr
83     //!
84     void CleanUp();
85 
86     //!
87     //! \brief  Get the adapter info
88     //! \return value of m_adapterInfo
89     //!
GetAdapterInfo()90     ADAPTER_INFO *GetAdapterInfo() { return m_pAdapterInfo; };
91 
92     //!
93     //! \brief  Get the skuTable
94     //! \return The active SKU Table
95     //!
GetSkuTable()96     MEDIA_FEATURE_TABLE *GetSkuTable() { return &m_skuTable; };
97 
98     //!
99     //! \brief  Get the waTable
100     //! \return The active WA table
101     //!
GetWaTable()102     MEDIA_WA_TABLE *GetWaTable() { return &m_waTable; };
103 
104     //!
105     //! \brief  Get the platform information string
106     //! \return value of m_platformInfo
107     //!
GetPlatformInfo()108     PLATFORM GetPlatformInfo() { return m_platformInfo; };
109 
110     //!
111     //! \brief  Get the gtSystemInfo string
112     //! \return value of m_gtSystemInfo
113     //!
GetGtSysInfo()114     MEDIA_SYSTEM_INFO *GetGtSysInfo() { return &m_gtSystemInfo; };
115 
116     //!
117     //! \brief  Get MemDecompState
118     //! \return pointer to m_mediaMemDecompState
119     //!
GetMemDecompState()120     void*  GetMemDecompState() { return m_mediaMemDecompState; };
121 
122     //!
123     //! \brief  Check the platform is Atom or not
124     //! \return true on Atom platform, false on none Atom platform
125     //!
IsAtomSoc()126     bool IsAtomSoc() { return m_isAtomSOC; };
127 
128     //!
129     //! \brief  Set the OS Context valid flag
130     //! \param   [in] isOsContextValid
131     //!          Flag to indicate if the os context is valid.
132     //!
SetOsContextValid(bool isOsContextValid)133     void SetOsContextValid(bool isOsContextValid) { m_osContextValid = isOsContextValid; };
134 
135     //!
136     //! \brief  Return the OS Context valid flag
137     //! \return true if the OS context is valid, false if not valid
138     //!
GetOsContextValid()139     bool GetOsContextValid() { return m_osContextValid; };
140 
141     //!
142     //! \brief  Set slice count to shared memory and KMD
143     //! \param  [in,out] pSliceCount
144     //!         pointer to the slice count. Input the slice count for current
145     //!         context, output the ruling slice count shared by all contexts.
146     //!
SetSliceCount(uint32_t * pSliceCount)147     virtual void SetSliceCount(uint32_t *pSliceCount) { MOS_UNUSED(pSliceCount); };
148 
149     //! \brief   Flag to indicate if implicit tile setting is needed
150     bool m_mediaTile64 = false;
151 
152     //! \brief   Flag to indicate if NoGfxMemory needed
153     bool m_noGfxMemoryNeeded  = false;
154 
155 protected:
156     //! \brief  Platform string including product family, chipset family, etc
157     PLATFORM                        m_platformInfo = {};
158 
159     //! \brief  adapter info
160     PADAPTER_INFO                   m_pAdapterInfo = nullptr;
161 
162     //! \brief  sku table
163     MEDIA_FEATURE_TABLE             m_skuTable = {};
164 
165      //! \brief  wa table
166     MEDIA_WA_TABLE                  m_waTable = {};
167 
168      //! \brief  GT system information, like EU counter, thread count, etc.
169     MEDIA_SYSTEM_INFO               m_gtSystemInfo = {};
170 
171     //! \brief  Whether the processor is Atom
172     bool                            m_isAtomSOC = false;
173 
174     //! \brief  Internal media state for memory decompression
175     void*                           m_mediaMemDecompState = nullptr;
176 
177     //! \brief  Flag to mark whether the os context is valid
178     bool                            m_osContextValid =  false;
179 
180     //! \brief  Whether or not need deallocation on exit
181     bool                            m_deallocateOnExit = false;
182 
183     //! \brief  need KMD to track the media frame or not
184     bool                            m_enableKmdMediaFrameTracking = false;
185 
186     //! \brief  need KMD to assist the command buffer parsing
187     bool                            m_noParsingAssistanceInKmd = false;
188 
189     //! \brief  how many bytes of the Nal Unit need be included
190     uint32_t                        m_numNalUnitBytesIncluded = 0;
191 
192     //! \brief   For GPU Reset Statistics, rest counter
193     uint32_t                        m_gpuResetCount = 0;
194 
195     //! \brief   For GPU Reset Statistics, the active batch
196     uint32_t                        m_gpuActiveBatch = 0;
197 
198     //! \brief   For GPU Reset Statistics, the pending batch
199     uint32_t                        m_gpuPendingBatch = 0;
200 
201     //! \brief   For Resource addressing, whether patch list mode is active
202     bool                            m_usesPatchList = false;
203 
204     //! \brief   For Resource addressing, whether GPU address mode is active
205     bool                            m_usesGfxAddress = false;
206 
207     //! \brief   For limited GPU VA resource can not be mapped during creation
208     bool                            m_mapOnCreate = false;
209 
210     //! \brief  check whether use inline codec status update or seperate BB
211     bool                            m_inlineCodecStatusUpdate = false;
212 
213     //! \brief   Component info
214     MOS_COMPONENT                   m_component = COMPONENT_UNKNOWN;
215 };
216 #endif // #ifndef __MOS_CONTEXT_H__
217