Gen11 Fixed MOCS table

Change-Id: I8a357fcb00e3aa1414c7cfa7d6e2961d583fdec8
Signed-off-by: drprajap <dimpalben.r.prajapati@intel.com>
diff --git a/README.rst b/README.rst
index 95daa53..dd3ab0b 100755
--- a/README.rst
+++ b/README.rst
@@ -40,7 +40,7 @@
 Install
 ^^^^^^^
 Not a stand alone software component.
-GmmLib is build as static library for Intel media driver and Compute runtime for OpenCL
+GmmLib is built as dynamic library for Intel media driver and Compute runtime for OpenCL
 
 Supported Platforms
 -------------------
@@ -54,6 +54,8 @@
 
 CNL (Cannonlake)
 
+ICL (Icelake)
+
 
 Known Issues and Limitations
 ----------------------------
diff --git a/Source/GmmLib/CMakeLists.txt b/Source/GmmLib/CMakeLists.txt
index ccfe499..a3f902e 100644
--- a/Source/GmmLib/CMakeLists.txt
+++ b/Source/GmmLib/CMakeLists.txt
@@ -24,11 +24,11 @@
 project(igfx_gmmumd)
 
 # GmmLib Api Version used for so naming
-set(GMMLIB_API_MAJOR_VERSION 8)
+set(GMMLIB_API_MAJOR_VERSION 9)
 set(GMMLIB_API_MINOR_VERSION 0)
 
 if(NOT DEFINED MAJOR_VERSION)
-	set(MAJOR_VERSION 8)
+	set(MAJOR_VERSION 9)
 endif()
 
 if(NOT DEFINED MINOR_VERSION)
@@ -148,13 +148,13 @@
 
 # If '-DGMM_DYNAMIC_MOCS_TABLE=TRUE' (default is FALSE) passed to cmake
 # configure command gmmlib will generate MOCS table dynamically depending on
-# usage requests (Gen9+). In this case on Linux user responsibility is to
+# usage requests (Gen9). In this case on Linux user responsibility is to
 # make sure that generated MOCS table is programmed on KMD level.
 if (GMM_DYNAMIC_MOCS_TABLE)
-    MESSAGE("MOCS table: dynamic")
+    MESSAGE("MOCS table: Dynamic")
     add_definitions(-DGMM_DYNAMIC_MOCS_TABLE)
 else()
-    MESSAGE("MOCS table: static")
+    MESSAGE("MOCS table: Static")
 endif()
 
 if(DEFINED UFO_DRIVER_OPTIMIZATION_LEVEL)
@@ -208,7 +208,6 @@
 	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmTextureCalc.h
 	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmCommonInt.h
 	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmLibInc.h
-	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmTextureCalc.h
 	${BS_DIR_GMMLIB}/inc/GmmLib.h
 	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmLogger.h
 )
diff --git a/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h b/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h
index acac02e..7df363c 100755
--- a/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h
+++ b/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h
@@ -69,6 +69,8 @@
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_HEAP_INSTRUCTION )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_HIZ )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_INDEX_BUFFER )
+DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_COHERENT_UC)
+DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_CACHED)
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_MCS )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_PUSH_CONSTANT_BUFFER )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_PULL_CONSTANT_BUFFER )
@@ -97,6 +99,8 @@
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_TILED_UAV )
 
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_VERTEX_BUFFER )
+DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_COHERENT_UC )
+DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_CACHED )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_OGL_WSTN_VERTEX_BUFFER )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_UAV )
 DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_RENDER_TARGET_AND_SHADER_RESOURCE )
diff --git a/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.cpp b/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.cpp
index e9af150..f26a864 100644
--- a/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.cpp
+++ b/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.cpp
@@ -40,7 +40,7 @@
 
     __GMM_ASSERTPTR(pCachePolicy, GMM_ERROR);
 
-#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, wt, age, lecc_scc, l3_scc, sso, cos, hdcl1) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, wt, age, 0, lecc_scc, l3_scc, 0, sso, cos, hdcl1, 0)
+#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, wt, age, lecc_scc, l3_scc, sso, cos, hdcl1) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, wt, age, 0, lecc_scc, l3_scc, 0, sso, cos, hdcl1, 0, 0, 0, 0)
 #include "GmmGen10CachePolicy.h"
 
 #define TC_LLC (1)
diff --git a/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.cpp b/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.cpp
index dea86db..06e26e0 100644
--- a/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.cpp
+++ b/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.cpp
@@ -24,6 +24,43 @@
 #include "External/Common/GmmCachePolicy.h"
 #include "External/Common/CachePolicy/GmmCachePolicyGen10.h"
 #include "External/Common/CachePolicy/GmmCachePolicyGen11.h"
+
+//=============================================================================
+//
+// Function: IsSpecialMOCSUsage
+//
+// Desc: This function returns special(hw-reserved) MocsIdx based on usage
+//
+// Parameters: usage  -> Resource usage type
+//             UpdateMOCS  -> True if MOCS Table must be updated, ow false
+//
+// Return: int32_t
+//
+//-----------------------------------------------------------------------------
+int32_t GmmLib::GmmGen11CachePolicy::IsSpecialMOCSUsage(GMM_RESOURCE_USAGE_TYPE Usage, bool &UpdateMOCS)
+{
+    int32_t MocsIdx = -1;
+    UpdateMOCS      = true;
+
+    switch(Usage)
+    {
+        case GMM_RESOURCE_USAGE_MOCS_62:
+            __GMM_ASSERT(pCachePolicy[Usage].L3 == 0); //Architecturally, TR/Aux-TT node isn't L3-cacheable.
+            pCachePolicy[Usage].L3 = 0;
+            MocsIdx                = 62;
+            break;
+        case GMM_RESOURCE_USAGE_L3_EVICTION:
+            pCachePolicy[Usage].L3 = 0;
+            MocsIdx                = 63;
+            break;
+        default:
+            UpdateMOCS = false;
+            break;
+    }
+
+    return MocsIdx;
+}
+
 //=============================================================================
 //
 // Function: __GmmGen11InitCachePolicy
