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