xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/GlobalInfo/GmmClientContext.cpp (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2017 Intel Corporation
3*35ffd701SAndroid Build Coastguard Worker 
4*35ffd701SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
5*35ffd701SAndroid Build Coastguard Worker copy of this software and associated documentation files(the "Software"),
6*35ffd701SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation
7*35ffd701SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*35ffd701SAndroid Build Coastguard Worker and / or sell copies of the Software, and to permit persons to whom the
9*35ffd701SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions:
10*35ffd701SAndroid Build Coastguard Worker 
11*35ffd701SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included
12*35ffd701SAndroid Build Coastguard Worker in all copies or substantial portions of the Software.
13*35ffd701SAndroid Build Coastguard Worker 
14*35ffd701SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*35ffd701SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*35ffd701SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*35ffd701SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*35ffd701SAndroid Build Coastguard Worker OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*35ffd701SAndroid Build Coastguard Worker ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*35ffd701SAndroid Build Coastguard Worker OTHER DEALINGS IN THE SOFTWARE.
21*35ffd701SAndroid Build Coastguard Worker ============================================================================*/
22*35ffd701SAndroid Build Coastguard Worker 
23*35ffd701SAndroid Build Coastguard Worker #include "Internal/Common/GmmLibInc.h"
24*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmClientContext.h"
25*35ffd701SAndroid Build Coastguard Worker 
26*35ffd701SAndroid Build Coastguard Worker #if !__GMM_KMD__ && LHDM
27*35ffd701SAndroid Build Coastguard Worker #include "..\..\inc\common\gfxEscape.h"
28*35ffd701SAndroid Build Coastguard Worker #include "..\..\..\miniport\LHDM\inc\gmmEscape.h"
29*35ffd701SAndroid Build Coastguard Worker #include "Internal\Windows\GmmResourceInfoWinInt.h"
30*35ffd701SAndroid Build Coastguard Worker #include "../TranslationTable/GmmUmdTranslationTable.h"
31*35ffd701SAndroid Build Coastguard Worker #endif
32*35ffd701SAndroid Build Coastguard Worker 
33*35ffd701SAndroid Build Coastguard Worker extern GMM_MA_LIB_CONTEXT *pGmmMALibContext;
34*35ffd701SAndroid Build Coastguard Worker 
35*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
36*35ffd701SAndroid Build Coastguard Worker /// Overloaded Constructor to zero initialize the GmmLib::GmmClientContext object
37*35ffd701SAndroid Build Coastguard Worker /// This Construtor takes pointer to GmmLibCOntext as input argumnet and initiaizes
38*35ffd701SAndroid Build Coastguard Worker /// ClientContext's GmmLibContext with this value
39*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmClientContext(GMM_CLIENT ClientType,Context * pLibContext)40*35ffd701SAndroid Build Coastguard Worker GmmLib::GmmClientContext::GmmClientContext(GMM_CLIENT ClientType, Context *pLibContext)
41*35ffd701SAndroid Build Coastguard Worker     : ClientType(),
42*35ffd701SAndroid Build Coastguard Worker       pUmdAdapter(),
43*35ffd701SAndroid Build Coastguard Worker       pGmmUmdContext(),
44*35ffd701SAndroid Build Coastguard Worker       DeviceCB(),
45*35ffd701SAndroid Build Coastguard Worker       IsDeviceCbReceived(0)
46*35ffd701SAndroid Build Coastguard Worker {
47*35ffd701SAndroid Build Coastguard Worker     this->ClientType     = ClientType;
48*35ffd701SAndroid Build Coastguard Worker     this->pGmmLibContext = pLibContext;
49*35ffd701SAndroid Build Coastguard Worker }
50*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
51*35ffd701SAndroid Build Coastguard Worker /// Destructor to free  GmmLib::GmmClientContext object memory
52*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
~GmmClientContext()53*35ffd701SAndroid Build Coastguard Worker GmmLib::GmmClientContext::~GmmClientContext()
54*35ffd701SAndroid Build Coastguard Worker {
55*35ffd701SAndroid Build Coastguard Worker     pGmmLibContext = NULL;
56*35ffd701SAndroid Build Coastguard Worker }
57*35ffd701SAndroid Build Coastguard Worker 
58*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
59*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning
60*35ffd701SAndroid Build Coastguard Worker /// MEMORY_OBJECT_CONTROL_STATE for a given Resource Usage Type
61*35ffd701SAndroid Build Coastguard Worker ///
62*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_INFO       : Pointer to ResInfo object
63*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_USAGE_TYPE : Resource Usage Type
64*35ffd701SAndroid Build Coastguard Worker /// @return     MEMORY_OBJECT_CONTROL_STATE for the resource of "Usage" type.
65*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetMemoryObject(GMM_RESOURCE_INFO * pResInfo,GMM_RESOURCE_USAGE_TYPE Usage)66*35ffd701SAndroid Build Coastguard Worker MEMORY_OBJECT_CONTROL_STATE GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetMemoryObject(GMM_RESOURCE_INFO *pResInfo, GMM_RESOURCE_USAGE_TYPE Usage)
67*35ffd701SAndroid Build Coastguard Worker {
68*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetMemoryObject(pResInfo, Usage);
69*35ffd701SAndroid Build Coastguard Worker }
70*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
71*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning
72*35ffd701SAndroid Build Coastguard Worker /// GMM_PTE_CACHE_CONTROL_BITS for a given Resource Usage Type
73*35ffd701SAndroid Build Coastguard Worker ///
74*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_USAGE_TYPE : Resource Usage Type
75*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_PTE_CACHE_CONTROL_BITS for the resource of "Usage" type.
76*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetPteType(GMM_RESOURCE_USAGE_TYPE Usage)77*35ffd701SAndroid Build Coastguard Worker GMM_PTE_CACHE_CONTROL_BITS GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetPteType(GMM_RESOURCE_USAGE_TYPE Usage)
78*35ffd701SAndroid Build Coastguard Worker {
79*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetPteType(Usage);
80*35ffd701SAndroid Build Coastguard Worker }
81*35ffd701SAndroid Build Coastguard Worker 
82*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
83*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning
84*35ffd701SAndroid Build Coastguard Worker /// MEMORY_OBJECT_CONTROL_STATE for a given ResInfo Object
85*35ffd701SAndroid Build Coastguard Worker ///
86*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_INFO       : Pointer to ResInfo object
87*35ffd701SAndroid Build Coastguard Worker /// @return     MEMORY_OBJECT_CONTROL_STATE for the ResInfo object
88*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetOriginalMemoryObject(GMM_RESOURCE_INFO * pResInfo)89*35ffd701SAndroid Build Coastguard Worker MEMORY_OBJECT_CONTROL_STATE GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetOriginalMemoryObject(GMM_RESOURCE_INFO *pResInfo)
90*35ffd701SAndroid Build Coastguard Worker {
91*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetOriginalMemoryObject(pResInfo);
92*35ffd701SAndroid Build Coastguard Worker }
93*35ffd701SAndroid Build Coastguard Worker 
94*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
95*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning
96*35ffd701SAndroid Build Coastguard Worker /// PAT Index for a given Resource Usage Type
97*35ffd701SAndroid Build Coastguard Worker ///
98*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_INFO       : Pointer to ResInfo object
99*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_USAGE_TYPE : Resource Usage Type
100*35ffd701SAndroid Build Coastguard Worker /// @return     PAT index for the resource of "Usage" type.
101*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetPATIndex(GMM_RESOURCE_INFO * pResInfo,GMM_RESOURCE_USAGE_TYPE Usage,bool * pCompressionEnable,bool IsCpuCacheable)102*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetPATIndex(GMM_RESOURCE_INFO *pResInfo, GMM_RESOURCE_USAGE_TYPE Usage, bool *pCompressionEnable, bool IsCpuCacheable)
103*35ffd701SAndroid Build Coastguard Worker {
104*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetPATIndex(pResInfo, Usage, pCompressionEnable, IsCpuCacheable);
105*35ffd701SAndroid Build Coastguard Worker }
106*35ffd701SAndroid Build Coastguard Worker 
107*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
108*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for checking if PTE is cached  for a
109*35ffd701SAndroid Build Coastguard Worker /// given resource usage type
110*35ffd701SAndroid Build Coastguard Worker ///
111*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_USAGE_TYPE : Resource Usage Type
112*35ffd701SAndroid Build Coastguard Worker /// @return     True if PTE cached, else false
113*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyIsUsagePTECached(GMM_RESOURCE_USAGE_TYPE Usage)114*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::CachePolicyIsUsagePTECached(GMM_RESOURCE_USAGE_TYPE Usage)
115*35ffd701SAndroid Build Coastguard Worker {
116*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyObj()->CachePolicyIsUsagePTECached(Usage);
117*35ffd701SAndroid Build Coastguard Worker }
118*35ffd701SAndroid Build Coastguard Worker 
119*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
120*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class to return L1 Cache Control on DG2 for a
121*35ffd701SAndroid Build Coastguard Worker /// given resource usage type
122*35ffd701SAndroid Build Coastguard Worker ///
123*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_RESOURCE_USAGE_TYPE : Resource Usage Type
124*35ffd701SAndroid Build Coastguard Worker /// @return     Value of L1 Cache control
125*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetSurfaceStateL1CachePolicy(GMM_RESOURCE_USAGE_TYPE Usage)126*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::GetSurfaceStateL1CachePolicy(GMM_RESOURCE_USAGE_TYPE Usage)
127*35ffd701SAndroid Build Coastguard Worker {
128*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyObj()->GetSurfaceStateL1CachePolicy(Usage);
129*35ffd701SAndroid Build Coastguard Worker }
130*35ffd701SAndroid Build Coastguard Worker 
131*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
132*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class to return Swizzle Descriptor
133*35ffd701SAndroid Build Coastguard Worker /// given Swizzle name , ResType and bpe
134*35ffd701SAndroid Build Coastguard Worker ///
135*35ffd701SAndroid Build Coastguard Worker /// @param[in] EXTERNAL_SWIZZLE_NAME
136*35ffd701SAndroid Build Coastguard Worker /// @param[in] EXTERNAL_RES_TYPE
137*35ffd701SAndroid Build Coastguard Worker /// @param[in] bpe
138*35ffd701SAndroid Build Coastguard Worker /// @return  SWIZZLE_DESCRIPTOR*
139*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetSwizzleDesc(EXTERNAL_SWIZZLE_NAME ExternalSwizzleName,EXTERNAL_RES_TYPE ResType,uint8_t bpe,bool isStdSwizzle)140*35ffd701SAndroid Build Coastguard Worker const SWIZZLE_DESCRIPTOR *GMM_STDCALL GmmLib::GmmClientContext::GetSwizzleDesc(EXTERNAL_SWIZZLE_NAME ExternalSwizzleName, EXTERNAL_RES_TYPE ResType, uint8_t bpe, bool isStdSwizzle)
141*35ffd701SAndroid Build Coastguard Worker {
142*35ffd701SAndroid Build Coastguard Worker     const SWIZZLE_DESCRIPTOR *pSwizzleDesc;
143*35ffd701SAndroid Build Coastguard Worker     pSwizzleDesc = NULL;
144*35ffd701SAndroid Build Coastguard Worker     /*#define SWITCH_SWIZZLE(Layout, res, bpe) \
145*35ffd701SAndroid Build Coastguard Worker         pSwizzleDesc = &Layout##_##res##bpe;*/
146*35ffd701SAndroid Build Coastguard Worker 
147*35ffd701SAndroid Build Coastguard Worker #define CASE_BPP(Layout, Tile, msaa, xD, bpe)       \
148*35ffd701SAndroid Build Coastguard Worker     case bpe:                                       \
149*35ffd701SAndroid Build Coastguard Worker         pSwizzleDesc = &Layout##_##Tile##msaa##bpe; \
150*35ffd701SAndroid Build Coastguard Worker         break;
151*35ffd701SAndroid Build Coastguard Worker 
152*35ffd701SAndroid Build Coastguard Worker #define SWITCH_SWIZZLE(Layout, Tile, msaa, bpe) \
153*35ffd701SAndroid Build Coastguard Worker     switch (bpe)                                \
154*35ffd701SAndroid Build Coastguard Worker     {                                           \
155*35ffd701SAndroid Build Coastguard Worker         CASE_BPP(Layout, Tile, msaa, xD, 8);    \
156*35ffd701SAndroid Build Coastguard Worker         CASE_BPP(Layout, Tile, msaa, xD, 16);   \
157*35ffd701SAndroid Build Coastguard Worker         CASE_BPP(Layout, Tile, msaa, xD, 32);   \
158*35ffd701SAndroid Build Coastguard Worker         CASE_BPP(Layout, Tile, msaa, xD, 64);   \
159*35ffd701SAndroid Build Coastguard Worker         CASE_BPP(Layout, Tile, msaa, xD, 128);  \
160*35ffd701SAndroid Build Coastguard Worker     }
161*35ffd701SAndroid Build Coastguard Worker #define SWIZZLE_DESC(pGmmLibContext, ExternalSwizzleName, ResType, bpe, pSwizzleDesc) \
162*35ffd701SAndroid Build Coastguard Worker     switch (ExternalSwizzleName)                                                      \
163*35ffd701SAndroid Build Coastguard Worker     {                                                                                 \
164*35ffd701SAndroid Build Coastguard Worker     case TILEX:                                                                       \
165*35ffd701SAndroid Build Coastguard Worker         pSwizzleDesc = &INTEL_TILE_X;                                                 \
166*35ffd701SAndroid Build Coastguard Worker         break;                                                                        \
167*35ffd701SAndroid Build Coastguard Worker     case TILEY:                                                                       \
168*35ffd701SAndroid Build Coastguard Worker         if (GmmGetSkuTable(pGmmLibContext)->FtrTileY)                                 \
169*35ffd701SAndroid Build Coastguard Worker             pSwizzleDesc = &INTEL_TILE_Y;                                             \
170*35ffd701SAndroid Build Coastguard Worker         else                                                                          \
171*35ffd701SAndroid Build Coastguard Worker             pSwizzleDesc = &INTEL_TILE_4;                                             \
172*35ffd701SAndroid Build Coastguard Worker         break;                                                                        \
173*35ffd701SAndroid Build Coastguard Worker     case TILEYS:                                                                      \
174*35ffd701SAndroid Build Coastguard Worker         if (GmmGetSkuTable(pGmmLibContext)->FtrTileY || isStdSwizzle)                 \
175*35ffd701SAndroid Build Coastguard Worker         {                                                                             \
176*35ffd701SAndroid Build Coastguard Worker             switch (ResType)                                                          \
177*35ffd701SAndroid Build Coastguard Worker             {                                                                         \
178*35ffd701SAndroid Build Coastguard Worker             case 0:                                                                   \
179*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_YS, , , bpe);                               \
180*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
181*35ffd701SAndroid Build Coastguard Worker             case 1:                                                                   \
182*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_YS, 3D_, , bpe);                            \
183*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
184*35ffd701SAndroid Build Coastguard Worker             case 2:                                                                   \
185*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_YS, , MSAA2_, bpe);                         \
186*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
187*35ffd701SAndroid Build Coastguard Worker             case 3:                                                                   \
188*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_YS, , MSAA4_, bpe);                         \
189*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
190*35ffd701SAndroid Build Coastguard Worker             case 4:                                                                   \
191*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_YS, , MSAA8_, bpe);                         \
192*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
193*35ffd701SAndroid Build Coastguard Worker             case 5:                                                                   \
194*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_YS, , MSAA16_, bpe);                        \
195*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
196*35ffd701SAndroid Build Coastguard Worker             }                                                                         \
197*35ffd701SAndroid Build Coastguard Worker         }                                                                             \
198*35ffd701SAndroid Build Coastguard Worker         else if (GmmGetSkuTable(pGmmLibContext)->FtrXe2PlusTiling)                    \
199*35ffd701SAndroid Build Coastguard Worker         {                                                                             \
200*35ffd701SAndroid Build Coastguard Worker             switch (ResType)                                                          \
201*35ffd701SAndroid Build Coastguard Worker             {                                                                         \
202*35ffd701SAndroid Build Coastguard Worker             case 0:                                                                   \
203*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64, , , bpe);                               \
204*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
205*35ffd701SAndroid Build Coastguard Worker             case 1:                                                                   \
206*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64_V2, 3D_, , bpe);                         \
207*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
208*35ffd701SAndroid Build Coastguard Worker             case 2:                                                                   \
209*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64_V2, , MSAA2_, bpe);                      \
210*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
211*35ffd701SAndroid Build Coastguard Worker             case 3:                                                                   \
212*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64_V2, , MSAA4_, bpe);                      \
213*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
214*35ffd701SAndroid Build Coastguard Worker             case 4:                                                                   \
215*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64_V2, , MSAA8_, bpe);                      \
216*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
217*35ffd701SAndroid Build Coastguard Worker             case 5:                                                                   \
218*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64_V2, , MSAA16_, bpe);                     \
219*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
220*35ffd701SAndroid Build Coastguard Worker             }                                                                         \
221*35ffd701SAndroid Build Coastguard Worker         }                                                                             \
222*35ffd701SAndroid Build Coastguard Worker         else                                                                          \
223*35ffd701SAndroid Build Coastguard Worker         {                                                                             \
224*35ffd701SAndroid Build Coastguard Worker             switch (ResType)                                                          \
225*35ffd701SAndroid Build Coastguard Worker             {                                                                         \
226*35ffd701SAndroid Build Coastguard Worker             case 0:                                                                   \
227*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64, , , bpe);                               \
228*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
229*35ffd701SAndroid Build Coastguard Worker             case 1:                                                                   \
230*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64, 3D_, , bpe);                            \
231*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
232*35ffd701SAndroid Build Coastguard Worker             case 2:                                                                   \
233*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64, , MSAA2_, bpe);                         \
234*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
235*35ffd701SAndroid Build Coastguard Worker             case 3:                                                                   \
236*35ffd701SAndroid Build Coastguard Worker             case 4:                                                                   \
237*35ffd701SAndroid Build Coastguard Worker             case 5:                                                                   \
238*35ffd701SAndroid Build Coastguard Worker                 SWITCH_SWIZZLE(INTEL_TILE_64, , MSAA_, bpe);                          \
239*35ffd701SAndroid Build Coastguard Worker                 break;                                                                \
240*35ffd701SAndroid Build Coastguard Worker             }                                                                         \
241*35ffd701SAndroid Build Coastguard Worker         }                                                                             \
242*35ffd701SAndroid Build Coastguard Worker     case TILEW:                                                                       \
243*35ffd701SAndroid Build Coastguard Worker     case TILEYF:                                                                      \
244*35ffd701SAndroid Build Coastguard Worker     default: break;                                                                   \
245*35ffd701SAndroid Build Coastguard Worker     }                                                                                 \
246*35ffd701SAndroid Build Coastguard Worker 
247*35ffd701SAndroid Build Coastguard Worker     SWIZZLE_DESC(pGmmLibContext, ExternalSwizzleName, ResType, bpe, pSwizzleDesc);
248*35ffd701SAndroid Build Coastguard Worker     return pSwizzleDesc;
249*35ffd701SAndroid Build Coastguard Worker }
250*35ffd701SAndroid Build Coastguard Worker 
251*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
252*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning Max MOCS index used
253*35ffd701SAndroid Build Coastguard Worker /// on a platform
254*35ffd701SAndroid Build Coastguard Worker ///
255*35ffd701SAndroid Build Coastguard Worker /// @return     Max MOCS Index
256*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetMaxMocsIndex()257*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetMaxMocsIndex()
258*35ffd701SAndroid Build Coastguard Worker {
259*35ffd701SAndroid Build Coastguard Worker     GMM_CACHE_POLICY *          pCachePolicy = pGmmLibContext->GetCachePolicyObj();
260*35ffd701SAndroid Build Coastguard Worker     GmmLib::GmmGen9CachePolicy *ptr          = static_cast<GmmLib::GmmGen9CachePolicy *>(pCachePolicy);
261*35ffd701SAndroid Build Coastguard Worker     return ptr->CurrentMaxMocsIndex;
262*35ffd701SAndroid Build Coastguard Worker }
263*35ffd701SAndroid Build Coastguard Worker 
264*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
265*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning Max L1 HDC MOCS index used
266*35ffd701SAndroid Build Coastguard Worker /// on a platform
267*35ffd701SAndroid Build Coastguard Worker ///
268*35ffd701SAndroid Build Coastguard Worker /// @return     Max L1 HDC MOCS Index
269*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetMaxL1HdcMocsIndex()270*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetMaxL1HdcMocsIndex()
271*35ffd701SAndroid Build Coastguard Worker {
272*35ffd701SAndroid Build Coastguard Worker     GMM_CACHE_POLICY *          pCachePolicy = pGmmLibContext->GetCachePolicyObj();
273*35ffd701SAndroid Build Coastguard Worker     GmmLib::GmmGen9CachePolicy *ptr          = static_cast<GmmLib::GmmGen9CachePolicy *>(pCachePolicy);
274*35ffd701SAndroid Build Coastguard Worker     return ptr->CurrentMaxL1HdcMocsIndex;
275*35ffd701SAndroid Build Coastguard Worker }
276*35ffd701SAndroid Build Coastguard Worker 
277*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
278*35ffd701SAndroid Build Coastguard Worker /// Returns count of current Special MOCS values for MOCS Table programming at GMM boot
279*35ffd701SAndroid Build Coastguard Worker ///
280*35ffd701SAndroid Build Coastguard Worker /// @param[in]  none:
281*35ffd701SAndroid Build Coastguard Worker /// @return     uint32_t  max special mocs index needed to program
282*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CachePolicyGetMaxSpecialMocsIndex(void)283*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmLib::GmmClientContext::CachePolicyGetMaxSpecialMocsIndex(void)
284*35ffd701SAndroid Build Coastguard Worker {
285*35ffd701SAndroid Build Coastguard Worker     GMM_CACHE_POLICY *pCachePolicy = pGmmLibContext->GetCachePolicyObj();
286*35ffd701SAndroid Build Coastguard Worker     return pCachePolicy->GetMaxSpecialMocsIndex();
287*35ffd701SAndroid Build Coastguard Worker }
288*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
289*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning GMM_CACHE_POLICY_ELEMENT
290*35ffd701SAndroid Build Coastguard Worker /// Table defiend for a platform
291*35ffd701SAndroid Build Coastguard Worker ///
292*35ffd701SAndroid Build Coastguard Worker /// @return     Const GMM_CACHE_POLICY_ELEMENT Table
293*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetCachePolicyUsage()294*35ffd701SAndroid Build Coastguard Worker GMM_CACHE_POLICY_ELEMENT *GMM_STDCALL GmmLib::GmmClientContext::GetCachePolicyUsage()
295*35ffd701SAndroid Build Coastguard Worker {
296*35ffd701SAndroid Build Coastguard Worker     return (pGmmLibContext->GetCachePolicyUsage());
297*35ffd701SAndroid Build Coastguard Worker }
298*35ffd701SAndroid Build Coastguard Worker 
299*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
300*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for populating GMM_CACHE_SIZES
301*35ffd701SAndroid Build Coastguard Worker /// available on a platform
302*35ffd701SAndroid Build Coastguard Worker ///
303*35ffd701SAndroid Build Coastguard Worker /// @return     In/Out GMM_CACHE_SIZES Populated Caches sizes
304*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetCacheSizes(GMM_CACHE_SIZES * pCacheSizes)305*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::GetCacheSizes(GMM_CACHE_SIZES *pCacheSizes)
306*35ffd701SAndroid Build Coastguard Worker {
307*35ffd701SAndroid Build Coastguard Worker     return GmmGetCacheSizes(pGmmLibContext, pCacheSizes);
308*35ffd701SAndroid Build Coastguard Worker }
309*35ffd701SAndroid Build Coastguard Worker 
310*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
311*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning GMM_CACHE_POLICY_ELEMENT
312*35ffd701SAndroid Build Coastguard Worker /// for a given Resource Usage Type
313*35ffd701SAndroid Build Coastguard Worker ///
314*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_CACHE_POLICY_ELEMENT
315*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetCachePolicyElement(GMM_RESOURCE_USAGE_TYPE Usage)316*35ffd701SAndroid Build Coastguard Worker GMM_CACHE_POLICY_ELEMENT GMM_STDCALL GmmLib::GmmClientContext::GetCachePolicyElement(GMM_RESOURCE_USAGE_TYPE Usage)
317*35ffd701SAndroid Build Coastguard Worker {
318*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyElement(Usage);
319*35ffd701SAndroid Build Coastguard Worker }
320*35ffd701SAndroid Build Coastguard Worker 
321*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
322*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning GMM_CACHE_POLICY_TBL_ELEMENT
323*35ffd701SAndroid Build Coastguard Worker /// for a given Mocs Index
324*35ffd701SAndroid Build Coastguard Worker ///
325*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_CACHE_POLICY_TBL_ELEMENT
326*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetCachePolicyTlbElement(uint32_t MocsIdx)327*35ffd701SAndroid Build Coastguard Worker GMM_CACHE_POLICY_TBL_ELEMENT GMM_STDCALL GmmLib::GmmClientContext::GetCachePolicyTlbElement(uint32_t MocsIdx)
328*35ffd701SAndroid Build Coastguard Worker {
329*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetCachePolicyTlbElement()[MocsIdx];
330*35ffd701SAndroid Build Coastguard Worker }
331*35ffd701SAndroid Build Coastguard Worker 
332*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
333*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning GMM_PLATFORM_INFO data
334*35ffd701SAndroid Build Coastguard Worker ///
335*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_PLATFORM_INFO&
336*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetPlatformInfo()337*35ffd701SAndroid Build Coastguard Worker GMM_PLATFORM_INFO &GMM_STDCALL GmmLib::GmmClientContext::GetPlatformInfo()
338*35ffd701SAndroid Build Coastguard Worker {
339*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetPlatformInfo();
340*35ffd701SAndroid Build Coastguard Worker }
341*35ffd701SAndroid Build Coastguard Worker 
342*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
343*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for getting Alignment info
344*35ffd701SAndroid Build Coastguard Worker ///
345*35ffd701SAndroid Build Coastguard Worker /// @return     void
346*35ffd701SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////
GetExtendedTextureAlign(uint32_t Mode,ALIGNMENT & UnitAlign)347*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::GetExtendedTextureAlign(uint32_t Mode, ALIGNMENT &UnitAlign)
348*35ffd701SAndroid Build Coastguard Worker {
349*35ffd701SAndroid Build Coastguard Worker     ALIGNMENT AlignInfo;
350*35ffd701SAndroid Build Coastguard Worker     pGmmLibContext->GetPlatformInfoObj()->ApplyExtendedTexAlign(Mode, AlignInfo);
351*35ffd701SAndroid Build Coastguard Worker     UnitAlign = AlignInfo;
352*35ffd701SAndroid Build Coastguard Worker }
353*35ffd701SAndroid Build Coastguard Worker 
354*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
355*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning SKU_FEATURE_TABLE data
356*35ffd701SAndroid Build Coastguard Worker ///
357*35ffd701SAndroid Build Coastguard Worker /// @return     SKU_FEATURE_TABLE&
358*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetSkuTable()359*35ffd701SAndroid Build Coastguard Worker const SKU_FEATURE_TABLE &GMM_STDCALL GmmLib::GmmClientContext::GetSkuTable()
360*35ffd701SAndroid Build Coastguard Worker {
361*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetSkuTable();
362*35ffd701SAndroid Build Coastguard Worker }
363*35ffd701SAndroid Build Coastguard Worker 
364*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
365*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning whether the given Resource
366*35ffd701SAndroid Build Coastguard Worker /// format is Planar
367*35ffd701SAndroid Build Coastguard Worker ///
368*35ffd701SAndroid Build Coastguard Worker /// @return     True if the Given format is planar
369*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
IsPlanar(GMM_RESOURCE_FORMAT Format)370*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::IsPlanar(GMM_RESOURCE_FORMAT Format)
371*35ffd701SAndroid Build Coastguard Worker {
372*35ffd701SAndroid Build Coastguard Worker     return GmmIsPlanar(Format);
373*35ffd701SAndroid Build Coastguard Worker }
374*35ffd701SAndroid Build Coastguard Worker 
375*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
376*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning whether the given Resource
377*35ffd701SAndroid Build Coastguard Worker /// format is P0xx
378*35ffd701SAndroid Build Coastguard Worker ///
379*35ffd701SAndroid Build Coastguard Worker /// @return     True if the Given format is P0xx
380*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
IsP0xx(GMM_RESOURCE_FORMAT Format)381*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::IsP0xx(GMM_RESOURCE_FORMAT Format)
382*35ffd701SAndroid Build Coastguard Worker {
383*35ffd701SAndroid Build Coastguard Worker     return GmmIsP0xx(Format);
384*35ffd701SAndroid Build Coastguard Worker }
385*35ffd701SAndroid Build Coastguard Worker 
386*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
387*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning whether the given Resource
388*35ffd701SAndroid Build Coastguard Worker /// format is UV Packed plane
389*35ffd701SAndroid Build Coastguard Worker ///
390*35ffd701SAndroid Build Coastguard Worker /// @return     True if the Given format is UV packed
391*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
IsUVPacked(GMM_RESOURCE_FORMAT Format)392*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::IsUVPacked(GMM_RESOURCE_FORMAT Format)
393*35ffd701SAndroid Build Coastguard Worker {
394*35ffd701SAndroid Build Coastguard Worker     return GmmIsUVPacked(Format);
395*35ffd701SAndroid Build Coastguard Worker }
396*35ffd701SAndroid Build Coastguard Worker 
397*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
398*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning whether the given Resource
399*35ffd701SAndroid Build Coastguard Worker /// format is Compressed
400*35ffd701SAndroid Build Coastguard Worker ///
401*35ffd701SAndroid Build Coastguard Worker /// @return     True if the Given format is Compressed
402*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
IsCompressed(GMM_RESOURCE_FORMAT Format)403*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::IsCompressed(GMM_RESOURCE_FORMAT Format)
404*35ffd701SAndroid Build Coastguard Worker {
405*35ffd701SAndroid Build Coastguard Worker     return (Format > GMM_FORMAT_INVALID) &&
406*35ffd701SAndroid Build Coastguard Worker            (Format < GMM_RESOURCE_FORMATS) &&
407*35ffd701SAndroid Build Coastguard Worker            pGmmLibContext->GetPlatformInfo().FormatTable[Format].Compressed;
408*35ffd701SAndroid Build Coastguard Worker }
409*35ffd701SAndroid Build Coastguard Worker 
410*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
411*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning whether the given Resource
412*35ffd701SAndroid Build Coastguard Worker /// format is YUV Packed plane
413*35ffd701SAndroid Build Coastguard Worker ///
414*35ffd701SAndroid Build Coastguard Worker /// @return     True if the Given format is YUV packed
415*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
IsYUVPacked(GMM_RESOURCE_FORMAT Format)416*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::IsYUVPacked(GMM_RESOURCE_FORMAT Format)
417*35ffd701SAndroid Build Coastguard Worker {
418*35ffd701SAndroid Build Coastguard Worker     return GmmIsYUVPacked(Format);
419*35ffd701SAndroid Build Coastguard Worker }
420*35ffd701SAndroid Build Coastguard Worker 
421*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
422*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning its GMM_SURFACESTATE_FORMAT
423*35ffd701SAndroid Build Coastguard Worker /// for the given equivalent GMM_RESOURCE_FORMAT type
424*35ffd701SAndroid Build Coastguard Worker ///
425*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_SURFACESTATE_FORMAT for the given format type
426*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetSurfaceStateFormat(GMM_RESOURCE_FORMAT Format)427*35ffd701SAndroid Build Coastguard Worker GMM_SURFACESTATE_FORMAT GMM_STDCALL GmmLib::GmmClientContext::GetSurfaceStateFormat(GMM_RESOURCE_FORMAT Format)
428*35ffd701SAndroid Build Coastguard Worker {
429*35ffd701SAndroid Build Coastguard Worker     // ToDo: Remove the definition of GmmGetSurfaceStateFormat(Format)
430*35ffd701SAndroid Build Coastguard Worker     return ((Format > GMM_FORMAT_INVALID) &&
431*35ffd701SAndroid Build Coastguard Worker             (Format < GMM_RESOURCE_FORMATS)) ?
432*35ffd701SAndroid Build Coastguard Worker            pGmmLibContext->GetPlatformInfo().FormatTable[Format].SurfaceStateFormat :
433*35ffd701SAndroid Build Coastguard Worker            GMM_SURFACESTATE_FORMAT_INVALID;
434*35ffd701SAndroid Build Coastguard Worker }
435*35ffd701SAndroid Build Coastguard Worker 
436*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
437*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning
438*35ffd701SAndroid Build Coastguard Worker /// RENDER_SURFACE_STATE::CompressionFormat
439*35ffd701SAndroid Build Coastguard Worker ///
440*35ffd701SAndroid Build Coastguard Worker /// @return     uint8_t
441*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetSurfaceStateCompressionFormat(GMM_RESOURCE_FORMAT Format)442*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::GetSurfaceStateCompressionFormat(GMM_RESOURCE_FORMAT Format)
443*35ffd701SAndroid Build Coastguard Worker {
444*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERT((Format > GMM_FORMAT_INVALID) && (Format < GMM_RESOURCE_FORMATS));
445*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetPlatformInfo().FormatTable[Format].CompressionFormat.AuxL1eFormat;
446*35ffd701SAndroid Build Coastguard Worker 
447*35ffd701SAndroid Build Coastguard Worker }
448*35ffd701SAndroid Build Coastguard Worker 
449*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
450*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning
451*35ffd701SAndroid Build Coastguard Worker /// MEDIA_SURFACE_STATE::CompressionFormat
452*35ffd701SAndroid Build Coastguard Worker ///
453*35ffd701SAndroid Build Coastguard Worker /// @return     uint8_t
454*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetMediaSurfaceStateCompressionFormat(GMM_RESOURCE_FORMAT Format)455*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmLib::GmmClientContext::GetMediaSurfaceStateCompressionFormat(GMM_RESOURCE_FORMAT Format)
456*35ffd701SAndroid Build Coastguard Worker {
457*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERT((Format > GMM_FORMAT_INVALID) && (Format < GMM_RESOURCE_FORMATS));
458*35ffd701SAndroid Build Coastguard Worker 
459*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetPlatformInfoObj()->OverrideCompressionFormat(Format, (uint8_t)0x1);
460*35ffd701SAndroid Build Coastguard Worker }
461*35ffd701SAndroid Build Coastguard Worker 
462*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
463*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for returning E2E compression format
464*35ffd701SAndroid Build Coastguard Worker ///
465*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_E2ECOMP_FORMAT
466*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetLosslessCompressionType(GMM_RESOURCE_FORMAT Format)467*35ffd701SAndroid Build Coastguard Worker GMM_E2ECOMP_FORMAT GMM_STDCALL GmmLib::GmmClientContext::GetLosslessCompressionType(GMM_RESOURCE_FORMAT Format)
468*35ffd701SAndroid Build Coastguard Worker {
469*35ffd701SAndroid Build Coastguard Worker     // ToDo: Remove the definition of GmmGetLosslessCompressionType(Format)
470*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERT((Format > GMM_FORMAT_INVALID) && (Format < GMM_RESOURCE_FORMATS));
471*35ffd701SAndroid Build Coastguard Worker 
472*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetPlatformInfo().FormatTable[Format].CompressionFormat.AuxL1eFormat;
473*35ffd701SAndroid Build Coastguard Worker }
474*35ffd701SAndroid Build Coastguard Worker 
475*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
476*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class to return InternalGpuVaMax value
477*35ffd701SAndroid Build Coastguard Worker /// stored in pGmmLibContext
478*35ffd701SAndroid Build Coastguard Worker ///
479*35ffd701SAndroid Build Coastguard Worker /// @return    GMM_SUCCESS
480*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GetInternalGpuVaRangeLimit()481*35ffd701SAndroid Build Coastguard Worker uint64_t GMM_STDCALL GmmLib::GmmClientContext::GetInternalGpuVaRangeLimit()
482*35ffd701SAndroid Build Coastguard Worker {
483*35ffd701SAndroid Build Coastguard Worker     return pGmmLibContext->GetInternalGpuVaRangeLimit();
484*35ffd701SAndroid Build Coastguard Worker }
485*35ffd701SAndroid Build Coastguard Worker 
486*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
487*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of Custiom ResourceInfo Object .
488*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GmmResourceInfoCommon::Create()
489*35ffd701SAndroid Build Coastguard Worker ///
490*35ffd701SAndroid Build Coastguard Worker /// @param[in] pCreateParams: Flags which specify what sort of resource to create
491*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GmmResourceInfo class.
492*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreateCustomResInfoObject(GMM_RESCREATE_CUSTOM_PARAMS * pCreateParams)493*35ffd701SAndroid Build Coastguard Worker GMM_RESOURCE_INFO *GMM_STDCALL GmmLib::GmmClientContext::CreateCustomResInfoObject(GMM_RESCREATE_CUSTOM_PARAMS *pCreateParams)
494*35ffd701SAndroid Build Coastguard Worker {
495*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *pRes             = NULL;
496*35ffd701SAndroid Build Coastguard Worker     GmmClientContext * pClientContextIn = NULL;
497*35ffd701SAndroid Build Coastguard Worker 
498*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = this;
499*35ffd701SAndroid Build Coastguard Worker 
500*35ffd701SAndroid Build Coastguard Worker     if((pRes = new GMM_RESOURCE_INFO(pClientContextIn)) == NULL)
501*35ffd701SAndroid Build Coastguard Worker     {
502*35ffd701SAndroid Build Coastguard Worker         GMM_ASSERTDPF(0, "Allocation failed!");
503*35ffd701SAndroid Build Coastguard Worker         goto ERROR_CASE;
504*35ffd701SAndroid Build Coastguard Worker     }
505*35ffd701SAndroid Build Coastguard Worker 
506*35ffd701SAndroid Build Coastguard Worker     if(pRes->CreateCustomRes(*pGmmLibContext, *pCreateParams) != GMM_SUCCESS)
507*35ffd701SAndroid Build Coastguard Worker     {
508*35ffd701SAndroid Build Coastguard Worker         goto ERROR_CASE;
509*35ffd701SAndroid Build Coastguard Worker     }
510*35ffd701SAndroid Build Coastguard Worker 
511*35ffd701SAndroid Build Coastguard Worker     return (pRes);
512*35ffd701SAndroid Build Coastguard Worker 
513*35ffd701SAndroid Build Coastguard Worker ERROR_CASE:
514*35ffd701SAndroid Build Coastguard Worker     if(pRes)
515*35ffd701SAndroid Build Coastguard Worker     {
516*35ffd701SAndroid Build Coastguard Worker         DestroyResInfoObject(pRes);
517*35ffd701SAndroid Build Coastguard Worker     }
518*35ffd701SAndroid Build Coastguard Worker 
519*35ffd701SAndroid Build Coastguard Worker     return (NULL);
520*35ffd701SAndroid Build Coastguard Worker }
521*35ffd701SAndroid Build Coastguard Worker 
522*35ffd701SAndroid Build Coastguard Worker #ifndef __GMM_KMD__
523*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
524*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of Custiom ResourceInfo Object .
525*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GmmResourceInfoCommon::CreateCustomResInfoObject_2()
526*35ffd701SAndroid Build Coastguard Worker ///
527*35ffd701SAndroid Build Coastguard Worker /// @param[in] pCreateParams: Flags which specify what sort of resource to create
528*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GmmResourceInfo class.
529*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreateCustomResInfoObject_2(GMM_RESCREATE_CUSTOM_PARAMS_2 * pCreateParams)530*35ffd701SAndroid Build Coastguard Worker GMM_RESOURCE_INFO *GMM_STDCALL GmmLib::GmmClientContext::CreateCustomResInfoObject_2(GMM_RESCREATE_CUSTOM_PARAMS_2 *pCreateParams)
531*35ffd701SAndroid Build Coastguard Worker {
532*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *pRes             = NULL;
533*35ffd701SAndroid Build Coastguard Worker     GmmClientContext * pClientContextIn = NULL;
534*35ffd701SAndroid Build Coastguard Worker 
535*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = this;
536*35ffd701SAndroid Build Coastguard Worker 
537*35ffd701SAndroid Build Coastguard Worker     if((pRes = new GMM_RESOURCE_INFO(pClientContextIn)) == NULL)
538*35ffd701SAndroid Build Coastguard Worker     {
539*35ffd701SAndroid Build Coastguard Worker         GMM_ASSERTDPF(0, "Allocation failed!");
540*35ffd701SAndroid Build Coastguard Worker         goto ERROR_CASE;
541*35ffd701SAndroid Build Coastguard Worker     }
542*35ffd701SAndroid Build Coastguard Worker 
543*35ffd701SAndroid Build Coastguard Worker     if(pRes->CreateCustomRes_2(*pGmmLibContext, *pCreateParams) != GMM_SUCCESS)
544*35ffd701SAndroid Build Coastguard Worker     {
545*35ffd701SAndroid Build Coastguard Worker         goto ERROR_CASE;
546*35ffd701SAndroid Build Coastguard Worker     }
547*35ffd701SAndroid Build Coastguard Worker 
548*35ffd701SAndroid Build Coastguard Worker     return (pRes);
549*35ffd701SAndroid Build Coastguard Worker 
550*35ffd701SAndroid Build Coastguard Worker ERROR_CASE:
551*35ffd701SAndroid Build Coastguard Worker     if(pRes)
552*35ffd701SAndroid Build Coastguard Worker     {
553*35ffd701SAndroid Build Coastguard Worker         DestroyResInfoObject(pRes);
554*35ffd701SAndroid Build Coastguard Worker     }
555*35ffd701SAndroid Build Coastguard Worker 
556*35ffd701SAndroid Build Coastguard Worker     return (NULL);
557*35ffd701SAndroid Build Coastguard Worker }
558*35ffd701SAndroid Build Coastguard Worker #endif
559*35ffd701SAndroid Build Coastguard Worker 
560*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
561*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of ResourceInfo Object .
562*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GmmResourceInfoCommon::Create()
563*35ffd701SAndroid Build Coastguard Worker ///
564*35ffd701SAndroid Build Coastguard Worker /// @param[in] pCreateParams: Flags which specify what sort of resource to create
565*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GmmResourceInfo class.
566*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreateResInfoObject(GMM_RESCREATE_PARAMS * pCreateParams)567*35ffd701SAndroid Build Coastguard Worker GMM_RESOURCE_INFO *GMM_STDCALL GmmLib::GmmClientContext::CreateResInfoObject(GMM_RESCREATE_PARAMS *pCreateParams)
568*35ffd701SAndroid Build Coastguard Worker {
569*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *pRes             = NULL;
570*35ffd701SAndroid Build Coastguard Worker     GmmClientContext * pClientContextIn = NULL;
571*35ffd701SAndroid Build Coastguard Worker 
572*35ffd701SAndroid Build Coastguard Worker #if(!defined(GMM_UNIFIED_LIB))
573*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = pGmmLibContext->pGmmGlobalClientContext;
574*35ffd701SAndroid Build Coastguard Worker #else
575*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = this;
576*35ffd701SAndroid Build Coastguard Worker #endif
577*35ffd701SAndroid Build Coastguard Worker 
578*35ffd701SAndroid Build Coastguard Worker     GMM_DPF_ENTER;
579*35ffd701SAndroid Build Coastguard Worker 
580*35ffd701SAndroid Build Coastguard Worker     // GMM_RESOURCE_INFO...
581*35ffd701SAndroid Build Coastguard Worker     if(pCreateParams->pPreallocatedResInfo)
582*35ffd701SAndroid Build Coastguard Worker     {
583*35ffd701SAndroid Build Coastguard Worker         pRes = new(pCreateParams->pPreallocatedResInfo) GmmLib::GmmResourceInfo(pClientContextIn); // Use preallocated memory as a class
584*35ffd701SAndroid Build Coastguard Worker         pCreateParams->Flags.Info.__PreallocatedResInfo =
585*35ffd701SAndroid Build Coastguard Worker         pRes->GetResFlags().Info.__PreallocatedResInfo = 1; // Set both in case we can die before copying over the flags.
586*35ffd701SAndroid Build Coastguard Worker     }
587*35ffd701SAndroid Build Coastguard Worker     else
588*35ffd701SAndroid Build Coastguard Worker     {
589*35ffd701SAndroid Build Coastguard Worker         if((pRes = new GMM_RESOURCE_INFO(pClientContextIn)) == NULL)
590*35ffd701SAndroid Build Coastguard Worker         {
591*35ffd701SAndroid Build Coastguard Worker             GMM_ASSERTDPF(0, "Allocation failed!");
592*35ffd701SAndroid Build Coastguard Worker             goto ERROR_CASE;
593*35ffd701SAndroid Build Coastguard Worker         }
594*35ffd701SAndroid Build Coastguard Worker     }
595*35ffd701SAndroid Build Coastguard Worker 
596*35ffd701SAndroid Build Coastguard Worker     if(pRes->Create(*pGmmLibContext, *pCreateParams) != GMM_SUCCESS)
597*35ffd701SAndroid Build Coastguard Worker     {
598*35ffd701SAndroid Build Coastguard Worker         goto ERROR_CASE;
599*35ffd701SAndroid Build Coastguard Worker     }
600*35ffd701SAndroid Build Coastguard Worker 
601*35ffd701SAndroid Build Coastguard Worker     GMM_DPF_EXIT;
602*35ffd701SAndroid Build Coastguard Worker 
603*35ffd701SAndroid Build Coastguard Worker     return (pRes);
604*35ffd701SAndroid Build Coastguard Worker 
605*35ffd701SAndroid Build Coastguard Worker ERROR_CASE:
606*35ffd701SAndroid Build Coastguard Worker     if(pRes)
607*35ffd701SAndroid Build Coastguard Worker     {
608*35ffd701SAndroid Build Coastguard Worker         DestroyResInfoObject(pRes);
609*35ffd701SAndroid Build Coastguard Worker     }
610*35ffd701SAndroid Build Coastguard Worker 
611*35ffd701SAndroid Build Coastguard Worker     return (NULL);
612*35ffd701SAndroid Build Coastguard Worker }
613*35ffd701SAndroid Build Coastguard Worker 
614*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
615*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of ResourceInfo Object from
616*35ffd701SAndroid Build Coastguard Worker /// already created Src ResInfo object
617*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GmmResourceInfoCommon::Create()
618*35ffd701SAndroid Build Coastguard Worker ///
619*35ffd701SAndroid Build Coastguard Worker /// @param[in] pSrcRes: Existing ResInfoObj
620*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GmmResourceInfo class.
621*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CopyResInfoObject(GMM_RESOURCE_INFO * pSrcRes)622*35ffd701SAndroid Build Coastguard Worker GMM_RESOURCE_INFO *GMM_STDCALL GmmLib::GmmClientContext::CopyResInfoObject(GMM_RESOURCE_INFO *pSrcRes)
623*35ffd701SAndroid Build Coastguard Worker {
624*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *pResCopy         = NULL;
625*35ffd701SAndroid Build Coastguard Worker     GmmClientContext * pClientContextIn = NULL;
626*35ffd701SAndroid Build Coastguard Worker 
627*35ffd701SAndroid Build Coastguard Worker #if(!defined(GMM_UNIFIED_LIB))
628*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = pGmmLibContext->pGmmGlobalClientContext;
629*35ffd701SAndroid Build Coastguard Worker #else
630*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = this;
631*35ffd701SAndroid Build Coastguard Worker #endif
632*35ffd701SAndroid Build Coastguard Worker 
633*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERTPTR(pSrcRes, NULL);
634*35ffd701SAndroid Build Coastguard Worker 
635*35ffd701SAndroid Build Coastguard Worker     pResCopy = new GMM_RESOURCE_INFO(pClientContextIn);
636*35ffd701SAndroid Build Coastguard Worker     if(!pResCopy)
637*35ffd701SAndroid Build Coastguard Worker     {
638*35ffd701SAndroid Build Coastguard Worker         GMM_ASSERTDPF(0, "Allocation failed.");
639*35ffd701SAndroid Build Coastguard Worker         return NULL;
640*35ffd701SAndroid Build Coastguard Worker     }
641*35ffd701SAndroid Build Coastguard Worker 
642*35ffd701SAndroid Build Coastguard Worker     // Set the GmmLibContext for newly created DestResInfo object
643*35ffd701SAndroid Build Coastguard Worker     pResCopy->SetGmmLibContext(pGmmLibContext);
644*35ffd701SAndroid Build Coastguard Worker 
645*35ffd701SAndroid Build Coastguard Worker     *pResCopy = *pSrcRes;
646*35ffd701SAndroid Build Coastguard Worker 
647*35ffd701SAndroid Build Coastguard Worker     // Set the client type to the client for which this resinfo is created
648*35ffd701SAndroid Build Coastguard Worker     pResCopy->SetClientType(GetClientType());
649*35ffd701SAndroid Build Coastguard Worker 
650*35ffd701SAndroid Build Coastguard Worker     // We are allocating new class, flag must be false to avoid leak at DestroyResource
651*35ffd701SAndroid Build Coastguard Worker     pResCopy->GetResFlags().Info.__PreallocatedResInfo = 0;
652*35ffd701SAndroid Build Coastguard Worker 
653*35ffd701SAndroid Build Coastguard Worker     return (pResCopy);
654*35ffd701SAndroid Build Coastguard Worker }
655*35ffd701SAndroid Build Coastguard Worker 
656*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
657*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for copy of ResourceInfo Object from
658*35ffd701SAndroid Build Coastguard Worker /// already created Src ResInfo object
659*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GmmResourceInfoCommon::Create()
660*35ffd701SAndroid Build Coastguard Worker ///
661*35ffd701SAndroid Build Coastguard Worker /// @param[in] pDst: Pointer to memory when pSrc will be copied
662*35ffd701SAndroid Build Coastguard Worker /// @param[in] pSrc: Pointer to GmmResourceInfo class that needs to be copied
663*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
ResMemcpy(void * pDst,void * pSrc)664*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::ResMemcpy(void *pDst, void *pSrc)
665*35ffd701SAndroid Build Coastguard Worker {
666*35ffd701SAndroid Build Coastguard Worker     GmmClientContext *pClientContextIn = NULL;
667*35ffd701SAndroid Build Coastguard Worker 
668*35ffd701SAndroid Build Coastguard Worker #if(!defined(GMM_UNIFIED_LIB))
669*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = pGmmLibContext->pGmmGlobalClientContext;
670*35ffd701SAndroid Build Coastguard Worker #else
671*35ffd701SAndroid Build Coastguard Worker     pClientContextIn = this;
672*35ffd701SAndroid Build Coastguard Worker #endif
673*35ffd701SAndroid Build Coastguard Worker 
674*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *pResSrc = reinterpret_cast<GMM_RESOURCE_INFO *>(pSrc);
675*35ffd701SAndroid Build Coastguard Worker     // Init memory correctly, in case the pointer is a raw memory pointer
676*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *pResDst = new(pDst) GMM_RESOURCE_INFO(pClientContextIn);
677*35ffd701SAndroid Build Coastguard Worker 
678*35ffd701SAndroid Build Coastguard Worker     // Set the GmmLibContext for newly created DestResInfo object
679*35ffd701SAndroid Build Coastguard Worker     pResDst->SetGmmLibContext(pGmmLibContext);
680*35ffd701SAndroid Build Coastguard Worker 
681*35ffd701SAndroid Build Coastguard Worker     *pResDst = *pResSrc;
682*35ffd701SAndroid Build Coastguard Worker 
683*35ffd701SAndroid Build Coastguard Worker     // Set the client type to the client for which this resinfo is created
684*35ffd701SAndroid Build Coastguard Worker     pResDst->SetClientType(GetClientType());
685*35ffd701SAndroid Build Coastguard Worker }
686*35ffd701SAndroid Build Coastguard Worker 
687*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
688*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for Destroying ResInfoObject
689*35ffd701SAndroid Build Coastguard Worker ///
690*35ffd701SAndroid Build Coastguard Worker /// @param[in] pResInfo: Pointer to ResInfoObject
691*35ffd701SAndroid Build Coastguard Worker /// @return     void.
692*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
DestroyResInfoObject(GMM_RESOURCE_INFO * pResInfo)693*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::DestroyResInfoObject(GMM_RESOURCE_INFO *pResInfo)
694*35ffd701SAndroid Build Coastguard Worker {
695*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERTPTR(pResInfo, VOIDRETURN);
696*35ffd701SAndroid Build Coastguard Worker 
697*35ffd701SAndroid Build Coastguard Worker     if(pResInfo->GetResFlags().Info.__PreallocatedResInfo)
698*35ffd701SAndroid Build Coastguard Worker     {
699*35ffd701SAndroid Build Coastguard Worker         *pResInfo = GmmLib::GmmResourceInfo();
700*35ffd701SAndroid Build Coastguard Worker     }
701*35ffd701SAndroid Build Coastguard Worker     else
702*35ffd701SAndroid Build Coastguard Worker     {
703*35ffd701SAndroid Build Coastguard Worker         delete pResInfo;
704*35ffd701SAndroid Build Coastguard Worker         pResInfo = NULL;
705*35ffd701SAndroid Build Coastguard Worker     }
706*35ffd701SAndroid Build Coastguard Worker }
707*35ffd701SAndroid Build Coastguard Worker 
708*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
709*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of PAgeTableMgr Object .
710*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GMM_PAGETABLE_MGR::GMM_PAGETABLE_MGR
711*35ffd701SAndroid Build Coastguard Worker ///
712*35ffd701SAndroid Build Coastguard Worker /// @param[in] TTFags
713*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GMM_PAGETABLE_MGR class.
714*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreatePageTblMgrObject(uint32_t TTFlags)715*35ffd701SAndroid Build Coastguard Worker GMM_PAGETABLE_MGR* GMM_STDCALL GmmLib::GmmClientContext::CreatePageTblMgrObject(uint32_t TTFlags)
716*35ffd701SAndroid Build Coastguard Worker {
717*35ffd701SAndroid Build Coastguard Worker     if (!IsDeviceCbReceived)
718*35ffd701SAndroid Build Coastguard Worker     {
719*35ffd701SAndroid Build Coastguard Worker         GMM_ASSERTDPF(0, "Device_callbacks not set");
720*35ffd701SAndroid Build Coastguard Worker         return NULL;
721*35ffd701SAndroid Build Coastguard Worker     }
722*35ffd701SAndroid Build Coastguard Worker 
723*35ffd701SAndroid Build Coastguard Worker     return CreatePageTblMgrObject(&DeviceCB, TTFlags);
724*35ffd701SAndroid Build Coastguard Worker }
725*35ffd701SAndroid Build Coastguard Worker 
726*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
727*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of PAgeTableMgr Object .
728*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GMM_PAGETABLE_MGR::GMM_PAGETABLE_MGR
729*35ffd701SAndroid Build Coastguard Worker ///
730*35ffd701SAndroid Build Coastguard Worker /// @param[in] pDevCb: Pointer to GMM_DEVICE_CALLBACKS_INT
731*35ffd701SAndroid Build Coastguard Worker /// @param[in] TTFags
732*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GMM_PAGETABLE_MGR class.
733*35ffd701SAndroid Build Coastguard Worker //  move the code to new overloaded the API and remove this API once all clients are moved to new API.
734*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreatePageTblMgrObject(GMM_DEVICE_CALLBACKS_INT * pDevCb,uint32_t TTFlags)735*35ffd701SAndroid Build Coastguard Worker GMM_PAGETABLE_MGR* GMM_STDCALL GmmLib::GmmClientContext::CreatePageTblMgrObject(GMM_DEVICE_CALLBACKS_INT* pDevCb,
736*35ffd701SAndroid Build Coastguard Worker                                                                                 uint32_t TTFlags)
737*35ffd701SAndroid Build Coastguard Worker {
738*35ffd701SAndroid Build Coastguard Worker     GMM_PAGETABLE_MGR* pPageTableMgr = NULL;
739*35ffd701SAndroid Build Coastguard Worker 
740*35ffd701SAndroid Build Coastguard Worker     pPageTableMgr = new GMM_PAGETABLE_MGR(pDevCb, TTFlags, this);
741*35ffd701SAndroid Build Coastguard Worker 
742*35ffd701SAndroid Build Coastguard Worker     return pPageTableMgr;
743*35ffd701SAndroid Build Coastguard Worker }
744*35ffd701SAndroid Build Coastguard Worker 
745*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
746*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for destroy of PageTableMgr Object .
747*35ffd701SAndroid Build Coastguard Worker ///
748*35ffd701SAndroid Build Coastguard Worker /// @param[in] pPageTableMgr: Pointer to GMM_PAGETABLE_MGR
749*35ffd701SAndroid Build Coastguard Worker /// @return     void.
750*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
DestroyPageTblMgrObject(GMM_PAGETABLE_MGR * pPageTableMgr)751*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::DestroyPageTblMgrObject(GMM_PAGETABLE_MGR* pPageTableMgr)
752*35ffd701SAndroid Build Coastguard Worker {
753*35ffd701SAndroid Build Coastguard Worker     if (pPageTableMgr)
754*35ffd701SAndroid Build Coastguard Worker     {
755*35ffd701SAndroid Build Coastguard Worker         delete pPageTableMgr;
756*35ffd701SAndroid Build Coastguard Worker     }
757*35ffd701SAndroid Build Coastguard Worker }
758*35ffd701SAndroid Build Coastguard Worker 
759*35ffd701SAndroid Build Coastguard Worker #ifdef GMM_LIB_DLL
760*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
761*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of ResourceInfo Object .
762*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GmmResourceInfoCommon::Create()
763*35ffd701SAndroid Build Coastguard Worker ///
764*35ffd701SAndroid Build Coastguard Worker /// @param[in] pCreateParams: Flags which specify what sort of resource to create
765*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GmmResourceInfo class.
766*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreateResInfoObject(GMM_RESCREATE_PARAMS * pCreateParams,GmmClientAllocationCallbacks * pAllocCbs)767*35ffd701SAndroid Build Coastguard Worker GMM_RESOURCE_INFO *GMM_STDCALL GmmLib::GmmClientContext::CreateResInfoObject(GMM_RESCREATE_PARAMS *        pCreateParams,
768*35ffd701SAndroid Build Coastguard Worker                                                                              GmmClientAllocationCallbacks *pAllocCbs)
769*35ffd701SAndroid Build Coastguard Worker {
770*35ffd701SAndroid Build Coastguard Worker     if(!pAllocCbs || !pAllocCbs->pfnAllocation)
771*35ffd701SAndroid Build Coastguard Worker     {
772*35ffd701SAndroid Build Coastguard Worker         return CreateResInfoObject(pCreateParams);
773*35ffd701SAndroid Build Coastguard Worker     }
774*35ffd701SAndroid Build Coastguard Worker     else
775*35ffd701SAndroid Build Coastguard Worker     {
776*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *pRes   = NULL;
777*35ffd701SAndroid Build Coastguard Worker         void *             pConst = NULL;
778*35ffd701SAndroid Build Coastguard Worker 
779*35ffd701SAndroid Build Coastguard Worker         // GMM_RESOURCE_INFO...
780*35ffd701SAndroid Build Coastguard Worker         if(pCreateParams->pPreallocatedResInfo)
781*35ffd701SAndroid Build Coastguard Worker         {
782*35ffd701SAndroid Build Coastguard Worker             pRes = new(pCreateParams->pPreallocatedResInfo) GmmLib::GmmResourceInfo(this); // Use preallocated memory as a class
783*35ffd701SAndroid Build Coastguard Worker             pCreateParams->Flags.Info.__PreallocatedResInfo =
784*35ffd701SAndroid Build Coastguard Worker             pRes->GetResFlags().Info.__PreallocatedResInfo = 1; // Set both in case we can die before copying over the flags.
785*35ffd701SAndroid Build Coastguard Worker         }
786*35ffd701SAndroid Build Coastguard Worker         else
787*35ffd701SAndroid Build Coastguard Worker         {
788*35ffd701SAndroid Build Coastguard Worker             pConst = pAllocCbs->pfnAllocation(pAllocCbs->pUserData,
789*35ffd701SAndroid Build Coastguard Worker                                               sizeof(GMM_RESOURCE_INFO),
790*35ffd701SAndroid Build Coastguard Worker                                               alignof(GMM_RESOURCE_INFO));
791*35ffd701SAndroid Build Coastguard Worker             if(pConst == NULL)
792*35ffd701SAndroid Build Coastguard Worker             {
793*35ffd701SAndroid Build Coastguard Worker                 GMM_ASSERTDPF(0, "Allocation failed!");
794*35ffd701SAndroid Build Coastguard Worker                 goto ERROR_CASE;
795*35ffd701SAndroid Build Coastguard Worker             }
796*35ffd701SAndroid Build Coastguard Worker             else
797*35ffd701SAndroid Build Coastguard Worker             {
798*35ffd701SAndroid Build Coastguard Worker                 pRes = new(pConst) GMM_RESOURCE_INFO(this);
799*35ffd701SAndroid Build Coastguard Worker             }
800*35ffd701SAndroid Build Coastguard Worker         }
801*35ffd701SAndroid Build Coastguard Worker 
802*35ffd701SAndroid Build Coastguard Worker         if(pRes->Create(*pGmmLibContext, *pCreateParams) != GMM_SUCCESS)
803*35ffd701SAndroid Build Coastguard Worker         {
804*35ffd701SAndroid Build Coastguard Worker             goto ERROR_CASE;
805*35ffd701SAndroid Build Coastguard Worker         }
806*35ffd701SAndroid Build Coastguard Worker 
807*35ffd701SAndroid Build Coastguard Worker         return (pRes);
808*35ffd701SAndroid Build Coastguard Worker 
809*35ffd701SAndroid Build Coastguard Worker     ERROR_CASE:
810*35ffd701SAndroid Build Coastguard Worker         if(pRes)
811*35ffd701SAndroid Build Coastguard Worker         {
812*35ffd701SAndroid Build Coastguard Worker             if(pAllocCbs->pfnFree)
813*35ffd701SAndroid Build Coastguard Worker             {
814*35ffd701SAndroid Build Coastguard Worker #ifdef _WIN32
815*35ffd701SAndroid Build Coastguard Worker                 pRes->~GmmResourceInfoWin();
816*35ffd701SAndroid Build Coastguard Worker #else
817*35ffd701SAndroid Build Coastguard Worker                 pRes->~GmmResourceInfoLin();
818*35ffd701SAndroid Build Coastguard Worker #endif
819*35ffd701SAndroid Build Coastguard Worker 
820*35ffd701SAndroid Build Coastguard Worker                 pAllocCbs->pfnFree(pAllocCbs->pUserData, (void *)pRes);
821*35ffd701SAndroid Build Coastguard Worker             }
822*35ffd701SAndroid Build Coastguard Worker         }
823*35ffd701SAndroid Build Coastguard Worker 
824*35ffd701SAndroid Build Coastguard Worker         return (NULL);
825*35ffd701SAndroid Build Coastguard Worker     }
826*35ffd701SAndroid Build Coastguard Worker }
827*35ffd701SAndroid Build Coastguard Worker 
828*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
829*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for Destroying ResInfoObject
830*35ffd701SAndroid Build Coastguard Worker ///
831*35ffd701SAndroid Build Coastguard Worker /// @param[in] pResInfo: Pointer to ResInfoObject
832*35ffd701SAndroid Build Coastguard Worker /// @return     void.
833*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
DestroyResInfoObject(GMM_RESOURCE_INFO * pResInfo,GmmClientAllocationCallbacks * pAllocCbs)834*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::DestroyResInfoObject(GMM_RESOURCE_INFO *           pResInfo,
835*35ffd701SAndroid Build Coastguard Worker                                                                 GmmClientAllocationCallbacks *pAllocCbs)
836*35ffd701SAndroid Build Coastguard Worker {
837*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERTPTR(pResInfo, VOIDRETURN);
838*35ffd701SAndroid Build Coastguard Worker 
839*35ffd701SAndroid Build Coastguard Worker     if(!pAllocCbs || !pAllocCbs->pfnFree)
840*35ffd701SAndroid Build Coastguard Worker     {
841*35ffd701SAndroid Build Coastguard Worker         return DestroyResInfoObject(pResInfo);
842*35ffd701SAndroid Build Coastguard Worker     }
843*35ffd701SAndroid Build Coastguard Worker     else
844*35ffd701SAndroid Build Coastguard Worker     {
845*35ffd701SAndroid Build Coastguard Worker         if(pResInfo->GetResFlags().Info.__PreallocatedResInfo)
846*35ffd701SAndroid Build Coastguard Worker         {
847*35ffd701SAndroid Build Coastguard Worker             *pResInfo = GmmLib::GmmResourceInfo();
848*35ffd701SAndroid Build Coastguard Worker         }
849*35ffd701SAndroid Build Coastguard Worker         else
850*35ffd701SAndroid Build Coastguard Worker         {
851*35ffd701SAndroid Build Coastguard Worker #ifdef _WIN32
852*35ffd701SAndroid Build Coastguard Worker             pResInfo->~GmmResourceInfoWin();
853*35ffd701SAndroid Build Coastguard Worker #else
854*35ffd701SAndroid Build Coastguard Worker             pResInfo->~GmmResourceInfoLin();
855*35ffd701SAndroid Build Coastguard Worker #endif
856*35ffd701SAndroid Build Coastguard Worker             pAllocCbs->pfnFree(pAllocCbs->pUserData, (void *)pResInfo);
857*35ffd701SAndroid Build Coastguard Worker             pResInfo = NULL;
858*35ffd701SAndroid Build Coastguard Worker         }
859*35ffd701SAndroid Build Coastguard Worker     }
860*35ffd701SAndroid Build Coastguard Worker }
861*35ffd701SAndroid Build Coastguard Worker #endif
862*35ffd701SAndroid Build Coastguard Worker 
863*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
864*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of PAgeTableMgr Object .
865*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GMM_PAGETABLE_MGR::GMM_PAGETABLE_MGR
866*35ffd701SAndroid Build Coastguard Worker ///
867*35ffd701SAndroid Build Coastguard Worker /// @param[in] TTFags
868*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GMM_PAGETABLE_MGR class.
869*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreatePageTblMgrObject(uint32_t TTFlags,GmmClientAllocationCallbacks * pAllocCbs)870*35ffd701SAndroid Build Coastguard Worker GMM_PAGETABLE_MGR* GMM_STDCALL GmmLib::GmmClientContext::CreatePageTblMgrObject(uint32_t TTFlags,
871*35ffd701SAndroid Build Coastguard Worker                                                          GmmClientAllocationCallbacks* pAllocCbs)
872*35ffd701SAndroid Build Coastguard Worker {
873*35ffd701SAndroid Build Coastguard Worker     if (!IsDeviceCbReceived)
874*35ffd701SAndroid Build Coastguard Worker     {
875*35ffd701SAndroid Build Coastguard Worker         GMM_ASSERTDPF(0, "Device_callbacks not set");
876*35ffd701SAndroid Build Coastguard Worker         return NULL;
877*35ffd701SAndroid Build Coastguard Worker     }
878*35ffd701SAndroid Build Coastguard Worker     return CreatePageTblMgrObject(
879*35ffd701SAndroid Build Coastguard Worker         &DeviceCB,
880*35ffd701SAndroid Build Coastguard Worker         TTFlags,
881*35ffd701SAndroid Build Coastguard Worker         pAllocCbs);
882*35ffd701SAndroid Build Coastguard Worker }
883*35ffd701SAndroid Build Coastguard Worker 
884*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
885*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for creation of PAgeTableMgr Object .
886*35ffd701SAndroid Build Coastguard Worker /// @see        GmmLib::GMM_PAGETABLE_MGR::GMM_PAGETABLE_MGR
887*35ffd701SAndroid Build Coastguard Worker ///
888*35ffd701SAndroid Build Coastguard Worker /// @param[in] pDevCb: Pointer to GMM_DEVICE_CALLBACKS_INT
889*35ffd701SAndroid Build Coastguard Worker /// @param[in] TTFags
890*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GMM_PAGETABLE_MGR class.
891*35ffd701SAndroid Build Coastguard Worker /// move the code to new overloaded the API and remove this API once all clients are moved to new API.
892*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
CreatePageTblMgrObject(GMM_DEVICE_CALLBACKS_INT * pDevCb,uint32_t TTFlags,GmmClientAllocationCallbacks * pAllocCbs)893*35ffd701SAndroid Build Coastguard Worker GMM_PAGETABLE_MGR* GMM_STDCALL GmmLib::GmmClientContext::CreatePageTblMgrObject(
894*35ffd701SAndroid Build Coastguard Worker                                                          GMM_DEVICE_CALLBACKS_INT* pDevCb,
895*35ffd701SAndroid Build Coastguard Worker                                                          uint32_t                      TTFlags,
896*35ffd701SAndroid Build Coastguard Worker                                                          GmmClientAllocationCallbacks* pAllocCbs)
897*35ffd701SAndroid Build Coastguard Worker {
898*35ffd701SAndroid Build Coastguard Worker     if (!pAllocCbs || !pAllocCbs->pfnAllocation)
899*35ffd701SAndroid Build Coastguard Worker     {
900*35ffd701SAndroid Build Coastguard Worker         return CreatePageTblMgrObject(
901*35ffd701SAndroid Build Coastguard Worker             pDevCb,
902*35ffd701SAndroid Build Coastguard Worker             TTFlags);
903*35ffd701SAndroid Build Coastguard Worker     }
904*35ffd701SAndroid Build Coastguard Worker     else
905*35ffd701SAndroid Build Coastguard Worker     {
906*35ffd701SAndroid Build Coastguard Worker         GMM_PAGETABLE_MGR* pPageTableMgr = NULL;
907*35ffd701SAndroid Build Coastguard Worker         return pPageTableMgr;
908*35ffd701SAndroid Build Coastguard Worker     }
909*35ffd701SAndroid Build Coastguard Worker }
910*35ffd701SAndroid Build Coastguard Worker 
911*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
912*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for destroy of PageTableMgr Object .
913*35ffd701SAndroid Build Coastguard Worker ///
914*35ffd701SAndroid Build Coastguard Worker /// @param[in] pPageTableMgr: Pointer to GMM_PAGETABLE_MGR
915*35ffd701SAndroid Build Coastguard Worker /// @return     void.
916*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
DestroyPageTblMgrObject(GMM_PAGETABLE_MGR * pPageTableMgr,GmmClientAllocationCallbacks * pAllocCbs)917*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmLib::GmmClientContext::DestroyPageTblMgrObject(GMM_PAGETABLE_MGR* pPageTableMgr,
918*35ffd701SAndroid Build Coastguard Worker     GmmClientAllocationCallbacks* pAllocCbs)
919*35ffd701SAndroid Build Coastguard Worker {
920*35ffd701SAndroid Build Coastguard Worker     if (!pAllocCbs || !pAllocCbs->pfnFree)
921*35ffd701SAndroid Build Coastguard Worker     {
922*35ffd701SAndroid Build Coastguard Worker         return DestroyPageTblMgrObject(pPageTableMgr);
923*35ffd701SAndroid Build Coastguard Worker     }
924*35ffd701SAndroid Build Coastguard Worker }
925*35ffd701SAndroid Build Coastguard Worker 
926*35ffd701SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////////
927*35ffd701SAndroid Build Coastguard Worker /// Member function of ClientContext class for doing device specific operations.
928*35ffd701SAndroid Build Coastguard Worker /// Clients must call it before any Gfx resource (incl. svm)
929*35ffd701SAndroid Build Coastguard Worker /// is mapped, must happen before any use of GfxPartition, or PageTableMgr init.
930*35ffd701SAndroid Build Coastguard Worker /// @param[in]  DeviceInfo : Pointer to info related to Device Operations.
931*35ffd701SAndroid Build Coastguard Worker /// @return     GMM_STATUS.
932*35ffd701SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////
GmmSetDeviceInfo(GMM_DEVICE_INFO * DeviceInfo)933*35ffd701SAndroid Build Coastguard Worker GMM_STATUS GMM_STDCALL GmmLib::GmmClientContext::GmmSetDeviceInfo(GMM_DEVICE_INFO* DeviceInfo)
934*35ffd701SAndroid Build Coastguard Worker {
935*35ffd701SAndroid Build Coastguard Worker     GMM_STATUS Status = GMM_SUCCESS;
936*35ffd701SAndroid Build Coastguard Worker 
937*35ffd701SAndroid Build Coastguard Worker     if (DeviceInfo == NULL || DeviceInfo->pDeviceCb == NULL)
938*35ffd701SAndroid Build Coastguard Worker     {
939*35ffd701SAndroid Build Coastguard Worker         return GMM_INVALIDPARAM;
940*35ffd701SAndroid Build Coastguard Worker     }
941*35ffd701SAndroid Build Coastguard Worker 
942*35ffd701SAndroid Build Coastguard Worker     DeviceCB = *(DeviceInfo->pDeviceCb);
943*35ffd701SAndroid Build Coastguard Worker     IsDeviceCbReceived = 1;
944*35ffd701SAndroid Build Coastguard Worker     return Status;
945*35ffd701SAndroid Build Coastguard Worker }
946*35ffd701SAndroid Build Coastguard Worker 
947*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
948*35ffd701SAndroid Build Coastguard Worker /// Gmm lib DLL C wrapper for creating GmmLib::GmmClientContext object
949*35ffd701SAndroid Build Coastguard Worker /// This C wrapper is used for Multi-Adapter scenarios to take in Adapter's BDF as
950*35ffd701SAndroid Build Coastguard Worker /// additional input argument to derive its correspodning GmmLibContext
951*35ffd701SAndroid Build Coastguard Worker ///
952*35ffd701SAndroid Build Coastguard Worker /// @see        Class GmmLib::GmmClientContext
953*35ffd701SAndroid Build Coastguard Worker ///
954*35ffd701SAndroid Build Coastguard Worker /// @param[in]  ClientType : describles the UMD clients such as OCL, DX, OGL, Vulkan etc
955*35ffd701SAndroid Build Coastguard Worker /// @param[in]  sBDF: Adapter's BDF info
956*35ffd701SAndroid Build Coastguard Worker ///
957*35ffd701SAndroid Build Coastguard Worker /// @return     Pointer to GmmClientContext, if Context is created
958*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCreateClientContextForAdapter(GMM_CLIENT ClientType,ADAPTER_BDF sBdf)959*35ffd701SAndroid Build Coastguard Worker extern "C" GMM_CLIENT_CONTEXT *GMM_STDCALL GmmCreateClientContextForAdapter(GMM_CLIENT  ClientType,
960*35ffd701SAndroid Build Coastguard Worker                                                                             ADAPTER_BDF sBdf)
961*35ffd701SAndroid Build Coastguard Worker {
962*35ffd701SAndroid Build Coastguard Worker     GMM_CLIENT_CONTEXT *pGmmClientContext = nullptr;
963*35ffd701SAndroid Build Coastguard Worker     GMM_LIB_CONTEXT *   pLibContext       = pGmmMALibContext->GetAdapterLibContext(sBdf);
964*35ffd701SAndroid Build Coastguard Worker 
965*35ffd701SAndroid Build Coastguard Worker     if (pLibContext)
966*35ffd701SAndroid Build Coastguard Worker     {
967*35ffd701SAndroid Build Coastguard Worker         pGmmClientContext = new GMM_CLIENT_CONTEXT(ClientType, pLibContext);
968*35ffd701SAndroid Build Coastguard Worker 
969*35ffd701SAndroid Build Coastguard Worker     }
970*35ffd701SAndroid Build Coastguard Worker     return pGmmClientContext;
971*35ffd701SAndroid Build Coastguard Worker }
972*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
973*35ffd701SAndroid Build Coastguard Worker /// Gmm lib DLL exported C wrapper for deleting GmmLib::GmmClientContext object
974*35ffd701SAndroid Build Coastguard Worker /// @see        Class GmmLib::GmmClientContext
975*35ffd701SAndroid Build Coastguard Worker ///
976*35ffd701SAndroid Build Coastguard Worker /// @param[in]  GMM_CLIENT_CONTEXT * : Pointer to ClientContext object
977*35ffd701SAndroid Build Coastguard Worker /// @return     Void
978*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmDeleteClientContext(GMM_CLIENT_CONTEXT * pGmmClientContext)979*35ffd701SAndroid Build Coastguard Worker extern "C" void GMM_STDCALL GmmDeleteClientContext(GMM_CLIENT_CONTEXT *pGmmClientContext)
980*35ffd701SAndroid Build Coastguard Worker {
981*35ffd701SAndroid Build Coastguard Worker     if(pGmmClientContext)
982*35ffd701SAndroid Build Coastguard Worker     {
983*35ffd701SAndroid Build Coastguard Worker         delete pGmmClientContext;
984*35ffd701SAndroid Build Coastguard Worker         pGmmClientContext = NULL;
985*35ffd701SAndroid Build Coastguard Worker     }
986*35ffd701SAndroid Build Coastguard Worker }
987