@@ -38,10 +75,9 @@
 //-----------------------------------------------------------------------------
 GMM_STATUS GmmLib::GmmGen11CachePolicy::InitCachePolicy()
 {
-
     __GMM_ASSERTPTR(pCachePolicy, GMM_ERROR);
 
-#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, wt, age, aom, lecc_scc, l3_scc, scf, sso, cos, hdcl1) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, wt, age, aom, lecc_scc, l3_scc, scf, sso, cos, hdcl1, 0)
+#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, wt, age, aom, lecc_scc, l3_scc, scf, sso, cos) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, wt, age, aom, lecc_scc, l3_scc, scf, sso, cos, 0, 0, 0, 0, 0)
 #include "GmmGen11CachePolicy.h"
 
 #define TC_LLC (1)
@@ -62,48 +98,45 @@
 #define ENABLE_SELF_SNOOP_OVERRIDE (0x1)
 #define ENABLE_SELF_SNOOP_ALWAYS (0x3)
 #define CLASS_SERVICE_ZERO (0x0)
+
+    // Setup Static MOCS Table
+    {
+        this->SetUpMOCSTable();
+    }
+
     {
         // Define index of cache element
-        uint32_t Usage = 0;
-
-        uint32_t CurrentMaxIndex      = 0;
-        uint32_t CurrentMaxHDCL1Index = GMM_GEN10_HDCL1_MOCS_INDEX_START - 1; // define constant
+        uint32_t Usage                  = 0;
+        uint32_t CurrentMaxSpecialIndex = GMM_GEN9_MAX_NUMBER_MOCS_INDEXES - 1;
 
 #if(_WIN32 && (_DEBUG || _RELEASE_INTERNAL))
         OverrideCachePolicy();
 #endif
 
-        // index 0 is uncached.
-        {
-            GMM_CACHE_POLICY_TBL_ELEMENT *Entry0 = &(pGmmGlobalContext->GetCachePolicyTlbElement()[0]);
-            Entry0->LeCC.Cacheability            = LeCC_UNCACHEABLE;
-            Entry0->LeCC.TargetCache             = TC_LLC_ELLC;
-            Entry0->LeCC.LRUM                    = 0;
-            Entry0->LeCC.ESC                     = DISABLE_SKIP_CACHING_CONTROL;
-            Entry0->LeCC.SCC                     = 0;
-            Entry0->LeCC.CoS                     = CLASS_SERVICE_ZERO;
-            Entry0->LeCC.SelfSnoop               = DISABLE_SELF_SNOOP_OVERRIDE;
-            Entry0->L3.Cacheability              = L3_UNCACHEABLE;
-            Entry0->L3.ESC                       = DISABLE_SKIP_CACHING_CONTROL;
-            Entry0->L3.SCC                       = 0;
-            Entry0->HDCL1                        = 0;
-        }
-
         // Process the cache policy and fill in the look up table
         for(; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
         {
             bool                         CachePolicyError = false;
+            bool                         SpecialMOCS      = false;
             int32_t                      CPTblIdx         = -1;
             uint32_t                     j                = 0;
             uint32_t                     PTEValue         = 0;
             GMM_CACHE_POLICY_TBL_ELEMENT UsageEle         = {0};
-            UsageEle.LeCC.Reserved                        = 0; // Reserved bits zeroe'd, this is so we
-                                                               // we can compare the unioned LeCC.DwordValue.
+
+            CPTblIdx = IsSpecialMOCSUsage((GMM_RESOURCE_USAGE_TYPE)Usage, SpecialMOCS);
+
+            UsageEle.LeCC.Reserved = 0; // Reserved bits zeroe'd, this is so we
+                                        // we can compare the unioned LeCC.DwordValue.
             UsageEle.LeCC.SelfSnoop = DISABLE_SELF_SNOOP_OVERRIDE;
             UsageEle.LeCC.CoS       = CLASS_SERVICE_ZERO;
             UsageEle.LeCC.SCC       = 0;
             UsageEle.LeCC.ESC       = 0;
 
+            if(pCachePolicy[Usage].SCF && pGmmGlobalContext->GetSkuTable().FtrLLCBypass)
+            {
+                UsageEle.LeCC.SCF = pCachePolicy[Usage].SCF;
+            }
+
             if(pCachePolicy[Usage].SSO & ENABLE_SELF_SNOOP_OVERRIDE)
             {
                 UsageEle.LeCC.SelfSnoop = pCachePolicy[Usage].SSO & ENABLE_SELF_SNOOP_ALWAYS;
@@ -112,10 +145,6 @@
             {
                 UsageEle.LeCC.CoS = pCachePolicy[Usage].CoS;
             }
-            if(pCachePolicy[Usage].HDCL1)
-            {
-                UsageEle.HDCL1 = 1;
-            }
             if(pCachePolicy[Usage].LeCC_SCC)
             {
                 UsageEle.LeCC.SCC = pCachePolicy[Usage].LeCC_SCC;
@@ -123,29 +152,18 @@
             }
             UsageEle.LeCC.LRUM = pCachePolicy[Usage].AGE;
 
-            // default to LLC/ELLC target cache.
-            UsageEle.LeCC.TargetCache  = TC_LLC_ELLC;
+            // default to LLC target cache.
+            UsageEle.LeCC.TargetCache  = TC_LLC;
             UsageEle.LeCC.Cacheability = LeCC_WB_CACHEABLE;
-            if(pCachePolicy[Usage].LLC && pCachePolicy[Usage].ELLC)
-            {
-                UsageEle.LeCC.TargetCache = TC_LLC_ELLC;
-            }
-            else if(pCachePolicy[Usage].LLC)
+            if(pCachePolicy[Usage].LLC)
             {
                 UsageEle.LeCC.TargetCache = TC_LLC;
             }
-            else if(pCachePolicy[Usage].ELLC)
-            {
-                UsageEle.LeCC.TargetCache = TC_ELLC;
-                if(pCachePolicy[Usage].WT)
-                {
-                    UsageEle.LeCC.Cacheability = LeCC_WT_CACHEABLE;
-                }
-            }
             else
             {
                 UsageEle.LeCC.Cacheability = LeCC_UNCACHEABLE;
             }
+
             UsageEle.L3.Reserved = 0; // Reserved bits zeroe'd, this is so we
                                       // we can compare the unioned L3.UshortValue.
             UsageEle.L3.ESC          = DISABLE_SKIP_CACHING_CONTROL;
@@ -157,67 +175,82 @@
                 UsageEle.L3.ESC = ENABLE_SKIP_CACHING_CONTROL;
                 UsageEle.L3.SCC = (uint16_t)pCachePolicy[Usage].L3_SCC;
             }
-            //For HDC L1 caching, MOCS Table index 48-61 should be used
-            if(UsageEle.HDCL1)
+
+            if(CPTblIdx >= GMM_GEN9_MAX_NUMBER_MOCS_INDEXES)
             {
-                for(j = GMM_GEN10_HDCL1_MOCS_INDEX_START; j <= CurrentMaxHDCL1Index; j++)
+                GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &pGmmGlobalContext->GetCachePolicyTlbElement()[CPTblIdx];
+                CurrentMaxSpecialIndex               = ((uint32_t)CPTblIdx > CurrentMaxSpecialIndex) ? (uint32_t)CPTblIdx : CurrentMaxSpecialIndex;
+
+                if(SpecialMOCS && //Update if one of special MOCS enums
+                   !(TblEle->LeCC.DwordValue == UsageEle.LeCC.DwordValue &&
+                     TblEle->L3.UshortValue == UsageEle.L3.UshortValue))
                 {
-                    GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &pGmmGlobalContext->GetCachePolicyTlbElement()[j];
-                    if(TblEle->LeCC.DwordValue == UsageEle.LeCC.DwordValue &&
-                       TblEle->L3.UshortValue == UsageEle.L3.UshortValue &&
-                       TblEle->HDCL1 == UsageEle.HDCL1)
-                    {
-                        CPTblIdx = j;
-                        break;
-                    }
+                    //Assert if being overwritten!
+                    __GMM_ASSERT(TblEle->LeCC.DwordValue == 0 &&
+                                 TblEle->L3.UshortValue == 0);
                 }
             }
             else
             {
-                for(j = 0; j <= CurrentMaxIndex; j++)
+                for(j = 0; j <= CurrentMaxMocsIndex; j++)
                 {
                     GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &pGmmGlobalContext->GetCachePolicyTlbElement()[j];
                     if(TblEle->LeCC.DwordValue == UsageEle.LeCC.DwordValue &&
-                       TblEle->L3.UshortValue == UsageEle.L3.UshortValue &&
-                       TblEle->HDCL1 == UsageEle.HDCL1)
+                       TblEle->L3.UshortValue == UsageEle.L3.UshortValue)
                     {
                         CPTblIdx = j;
                         break;
                     }
                 }
             }
-
-            // Didn't find the caching settings in one of the already programmed lookup table entries.
-            // Need to add a new lookup table entry.
+            // Didn't find the caching settings in one of the already programmed Explicit Mocs lookup table entries
+            // Need to add a new explicit mocs lookup table entry.
             if(CPTblIdx == -1)
             {
-                if(UsageEle.HDCL1 && CurrentMaxHDCL1Index < GMM_GEN9_MAX_NUMBER_MOCS_INDEXES - 1)
-                {
-                    GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &(pGmmGlobalContext->GetCachePolicyTlbElement()[++CurrentMaxHDCL1Index]);
-                    CPTblIdx                             = CurrentMaxHDCL1Index;
 
-                    TblEle->LeCC.DwordValue = UsageEle.LeCC.DwordValue;
-                    TblEle->L3.UshortValue  = UsageEle.L3.UshortValue;
-                    TblEle->HDCL1           = UsageEle.HDCL1;
-                }
-                else if(CurrentMaxIndex < GMM_GEN10_HDCL1_MOCS_INDEX_START)
+#if(_WIN32 && (_DEBUG || _RELEASE_INTERNAL))
+                // If the Cache Policy setting is overriden through regkey,
+                // don't raise an assert/log error. Raising an assert for debug/perf testing isn't really helpful
+                if(pCachePolicy[Usage].IsOverridenByRegkey)
                 {
-                    GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &(pGmmGlobalContext->GetCachePolicyTlbElement()[++CurrentMaxIndex]);
-                    CPTblIdx                             = CurrentMaxIndex;
+                    if(CurrentMaxMocsIndex < GMM_GEN9_MAX_NUMBER_MOCS_INDEXES - 1)
+                    {
+                        GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &(pGmmGlobalContext->GetCachePolicyTlbElement()[++CurrentMaxMocsIndex]);
+                        CPTblIdx                             = CurrentMaxMocsIndex;
 
-                    TblEle->LeCC.DwordValue = UsageEle.LeCC.DwordValue;
-                    TblEle->L3.UshortValue  = UsageEle.L3.UshortValue;
-                    TblEle->HDCL1           = UsageEle.HDCL1;
+                        TblEle->LeCC.DwordValue = UsageEle.LeCC.DwordValue;
+                        TblEle->L3.UshortValue  = UsageEle.L3.UshortValue;
+                    }
+                    else
+                    {
+                        // Too many unique caching combinations to program the
+                        // MOCS lookup table.
+                        CachePolicyError = true;
+                        GMM_ASSERTDPF(
+                        "Cache Policy Init Error: Invalid Cache Programming, too many unique caching combinations"
+                        "(we only support GMM_GEN_MAX_NUMBER_MOCS_INDEXES = %d)",
+                        GMM_GEN9_MAX_NUMBER_MOCS_INDEXES - 1);
+                        // Set cache policy index to uncached.
+                        CPTblIdx = 0;
+                    }
                 }
                 else
+#endif
                 {
-                    // Too many unique caching combinations to program the
-                    // MOCS lookup table.
+                    GMM_ASSERTDPF(false, "CRITICAL ERROR: Cache Policy Usage value specified by Client in not defined in Fixed MOCS Table!");
+
+// Log Error using regkey to indicate the above error
+#if(_WIN32 && (_DEBUG || _RELEASE_INTERNAL) && __GMM_KMD__)
+                    REGISTRY_OVERRIDE_WRITE(Usage, NewMOCSEntryLeCCValue, UsageEle.LeCC.DwordValue);
+                    REGISTRY_OVERRIDE_WRITE(Usage, NewMOCSEntryL3Value, UsageEle.L3.UshortValue);
+#endif
+
                     CachePolicyError = true;
                     GMM_ASSERTDPF(
                     "Cache Policy Init Error: Invalid Cache Programming, too many unique caching combinations"
                     "(we only support GMM_GEN_MAX_NUMBER_MOCS_INDEXES = %d)",
-                    GMM_GEN9_MAX_NUMBER_MOCS_INDEXES - 1);
+                    CurrentMaxMocsIndex);
+
                     // Set cache policy index to uncached.
                     CPTblIdx = 0;
                 }
@@ -240,9 +273,84 @@
                 GMM_ASSERTDPF("Cache Policy Init Error: Invalid Cache Programming - Element %d", Usage);
             }
         }
-        CurrentMaxMocsIndex      = CurrentMaxIndex;
-        CurrentMaxL1HdcMocsIndex = CurrentMaxHDCL1Index;
+
+        CurrentMaxSpecialMocsIndex = CurrentMaxSpecialIndex;
     }
 
     return GMM_SUCCESS;
