@@ -66,15 +66,25 @@ bool Gmm::initContext(const PLATFORM *pPlatform,
6666 const FeatureTable *pSkuTable,
6767 const WorkaroundTable *pWaTable,
6868 const GT_SYSTEM_INFO *pGtSysInfo) {
69- // fill values Gmmlib requested
70- _SKU_FEATURE_TABLE gmmFtrTable = {};
71- _WA_TABLE gmmWaTable = {};
72- SkuInfoTransfer::transferFtrTableForGmm (&gmmFtrTable, pSkuTable);
73- SkuInfoTransfer::transferWaTableForGmm (&gmmWaTable, pWaTable);
74-
75- bool success = GMM_SUCCESS == GmmInitGlobalContext (*pPlatform, &gmmFtrTable, &gmmWaTable, pGtSysInfo, GMM_OGL_VISTA);
76- DEBUG_BREAK_IF (!success);
77- return success;
69+ if (!Gmm::gmmClientContext) {
70+ _SKU_FEATURE_TABLE gmmFtrTable = {};
71+ _WA_TABLE gmmWaTable = {};
72+ SkuInfoTransfer::transferFtrTableForGmm (&gmmFtrTable, pSkuTable);
73+ SkuInfoTransfer::transferWaTableForGmm (&gmmWaTable, pWaTable);
74+
75+ bool success = GMM_SUCCESS == GmmInitGlobalContext (*pPlatform, &gmmFtrTable, &gmmWaTable, pGtSysInfo, GMM_CLIENT::GMM_OCL_VISTA);
76+ UNRECOVERABLE_IF (!success);
77+ Gmm::gmmClientContext = GmmCreateClientContext (GMM_CLIENT::GMM_OCL_VISTA);
78+ }
79+ return Gmm::gmmClientContext != nullptr ;
80+ }
81+
82+ void Gmm::destroyContext () {
83+ if (Gmm::gmmClientContext) {
84+ GmmDeleteClientContext (Gmm::gmmClientContext);
85+ Gmm::gmmClientContext = nullptr ;
86+ GmmDestroyGlobalContext ();
87+ }
7888}
7989
8090uint32_t Gmm::getMOCS (uint32_t type) {
@@ -86,8 +96,7 @@ uint32_t Gmm::getMOCS(uint32_t type) {
8696 }
8797 }
8898
89- MEMORY_OBJECT_CONTROL_STATE mocs =
90- pGmmGlobalContext->GetCachePolicyObj ()->CachePolicyGetMemoryObject (nullptr , static_cast <GMM_RESOURCE_USAGE_TYPE>(type));
99+ MEMORY_OBJECT_CONTROL_STATE mocs = Gmm::gmmClientContext->CachePolicyGetMemoryObject (nullptr , static_cast <GMM_RESOURCE_USAGE_TYPE>(type));
91100
92101 return static_cast <uint32_t >(mocs.DwordValue );
93102}
@@ -404,5 +413,6 @@ bool Gmm::unifiedAuxTranslationCapable() const {
404413}
405414
406415bool Gmm::useSimplifiedMocsTable = false ;
416+ GMM_CLIENT_CONTEXT *Gmm::gmmClientContext = nullptr ;
407417
408418} // namespace OCLRT
0 commit comments