-}
\ No newline at end of file
+}
+
+//=============================================================================
+//
+// Function: SetUpMOCSTable
+//
+// Desc:
+//
+// Parameters:
+//
+// Return: GMM_STATUS
+//
+//-----------------------------------------------------------------------------
+void GmmLib::GmmGen11CachePolicy::SetUpMOCSTable()
+{
+    GMM_CACHE_POLICY_TBL_ELEMENT *pCachePolicyTlbElement = &(pGmmGlobalContext->GetCachePolicyTlbElement()[0]);
+
+#define GMM_DEFINE_MOCS(Index, L3_ESC, L3_SCC, L3_CC, LeCC_CC, LeCC_TC, LeCC_LRUM, LeCC_AOM, LeCC_ESC, LeCC_SCC, LeCC_PFM, LeCC_SCF, LeCC_CoS, LeCC_SelfSnoop) \
+    {                                                                                                                                                          \
+        pCachePolicyTlbElement[Index].L3.ESC            = L3_ESC;                                                                                              \
+        pCachePolicyTlbElement[Index].L3.SCC            = L3_SCC;                                                                                              \
+        pCachePolicyTlbElement[Index].L3.Cacheability   = L3_CC;                                                                                               \
+        pCachePolicyTlbElement[Index].LeCC.Cacheability = LeCC_CC;                                                                                             \
+        pCachePolicyTlbElement[Index].LeCC.TargetCache  = LeCC_TC;                                                                                             \
+        pCachePolicyTlbElement[Index].LeCC.LRUM         = LeCC_LRUM;                                                                                           \
+        pCachePolicyTlbElement[Index].LeCC.AOM          = LeCC_AOM;                                                                                            \
+        pCachePolicyTlbElement[Index].LeCC.ESC          = LeCC_ESC;                                                                                            \
+        pCachePolicyTlbElement[Index].LeCC.SCC          = LeCC_SCC;                                                                                            \
+        pCachePolicyTlbElement[Index].LeCC.PFM          = LeCC_PFM;                                                                                            \
+        pCachePolicyTlbElement[Index].LeCC.SCF          = LeCC_SCF;                                                                                            \
+        pCachePolicyTlbElement[Index].LeCC.CoS          = LeCC_CoS;                                                                                            \
+        pCachePolicyTlbElement[Index].LeCC.SelfSnoop    = LeCC_SelfSnoop;                                                                                      \
+    }
+
+    // clang-format off
+
+    // Explicit MOCS Table
+    //              Index     ESC	  SCC	  L3CC    LeCC    TC      LRUM    DAoM	  ERSC	  SCC	  PFM	  SCF     CoS     SSE
+    GMM_DEFINE_MOCS( 0      , 0     , 0     , 1     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 1      , 0     , 0     , 3     , 0     , 1     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 2      , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 3      , 0     , 0     , 1     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 4      , 0     , 0     , 3     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 5      , 0     , 0     , 1     , 3     , 1     , 3     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 6      , 0     , 0     , 1     , 3     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 7      , 0     , 0     , 3     , 3     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 8      , 0     , 0     , 1     , 3     , 1     , 2     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 9      , 0     , 0     , 3     , 3     , 1     , 2     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 10     , 0     , 0     , 1     , 3     , 1     , 3     , 1     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 11     , 0     , 0     , 3     , 3     , 1     , 3     , 1     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 12     , 0     , 0     , 1     , 3     , 1     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 13     , 0     , 0     , 3     , 3     , 1     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 14     , 0     , 0     , 1     , 3     , 1     , 2     , 1     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 15     , 0     , 0     , 3     , 3     , 1     , 2     , 1     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 16     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 17     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 18     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 0     , 0     , 0     , 0     , 0     , 3 )
+    GMM_DEFINE_MOCS( 19     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 0     , 7     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 20     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 0     , 3     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 21     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 0     , 1     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 22     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 1     , 3     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 23     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 1     , 7     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 62     , 0     , 0     , 1     , 3     , 1     , 3     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+    GMM_DEFINE_MOCS( 63     , 0     , 0     , 1     , 3     , 1     , 3     , 0     , 0     , 0     , 0     , 0     , 0     , 0 )
+
+    if (GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) >= IGFX_LAKEFIELD)
+    {
+        GMM_DEFINE_MOCS( 16     , 0     , 0     , 3     , 1     , 1     , 0     , 0     , 0     , 0     , 0     , 1     , 0     , 0 )
+        GMM_DEFINE_MOCS( 17     , 0     , 0     , 3     , 3     , 1     , 3     , 0     , 0     , 0     , 0     , 0     , 0     , 3 )
+    }
+
+    CurrentMaxMocsIndex         = 23;
+
+// clang-format on
+#undef GMM_DEFINE_MOCS
+}
diff --git a/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h b/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h
index 1762906..4448c90 100644
--- a/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h
+++ b/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h
@@ -29,246 +29,251 @@
 // AOM = Do not allocate on miss (0 = allocate on miss [normal cache behavior], 1 = don't allocate on miss)
 // LeCC_SCC = LLC/eLLC skip caching control (disabled if LeCC_SCC = 0)
 // L3_SCC = L3 skip caching control (disabled if L3_SCC = 0)
-// SCF = Snoop Control Field (SCF)- Only for SKL/BXT (as coherent/non-coherent)
+// SCF = Snoop Control Field (SCF)- Only for SKL/BXT(as coherent/non-coherent)
 // SSO = Override MIDI self snoop settings (1 = never send to uncore, 3 = always send to uncore, 0 = [default] No override )
 // CoS = Class of Service ( allowed values 1, 2, 3 for class IDs 1, 2, 3 respectively, default class 1 => driver overrides 0->1)
-// HDCL1 = HDC L1 cache control (1 = cached in HDC L1, 0 = not cached in HDC L1)
 // Faster PushWrite(Gen10+) used iff !WT, eLLC-only cacheable - Globally visible surface (eg display surface) should be marked WT
 //***************************************************************************************************************/
-//                   USAGE TYPE                                                               , LLC , ELLC , L3 , WT , AGE , AOM , LeCC_SCC , L3_SCC, SCF, SSO, CoS, HDCL1 )
+//                   USAGE TYPE                                                               , LLC , ELLC , L3 , WT , AGE , AOM , LeCC_SCC , L3_SCC, SCF, SSO, CoS)
 /****************************************************************************************************************/
 
 // KMD Usages
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BATCH_BUFFER                                          , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMP_FRAME_BUFFER                                     , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SWITCH_BUFFER                                 , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CURSOR                                                , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAY_STATIC_IMG_FOR_SMOOTH_ROTATION_BUFFER         , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DUMMY_PAGE                                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GDI_SURFACE                                           , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GENERIC_KMD_RESOURCE                                  , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BATCH_BUFFER                                          , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMP_FRAME_BUFFER                                     , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SWITCH_BUFFER                                 , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CURSOR                                                , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAY_STATIC_IMG_FOR_SMOOTH_ROTATION_BUFFER         , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DUMMY_PAGE                                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GDI_SURFACE                                           , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GENERIC_KMD_RESOURCE                                  , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
 // GMM_RESOURCE_USAGE_GFX_RING is only used if WaEnableRingHostMapping is enabled.
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GFX_RING                                              , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GTT_TRANSFER_REGION                                   , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HW_CONTEXT                                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATE_MANAGER_KERNEL_STATE                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_STAGING_SURFACE                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBM_BUFFER                                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_NNDI_BUFFER                                           , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OVERLAY_MBM                                           , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRIMARY_SURFACE                                       , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SCREEN_PROTECTION_INTERMEDIATE_SURFACE                , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADOW_SURFACE                                        , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SM_SCRATCH_STATE                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATUS_PAGE                                           , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TIMER_PERF_QUEUE                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNKNOWN                                               , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNMAP_PAGING_RESERVED_GTT_DMA_BUFFER                  , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VSC_BATCH_BUFFER                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WA_BATCH_BUFFER                                       , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GFX_RING                                              , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GTT_TRANSFER_REGION                                   , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HW_CONTEXT                                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATE_MANAGER_KERNEL_STATE                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_STAGING_SURFACE                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBM_BUFFER                                            , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_NNDI_BUFFER                                           , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OVERLAY_MBM                                           , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRIMARY_SURFACE                                       , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SCREEN_PROTECTION_INTERMEDIATE_SURFACE                , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADOW_SURFACE                                        , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SM_SCRATCH_STATE                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATUS_PAGE                                           , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TIMER_PERF_QUEUE                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNKNOWN                                               , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNMAP_PAGING_RESERVED_GTT_DMA_BUFFER                  , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VSC_BATCH_BUFFER                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WA_BATCH_BUFFER                                       , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
 
 //
 // 3D Usages
 //
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UMD_BATCH_BUFFER                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BINDING_TABLE_POOL                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONSTANT_BUFFER_POOL                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEPTH_BUFFER                                          , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAYABLE_RENDER_TARGET                             , 0   , EDRAM, 0  , EDRAM  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GATHER_POOL                                           , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_SURFACE_STATE                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_DYNAMIC_STATE                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE_UC                                 , 0   , 0    , 0  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_STATELESS_DATA_PORT                              , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INDIRECT_OBJECT                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INSTRUCTION                                      , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HIZ                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER                                          , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MCS                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PUSH_CONSTANT_BUFFER                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PULL_CONSTANT_BUFFER                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_QUERY                                                 , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET                                         , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE                                       , 0   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STAGING                                               , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STENCIL_BUFFER                                        , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAM_OUTPUT_BUFFER                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_POOL                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE_LLC_BYPASS                            , 0   , 1    , 1  , 0  , 3 ,    0,     0,       0,      1,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UMD_BATCH_BUFFER                                      , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BINDING_TABLE_POOL                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONSTANT_BUFFER_POOL                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEPTH_BUFFER                                          , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAYABLE_RENDER_TARGET                             , 0   , EDRAM, 0  , EDRAM  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GATHER_POOL                                           , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_SURFACE_STATE                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_DYNAMIC_STATE                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE_UC                                 , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_STATELESS_DATA_PORT                              , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INDIRECT_OBJECT                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INSTRUCTION                                      , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HIZ                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER                                          , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_COHERENT_UC                           , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_CACHED                                , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MCS                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PUSH_CONSTANT_BUFFER                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PULL_CONSTANT_BUFFER                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_QUERY                                                 , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET                                         , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE                                       , 0   , 1    , 1  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STAGING                                               , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STENCIL_BUFFER                                        , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAM_OUTPUT_BUFFER                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_POOL                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE_LLC_BYPASS                            , 0   , 1    , 1  , 0  , 0 ,    0,     0,       0,      1,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MOCS_62                                               , 1   , 0    , 0  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION                                           , 1   , 1    , 0  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
 
 
 // Tiled Resource
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_DEPTH_BUFFER                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_HIZ                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_MCS                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_CCS                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET_AND_SHADER_RESOURCE               , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_SHADER_RESOURCE                                 , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_UAV                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_DEPTH_BUFFER                                    , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_HIZ                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_MCS                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_CCS                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET_AND_SHADER_RESOURCE               , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_SHADER_RESOURCE                                 , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_UAV                                             , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UAV                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER                                         , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OGL_WSTN_VERTEX_BUFFER                                , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET_AND_SHADER_RESOURCE                     , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WDDM_HISTORY_BUFFER                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SAVE_RESTORE                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UAV                                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER                                         , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_COHERENT_UC                          , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_CACHED                               , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OGL_WSTN_VERTEX_BUFFER                                , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET_AND_SHADER_RESOURCE                     , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WDDM_HISTORY_BUFFER                                   , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SAVE_RESTORE                                  , 1   , 1    , 1  , 0  , 3 ,    0,     0,       0,      0,    0,   0);
 
 
 //
 // CM USAGES
 //
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_SurfaceState,                                            1   , 1    , 1  , 0  , 3 ,     0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_L3_SurfaceState,                                      1   , 1    , 0  , 0  , 3 ,     0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_LLC_ELLC_SurfaceState,                                0   , 0    , 1  , 0  , 3 ,     0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_LLC_SurfaceState,                                     0   , 1    , 1  , 0  , 3,      0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_ELLC_SurfaceState,                                    1   , 0    , 1  , 0  , 3,      0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_LLC_L3_SurfaceState,                                  0   , 1    , 0  , 0  , 3,      0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_ELLC_L3_SurfaceState,                                 1   , 0    , 0  , 0  , 3,      0,     0,      0,       0,    0,   0,  0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_CACHE_SurfaceState,                                   0   , 0    , 0  , 0  , 3,      0,     0,      0,       0,    0,   0,  0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_SurfaceState,                                            1   , 1    , 1  , 0  , 3 ,     0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_L3_SurfaceState,                                      1   , 1    , 0  , 0  , 3 ,     0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_LLC_ELLC_SurfaceState,                                0   , 0    , 1  , 0  , 0 ,     0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_LLC_SurfaceState,                                     0   , 1    , 1  , 0  , 0,      0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_ELLC_SurfaceState,                                    1   , 0    , 1  , 0  , 3,      0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_LLC_L3_SurfaceState,                                  0   , 1    , 0  , 0  , 0,      0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_ELLC_L3_SurfaceState,                                 1   , 0    , 0  , 0  , 3,      0,     0,      0,       0,    0,   0);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_CACHE_SurfaceState,                                   0   , 0    , 0  , 0  , 0,      0,     0,      0,       0,    0,   0);
 
 
 //
 // MP USAGES
 //
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_BEGIN,                                                   0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT,                                                 0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState,                                            1   , EDRAM, 1  , 0  , 1,     0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_AGE3_SurfaceState,                                       1   , EDRAM, 1  , 0  , 3,     0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_END,                                                     0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_BEGIN,                                                   0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT,                                                 0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState,                                            1   , EDRAM, 1  , 0  , 1,     0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_AGE3_SurfaceState,                                       1   , EDRAM, 1  , 0  , 3,     0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_END,                                                     0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0);
 
 // MHW - SFC
-DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface,                               0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_AvsLineBufferSurface,                               1   , EDRAM, 1  , 0  , 1,     0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_IefLineBufferSurface,                               1   , EDRAM, 1  , 0  , 1,     0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface,                               0   , 0    , 0  , 0  , 0,     0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_AvsLineBufferSurface,                               1   , EDRAM, 1  , 0  , 1,     0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_IefLineBufferSurface,                               1   , EDRAM, 1  , 0  , 1,     0,     0,       0,      0,    0,   0);
 
 //Media GMM Resource USAGES
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC                                  , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POST_DEBLOCKING_CODEC                                 , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE                  , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_DECODE                  , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAMOUT_DATA_CODEC                                  , 0   , 0        , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INTRA_ROWSTORE_SCRATCH_BUFFER_CODEC                   , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC        , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC                               , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_STATUS_BUFFER_CODEC                        , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_BITSTREAM_OBJECT_DECODE                  , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC                          , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFD_INDIRECT_IT_COEF_OBJECT_DECODE                    , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC                     , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BSDMPC_ROWSTORE_SCRATCH_BUFFER_CODEC                  , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MPR_ROWSTORE_SCRATCH_BUFFER_CODEC                     , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BITPLANE_READ_CODEC                                   , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_AACSBIT_VECTOR_CODEC                                  , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DIRECTMV_BUFFER_CODEC                                 , 0   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_CURR_ENCODE                                   , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_REF_ENCODE                                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DATA_ENCODE                                , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE                        , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_DST                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_DISTORTION_ENCODE                          , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ME_DISTORTION_ENCODE                      , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PAK_OBJECT_ENCODE                                     , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_FLATNESS_CHECK_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_CURBE_ENCODE                            , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC                          , 1   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_STREAMIN_CODEC                                  , 0   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC                                  , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POST_DEBLOCKING_CODEC                                 , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE                  , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_DECODE                  , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAMOUT_DATA_CODEC                                  , 0   , 0        , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INTRA_ROWSTORE_SCRATCH_BUFFER_CODEC                   , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC        , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC                               , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_STATUS_BUFFER_CODEC                        , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_BITSTREAM_OBJECT_DECODE                  , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC                          , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFD_INDIRECT_IT_COEF_OBJECT_DECODE                    , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC                     , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BSDMPC_ROWSTORE_SCRATCH_BUFFER_CODEC                  , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MPR_ROWSTORE_SCRATCH_BUFFER_CODEC                     , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BITPLANE_READ_CODEC                                   , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_AACSBIT_VECTOR_CODEC                                  , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DIRECTMV_BUFFER_CODEC                                 , 0   , EDRAM    , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_CURR_ENCODE                                   , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_REF_ENCODE                                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DATA_ENCODE                                , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE                        , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_DST                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_DISTORTION_ENCODE                          , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ME_DISTORTION_ENCODE                      , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PAK_OBJECT_ENCODE                                     , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_FLATNESS_CHECK_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_CURBE_ENCODE                            , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC                          , 1   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_STREAMIN_CODEC                                  , 0   , EDRAM    , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_CODEC                                          , 0   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_CODEC                                         , 0   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MV_CODEC                                          , 0   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC                                , 0   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC                          , 0   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC                          , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC                           , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC                         , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_CODEC                                          , 0   , EDRAM    , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_CODEC                                         , 0   , EDRAM    , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MV_CODEC                                          , 0   , EDRAM    , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC                                , 0   , 0        , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC                          , 0   , 0        , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC                          , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC                           , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC                         , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_ILDB_STREAM_OUT_BUFFER_CODEC               , 0   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC                  , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC                   , 0   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC                  , 0   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC                           , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_ILDB_STREAM_OUT_BUFFER_CODEC               , 0   , 0        , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC                  , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC                   , 0   , 0        , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC                  , 0   , EDRAM    , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC                           , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_UNCACHED                                      , 0   , 0        , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_ONLY                                     , 0   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_ONLY                                 , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_L3                                   , 1   , EDRAM    , 1  , 0  , 3,    0 ,    0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_UNCACHED                                      , 0   , 0        , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_ONLY                                     , 0   , EDRAM    , 0  , 0  , 0,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_ONLY                                 , 1   , EDRAM    , 0  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_L3                                   , 1   , EDRAM    , 1  , 0  , 3,    0 ,    0,       0,      0,    0,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_HISTORY_ENCODE                            , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SOFTWARE_SCOREBOARD_ENCODE                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_MV_DATA_ENCODE                             , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DISTORTION_ENCODE                          , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_4XME_DISTORTION_ENCODE                        , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTRA_DISTORTION_ENCODE                       , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MB_STATS_ENCODE                                       , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_STATS_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_READ_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_WRITE_ENCODE                        , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_COMBINED_ENC_ENCODE                           , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_CONSTANT_DATA_ENCODE                      , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTERMEDIATE_CU_RECORD_SURFACE_ENCODE         , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SCRATCH_ENCODE                                , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_LCU_LEVEL_DATA_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_INPUT_ENCODE                      , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_OUTPUT_ENCODE                     , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_DEBUG_ENCODE                                  , 0   , 0        , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CONSTANT_TABLE_ENCODE                     , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_RECORD_ENCODE                          , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_MV_TEMPORAL_BUFFER_ENCODE                 , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_PACKET_FOR_PAK_ENCODE                  , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED1_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED2_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FRAME_STATS_STREAMOUT_DATA_CODEC                      , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_LINE_BUFFER_CODEC      , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_COLUMN_BUFFER_CODEC    , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_LINE_CODEC                                , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_COLUMN_CODEC                              , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_LINE_CODEC                               , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_COLUMN_CODEC                             , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC                  , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HUC_VIRTUAL_ADDR_REGION_BUFFER_CODEC                  , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SIZE_STREAMOUT_CODEC                                  , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC                        , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC                        , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MAD_ENCODE                                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_IMAGESTATE_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_BRC_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MB_BRC_CONST_ENCODE                           , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_MB_QP_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ROI_ENCODE                                , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBDISABLE_SKIPMAP_CODEC                               , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SLICE_MAP_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_WP_DOWNSAMPLED_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_VDENC_IMAGESTATE_ENCODE                       , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_HISTORY_ENCODE                            , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SOFTWARE_SCOREBOARD_ENCODE                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_MV_DATA_ENCODE                             , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DISTORTION_ENCODE                          , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_4XME_DISTORTION_ENCODE                        , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTRA_DISTORTION_ENCODE                       , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MB_STATS_ENCODE                                       , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_STATS_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_READ_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_WRITE_ENCODE                        , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_COMBINED_ENC_ENCODE                           , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_CONSTANT_DATA_ENCODE                      , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTERMEDIATE_CU_RECORD_SURFACE_ENCODE         , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SCRATCH_ENCODE                                , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_LCU_LEVEL_DATA_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_INPUT_ENCODE                      , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_OUTPUT_ENCODE                     , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_DEBUG_ENCODE                                  , 0   , 0        , 0  , 0  , 0,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CONSTANT_TABLE_ENCODE                     , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_RECORD_ENCODE                          , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_MV_TEMPORAL_BUFFER_ENCODE                 , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_PACKET_FOR_PAK_ENCODE                  , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED1_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED2_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FRAME_STATS_STREAMOUT_DATA_CODEC                      , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_LINE_BUFFER_CODEC      , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_COLUMN_BUFFER_CODEC    , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_LINE_CODEC                                , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_COLUMN_CODEC                              , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_LINE_CODEC                               , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_COLUMN_CODEC                             , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC                  , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HUC_VIRTUAL_ADDR_REGION_BUFFER_CODEC                  , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SIZE_STREAMOUT_CODEC                                  , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC                        , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC                        , 1   , EDRAM    , 0  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MAD_ENCODE                                    , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_IMAGESTATE_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_BRC_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MB_BRC_CONST_ENCODE                           , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_MB_QP_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ROI_ENCODE                                , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBDISABLE_SKIPMAP_CODEC                               , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SLICE_MAP_ENCODE                              , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_WP_DOWNSAMPLED_ENCODE                         , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_VDENC_IMAGESTATE_ENCODE                       , 1   , EDRAM    , 1  , 0  , 3,    0,     0,       0,      0,    0,   0);
 
 /**********************************************************************************/
 
 //
 // OCL Usages
 //
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER                                            , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST                                      , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC                                     , 0   , 0    , 0 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED                       , 1   , 1    , 0 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_IMAGE                                             , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST                                      , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST_HDC                                  , 1   , 1    , 1,   0  , 3 ,    0,     0,       0,      0,    0,   0,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SCRATCH                                           , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRIVATE_MEM                                       , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRINTF_BUFFER                                     , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER                                 , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER                              , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED         , 1   , 1    , 0 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_ISH_HEAP_BUFFER                                   , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TAG_MEMORY_BUFFER                                 , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TEXTURE_BUFFER                                    , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SELF_SNOOP_BUFFER                                 , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    3,   0,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER                                            , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST                                      , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC                                     , 0   , 0    , 0 ,  0  , 0 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED                       , 1   , 1    , 0 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_IMAGE                                             , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST                                      , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST_HDC                                  , 1   , 1    , 1,   0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SCRATCH                                           , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRIVATE_MEM                                       , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRINTF_BUFFER                                     , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER                                 , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER                              , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED         , 1   , 1    , 0 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_ISH_HEAP_BUFFER                                   , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TAG_MEMORY_BUFFER                                 , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TEXTURE_BUFFER                                    , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    0,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SELF_SNOOP_BUFFER                                 , 1   , 1    , 1 ,  0  , 3 ,    0,     0,       0,      0,    3,   0);
 /**********************************************************************************/
 
 // Cross Adapter
-DEFINE_CACHE_ELEMENT( GMM_RESOURCE_USAGE_XADAPTER_SHARED_RESOURCE                             , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0,    0);
+DEFINE_CACHE_ELEMENT( GMM_RESOURCE_USAGE_XADAPTER_SHARED_RESOURCE                             , 0   , 0    , 0  , 0  , 0 ,    0,     0,       0,      0,    0,   0);
 /**********************************************************************************/
 
 #include "GmmCachePolicyUndefineConditionals.h"
diff --git a/Source/GmmLib/CachePolicy/GmmGen8CachePolicy.cpp b/Source/GmmLib/CachePolicy/GmmGen8CachePolicy.cpp
index 96302db..3d7b50c 100644
--- a/Source/GmmLib/CachePolicy/GmmGen8CachePolicy.cpp
+++ b/Source/GmmLib/CachePolicy/GmmGen8CachePolicy.cpp
@@ -39,7 +39,7 @@
 
     __GMM_ASSERTPTR(pCachePolicy, GMM_ERROR);
 
-#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, wt, age) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, wt, age, 0, 0, 0, 0, 0, 0, 0, 0)
+#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, wt, age) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, wt, age, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 #include "GmmGen8CachePolicy.h"
 
     {
diff --git a/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.cpp b/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.cpp
index 3ae7767..06500b3 100644
--- a/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.cpp
+++ b/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.cpp
@@ -40,27 +40,27 @@
     __GMM_ASSERTPTR(pCachePolicy, GMM_ERROR);
 
 #if defined(GMM_DYNAMIC_MOCS_TABLE)
-#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, age, i915) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, 0, age, 0, 0, 0, 0, 0, 0, 0, 0)
+#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, age, i915) DEFINE_CP_ELEMENT(usage, llc, ellc, l3, 0, age, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 #else
 // i915 only supports three GEN9 MOCS entires:
 //     MOCS[0]...LLC=0, ELLC=0, L3=0, AGE=0
 //     MOCS[1]...<N/A for GmmLib Purposes>
 //     MOCS[2]...LLC=1, ELLC=1, L3=1, AGE=3
-#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, age, i915)                \
-    do                                                                       \
-    {                                                                        \
-        if((i915) == 0)                                                      \
-        {                                                                    \
-            DEFINE_CP_ELEMENT(usage, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); \
-        }                                                                    \
-        else if((i915) == 2)                                                 \
-        {                                                                    \
-            DEFINE_CP_ELEMENT(usage, 1, 1, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0); \
-        }                                                                    \
-        else                                                                 \
-        {                                                                    \
-            GMM_ASSERTDPF(0, "Invalid i915 MOCS specified");                 \
-        }                                                                    \
+#define DEFINE_CACHE_ELEMENT(usage, llc, ellc, l3, age, i915)                           \
+    do                                                                                  \
+    {                                                                                   \
+        if((i915) == 0)                                                                 \
+        {                                                                               \
+            DEFINE_CP_ELEMENT(usage, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\
+        }                                                                               \
+        else if((i915) == 2)                                                            \
+        {                                                                               \
+            DEFINE_CP_ELEMENT(usage, 1, 1, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\
+        }                                                                               \
+        else                                                                            \
+        {                                                                               \
+            GMM_ASSERTDPF(0, "Invalid i915 MOCS specified");                            \
+        }                                                                               \
     } while(0) ////////////////////////////////////////////////////////////////
 #endif
 #include "GmmGen9CachePolicy.h"
diff --git a/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp b/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp
index 5f60a6f..3112eb4 100644
--- a/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp
@@ -75,7 +75,7 @@
         EXPECT_EQ(0, Mocs.L3.Reserved) << "Usage# " << Usage << ": Reserved field is non-zero";
 
         // Check if Mocs Index is not greater than GMM_GEN9_MAX_NUMBER_MOCS_INDEXES
-        EXPECT_GT(GMM_GEN9_MAX_NUMBER_MOCS_INDEXES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (62)";
+        EXPECT_GT(GMM_MAX_NUMBER_MOCS_INDEXES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (62)";
 
         // Check of assigned Index setting is appropriate for HDCL1 setting
         if(ClientRequest.HDCL1)
@@ -84,7 +84,18 @@
         }
         else
         {
-            EXPECT_LT(AssignedMocsIdx, GMM_GEN10_HDCL1_MOCS_INDEX_START) << "Usage# " << Usage << ": Incorrect Index for HDCL1 setting";
+            if(Usage == GMM_RESOURCE_USAGE_MOCS_62)
+            {
+                EXPECT_EQ(AssignedMocsIdx, 62) << "Usage# " << Usage << ": Incorrect Index for MOCS62 usage";
+            }
+            else if(Usage == GMM_RESOURCE_USAGE_L3_EVICTION)
+            {
+                EXPECT_EQ(AssignedMocsIdx, 63) << "Usage# " << Usage << ": Incorrect Index for MOCS63 usage";
+            }
+            else
+            {
+                EXPECT_LT(AssignedMocsIdx, GMM_GEN10_HDCL1_MOCS_INDEX_START) << "Usage# " << Usage << ": Incorrect Index for HDCL1 setting";
+            }
         }
 
         if(ClientRequest.L3)
@@ -107,9 +118,7 @@
 
 void CTestGen11CachePolicy::CheckLlcEdramCachePolicy()
 {
-    const uint32_t TargetCache_ELLC     = 0;
-    const uint32_t TargetCache_LLC      = 1;
-    const uint32_t TargetCache_LLC_ELLC = 2;
+    const uint32_t TargetCache_LLC = 1;
 
     const uint32_t LeCC_UNCACHEABLE  = 0x1;
     const uint32_t LeCC_WB_CACHEABLE = 0x3;
@@ -138,7 +147,7 @@
         EXPECT_EQ(ClientRequest.SSO, Mocs.LeCC.SelfSnoop) << "Usage# " << Usage << ": Self Snoop is non-zero";
 
         // Check if Mocs Index is not greater than GMM_GEN9_MAX_NUMBER_MOCS_INDEXES
-        EXPECT_GT(GMM_GEN9_MAX_NUMBER_MOCS_INDEXES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (62)";
+        EXPECT_GT(GMM_MAX_NUMBER_MOCS_INDEXES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (62)";
 
         // Check of assigned Index setting is appropriate for HDCL1 setting
         if(ClientRequest.HDCL1)
@@ -147,42 +156,29 @@
         }
         else
         {
-            EXPECT_LT(AssignedMocsIdx, GMM_GEN10_HDCL1_MOCS_INDEX_START) << "Usage# " << Usage << ": Incorrect Index for HDCL1 setting";
+            if(Usage == GMM_RESOURCE_USAGE_MOCS_62)
+            {
+                EXPECT_EQ(AssignedMocsIdx, 62) << "Usage# " << Usage << ": Incorrect Index for MOCS62 usage";
+            }
+            else if(Usage == GMM_RESOURCE_USAGE_L3_EVICTION)
+            {
+                EXPECT_EQ(AssignedMocsIdx, 63) << "Usage# " << Usage << ": Incorrect Index for MOCS63 usage";
+            }
+            else
+            {
+                EXPECT_LT(AssignedMocsIdx, GMM_GEN10_HDCL1_MOCS_INDEX_START) << "Usage# " << Usage << ": Incorrect Index for HDCL1 setting";
+            }
         }
 
-        if(!ClientRequest.LLC && !ClientRequest.ELLC) // Uncached
+        if(ClientRequest.LLC) // LLC only
         {
-            EXPECT_EQ(LeCC_UNCACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC/eDRAM cachebility setting";
+            EXPECT_EQ(TargetCache_LLC, Mocs.LeCC.TargetCache) << "Usage# " << Usage << ": Incorrect target cache setting";
+
+            EXPECT_EQ(LeCC_WB_CACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC/eDRAM cachebility setting";
         }
         else
         {
-
-
-            if(ClientRequest.LLC && !ClientRequest.ELLC) // LLC only
-            {
-                EXPECT_EQ(TargetCache_LLC, Mocs.LeCC.TargetCache) << "Usage# " << Usage << ": Incorrect target cache setting";
-
-                EXPECT_EQ(LeCC_WB_CACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC/eDRAM cachebility setting";
-            }
-            else if(!ClientRequest.LLC && ClientRequest.ELLC) // eLLC only
-            {
-                EXPECT_EQ(TargetCache_ELLC, Mocs.LeCC.TargetCache) << "Usage# " << Usage << ": Incorrect target cache setting";
-
-                if(ClientRequest.WT)
-                {
-                    EXPECT_EQ(LeCC_WT_CACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC/eDRAM cachebility setting";
-                }
-                else
-                {
-                    EXPECT_EQ(LeCC_WB_CACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC/eDRAM cachebility setting";
-                }
-            }
-            else // LLC & eLLC set
-            {
-                EXPECT_EQ(TargetCache_LLC_ELLC, Mocs.LeCC.TargetCache) << "Usage# " << Usage << ": Incorrect target cache setting";
-
-                EXPECT_EQ(LeCC_WB_CACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC/eDRAM cachebility setting";
-            }
+            EXPECT_EQ(LeCC_UNCACHEABLE, Mocs.LeCC.Cacheability) << "Usage# " << Usage << ": Incorrect LLC cachebility setting";
         }
     }
 }
diff --git a/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyGen11.h b/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyGen11.h
index 1a8e31e..e6c1aaa 100644
--- a/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyGen11.h
+++ b/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyGen11.h
@@ -30,6 +30,8 @@
         public GmmGen10CachePolicy
     {
         public:
+        uint32_t CurrentMaxSpecialMocsIndex;
+
             /* Constructors */
             GmmGen11CachePolicy(GMM_CACHE_POLICY_ELEMENT *pCachePolicy) :GmmGen10CachePolicy(pCachePolicy)
             {
@@ -38,8 +40,16 @@
             {
             }
 
+            virtual uint32_t GetMaxSpecialMocsIndex()
+            {
+                return CurrentMaxSpecialMocsIndex;
+            }
+
+            int32_t IsSpecialMOCSUsage(GMM_RESOURCE_USAGE_TYPE Usage, bool &UpdateMOCS);
+
             /* Function prototypes */
             GMM_STATUS InitCachePolicy();
+            void SetUpMOCSTable();
     };
 }
 #endif // #ifdef __cplusplus
\ No newline at end of file
diff --git a/Source/GmmLib/inc/External/Common/GmmCachePolicy.h b/Source/GmmLib/inc/External/Common/GmmCachePolicy.h
index 2a6b476..e03e7ce 100644
--- a/Source/GmmLib/inc/External/Common/GmmCachePolicy.h
+++ b/Source/GmmLib/inc/External/Common/GmmCachePolicy.h
@@ -53,7 +53,10 @@
             uint32_t                   HDCL1       : 1; // HDC L1 caching enable/disable
             uint32_t                   L3Eviction  : 2; // Specify L3-eviction type (NA, ReadOnly, Standard, Special)
             uint32_t                   Initialized : 1;
-            uint32_t                   Reserved    :10;
+            uint32_t                   SegOv       : 3; // Override seg-pref (none, local-only, sys-only, etc)
+            uint32_t                   GlbGo       : 1; // Global GO point - L3 or Memory
+            uint32_t                   UcLookup    : 1; // Snoop L3 for uncached 
+            uint32_t                   Reserved    : 5;
         };
         uint32_t Value;
     };
@@ -61,7 +64,8 @@
     MEMORY_OBJECT_CONTROL_STATE               MemoryObjectOverride;
     MEMORY_OBJECT_CONTROL_STATE               MemoryObjectNoOverride;
     GMM_PTE_CACHE_CONTROL_BITS                PTE;
-    uint32_t                       			  Override;
+    uint32_t                                  Override;
+    uint32_t                                  IsOverridenByRegkey; // Flag to indicate If usage settings are overridden by regkey
 }GMM_CACHE_POLICY_ELEMENT;
 
 // One entry in the SKL/CNL cache lookup table
@@ -253,6 +257,9 @@
         if (L3Eviction != -1)                                                   \
         {                                                                       \
             pCachePolicy[Usage].L3Eviction = L3Eviction;                        \
+        }                                                                       \
+        {                                                                       \
+            pCachePolicy[Usage].IsOverridenByRegkey = 1;                        \
         }
 
 #ifdef __GMM_KMD__
diff --git a/Source/GmmLib/inc/External/Common/GmmCachePolicyCommon.h b/Source/GmmLib/inc/External/Common/GmmCachePolicyCommon.h
index 76db55d..43fc980 100644
--- a/Source/GmmLib/inc/External/Common/GmmCachePolicyCommon.h
+++ b/Source/GmmLib/inc/External/Common/GmmCachePolicyCommon.h
@@ -26,6 +26,7 @@
 #include "GmmResourceInfoExt.h"
 
 #if defined(_WIN32)
+    // Applicable upto Gen9, Gen11+ gmmlib provides Cross-OS Fixed MOCS table as default support.
     #define GMM_DYNAMIC_MOCS_TABLE
 #endif
 
@@ -79,7 +80,7 @@
             #endif
             GMM_GFX_MEMORY_TYPE GetWantedMemoryType(GMM_CACHE_POLICY_ELEMENT CachePolicy);
 
-            #define DEFINE_CP_ELEMENT(Usage, llc, ellc, l3, wt, age, aom, lecc_scc, l3_scc, scf, sso, cos, hdcl1, l3evict)   \
+            #define DEFINE_CP_ELEMENT(Usage, llc, ellc, l3, wt, age, aom, lecc_scc, l3_scc, scf, sso, cos, hdcl1, l3evict, segov, glbgo, uclookup)   \
             do {                                                                                                             \
                     pCachePolicy[Usage].LLC         = (llc);                                                                 \
                     pCachePolicy[Usage].ELLC        = (ellc);                                                                \
@@ -94,6 +95,9 @@
                     pCachePolicy[Usage].CoS         = (cos);                                                                 \
                     pCachePolicy[Usage].HDCL1       = (hdcl1);                                                               \
                     pCachePolicy[Usage].L3Eviction  = (l3evict);                                                             \
+                    pCachePolicy[Usage].SegOv       = (segov);                                                               \
+                    pCachePolicy[Usage].GlbGo       = (glbgo);                                                               \
+                    pCachePolicy[Usage].UcLookup    = (uclookup);                                                            \
                     pCachePolicy[Usage].Initialized = 1;                                                                     \
             } while(0)
 
@@ -113,4 +117,4 @@
             }
     };
 }
-#endif // #ifdef __cplusplus
\ No newline at end of file
+#endif // #ifdef __cplusplus
diff --git a/Source/GmmLib/inc/External/Common/GmmLibDllName.h b/Source/GmmLib/inc/External/Common/GmmLibDllName.h
index c695c49..306e507 100755
--- a/Source/GmmLib/inc/External/Common/GmmLibDllName.h
+++ b/Source/GmmLib/inc/External/Common/GmmLibDllName.h
@@ -29,7 +29,7 @@
     #if defined(_WIN64)
         #define GMM_UMD_DLL     "igdgmm64.dll"
     #else
-        #define GMM_UMD_DLL     "libigdgmm.so.8"
+        #define GMM_UMD_DLL     "libigdgmm.so.9"
     #endif
 #else
     #define GMM_ENTRY_NAME      "_OpenGmm@4"
@@ -40,6 +40,6 @@
     #if defined(_WIN32)
         #define GMM_UMD_DLL     "igdgmm32.dll"
     #else
-        #define GMM_UMD_DLL     "libigdgmm.so.8"
+        #define GMM_UMD_DLL     "libigdgmm.so.9"
     #endif
 #endif
diff --git a/Source/GmmLib/inc/Internal/Common/GmmLibInc.h b/Source/GmmLib/inc/Internal/Common/GmmLibInc.h
index e39eab3..68c4592 100644
--- a/Source/GmmLib/inc/Internal/Common/GmmLibInc.h
+++ b/Source/GmmLib/inc/Internal/Common/GmmLibInc.h
@@ -48,7 +48,6 @@
 #include "External/Common/GmmInfo.h"
 #include "../Utility/GmmUtility.h"
 
-#include "External/Common/GmmProto.h"                   // TBD: Move internal GmmLib protos
 #include "External/Common/GmmDebug.h"                   // Unified Definitions of GMM_ASSERT and GMM_DEBUG Macros
 
 #ifndef DXGKDDI_INTERFACE_VERSION_WDDM1_3
diff --git a/Source/inc/common/sku_wa.h b/Source/inc/common/sku_wa.h
index fe316c7..a82a5bf 100644
--- a/Source/inc/common/sku_wa.h
+++ b/Source/inc/common/sku_wa.h
@@ -91,6 +91,7 @@
         unsigned int   FtrFrameBufferLLC                : 1;  // Displayable Frame buffers cached in LLC
         unsigned int   FtrDriverFLR                     : 1;  // Enable Function Level Reset (Gen11+)
         unsigned int   FtrLocalMemory                   : 1;
+        unsigned int   FtrLLCBypass                     : 1;  // Partial tunneling of UC memory traffic via CCF (LLC Bypass)
     };