Xe_HP_SDV Unembargoed. (#43)

diff --git a/Source/GmmLib/CMakeLists.txt b/Source/GmmLib/CMakeLists.txt
index b022969..69938db 100644
--- a/Source/GmmLib/CMakeLists.txt
+++ b/Source/GmmLib/CMakeLists.txt
@@ -25,14 +25,14 @@
 
 # GmmLib Api Version used for so naming
 set(GMMLIB_API_MAJOR_VERSION 11)
-set(GMMLIB_API_MINOR_VERSION 2)
+set(GMMLIB_API_MINOR_VERSION 3)
 
 if(NOT DEFINED MAJOR_VERSION)
 	set(MAJOR_VERSION 11)
 endif()
 
 if(NOT DEFINED MINOR_VERSION)
-	set(MINOR_VERSION 2)
+	set(MINOR_VERSION 3)
 endif()
 
 if(NOT DEFINED PATCH_VERSION)
diff --git a/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp b/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp
index 466e98b..4b9acce 100644
--- a/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp
+++ b/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp
@@ -48,11 +48,13 @@
     switch(Usage)
     {
         case GMM_RESOURCE_USAGE_CCS:
-            __GMM_ASSERT(pCachePolicy[Usage].L3 == 0)      //Architecturally, CCS isn't L3-cacheable.
+            __GMM_ASSERT(pCachePolicy[Usage].L3 == 0 &&      //Architecturally, CCS isn't L3-cacheable.
+                         pCachePolicy[Usage].UcLookup == 0);  // On DG1/XE_HP_SDV, CCS Resource is never cached in L3, so LookUp is N/A
             MocsIdx = 60;
             break;
         case GMM_RESOURCE_USAGE_MOCS_62:
-            __GMM_ASSERT(pCachePolicy[Usage].L3 == 0); //Architecturally, TR/Aux-TT node isn't L3-cacheable.
+            __GMM_ASSERT(pCachePolicy[Usage].L3 == 0 &&
+                         pCachePolicy[Usage].UcLookup == 0); //Architecturally, TR/Aux-TT node isn't L3-cacheable.
             MocsIdx = 62;
             break;
         case GMM_RESOURCE_USAGE_L3_EVICTION:
@@ -87,7 +89,7 @@
 
     __GMM_ASSERTPTR(pCachePolicy, GMM_ERROR);
 
-#define DEFINE_CACHE_ELEMENT(usage, l3, l3_scc, hdcl1) DEFINE_CP_ELEMENT(usage, 0, 0, l3, 0, 0, 0, 0, l3_scc, 0, 0, 0, hdcl1, 0, 0, 0, 0)
+#define DEFINE_CACHE_ELEMENT(usage, l3, l3_scc, hdcl1, go, uclookup) DEFINE_CP_ELEMENT(usage, 0, 0, l3, 0, 0, 0, 0, l3_scc, 0, 0, 0, hdcl1, 0, 0, go, uclookup)
 
 #include "GmmGen12dGPUCachePolicy.h"
 
@@ -131,6 +133,7 @@
             switch(GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform))
             {
                 case IGFX_DG1:
+                case IGFX_XE_HP_SDV:
                     StartMocsIdx = 1; // Index 0 is reserved for Error
                     break;
                 default:
@@ -139,14 +142,14 @@
             }
 
             // No Special MOCS handling for next platform
-            if(GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) <= IGFX_DG1)
+            if(GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) <= IGFX_XE_HP_SDV)
             {
                 CPTblIdx = IsSpecialMOCSUsage((GMM_RESOURCE_USAGE_TYPE)Usage, SpecialMOCS);
             }
 
             // Applicable upto only
             if(pCachePolicy[Usage].HDCL1 &&
-               (GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) <= IGFX_DG1))
+               (GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) <= IGFX_XE_HP_SDV))
             {
                 UsageEle.HDCL1 = 1;
             }
@@ -163,6 +166,22 @@
                 UsageEle.L3.SCC = (uint16_t)pCachePolicy[Usage].L3_SCC;
             }
 
+            // Go/Lookup
+            // N/A for SpecialMOCS
+            // N/A for DG1, RKL
+            // Applicable for IGFX_XE_HP_SDV only
+            if(!SpecialMOCS &&
+               (FROMPRODUCT(XE_HP_SDV)))
+            {
+                if(pCachePolicy[Usage].L3 == 0)
+                {
+                    UsageEle.L3.GlobalGo = pCachePolicy[Usage].GlbGo;
+                }
+                UsageEle.L3.UCLookup = pCachePolicy[Usage].UcLookup;
+                __GMM_ASSERT((pCachePolicy[Usage].UcLookup) || (pCachePolicy[Usage].L3 == 0 && pCachePolicy[Usage].UcLookup == 0));
+            }
+
+
             //Special-case MOCS handling for MOCS Table Index 60-63
             if(CPTblIdx >= GMM_GEN12_MAX_NUMBER_MOCS_INDEXES)
             {
@@ -194,7 +213,9 @@
             {
                 for(j = StartMocsIdx; j <= CurrentMaxMocsIndex; j++)
                 {
-                    if(pCachePolicy[Usage].L3 == 0)
+                    if(pCachePolicy[Usage].L3 == 0 &&
+                       pCachePolicy[Usage].GlbGo == 0 &&
+                       pCachePolicy[Usage].UcLookup == 0)
                     {
                         CPTblIdx = StartMocsIdx;
                         break;
@@ -270,11 +291,13 @@
     CurrentMaxL1HdcMocsIndex                             = 0;
     CurrentMaxSpecialMocsIndex                           = 0;
 
-#define GMM_DEFINE_MOCS(Index, L3_ESC, L3_SCC, L3_CC, _HDCL1)        \
+#define GMM_DEFINE_MOCS(Index, L3_ESC, L3_SCC, L3_CC, L3_Go, L3_LookUp, _HDCL1)        \
     {                                                                                  \
         pCachePolicyTlbElement[Index].L3.ESC            = L3_ESC;                      \
         pCachePolicyTlbElement[Index].L3.SCC            = L3_SCC;                      \
         pCachePolicyTlbElement[Index].L3.Cacheability   = L3_CC;                       \
+        pCachePolicyTlbElement[Index].L3.GlobalGo       = L3_Go;                       \
+        pCachePolicyTlbElement[Index].L3.UCLookup       = L3_LookUp;                   \
         pCachePolicyTlbElement[Index].LeCC.Cacheability = 1;                           \
         pCachePolicyTlbElement[Index].LeCC.TargetCache  = 0;                           \
         pCachePolicyTlbElement[Index].LeCC.LRUM         = 0;                           \
@@ -294,31 +317,58 @@
     {
         //Default MOCS Table
         for(int index = 0; index < GMM_MAX_NUMBER_MOCS_INDEXES; index++)
-        {     //             Index     ESC	  SCC	  L3CC       HDCL1
-             GMM_DEFINE_MOCS( index  , 0     , 0     , 3     ,        0 )
+        {     //             Index     ESC    SCC    L3CC    Go      LookUp    HDCL1
+             GMM_DEFINE_MOCS( index  , 0     , 0     , 3     , 0     , 0       , 0 )
         }
         // Fixed MOCS Table
-        //              Index     ESC	  SCC	  L3CC    HDCL1
-        GMM_DEFINE_MOCS( 1      , 0     , 0     , 1     , 0 )
-        GMM_DEFINE_MOCS( 2      , 0     , 0     , 0     , 0 )
-        GMM_DEFINE_MOCS( 3      , 0     , 0     , 0     , 0 )
-        GMM_DEFINE_MOCS( 4      , 0     , 0     , 0     , 0 )
-        GMM_DEFINE_MOCS( 5      , 0     , 0     , 3     , 0 )
-        GMM_DEFINE_MOCS( 6      , 1     , 1     , 3     , 0 )
-        GMM_DEFINE_MOCS( 7      , 1     , 3     , 3     , 0 )
-        GMM_DEFINE_MOCS( 8      , 1     , 7     , 3     , 0 )
-        GMM_DEFINE_MOCS( 48     , 0     , 0     , 3     , 1 )
-        GMM_DEFINE_MOCS( 49     , 0     , 0     , 1     , 1 )
-        GMM_DEFINE_MOCS( 60     , 0     , 0     , 1     , 0 )
-        GMM_DEFINE_MOCS( 61     , 0     , 0     , 1     , 0 )
-        GMM_DEFINE_MOCS( 62     , 0     , 0     , 1     , 0 )
-        GMM_DEFINE_MOCS( 63     , 0     , 0     , 1     , 0 )
+        //              Index     ESC	  SCC	  L3CC    Go      LookUp    HDCL1
+        GMM_DEFINE_MOCS( 0      , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 1      , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 2      , 0     , 0     , 0     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 3      , 0     , 0     , 0     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 4      , 0     , 0     , 0     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 5      , 0     , 0     , 3     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 6      , 1     , 1     , 3     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 7      , 1     , 3     , 3     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 8      , 1     , 7     , 3     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 48     , 0     , 0     , 3     , 0     , 0       , 1 )
+        GMM_DEFINE_MOCS( 49     , 0     , 0     , 1     , 0     , 0       , 1 )
+        GMM_DEFINE_MOCS( 60     , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 61     , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 62     , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 63     , 0     , 0     , 1     , 0     , 0       , 0 )
 
         CurrentMaxMocsIndex         = 8;
         CurrentMaxL1HdcMocsIndex    = 49;
         CurrentMaxSpecialMocsIndex  = 63;
 
     }
+    else if (GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) == IGFX_XE_HP_SDV)
+     {
+        //Default MOCS Table
+        for(int index = 0; index < GMM_MAX_NUMBER_MOCS_INDEXES; index++)
+        {     //             Index     ESC    SCC    L3CC    Go      LookUp    HDCL1
+             GMM_DEFINE_MOCS( index  , 0     , 0     , 3     , 0     , 1       , 0 )
+        }
+        // Fixed MOCS Table
+        //              Index     ESC	  SCC	  L3CC    Go      LookUp    HDCL1
+        GMM_DEFINE_MOCS( 1      , 0     , 0     , 1     , 0     , 1       , 0 )
+        GMM_DEFINE_MOCS( 2      , 0     , 0     , 1     , 1     , 1       , 0 )
+        GMM_DEFINE_MOCS( 3      , 0     , 0     , 1     , 1     , 0       , 0 )
+        GMM_DEFINE_MOCS( 4      , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 5      , 0     , 0     , 3     , 0     , 1       , 0 )
+        GMM_DEFINE_MOCS( 48     , 0     , 0     , 3     , 0     , 1       , 1 )
+        GMM_DEFINE_MOCS( 49     , 0     , 0     , 1     , 0     , 1       , 1 )
+        GMM_DEFINE_MOCS( 60     , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 61     , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 62     , 0     , 0     , 1     , 0     , 0       , 0 )
+        GMM_DEFINE_MOCS( 63     , 0     , 0     , 1     , 0     , 0       , 0 )
+
+        CurrentMaxMocsIndex         = 5;
+        CurrentMaxL1HdcMocsIndex    = 49;
+        CurrentMaxSpecialMocsIndex  = 63;
+
+    }
 
 // clang-format on
 
diff --git a/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h b/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h
index 819fc7d..b98c669 100644
--- a/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h
+++ b/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h
@@ -30,258 +30,261 @@
 // L3_SCC = L3 skip caching control (disabled if L3_SCC = 0)
 // 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                                                               , L3 , L3_SCC, HDCL1)
-/***************************************************************************************************************************************************/
+// GO = Global observable point for L3-uncached (0=Default is L3, 1= Memory)
+// UcLookup = Snoop L3 for uncached (0=Default is no-snoop, 1 =Snoop)
+//***********************************************************************************************************************************************************/
+//                   USAGE TYPE                                                               , L3 , L3_SCC, HDCL1, GO,  UcLookup)
+/************************************************************************************************************************************************************/
 
 // KMD Usages
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BATCH_BUFFER                                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMP_FRAME_BUFFER                                     , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SWITCH_BUFFER                                 , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CURSOR                                                , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAY_STATIC_IMG_FOR_SMOOTH_ROTATION_BUFFER         , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DUMMY_PAGE                                            , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GDI_SURFACE                                           , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GENERIC_KMD_RESOURCE                                  , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BATCH_BUFFER                                          , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMP_FRAME_BUFFER                                     , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SWITCH_BUFFER                                 , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CURSOR                                                , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAY_STATIC_IMG_FOR_SMOOTH_ROTATION_BUFFER         , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DUMMY_PAGE                                            , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GDI_SURFACE                                           , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GENERIC_KMD_RESOURCE                                  , 0  ,  0   ,    0,    0,   1);
 // GMM_RESOURCE_USAGE_GFX_RING is only used if WaEnableRingHostMapping is enabled.
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GFX_RING                                              , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GTT_TRANSFER_REGION                                   , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HW_CONTEXT                                            , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATE_MANAGER_KERNEL_STATE                            , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_STAGING_SURFACE                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBM_BUFFER                                            , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_NNDI_BUFFER                                           , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OVERLAY_MBM                                           , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRIMARY_SURFACE                                       , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SCREEN_PROTECTION_INTERMEDIATE_SURFACE                , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADOW_SURFACE                                        , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SM_SCRATCH_STATE                                      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATUS_PAGE                                           , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TIMER_PERF_QUEUE                                      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNKNOWN                                               , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNMAP_PAGING_RESERVED_GTT_DMA_BUFFER                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VSC_BATCH_BUFFER                                      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WA_BATCH_BUFFER                                       , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_OCA_BUFFER                                        , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GFX_RING                                              , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GTT_TRANSFER_REGION                                   , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HW_CONTEXT                                            , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATE_MANAGER_KERNEL_STATE                            , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_STAGING_SURFACE                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBM_BUFFER                                            , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_NNDI_BUFFER                                           , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OVERLAY_MBM                                           , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRIMARY_SURFACE                                       , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SCREEN_PROTECTION_INTERMEDIATE_SURFACE                , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADOW_SURFACE                                        , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SM_SCRATCH_STATE                                      , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATUS_PAGE                                           , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TIMER_PERF_QUEUE                                      , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNKNOWN                                               , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNMAP_PAGING_RESERVED_GTT_DMA_BUFFER                  , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VSC_BATCH_BUFFER                                      , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WA_BATCH_BUFFER                                       , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_OCA_BUFFER                                        , 0  ,  0   ,    0,    0,   1);
 
 //
 // 3D Usages
 //
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UMD_BATCH_BUFFER                                      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BINDING_TABLE_POOL                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS                                                   , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONSTANT_BUFFER_POOL                                  , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEPTH_BUFFER                                          , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAYABLE_RENDER_TARGET                             , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GATHER_POOL                                           , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_SURFACE_STATE                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_DYNAMIC_STATE                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE_UC                                 , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_STATELESS_DATA_PORT                              , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INDIRECT_OBJECT                                  , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INSTRUCTION                                      , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HIZ                                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER                                          , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_COHERENT_UC                           , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_CACHED                                , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MCS                                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PUSH_CONSTANT_BUFFER                                  , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PULL_CONSTANT_BUFFER                                  , 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_QUERY                                                 , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET                                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE                                       , 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STAGING                                               , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STENCIL_BUFFER                                        , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAM_OUTPUT_BUFFER                                  , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_POOL                                             , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE_LLC_BYPASS                            , 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MOCS_62                                               , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION                                           , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION_SPECIAL                                   , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UMD_BATCH_BUFFER                                      , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BINDING_TABLE_POOL                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS                                                   , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONSTANT_BUFFER_POOL                                  , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEPTH_BUFFER                                          , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAYABLE_RENDER_TARGET                             , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GATHER_POOL                                           , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_SURFACE_STATE                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_DYNAMIC_STATE                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE_UC                                 , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_STATELESS_DATA_PORT                              , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INDIRECT_OBJECT                                  , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INSTRUCTION                                      , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HIZ                                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER                                          , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_COHERENT_UC                           , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_CACHED                                , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MCS                                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PUSH_CONSTANT_BUFFER                                  , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PULL_CONSTANT_BUFFER                                  , 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_QUERY                                                 , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET                                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE                                       , 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STAGING                                               , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STENCIL_BUFFER                                        , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAM_OUTPUT_BUFFER                                  , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_POOL                                             , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE_LLC_BYPASS                            , 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MOCS_62                                               , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION                                           , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION_SPECIAL                                   , 0  ,  0   ,    0,    1,   0);
 
 // Tiled Resource
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_DEPTH_BUFFER                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_HIZ                                             , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_MCS                                             , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_CCS                                             , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET_AND_SHADER_RESOURCE               , 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_SHADER_RESOURCE                                 , 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_UAV                                             , 1  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_DEPTH_BUFFER                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_HIZ                                             , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_MCS                                             , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_CCS                                             , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET_AND_SHADER_RESOURCE               , 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_SHADER_RESOURCE                                 , 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_UAV                                             , 1  ,  0   ,    0,    0,   1);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UAV                                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER                                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_COHERENT_UC                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_CACHED                               , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OGL_WSTN_VERTEX_BUFFER                                , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POSH_VERTEX_BUFFER                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET_AND_SHADER_RESOURCE                     , 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WDDM_HISTORY_BUFFER                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SAVE_RESTORE                                  , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PTBR_PAGE_POOL                                        , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PTBR_BATCH_BUFFER                                     , 1  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UAV                                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER                                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_COHERENT_UC                          , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_CACHED                               , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OGL_WSTN_VERTEX_BUFFER                                , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POSH_VERTEX_BUFFER                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET_AND_SHADER_RESOURCE                     , 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WDDM_HISTORY_BUFFER                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SAVE_RESTORE                                  , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PTBR_PAGE_POOL                                        , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PTBR_BATCH_BUFFER                                     , 1  ,  0   ,    0,    0,   1);
 
 //
 // CM USAGES
 //
-//                   USAGE TYPE                                                               , L3 , L3_SCC, HDCL1)
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_SurfaceState,                                            1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_L1_Enabled_SurfaceState,                                 1  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_StateHeap,                                               1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_L3_SurfaceState,                                      0  ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_CACHE_SurfaceState,                                   0  ,  0   ,    0);
+//                   USAGE TYPE                                                               , L3 , L3_SCC, HDCL1, GO, UcLookup)
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_SurfaceState,                                            1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_L1_Enabled_SurfaceState,                                 1  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_StateHeap,                                               1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_L3_SurfaceState,                                      0  ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_CACHE_SurfaceState,                                   0  ,  0   ,    0,    1,   0);
 
 //
 // MP USAGES
 //
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_BEGIN,                                                   0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT,                                                 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT_FF,                                              0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT_RCS,                                             0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState,                                            1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState_FF,                                         0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState_RCS,                                        1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_END,                                                     0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_BEGIN,                                                   0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT,                                                 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT_FF,                                              0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT_RCS,                                             0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState,                                            1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState_FF,                                         0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState_RCS,                                        1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_END,                                                     0  ,  0   ,    0,    1,   0);
 
 // MHW - SFC
-DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface,                               0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_AvsLineBufferSurface,                               0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_IefLineBufferSurface,                               0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface,                               0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_AvsLineBufferSurface,                               0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_IefLineBufferSurface,                               0  ,  0   ,    0,    1,   0);
 
 //Media GMM Resource USAGES
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC                                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POST_DEBLOCKING_CODEC                                 , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_DECODE                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAMOUT_DATA_CODEC                                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INTRA_ROWSTORE_SCRATCH_BUFFER_CODEC                   , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC        , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC                               , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_STATUS_BUFFER_CODEC                        , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_BITSTREAM_OBJECT_DECODE                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFD_INDIRECT_IT_COEF_OBJECT_DECODE                    , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC                     , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BSDMPC_ROWSTORE_SCRATCH_BUFFER_CODEC                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MPR_ROWSTORE_SCRATCH_BUFFER_CODEC                     , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BITPLANE_READ_CODEC                                   , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_AACSBIT_VECTOR_CODEC                                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DIRECTMV_BUFFER_CODEC                                 , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_CURR_ENCODE                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_REF_ENCODE                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DATA_ENCODE                                , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE                        , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_FF                     , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_DST                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_DISTORTION_ENCODE                          , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ME_DISTORTION_ENCODE                      , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PAK_OBJECT_ENCODE                                     , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_FLATNESS_CHECK_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_CURBE_ENCODE                            , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_STREAMIN_CODEC                                  , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC                                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POST_DEBLOCKING_CODEC                                 , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_DECODE                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAMOUT_DATA_CODEC                                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INTRA_ROWSTORE_SCRATCH_BUFFER_CODEC                   , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC        , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC                               , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_STATUS_BUFFER_CODEC                        , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_BITSTREAM_OBJECT_DECODE                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC                          , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFD_INDIRECT_IT_COEF_OBJECT_DECODE                    , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC                     , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BSDMPC_ROWSTORE_SCRATCH_BUFFER_CODEC                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MPR_ROWSTORE_SCRATCH_BUFFER_CODEC                     , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BITPLANE_READ_CODEC                                   , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_AACSBIT_VECTOR_CODEC                                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DIRECTMV_BUFFER_CODEC                                 , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_CURR_ENCODE                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_REF_ENCODE                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DATA_ENCODE                                , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE                        , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_FF                     , 0  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_DST                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_DISTORTION_ENCODE                          , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ME_DISTORTION_ENCODE                      , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PAK_OBJECT_ENCODE                                     , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_FLATNESS_CHECK_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_CURBE_ENCODE                            , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_ROW_STORE_BUFFER_CODEC                          , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VDENC_STREAMIN_CODEC                                  , 0  ,  0   ,    0,    1,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_CODEC                                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_CODEC                                         , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MV_CODEC                                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC                                , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC                          , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC                           , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC                         , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_CODEC                                          , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_CODEC                                         , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MV_CODEC                                          , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC                                , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC                          , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC                          , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC                           , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC                         , 0  ,  0   ,    0,    1,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_ILDB_STREAM_OUT_BUFFER_CODEC               , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC                   , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC                           , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MACROBLOCK_ILDB_STREAM_OUT_BUFFER_CODEC               , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC                   , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC                           , 0  ,  0   ,    0,    1,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_UNCACHED                                      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_ONLY                                     , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_ONLY                                 , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_L3                                   , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS_MEDIA_WRITABLE                                    , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_UNCACHED                                      , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_ONLY                                     , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_ONLY                                 , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ELLC_LLC_L3                                   , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS_MEDIA_WRITABLE                                    , 0  ,  0   ,    0,    1,   0);
 
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_HISTORY_ENCODE                            , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SOFTWARE_SCOREBOARD_ENCODE                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_MV_DATA_ENCODE                             , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DISTORTION_ENCODE                          , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_4XME_DISTORTION_ENCODE                        , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTRA_DISTORTION_ENCODE                       , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MB_STATS_ENCODE                                       , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_STATS_ENCODE                              , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_READ_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_WRITE_ENCODE                        , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_COMBINED_ENC_ENCODE                           , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_CONSTANT_DATA_ENCODE                      , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTERMEDIATE_CU_RECORD_SURFACE_ENCODE         , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SCRATCH_ENCODE                                , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_LCU_LEVEL_DATA_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_INPUT_ENCODE                      , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_OUTPUT_ENCODE                     , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_DEBUG_ENCODE                                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CONSTANT_TABLE_ENCODE                     , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_RECORD_ENCODE                          , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_MV_TEMPORAL_BUFFER_ENCODE                 , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_PACKET_FOR_PAK_ENCODE                  , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED1_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED2_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FRAME_STATS_STREAMOUT_DATA_CODEC                      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_LINE_BUFFER_CODEC      , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_COLUMN_BUFFER_CODEC    , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_LINE_CODEC                                , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_COLUMN_CODEC                              , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_LINE_CODEC                               , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_COLUMN_CODEC                             , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HUC_VIRTUAL_ADDR_REGION_BUFFER_CODEC                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SIZE_STREAMOUT_CODEC                                  , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC                        , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC                        , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_RECORD_BUFFER_CODEC                              , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_SIZE_STAS_BUFFER_CODEC                           , 0  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MAD_ENCODE                                    , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_IMAGESTATE_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_BRC_ENCODE                              , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MB_BRC_CONST_ENCODE                           , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_MB_QP_ENCODE                              , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ROI_ENCODE                                , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBDISABLE_SKIPMAP_CODEC                               , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SLICE_MAP_ENCODE                              , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_WP_DOWNSAMPLED_ENCODE                         , 1  ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_VDENC_IMAGESTATE_ENCODE                       , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_HISTORY_ENCODE                            , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SOFTWARE_SCOREBOARD_ENCODE                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ME_MV_DATA_ENCODE                             , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MV_DISTORTION_ENCODE                          , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_4XME_DISTORTION_ENCODE                        , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTRA_DISTORTION_ENCODE                       , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MB_STATS_ENCODE                                       , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_STATS_ENCODE                              , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_READ_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PIC_STATE_WRITE_ENCODE                        , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_COMBINED_ENC_ENCODE                           , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_CONSTANT_DATA_ENCODE                      , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_INTERMEDIATE_CU_RECORD_SURFACE_ENCODE         , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SCRATCH_ENCODE                                , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_LCU_LEVEL_DATA_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_INPUT_ENCODE                      , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_HISTORY_OUTPUT_ENCODE                     , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_DEBUG_ENCODE                                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CONSTANT_TABLE_ENCODE                     , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_RECORD_ENCODE                          , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_MV_TEMPORAL_BUFFER_ENCODE                 , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_CU_PACKET_FOR_PAK_ENCODE                  , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED1_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_ENC_BCOMBINED2_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FRAME_STATS_STREAMOUT_DATA_CODEC                      , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_LINE_BUFFER_CODEC      , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_TILE_COLUMN_BUFFER_CODEC    , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_LINE_CODEC                                , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_MD_TILE_COLUMN_CODEC                              , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_LINE_CODEC                               , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HCP_SAO_TILE_COLUMN_CODEC                             , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HUC_VIRTUAL_ADDR_REGION_BUFFER_CODEC                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SIZE_STREAMOUT_CODEC                                  , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC                        , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC                        , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_RECORD_BUFFER_CODEC                              , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_SIZE_STAS_BUFFER_CODEC                           , 0  ,  0   ,    0,    1,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MAD_ENCODE                                    , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_PAK_IMAGESTATE_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MBENC_BRC_ENCODE                              , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_MB_BRC_CONST_ENCODE                           , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_MB_QP_ENCODE                              , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_BRC_ROI_ENCODE                                , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBDISABLE_SKIPMAP_CODEC                               , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_SLICE_MAP_ENCODE                              , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_WP_DOWNSAMPLED_ENCODE                         , 1  ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SURFACE_VDENC_IMAGESTATE_ENCODE                       , 0  ,  0   ,    0,    1,   0);
 
 /**********************************************************************************/
 
 //
 // OCL Usages
 //
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER                                            , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST                                      , 1 ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC                                     , 0 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED                       , 0 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_IMAGE                                             , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST                                      , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST_HDC                                  , 1 ,  0   ,    1);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SCRATCH                                           , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRIVATE_MEM                                       , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRINTF_BUFFER                                     , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER                                 , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER                              , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED         , 0 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_ISH_HEAP_BUFFER                                   , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TAG_MEMORY_BUFFER                                 , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TEXTURE_BUFFER                                    , 1 ,  0   ,    0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SELF_SNOOP_BUFFER                                 , 1 ,  0   ,    0);
+//                   USAGE TYPE                                                               , L3 , L3_SCC, HDCL1, GO, UcLookup)
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER                                            , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST                                      , 1 ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC                                     , 0 ,  0   ,    0,    1,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED                       , 0 ,  0   ,    0,    1,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_IMAGE                                             , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST                                      , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST_HDC                                  , 1 ,  0   ,    1,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SCRATCH                                           , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRIVATE_MEM                                       , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRINTF_BUFFER                                     , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER                                 , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER                              , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED         , 0 ,  0   ,    0,    1,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_ISH_HEAP_BUFFER                                   , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TAG_MEMORY_BUFFER                                 , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TEXTURE_BUFFER                                    , 1 ,  0   ,    0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SELF_SNOOP_BUFFER                                 , 1 ,  0   ,    0,    0,   1);
 /**********************************************************************************/
 
 // Cross Adapter
-DEFINE_CACHE_ELEMENT( GMM_RESOURCE_USAGE_XADAPTER_SHARED_RESOURCE                             , 0  ,  0   ,    0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_XADAPTER_SHARED_RESOURCE                              , 1  ,  0   ,    0,    0,   1);
 /**********************************************************************************/
 // Uncacheable copies
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE                                           , 0   , 0    ,   0);
-DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST                                             , 0   , 0    ,   0);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE                                           , 0   , 0    ,   0,    0,   1);
+DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST                                             , 0   , 0    ,   0,    0,   1);
 
 #include "GmmCachePolicyUndefineConditionals.h"
 
diff --git a/Source/GmmLib/GlobalInfo/GmmInfo.cpp b/Source/GmmLib/GlobalInfo/GmmInfo.cpp
index e203855..fa4cacf 100644
--- a/Source/GmmLib/GlobalInfo/GmmInfo.cpp
+++ b/Source/GmmLib/GlobalInfo/GmmInfo.cpp
@@ -437,10 +437,10 @@
     this->WaTable   = *pWaTable;
     this->GtSysInfo = *pGtSysInfo;
 
-    OverrideSkuWa();
-
     pGmmGlobalContext->pPlatformInfo = GmmLib::PlatformInfo::Create(Platform, false);
 
+    OverrideSkuWa();
+
     this->pGmmCachePolicy = GmmLib::GmmCachePolicyCommon::Create();
     if(this->pGmmCachePolicy == NULL)
     {
@@ -497,7 +497,10 @@
 
 void GMM_STDCALL GmmLib::Context::OverrideSkuWa()
 {
-    SkuTable.FtrTileY = true;
+    if((GFX_GET_CURRENT_PRODUCT(this->GetPlatformInfo().Platform) < IGFX_XE_HP_SDV))
+    {
+        SkuTable.FtrTileY = true;
+    }
 }
 
 #ifdef __GMM_KMD__ /*LINK CONTEXT TO GLOBAL*/
diff --git a/Source/GmmLib/Linux.cmake b/Source/GmmLib/Linux.cmake
index fd62b4a..1a09bc4 100644
--- a/Source/GmmLib/Linux.cmake
+++ b/Source/GmmLib/Linux.cmake
@@ -34,6 +34,7 @@
     -Wno-parentheses
     -Wno-missing-braces
     -Wno-sign-compare
+    -Wno-enum-compare
     -Werror=address
     -Werror=format-security
     -Werror=non-virtual-dtor
diff --git a/Source/GmmLib/Platform/GmmGen12Platform.cpp b/Source/GmmLib/Platform/GmmGen12Platform.cpp
index d1f2ae2..419f8b5 100644
--- a/Source/GmmLib/Platform/GmmGen12Platform.cpp
+++ b/Source/GmmLib/Platform/GmmGen12Platform.cpp
@@ -76,7 +76,7 @@
     //Compression format update
     GMM_RESOURCE_FORMAT GmmFormat;
 #define GMM_FORMAT_SKU(FtrXxx) (pGmmGlobalContext->GetSkuTable().FtrXxx != 0)
-#define GMM_COMPR_FORMAT_INVALID (static_cast<uint8_t>(GMM_E2ECOMP_FORMAT_INVALID))
+#define GMM_COMPR_FORMAT_INVALID ((pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS != 0) ? static_cast<uint8_t>(GMM_FLATCCS_FORMAT_INVALID) : static_cast<uint8_t>(GMM_E2ECOMP_FORMAT_INVALID))
 #define GMM_FORMAT(Name, bpe, _Width, _Height, _Depth, IsRT, IsASTC, RcsSurfaceFormat, SSCompressionFmt, Availability) \
                                                                                                                        \
     {                                                                                                                  \
@@ -136,6 +136,44 @@
     Data.TexAlign.CCS.MaxPitchinTiles = 1024;
 
     // clang-format off
+    SET_TILE_MODE_INFO(TILE4,                        128,       32,        1,         0,         0,         0)
+
+    // TILE__64 1D
+    SET_TILE_MODE_INFO(TILE__64_1D_128bpe,       4096,        1,        1,      1024,         1,         1)
+    SET_TILE_MODE_INFO(TILE__64_1D_64bpe,        8192,        1,        1,      2048,         1,         1)
+    SET_TILE_MODE_INFO(TILE__64_1D_32bpe,       16384,        1,        1,      4096,         1,         1)
+    SET_TILE_MODE_INFO(TILE__64_1D_16bpe,       32768,        1,        1,      8192,         1,         1)
+    SET_TILE_MODE_INFO(TILE__64_1D_8bpe,        65536,        1,        1,     16384,         1,         1)
+
+    // TILE__64 2D
+    SET_TILE_MODE_INFO(TILE__64_2D_128bpe,       1024,       64,        1,        32,        64,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_64bpe,        1024,       64,        1,        64,        64,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_32bpe,         512,      128,        1,        64,       128,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_16bpe,         512,      128,        1,       128,       128,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_8bpe,          256,      256,        1,       128,       256,         1)
+
+    // TILE__64 2D 2X
+    SET_TILE_MODE_INFO(TILE__64_2D_2X_128bpe,     512,       64,        1,        32,        32,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_2X_64bpe,      512,       64,        1,        64,        32,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_2X_32bpe,      256,      128,        1,        64,        64,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_2X_16bpe,      256,      128,        1,       128,        64,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_2X_8bpe,       128,      256,        1,       128,       128,         1)
+
+    // TILE__64 2D 4X
+    SET_TILE_MODE_INFO(TILE__64_2D_4X_128bpe,     512,       32,        1,        16,        32,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_4X_64bpe,      512,       32,        1,        32,        32,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_4X_32bpe,      256,       64,        1,        32,        64,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_4X_16bpe,      256,       64,        1,        64,        64,         1)
+    SET_TILE_MODE_INFO(TILE__64_2D_4X_8bpe,       128,      128,        1,        64,       128,         1)
+
+    // TILE__64 3D
+    SET_TILE_MODE_INFO(TILE__64_3D_128bpe,        256,       16,       16,         8,        16,         16)
+    SET_TILE_MODE_INFO(TILE__64_3D_64bpe,         256,       16,       16,        16,        16,         16)
+    SET_TILE_MODE_INFO(TILE__64_3D_32bpe,         128,       32,       16,        16,        32,         16)
+    SET_TILE_MODE_INFO(TILE__64_3D_16bpe,          64,       32,       32,        16,        32,         32)
+    SET_TILE_MODE_INFO(TILE__64_3D_8bpe,           64,       32,       32,        32,        32,         32)
+    // clang-format off
+
 //Extended CCS alignment for per bpp/Tiling CCS alignment
 #define CCSRTALIGN(TileMode, HAlign, VAlign, DAlign, HDownscale, VDownscale) \
     {                                                                        \
@@ -252,13 +290,25 @@
 FCRECTALIGN(TILE_YS_2D_32bpe ,  32,  64,  64,  32, 32);
 FCRECTALIGN(TILE_YS_2D_64bpe ,  64,  64,  32,  32, 16);
 FCRECTALIGN(TILE_YS_2D_128bpe, 128,  32,  32,  16, 16);
+
+FCRECTALIGN(TILE4           ,   8, 1024, 16, 1024, 16);
+FCRECTALIGN(TILE4           ,  16,  512, 16,  512, 16);
+FCRECTALIGN(TILE4           ,  32,  256,  16, 256, 16);
+FCRECTALIGN(TILE4           ,  64,  128,  16, 128, 16);
+FCRECTALIGN(TILE4           , 128,   64,  16,  64, 16);
+
+FCRECTALIGN(TILE__64_2D_8bpe  ,   8, 128, 128,  128, 128);
+FCRECTALIGN(TILE__64_2D_16bpe ,  16, 128,  64,  128, 64);
+FCRECTALIGN(TILE__64_2D_32bpe ,  32,  64,  64,   64, 64);
+FCRECTALIGN(TILE__64_2D_64bpe ,  64,  64,  32,   64, 32);
+FCRECTALIGN(TILE__64_2D_128bpe, 128,  32,  32,   32, 32);
 #undef FCRECTALIGN
 
     // clang-format on
     Data.NoOfBitsSupported                = 39;
     Data.HighestAcceptablePhysicalAddress = GFX_MASK_LARGE(0, 38);
     if(GFX_GET_CURRENT_PRODUCT(Data.Platform) == IGFX_ALDERLAKE_S ||
-       (GFX_GET_CURRENT_PRODUCT(Data.Platform) == IGFX_ALDERLAKE_P))
+       (GFX_GET_CURRENT_PRODUCT(Data.Platform) == IGFX_ALDERLAKE_P) || (GFX_GET_CURRENT_PRODUCT(Data.Platform) >= IGFX_XE_HP_SDV))
     {
         Data.NoOfBitsSupported                = 46;
         Data.HighestAcceptablePhysicalAddress = GFX_MASK_LARGE(0, 45);
@@ -432,5 +482,55 @@
 //-----------------------------------------------------------------------------
 uint8_t GmmLib::PlatformInfoGen12::OverrideCompressionFormat(GMM_RESOURCE_FORMAT Format, uint8_t IsMC)
 {
-    return Data.FormatTable[Format].CompressionFormat.CompressionFormat;
+
+    uint8_t CompressionFormat = Data.FormatTable[Format].CompressionFormat.CompressionFormat;
+    if(pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS)
+    {
+        if(!IsMC &&
+           (CompressionFormat < GMM_FLATCCS_MIN_RC_FORMAT ||
+            CompressionFormat > GMM_FLATCCS_MAX_RC_FORMAT))
+        {
+            CompressionFormat = GMM_FLATCCS_FORMAT_INVALID;
+        }
+
+        if(IsMC)
+        {
+                if(CompressionFormat >= GMM_FLATCCS_MIN_MC_FORMAT && CompressionFormat <= GMM_FLATCCS_MAX_MC_FORMAT)
+                {
+                    //True MC format encodings, drop MC-identify bit (ie bit5)
+                    CompressionFormat -= (GMM_FLATCCS_MIN_MC_FORMAT - 1);
+                }
+                else
+                {
+                    // RC format encoding, needs MC format encoding for MC usage
+                    switch(CompressionFormat)
+                    {
+                        case GMM_FLATCCS_FORMAT_RGB10A2:
+                            CompressionFormat = GMM_FLATCCS_FORMAT_RGB10b;
+                            break;
+                        case GMM_FLATCCS_FORMAT_RGBA16U:
+                            CompressionFormat = GMM_FLATCCS_FORMAT_RGBA16_MEDIA;
+                            break;
+                        case GMM_FLATCCS_FORMAT_RGBA8U:
+                            CompressionFormat = GMM_FLATCCS_FORMAT_ARGB8b;
+                            break;
+                        default:
+                            if(CompressionFormat < GMM_FLATCCS_MIN_MC_FORMAT || CompressionFormat > GMM_FLATCCS_MAX_MC_FORMAT)
+                            {
+                                CompressionFormat = GMM_FLATCCS_FORMAT_INVALID;
+                            }
+                            break;
+                    }
+
+                    if(CompressionFormat != GMM_FLATCCS_FORMAT_INVALID)
+                    {
+                        //drop MC-identify bit (ie bit 5)
+                        CompressionFormat -= (GMM_FLATCCS_MIN_MC_FORMAT - 1);
+                    }
+                }
+         }
+
+    }
+
+    return CompressionFormat;
 }
diff --git a/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp b/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp
index 3005386..aba782a 100644
--- a/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp
+++ b/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp
@@ -349,6 +349,11 @@
             if(Surf.Flags.Gpu.IndirectClearColor ||
                Surf.Flags.Gpu.ColorDiscard)
             {
+                if(pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS && AuxSurf.Type == RESOURCE_INVALID)
+                {
+                    //ie only AuxType is CCS, doesn't exist with FlatCCS, enable it for CC
+                    AuxSurf.Type = Surf.Type;
+                }
                 if(!Surf.Flags.Gpu.TiledResource)
                 {
                     AuxSurf.CCSize = PAGE_SIZE; // 128bit Float Value + 32bit RT Native Value + Padding.
@@ -1748,7 +1753,14 @@
                     !(pTexInfo->Flags.Info.TiledYf ||
                       GMM_IS_64KB_TILE(pTexInfo->Flags)))
             {
-                SwizzledSurface.pSwizzle = &INTEL_TILE_Y;
+                if(pGmmGlobalContext->GetSkuTable().FtrTileY)
+                {
+                    SwizzledSurface.pSwizzle = &INTEL_TILE_Y;
+                }
+                else
+                {
+                    SwizzledSurface.pSwizzle = &INTEL_TILE_4;
+                }
             }
             else if(pTexInfo->Flags.Info.TiledX)
             {
@@ -1774,7 +1786,7 @@
                         CASE(Layout, Tile, msaa, xD, 128);    \
                     }
 
-                #define SWITCH_MSAA_INTEL(Layout, Tile, xD)     \
+                #define SWITCH_MSAA_TILE64(Layout, Tile, xD)     \
                 {\
                     switch(pTexInfo->MSAA.NumSamples)           \
                     {                                           \
@@ -1790,7 +1802,7 @@
                         case 4:                                 \
                         case 8:                                 \
                         case 16:                                \
-                            SWITCH_BPP(Layout, Tile, MSAA4_, xD);  \
+                            SWITCH_BPP(Layout, Tile, MSAA_, xD);  \
                             break;                              \
                     }\
                 }
@@ -1825,13 +1837,17 @@
                 {
                     if(pTexInfo->Flags.Info.TiledYf)
                     {
-                        SWITCH_BPP(INTEL, TILEYF, , 3D_);
+                        SWITCH_BPP(INTEL, TILE_YF, , 3D_);
                     }
                     else if(GMM_IS_64KB_TILE(pTexInfo->Flags))
                     {
                         if(pGmmGlobalContext->GetSkuTable().FtrTileY)
                         {
-                            SWITCH_BPP(INTEL, TILEYS, , 3D_);
+                            SWITCH_BPP(INTEL, TILE_YS, , 3D_);
+                        }
+                        else
+                        {
+                            SWITCH_BPP(INTEL, TILE_64, , 3D_);
                         }
                     }
                 }
@@ -1839,13 +1855,17 @@
                 {
                     if(pTexInfo->Flags.Info.TiledYf)
                     {
-                        SWITCH_MSAA(INTEL, TILEYF, );
+                        SWITCH_MSAA(INTEL, TILE_YF, );
                     }
                     else if(GMM_IS_64KB_TILE(pTexInfo->Flags))
                     {
                         if(pGmmGlobalContext->GetSkuTable().FtrTileY)
                         {
-                            SWITCH_MSAA(INTEL, TILEYS, );
+                            SWITCH_MSAA(INTEL, TILE_YS, );
+                        }
+                        else
+                        {
+                            SWITCH_MSAA_TILE64(INTEL, TILE_64, );
                         }
                     }
                 }
diff --git a/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp b/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp
index afe33c3..7878bbd 100644
--- a/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp
+++ b/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp
@@ -31,7 +31,18 @@
 /////////////////////////////////////////////////////////////////////////////////////
 bool GmmLib::GmmResourceInfoCommon::CopyClientParams(GMM_RESCREATE_PARAMS &CreateParams)
 {
+    uint32_t BitsPerPixel;
 
+    if((CreateParams.Format > GMM_FORMAT_INVALID) &&
+       (CreateParams.Format < GMM_RESOURCE_FORMATS))
+    {
+        BitsPerPixel = pGmmGlobalContext->GetPlatformInfo().FormatTable[CreateParams.Format].Element.BitsPer;
+    }
+    else
+    {
+        GMM_ASSERTDPF(0, "Format Error");
+        return false;
+    }
     {
         // Promote tiling options if caller does not provide any.
         // X/Y/W/L are tiling formats, and Yf/Ys are modifiers to the internal
@@ -64,6 +75,91 @@
                     CreateParams.Flags.Info.TiledX = true;
                 }
             }
+            else
+            {
+                // Xe_HP onwards.
+                if((CreateParams.Flags.Info.TiledYs +
+                    CreateParams.Flags.Info.TiledYf +
+                    CreateParams.Flags.Info.Tile4 +
+                    CreateParams.Flags.Info.Tile64) == 0)
+                {
+                    GMM_ASSERTDPF(!CreateParams.Flags.Info.StdSwizzle, "StdSwizzle not supported on current platform");
+
+                    if(!pGmmGlobalContext->GetWaTable().WaDefaultTile4)
+                    {
+                        // Default Tiling is set to Tile64 on FtrTileY disabled platforms
+                        CreateParams.Flags.Info.Tile4 = ((!GMM_IS_SUPPORTED_BPP_ON_TILE_64_YF_YS(BitsPerPixel)) ||            // 24,48,96 bpps are not supported on Tile64, Tile4 is bpp independent
+                                                         ((CreateParams.Type == RESOURCE_3D) && (CreateParams.Flags.Gpu.Depth || CreateParams.Flags.Gpu.SeparateStencil)) ||
+                                                         ((!pGmmGlobalContext->GetSkuTable().FtrDisplayDisabled) &&
+                                                          (CreateParams.Flags.Gpu.FlipChain || CreateParams.Flags.Gpu.Overlay)
+                                                          ));
+                        CreateParams.Flags.Info.Tile64 = !CreateParams.Flags.Info.Tile4;
+                    }
+                    else
+                    {
+                        CreateParams.Flags.Info.Tile64 = (CreateParams.MSAA.NumSamples > 1) || CreateParams.Flags.Gpu.TiledResource; // Colour & Depth/Stencil(IMS) MSAA should use Tile64
+                        CreateParams.Flags.Info.Tile4  = !CreateParams.Flags.Info.Tile64;
+                    }
+                }
+                else if((CreateParams.Flags.Info.TiledYs +
+                         CreateParams.Flags.Info.TiledYf) > 0)
+                {
+                    GMM_ASSERTDPF(0, "Tile Yf/Ys not supported on given platform");
+
+                    // Overrides the flags.
+                    if(pGmmGlobalContext->GetWaTable().WaDefaultTile4)
+                    {
+                        CreateParams.Flags.Info.Tile64 = CreateParams.Flags.Info.TiledYs ||
+                                                         (CreateParams.MSAA.NumSamples > 1) || CreateParams.Flags.Gpu.TiledResource; // Colour & Depth/Stencil(IMS) MSAA should use Tile64
+
+                        CreateParams.Flags.Info.Tile4   = !CreateParams.Flags.Info.Tile64;
+                        CreateParams.Flags.Info.TiledYf = 0;
+                        CreateParams.Flags.Info.TiledYs = 0;
+                    }
+                }
+            }
+        }
+        else
+        {
+            if(!pGmmGlobalContext->GetSkuTable().FtrTileY)
+            {
+                __GMM_ASSERT(!(CreateParams.Flags.Info.TiledYs ||
+                               CreateParams.Flags.Info.TiledYf ||
+                               CreateParams.Flags.Info.TiledY));
+
+                // On Xe_HP onwards translate UMD's TileY/TileYs request to Tile4/Tile64 respectively
+                // Exclude TileX, Linear from override
+                if(pGmmGlobalContext->GetWaTable().WaDefaultTile4 && (CreateParams.Flags.Info.TiledYs ||
+                                                                       CreateParams.Flags.Info.TiledY))
+                {
+                    CreateParams.Flags.Info.Tile64 =
+                    CreateParams.Flags.Info.TiledYs ||
+                    (CreateParams.MSAA.NumSamples > 1) || CreateParams.Flags.Gpu.TiledResource;
+
+                    CreateParams.Flags.Info.Tile4 = !CreateParams.Flags.Info.Tile64;
+
+                    CreateParams.Flags.Info.TiledY  = 0;
+                    CreateParams.Flags.Info.TiledYs = 0;
+                    CreateParams.Flags.Info.TiledW  = 0;
+                    CreateParams.Flags.Info.TiledYf = 0;
+                }
+
+                // Displayable surfaces cannot be Tiled4/64.
+                __GMM_ASSERT(!pGmmGlobalContext->GetSkuTable().FtrDisplayYTiling);
+
+                //override displayable surfaces to TileX
+                if(pGmmGlobalContext->GetSkuTable().FtrDisplayXTiling)
+                {
+                    if(CreateParams.Flags.Gpu.FlipChain || CreateParams.Flags.Gpu.Overlay ||
+                       CreateParams.Flags.Gpu.Presentable)
+                    {
+                        CreateParams.Flags.Info.TiledX = 1;
+                        CreateParams.Flags.Info.TiledY = 0;
+                        CreateParams.Flags.Info.Tile4  = 0;
+                        CreateParams.Flags.Info.Tile64 = 0;
+                    }
+                }
+            }
         }
 
         //ExistingSysMem allocations must be Linear
@@ -71,6 +167,37 @@
                      CreateParams.Flags.Info.Linear);
     }
 
+    if(pGmmGlobalContext->GetSkuTable().FtrMultiTileArch)
+    {
+        // For Naive apps, UMD does not populate multi tile arch params.
+        // Gmm will populate them based on the kmd assigned tile to the umd process
+        if(!CreateParams.MultiTileArch.Enable)
+        {
+            uint32_t GpuTile = 0;
+            __GMM_ASSERT(CreateParams.MultiTileArch.GpuVaMappingSet == 0);
+            __GMM_ASSERT(CreateParams.MultiTileArch.LocalMemEligibilitySet == 0);
+            __GMM_ASSERT(CreateParams.MultiTileArch.LocalMemPreferredSet == 0);
+
+            __GMM_ASSERT(pGmmGlobalContext->GetSkuTable().FtrAssignedGpuTile < 4);
+
+#if !__GMM_KMD__
+            GpuTile                                    = pGmmGlobalContext->GetSkuTable().FtrAssignedGpuTile;
+            CreateParams.MultiTileArch.GpuVaMappingSet = __BIT(GpuTile);
+#else
+            GpuTile                                    = 0;
+            CreateParams.MultiTileArch.GpuVaMappingSet = pGmmGlobalContext->GetGtSysInfo()->MultiTileArchInfo.TileMask;
+#endif
+
+            CreateParams.MultiTileArch.Enable = true;
+
+            if(!CreateParams.Flags.Info.NonLocalOnly)
+            {
+                CreateParams.MultiTileArch.LocalMemEligibilitySet = __BIT(GpuTile);
+                CreateParams.MultiTileArch.LocalMemPreferredSet   = __BIT(GpuTile);
+            }
+        }
+    }
+
     Surf.Type                      = CreateParams.Type;
     Surf.Format                    = CreateParams.Format;
     Surf.BaseWidth                 = CreateParams.BaseWidth64;
@@ -105,16 +232,7 @@
     Surf.Platform = pGmmGlobalContext->GetPlatformInfo().Platform;
 #endif
 
-    if((CreateParams.Format > GMM_FORMAT_INVALID) &&
-       (CreateParams.Format < GMM_RESOURCE_FORMATS))
-    {
-        Surf.BitsPerPixel = pGmmGlobalContext->GetPlatformInfo().FormatTable[CreateParams.Format].Element.BitsPer;
-    }
-    else
-    {
-        GMM_ASSERTDPF(0, "Format Error");
-        return false;
-    }
+Surf.BitsPerPixel = BitsPerPixel;
 
     pGmmGlobalContext->GetPlatformInfoObj()->SetCCSFlag(this->GetResFlags());
 
@@ -147,7 +265,7 @@
         {
             //GMM_ASSERTDPF(Surf.Flags.Gpu.HiZ, "Lossless Z compression supported when Depth+HiZ+CCS is unified");
             AuxSecSurf                           = Surf;
-            AuxSecSurf.Type                      = AuxSecSurf.Type;
+            AuxSecSurf.Type                      = pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS ? RESOURCE_INVALID : AuxSecSurf.Type;
             Surf.Flags.Gpu.HiZ                   = 0; //Its depth buffer, so clear HiZ
             AuxSecSurf.Flags.Gpu.HiZ             = 0;
             AuxSurf.Flags.Gpu.IndirectClearColor = 0; //Clear Depth flags from HiZ, contained with separate/legacy HiZ when Depth isn't compressible.
@@ -164,20 +282,20 @@
                 return false;
             }
             Surf.Flags.Gpu.CCS = 1;
-            AuxSurf.Type       = AuxSurf.Type;
+            AuxSurf.Type       = pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS ? RESOURCE_INVALID : AuxSurf.Type;
         }
         else if(Surf.MSAA.NumSamples > 1 && Surf.Flags.Gpu.CCS) //MSAA+MCS+CCS
         {
             GMM_ASSERTDPF(Surf.Flags.Gpu.MCS, "Lossless MSAA supported when MSAA+MCS+CCS is unified");
             AuxSecSurf                          = Surf;
-            AuxSecSurf.Type                     = AuxSecSurf.Type;
+            AuxSecSurf.Type                     = pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS ? RESOURCE_INVALID : AuxSecSurf.Type;
             AuxSecSurf.Flags.Gpu.MCS            = 0;
             AuxSurf.Flags.Gpu.CCS               = 0;
             AuxSurf.Flags.Info.RenderCompressed = AuxSurf.Flags.Info.MediaCompressed = 0;
         }
         else if(Surf.Flags.Gpu.CCS)
         {
-            AuxSurf.Type = AuxSurf.Type;
+            AuxSurf.Type = (pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS && !Surf.Flags.Gpu.ProceduralTexture) ? RESOURCE_INVALID : AuxSurf.Type;
         }
 
         if(AuxSurf.Type != RESOURCE_INVALID &&
@@ -201,6 +319,11 @@
 
     RotateInfo = CreateParams.RotateInfo;
 
+    if(pGmmGlobalContext->GetSkuTable().FtrMultiTileArch)
+    {
+        MultiTileArch = CreateParams.MultiTileArch;
+    }
+
 #ifdef __GMM_KMD__
     if(Surf.Flags.Gpu.S3d)
     {
@@ -307,6 +430,15 @@
         goto ERROR_CASE;
     }
 
+    if(Surf.Flags.Info.Tile64 || Surf.Flags.Info.TiledYf || Surf.Flags.Info.TiledYs)
+    {
+        if(!GMM_IS_SUPPORTED_BPP_ON_TILE_64_YF_YS(Surf.BitsPerPixel))
+        {
+            GMM_ASSERTDPF(0, "BPP not supported on selected Tile format!");
+            goto ERROR_CASE;
+        }
+    }
+
     if(!__CanSupportStdTiling(Surf))
     {
         GMM_ASSERTDPF(0, "Invalid TileYf/TileYs usage!");
@@ -364,6 +496,18 @@
             Surf.Flags.Info.LocalOnly    = 1;
             Surf.Flags.Info.NonLocalOnly = 0;
         }
+        if(pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS &&
+           (Surf.Flags.Info.RenderCompressed ||
+            Surf.Flags.Info.MediaCompressed))
+        {
+            if(Surf.Flags.Info.NonLocalOnly)
+            {
+                GMM_ASSERTDPF(0, "Compressible surfaces cannot be in system memory.");
+                goto ERROR_CASE;
+            }
+            Surf.Flags.Info.LocalOnly    = 1;
+            Surf.Flags.Info.NonLocalOnly = 0;
+        }
 
         if(!Surf.Flags.Info.NotLockable &&
            Surf.Flags.Info.Shared)
@@ -429,6 +573,34 @@
         goto ERROR_CASE;
     }
 
+    if(!pGmmGlobalContext->GetSkuTable().FtrTileY)
+    {
+        if(Surf.Flags.Gpu.TiledResource &&
+           ((Surf.Flags.Info.Linear && !(Surf.Type == RESOURCE_BUFFER)) || Surf.Flags.Info.TiledYs ||
+            Surf.Flags.Info.TiledYf || Surf.Flags.Info.TiledY))
+        {
+            GMM_ASSERTDPF(0, "Invalid Tile for TiledResource!");
+            goto ERROR_CASE;
+        }
+        if(GMM_IS_64KB_TILE(Surf.Flags) &&
+           (Surf.MSAA.NumSamples > 1) &&
+           (Surf.MaxLod != 0))
+        {
+            GMM_ASSERTDPF(0, "Mipped MSAA not supported for Tile64!");
+            goto ERROR_CASE;
+        }
+        // Tile4 does not support MSAA.
+        if(GMM_IS_4KB_TILE(Surf.Flags) &&
+           (Surf.MSAA.NumSamples > 1))
+        {
+            GMM_ASSERTDPF(0, "No MSAA support for Tile4!");
+            goto ERROR_CASE;
+        }
+    }
+
+    __GMM_ASSERT(!(pGmmGlobalContext->GetSkuTable().FtrTileY &&
+                   (Surf.Flags.Info.Tile4 || Surf.Flags.Info.Tile64)));
+
     //GMM asserts that ExistingSysMem allocation (whose malloc is outside GmmLib) are either
     //SVM Buffer, Index Buffer, Vertex Buffers, Render Target, Texture
     if(Surf.Flags.Info.ExistingSysMem &&
@@ -553,6 +725,13 @@
        // TileYF cannot be MSAA'ed (pre-Gen10)...
        ((GFX_GET_CURRENT_RENDERCORE(pPlatformResource->Platform) >= IGFX_GEN10_CORE) ||
         !Surf.Flags.Info.TiledYf) &&
+       // Tile64 MSAA (Xe_HP)
+       (pGmmGlobalContext->GetSkuTable().FtrTileY ||
+        !GMM_IS_64KB_TILE(Surf.Flags) ||
+        (Surf.MaxLod == 0)) &&
+       // Tile4 does not support MSAA
+       (pGmmGlobalContext->GetSkuTable().FtrTileY ||
+        !GMM_IS_4KB_TILE(Surf.Flags)) &&
        // Non-Compressed/YUV...
        !GmmIsCompressed(Surf.Format) &&
        !GmmIsYUVPacked(Surf.Format) &&
@@ -615,6 +794,30 @@
         goto ERROR_CASE;
     }
 
+ //MultiTileArch params
+    if(pGmmGlobalContext->GetSkuTable().FtrMultiTileArch)
+    {
+        /*
+            MultiTileArch validation criteria 
+            - MultiTileArch.Enable must be set.
+            - NonLocalOnly alloc must have LocalEligibilitySet and LocalPreferenceSet both zero
+            - LocalOnly alloc must have non-zero LocalEligibilitySet
+            - GpuVaMappingSet/LocalEligibilitySet must be subset of GtSysInfo.TileMask
+            - PreferredSet must be subset of EligibilitySet or zero
+        */
+        if(!(
+           // Legitimate cases
+           MultiTileArch.Enable &&
+           (Surf.Flags.Info.NonLocalOnly || MultiTileArch.LocalMemEligibilitySet) &&
+           ((MultiTileArch.GpuVaMappingSet & pGmmGlobalContext->GetGtSysInfo()->MultiTileArchInfo.TileMask) == MultiTileArch.GpuVaMappingSet) &&
+           ((MultiTileArch.LocalMemEligibilitySet & pGmmGlobalContext->GetGtSysInfo()->MultiTileArchInfo.TileMask) == MultiTileArch.LocalMemEligibilitySet) &&
+           ((MultiTileArch.LocalMemEligibilitySet & MultiTileArch.LocalMemPreferredSet) == MultiTileArch.LocalMemPreferredSet)))
+        {
+            GMM_ASSERTDPF(0, "Invalid MultiTileArch allocation params");
+            goto ERROR_CASE;
+        }
+    }
+
     // check 2D, 3D & Cubemap dimensions
     switch(Surf.Type)
     {
diff --git a/Source/GmmLib/Resource/GmmRestrictions.cpp b/Source/GmmLib/Resource/GmmRestrictions.cpp
index aca889d..856cffe 100644
--- a/Source/GmmLib/Resource/GmmRestrictions.cpp
+++ b/Source/GmmLib/Resource/GmmRestrictions.cpp
@@ -402,6 +402,18 @@
     pRestriction->MinDepth = 0xffffffff;
 }
 
+/////////////////////////////////////////////////////////////////////////////////////
+/// Internal function resets the restrictions and puts the allocation in invalid state
+///
+/// @param[in]  pTexInfo: ptr to ::GMM_TEXTURE_INFO,
+/// @param[in]  pRestrictions: reset the restrictions to invalid state.
+///
+/////////////////////////////////////////////////////////////////////////////////////
+void GmmLib::GmmTextureCalc::ResetRestrictions(__GMM_BUFFER_TYPE *pRestriction)
+{
+    pRestriction->MinDepth = 0xffffffff;
+}
+
 
 /////////////////////////////////////////////////////////////////////////////////////
 /// Internal function returns the best restrictions depending on how the surface may
@@ -449,7 +461,7 @@
         return;
     }
 
-    __GmmPlatformResetRestrictions(&Restrictions); //Set to Default
+    ResetRestrictions(&Restrictions); //Set to Default
 
     // Get worst case restrictions that match GPU flags set in resource
     switch(pTexinfo->Type)
@@ -577,7 +589,14 @@
     if(pTexinfo->Flags.Info.RenderCompressed ||
        pTexinfo->Flags.Info.MediaCompressed)
     {
-        Restrictions.Alignment = GFX_ALIGN(Restrictions.Alignment, (!WA16K ? GMM_KBYTE(64) : GMM_KBYTE(16)));
+      if(pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS)
+        {
+            Restrictions.Alignment = GFX_ALIGN(Restrictions.Alignment, GMM_KBYTE(64));
+        }
+        else // only for platforms having auxtable
+        {
+            Restrictions.Alignment = GFX_ALIGN(Restrictions.Alignment, (!WA16K ? GMM_KBYTE(64) : GMM_KBYTE(16)));
+        }
     }
 
     GMM_DPF_EXIT;
diff --git a/Source/GmmLib/Texture/GmmGen11Texture.cpp b/Source/GmmLib/Texture/GmmGen11Texture.cpp
index 474dfd7..c7f2daf 100644
--- a/Source/GmmLib/Texture/GmmGen11Texture.cpp
+++ b/Source/GmmLib/Texture/GmmGen11Texture.cpp
@@ -348,7 +348,8 @@
 
         if(GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) > IGFX_GEN11LP_CORE)
         {
-            if(pTexInfo->Flags.Gpu.CCS)
+
+            if(pTexInfo->Flags.Gpu.CCS && !pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS)
             {
                 //U/V must be aligned to AuxT granularity, for 16K AuxT- 4x pitchalign enforces it,
                 //add extra padding for 64K AuxT
diff --git a/Source/GmmLib/Texture/GmmGen12Texture.cpp b/Source/GmmLib/Texture/GmmGen12Texture.cpp
index 65fc7e5..ad6dc07 100644
--- a/Source/GmmLib/Texture/GmmGen12Texture.cpp
+++ b/Source/GmmLib/Texture/GmmGen12Texture.cpp
@@ -26,6 +26,10 @@
 #include "Internal/Common/Texture/GmmGen11TextureCalc.h"
 #include "Internal/Common/Texture/GmmGen12TextureCalc.h"
 
+GMM_MIPTAIL_SLOT_OFFSET MipTailSlotOffset1DSurface[15][5] = GEN11_MIPTAIL_SLOT_OFFSET_1D_SURFACE;
+GMM_MIPTAIL_SLOT_OFFSET MipTailSlotOffset2DSurface[15][5] = GEN11_MIPTAIL_SLOT_OFFSET_2D_SURFACE;
+GMM_MIPTAIL_SLOT_OFFSET MipTailSlotOffset3DSurface[15][5] = GEN11_MIPTAIL_SLOT_OFFSET_3D_SURFACE;
+
 /////////////////////////////////////////////////////////////////////////////////////
 /// Calculates height of the 2D mip layout on Gen9
 ///
@@ -145,9 +149,12 @@
 GMM_STATUS GmmLib::GmmGen12TextureCalc::FillTexCCS(GMM_TEXTURE_INFO *pSurf,
                                                    GMM_TEXTURE_INFO *pAuxTexInfo)
 {
-
-    
-    if(pAuxTexInfo->Flags.Gpu.__NonMsaaLinearCCS)
+    if(pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS && !pSurf->Flags.Gpu.ProceduralTexture)
+    {
+        //No CCS allocation for lossless compression (exclude AMFS CCS).
+        return GMM_SUCCESS;
+    }    
+    else if(pAuxTexInfo->Flags.Gpu.__NonMsaaLinearCCS)
     {
         GMM_TEXTURE_INFO         Surf      = *pSurf;
         const GMM_PLATFORM_INFO *pPlatform = GMM_OVERRIDE_PLATFORM_INFO(pSurf);
@@ -167,7 +174,9 @@
         ((Surf.Flags.Gpu.Depth || Surf.Flags.Gpu.SeparateStencil ||
           GMM_IS_64KB_TILE(Surf.Flags) || Surf.Flags.Info.TiledYf) ?
          1 :
-         Surf.MSAA.NumSamples); // MSAA (non-Depth/Stencil) RT samples stored as array planes.
+         Surf.MSAA.NumSamples) *                                                                                         // MSAA (non-Depth/Stencil) RT samples stored as array planes.
+        ((GMM_IS_64KB_TILE(Surf.Flags) && !pGmmGlobalContext->GetSkuTable().FtrTileY && (Surf.MSAA.NumSamples == 16)) ? 4 : // MSAA x8/x16 stored as pseudo array planes each with 4x samples
+         (GMM_IS_64KB_TILE(Surf.Flags) && !pGmmGlobalContext->GetSkuTable().FtrTileY && (Surf.MSAA.NumSamples == 8)) ? 2 : 1);
 
         if(GMM_IS_64KB_TILE(Surf.Flags) || Surf.Flags.Info.TiledYf)
         {
@@ -227,6 +236,11 @@
                 pAuxTexInfo->Alignment.QPitch = GFX_ULONG_CAST(pAuxTexInfo->Size); //HW doesn't use QPitch for Aux except MCS, how'd AMFS get sw-filled non-zero QPitch?
 
                 pAuxTexInfo->Size *= ExpandedArraySize;
+                if(Surf.MSAA.NumSamples && !pGmmGlobalContext->GetSkuTable().FtrTileY)
+                {
+                    //MSAA Qpitch is sample-distance, multiply NumSamples in a tile
+                    pAuxTexInfo->Size *= GFX_MIN(Surf.MSAA.NumSamples, 4);
+                }
             }
             else
             {
@@ -236,6 +250,7 @@
         pAuxTexInfo->Pitch                   = 0;
         pAuxTexInfo->Type                    = RESOURCE_BUFFER;
         pAuxTexInfo->Alignment               = {0};
+        __GMM_ASSERT(ExpandedArraySize || (pAuxTexInfo->Size == 0));
         pAuxTexInfo->Alignment.QPitch        = GFX_ULONG_CAST(pAuxTexInfo->Size) / ExpandedArraySize;
         pAuxTexInfo->Alignment.BaseAlignment = GMM_KBYTE(4);                            //TODO: TiledResource?
         pAuxTexInfo->Size                    = GFX_ALIGN(pAuxTexInfo->Size, PAGE_SIZE); //page-align final size
@@ -838,6 +853,8 @@
 
     AdjustedVHeight = VHeight;
 
+    FindMipTailStartLod(pTexInfo);
+
     // In case of Planar surfaces, only the last Plane has to be aligned to 64 for LCU access
     if(pGmmGlobalContext->GetWaTable().WaAlignYUVResourceToLCU && GmmIsYUVFormatLCUAligned(pTexInfo->Format) && VHeight > 0)
     {
@@ -857,7 +874,7 @@
 
         pTexInfo->OffsetInfo.Plane.IsTileAlignedPlanes = true;
 
-        if(pTexInfo->Flags.Gpu.CCS)
+        if(pTexInfo->Flags.Gpu.CCS && !pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS)
         {
             //U/V must be aligned to AuxT granularity, 4x pitchalign enforces 16K-align,
             //add extra padding for 64K AuxT
@@ -1198,3 +1215,126 @@
     }
     return Status;
 }
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// Returns the mip offset of given LOD in Mip Tail
+///
+/// @param[in]  pTexInfo: ptr to ::GMM_TEXTURE_INFO,
+///             MipLevel: mip-map level
+///
+/// @return     offset value of LOD in bytes
+/////////////////////////////////////////////////////////////////////////////////////
+uint32_t GmmLib::GmmGen12TextureCalc::GetMipTailByteOffset(GMM_TEXTURE_INFO *pTexInfo,
+                                                           uint32_t          MipLevel)
+{
+    uint32_t ByteOffset = 0, Slot = 0xff;
+
+    GMM_DPF_ENTER;
+
+    if(pGmmGlobalContext->GetSkuTable().FtrTileY)
+    {
+        return GmmGen11TextureCalc::GetMipTailByteOffset(pTexInfo, MipLevel);
+    }
+    // 3D textures follow the Gen10 mip tail format
+    if(!pGmmGlobalContext->GetSkuTable().FtrStandardMipTailFormat)
+    {
+        return GmmGen9TextureCalc::GetMipTailByteOffset(pTexInfo, MipLevel);
+    }
+
+    // Til64 is the only format which supports MipTail on FtrTileY disabled platforms
+    __GMM_ASSERT(pTexInfo->Flags.Info.Tile64);
+    // Mipped MSAA is not supported for Tile64
+    __GMM_ASSERT(pTexInfo->MSAA.NumSamples <= 1);
+
+    if((pTexInfo->Type == RESOURCE_1D) || (pTexInfo->Type == RESOURCE_3D) || (pTexInfo->Type == RESOURCE_2D || pTexInfo->Type == RESOURCE_CUBE))
+    {
+        Slot = MipLevel - pTexInfo->Alignment.MipTailStartLod;
+    }
+
+    // Miptail Slot layout in Tile64: as per specifications
+    // Byteoffset varies based on bpp for tile64 format, so any caller who needs to use byteoffset needs to call cpuswizzle with corresponding geomteric offsets
+    // Returning ByteOffset as 0 for Tile64 always
+
+    // GMM_DPF_CRITICAL("Miptail byte offset requested for Tile64 \r\n");
+    GMM_DPF_EXIT;
+
+    // return ByteOffset=0, i.e return start of miptail for any address within packed miptail
+    return (ByteOffset);
+}
+
+void GmmLib::GmmGen12TextureCalc::GetMipTailGeometryOffset(GMM_TEXTURE_INFO *pTexInfo,
+                                                           uint32_t          MipLevel,
+                                                           uint32_t *        OffsetX,
+                                                           uint32_t *        OffsetY,
+                                                           uint32_t *        OffsetZ)
+{
+    uint32_t ArrayIndex = 0;
+    uint32_t Slot       = 0;
+
+    GMM_DPF_ENTER;
+
+    if(pGmmGlobalContext->GetSkuTable().FtrTileY)
+    {
+        return GmmGen11TextureCalc::GetMipTailGeometryOffset(pTexInfo, MipLevel, OffsetX, OffsetY, OffsetZ);
+    }
+
+    // Til64 is the only format which supports MipTail on FtrTileY disabled platforms
+    __GMM_ASSERT(pTexInfo->Flags.Info.Tile64);
+    // Mipped MSAA is not supported for Tile64
+    __GMM_ASSERT(pTexInfo->MSAA.NumSamples <= 1);
+
+    switch(pTexInfo->BitsPerPixel)
+    {
+        case 128:
+            ArrayIndex = 0;
+            break;
+        case 64:
+            ArrayIndex = 1;
+            break;
+        case 32:
+            ArrayIndex = 2;
+            break;
+        case 16:
+            ArrayIndex = 3;
+            break;
+        case 8:
+            ArrayIndex = 4;
+            break;
+        default:
+            __GMM_ASSERT(0);
+            break;
+    }
+
+
+    // FtrTileY disabled platforms: platforms which support Tile4/Tile64 tiled formats
+    if(pTexInfo->Type == RESOURCE_1D)
+    {
+        Slot = MipLevel - pTexInfo->Alignment.MipTailStartLod;
+
+        *OffsetX = MipTailSlotOffset1DSurface[Slot][ArrayIndex].X * pTexInfo->BitsPerPixel / 8;
+        *OffsetY = MipTailSlotOffset1DSurface[Slot][ArrayIndex].Y;
+        *OffsetZ = MipTailSlotOffset1DSurface[Slot][ArrayIndex].Z;
+    }
+    else if(pTexInfo->Type == RESOURCE_2D || pTexInfo->Type == RESOURCE_CUBE)
+    {
+        // Mipped MSAA is not supported on Tile64, so need not account for MSAA here
+        Slot = MipLevel - pTexInfo->Alignment.MipTailStartLod;
+
+        *OffsetX = MipTailSlotOffset2DSurface[Slot][ArrayIndex].X * pTexInfo->BitsPerPixel / 8;
+        *OffsetY = MipTailSlotOffset2DSurface[Slot][ArrayIndex].Y;
+        *OffsetZ = MipTailSlotOffset2DSurface[Slot][ArrayIndex].Z;
+    }
+    else if(pTexInfo->Type == RESOURCE_3D)
+    {
+        Slot = MipLevel - pTexInfo->Alignment.MipTailStartLod;
+
+        *OffsetX = MipTailSlotOffset3DSurface[Slot][ArrayIndex].X * pTexInfo->BitsPerPixel / 8;
+        *OffsetY = MipTailSlotOffset3DSurface[Slot][ArrayIndex].Y;
+        *OffsetZ = MipTailSlotOffset3DSurface[Slot][ArrayIndex].Z;
+    }
+
+    GMM_DPF_EXIT;
+    return;
+}
+
diff --git a/Source/GmmLib/Texture/GmmGen9Texture.cpp b/Source/GmmLib/Texture/GmmGen9Texture.cpp
index d421ebd..10a2890 100644
--- a/Source/GmmLib/Texture/GmmGen9Texture.cpp
+++ b/Source/GmmLib/Texture/GmmGen9Texture.cpp
@@ -591,8 +591,8 @@
         ArrayQPitch = GFX_ALIGN_NP2(ArrayQPitch, Alignment);
 	    
 	// Color Surf with MSAA Enabled Mutiply 4
-        if((pTexInfo->Flags.Info.TiledYs) && (!pGmmGlobalContext->GetSkuTable().FtrTileY) &&
-           ((pTexInfo->MSAA.NumSamples == 8) || (pTexInfo->MSAA.NumSamples == 16)) &&
+        if(GMM_IS_64KB_TILE(pTexInfo->Flags) && (!pGmmGlobalContext->GetSkuTable().FtrTileY) &&
+           ((pTexInfo->MSAA.NumSamples == 8) && (pTexInfo->MSAA.NumSamples == 16)) &&
            ((pTexInfo->Flags.Gpu.Depth == 0) && (pTexInfo->Flags.Gpu.SeparateStencil == 0)))
         {
             ArrayQPitch *= 4; /* Aligned height of 4 samples */
diff --git a/Source/GmmLib/Texture/GmmTexture.cpp b/Source/GmmLib/Texture/GmmTexture.cpp
index c7143b5..0c1b195 100644
--- a/Source/GmmLib/Texture/GmmTexture.cpp
+++ b/Source/GmmLib/Texture/GmmTexture.cpp
@@ -585,7 +585,7 @@
     }
 
     // for TileYS, no conversion
-    if(pTexInfo->Flags.Info.TiledYs || pTexInfo->Flags.Info.Linear)
+    if(GMM_IS_64KB_TILE(pTexInfo->Flags) || pTexInfo->Flags.Info.Linear)
     {
         *pColFactor = 1;
         *pRowFactor = 1;
diff --git a/Source/GmmLib/Texture/GmmTexture.h b/Source/GmmLib/Texture/GmmTexture.h
index ecb023e..bbcc1b7 100644
--- a/Source/GmmLib/Texture/GmmTexture.h
+++ b/Source/GmmLib/Texture/GmmTexture.h
@@ -70,6 +70,27 @@
     __GMM_ASSERTPTR(pTexInfo, GMM_ERROR);
     __GMM_ASSERTPTR(pGmmGlobalContext, GMM_ERROR);
 
+#define SET_ALIGN_FACTOR(Xxx, Bytes)                            \
+    if(!pGmmGlobalContext->GetSkuTable().FtrTileY)              \
+    {                                                           \
+        UnitAlign##Xxx =                                        \
+            (pTexInfo->BitsPerPixel == 128) ? Bytes/16 :        \
+            (pTexInfo->BitsPerPixel ==  64) ? Bytes/8 :         \
+            (pTexInfo->BitsPerPixel ==  32) ? Bytes/4 :         \
+            (pTexInfo->BitsPerPixel ==  16) ? Bytes/2 : Bytes ; \
+                                                                \
+        if(!pTexInfo->Flags.Info.Linear &&  \
+           (pTexInfo->BitsPerPixel == 24 || pTexInfo->BitsPerPixel == 48 || pTexInfo->BitsPerPixel == 96)) \
+        {                                                       \
+            UnitAlign##Xxx = 16;                                \
+        }                                                       \
+        else if (pTexInfo->Flags.Info.Linear && \
+            (pTexInfo->BitsPerPixel == 24 || pTexInfo->BitsPerPixel == 48 || pTexInfo->BitsPerPixel == 96))\
+        {                                                       \
+            UnitAlign##Xxx = 128;                               \
+        }                                                       \
+    }
+
     if (!((pTexInfo->Format > GMM_FORMAT_INVALID) &&
         (pTexInfo->Format < GMM_RESOURCE_FORMATS)))
     {
@@ -124,13 +145,27 @@
                    !pTexInfo->Flags.Gpu.Depth &&
                    !pTexInfo->Flags.Gpu.SeparateStencil)
                 {
-                    switch(pTexInfo->MSAA.NumSamples)
+                    if(pGmmGlobalContext->GetSkuTable().FtrTileY)
                     {
-                        case 16: UnitAlignWidth /= 4; UnitAlignHeight /= 4; break;
-                        case 8:  UnitAlignWidth /= 4; UnitAlignHeight /= 2; break;
-                        case 4:  UnitAlignWidth /= 2; UnitAlignHeight /= 2; break;
-                        case 2:  UnitAlignWidth /= 2; break;
-                        default: __GMM_ASSERT(0);
+                        switch(pTexInfo->MSAA.NumSamples)
+                        {
+                            case 16: UnitAlignWidth /= 4; UnitAlignHeight /= 4; break;
+                            case 8:  UnitAlignWidth /= 4; UnitAlignHeight /= 2; break;
+                            case 4:  UnitAlignWidth /= 2; UnitAlignHeight /= 2; break;
+                            case 2:  UnitAlignWidth /= 2; break;
+                            default: __GMM_ASSERT(0);
+                        }
+                    }
+                    else
+                    {
+                        switch (pTexInfo->MSAA.NumSamples)
+                        {
+                            case 4:
+                            case 8:
+                            case 16: UnitAlignWidth /= 2; UnitAlignHeight /= 2; break;
+                            case 2:  UnitAlignWidth /= 2; break;
+                            default: __GMM_ASSERT(0);
+                        }
                     }
                 }
             }
@@ -166,6 +201,9 @@
                 (pTexInfo->Type == RESOURCE_1D))
         {
             UnitAlignWidth = 64;
+
+            // Tile4/64
+            SET_ALIGN_FACTOR(Width, 128);
         }
         /// CCS ///////////////////////////////////////////////////////////
         else if (pTexInfo->Flags.Gpu.CCS &&
@@ -190,6 +228,9 @@
         {
             UnitAlignWidth = pPlatform->TexAlign.YUV422.Width;
             UnitAlignHeight = pPlatform->TexAlign.YUV422.Height;
+
+            // For packed 8/16-bit formats alignment factor of 4 will give us < 16B so expand to 32B
+            SET_ALIGN_FACTOR(Width, 32);
         }
         else if(GmmIsCompressed(pTexInfo->Format)) /////////////////////////////
         {
@@ -233,11 +274,16 @@
                     UnitAlignWidth = pPlatform->TexAlign.Depth_D16_UNORM_1x_4x_16x.Width;
                     UnitAlignHeight = pPlatform->TexAlign.Depth_D16_UNORM_1x_4x_16x.Height;
                 }
+
+                SET_ALIGN_FACTOR(Width, 16);
+
             }
             else
             {
                 UnitAlignWidth = pPlatform->TexAlign.Depth.Width;
                 UnitAlignHeight = pPlatform->TexAlign.Depth.Height;
+
+                SET_ALIGN_FACTOR(Width, 32);
             }
         }
         /// Separate Stencil //////////////////////////////////////////////
@@ -245,6 +291,9 @@
         {
             UnitAlignWidth  = pPlatform->TexAlign.SeparateStencil.Width;
             UnitAlignHeight = pPlatform->TexAlign.SeparateStencil.Height;
+
+            SET_ALIGN_FACTOR(Width, 16);
+
         }
         /// Cross Adapter //////////////////////////////////////////////
         else if(pTexInfo->Flags.Info.XAdapter)
@@ -252,6 +301,10 @@
             //Add cross adapter height restriction.
             UnitAlignHeight = pPlatform->TexAlign.XAdapter.Height;
             UnitAlignWidth = pPlatform->TexAlign.XAdapter.Width;
+
+            SET_ALIGN_FACTOR(Width, 128);
+
+            __GMM_ASSERT(pTexInfo->MaxLod == 0);
         }
         else if(((pTexInfo->Flags.Gpu.MCS &&
                   GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN12_CORE) ||
@@ -260,6 +313,8 @@
         {
             UnitAlignWidth  = 16;
             UnitAlignHeight = 4;
+
+            SET_ALIGN_FACTOR(Width, 128);
         }
         else if(pTexInfo->Flags.Wa.__ForceOtherHVALIGN4)
         {
@@ -296,6 +351,8 @@
                 {
                     UnitAlignWidth = 8;
                 }
+
+                SET_ALIGN_FACTOR(Width, 128);
             }
             else if(pTexInfo->MSAA.NumSamples <= 1)
             {
diff --git a/Source/GmmLib/Texture/GmmTextureAlloc.cpp b/Source/GmmLib/Texture/GmmTextureAlloc.cpp
index 481a8ed..61055a8 100644
--- a/Source/GmmLib/Texture/GmmTextureAlloc.cpp
+++ b/Source/GmmLib/Texture/GmmTextureAlloc.cpp
@@ -103,6 +103,10 @@
             {
                 GENERATE_TILE_MODE(YS, 1D, 2D, 2D_2X, 2D_4X, 2D_8X, 2D_16X, 3D);
             }
+            else
+            {
+                GENERATE_TILE_MODE(_64, 1D, 2D, 2D_2X, 2D_4X, 2D_4X, 2D_4X, 3D);
+            }
 
             pTexInfo->Flags.Info.TiledYf = 0;
             GMM_SET_64KB_TILE(pTexInfo->Flags, 1);
@@ -422,7 +426,7 @@
 
         if(pTexInfo->Flags.Info.RenderCompressed || pTexInfo->Flags.Info.MediaCompressed)
         {
-            if(!GMM_IS_64KB_TILE(pTexInfo->Flags)) //Ys is naturally aligned to required 4 YF pages
+            if(!GMM_IS_64KB_TILE(pTexInfo->Flags) && !pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS) //Ys is naturally aligned to required 4 YF pages
             {
                 // Align Pitch to 4-tile boundary
                 WidthBytesPhysical = GFX_ALIGN(WidthBytesPhysical,
@@ -472,7 +476,7 @@
 
         if(pGmmGlobalContext->GetWaTable().WaMsaa8xTileYDepthPitchAlignment &&
            (pTexInfo->MSAA.NumSamples == 8) &&
-           pTexInfo->Flags.Info.TiledY &&
+           GMM_IS_4KB_TILE(pTexInfo->Flags) &&
            pTexInfo->Flags.Gpu.Depth)
         {
             WidthBytesLock =
@@ -679,6 +683,20 @@
                 {
                     Size *= pTexInfo->MSAA.NumSamples;
                 }
+                else
+                {
+                    //XeHP
+                    if((pTexInfo->MSAA.NumSamples == 8 || pTexInfo->MSAA.NumSamples == 16))
+                    {
+                        uint64_t SliceSize = pTexInfo->Pitch * Height;
+                        SliceSize *= 4; // multiple by samples per tile
+                        Size = (int64_t)SliceSize;
+                    }
+                    else
+                    {
+                        Size *= pTexInfo->MSAA.NumSamples;
+                    }
+                }
             }
 
             if((pTexInfo->Flags.Info.TiledY && pTexInfo->Flags.Gpu.TiledResource))
diff --git a/Source/GmmLib/Texture/GmmTextureSpecialCases.cpp b/Source/GmmLib/Texture/GmmTextureSpecialCases.cpp
index af4a1ed..47347b2 100644
--- a/Source/GmmLib/Texture/GmmTextureSpecialCases.cpp
+++ b/Source/GmmLib/Texture/GmmTextureSpecialCases.cpp
@@ -181,8 +181,8 @@
             pTexInfo->Flags.Info.TiledW  = 0;
             pTexInfo->Flags.Info.TiledX  = 0;
             pTexInfo->Flags.Info.TiledYf = 0;
-            pTexInfo->Flags.Info.TiledYs = 0;
 
+            GMM_SET_64KB_TILE(pTexInfo->Flags, 0);
             GMM_SET_4KB_TILE(pTexInfo->Flags, 1);
         }
         else
@@ -197,7 +197,11 @@
         // With CCS surface creation, clients send height, width, depth, etc. of
         // the associated RenderTarget--and here we convert to the appropriate CCS
         // creation parameters...
-        __GMM_ASSERT((pTexInfo->Flags.Info.Linear + pTexInfo->Flags.Info.TiledW + pTexInfo->Flags.Info.TiledX + pTexInfo->Flags.Info.TiledY) == 1);
+        __GMM_ASSERT((!pGmmLibContext->GetSkuTable().FtrTileY ||
+                      (pTexInfo->Flags.Info.Linear + pTexInfo->Flags.Info.TiledW + pTexInfo->Flags.Info.TiledX + pTexInfo->Flags.Info.TiledY)) == 1);
+
+        __GMM_ASSERT((pGmmLibContext->GetSkuTable().FtrTileY || (pTexInfo->Flags.Info.Linear + pTexInfo->Flags.Info.Tile4 + pTexInfo->Flags.Info.Tile64)) == 1);
+
         __GMM_ASSERT((pTexInfo->MSAA.NumSamples == 1) || (pTexInfo->MSAA.NumSamples == 2) || (pTexInfo->MSAA.NumSamples == 4) ||
                      (pTexInfo->MSAA.NumSamples == 8) || (pTexInfo->MSAA.NumSamples == 16));
 
@@ -210,8 +214,8 @@
             pTexInfo->Flags.Info.TiledW  = 0;
             pTexInfo->Flags.Info.TiledX  = 0;
             pTexInfo->Flags.Info.TiledYf = 0;
-            pTexInfo->Flags.Info.TiledYs = 0;
 
+            GMM_SET_64KB_TILE(pTexInfo->Flags, 0);
             GMM_SET_4KB_TILE(pTexInfo->Flags, 1);
 
             //Clear compression request in CCS
@@ -237,22 +241,29 @@
                 GMM_ASSERTDPF((pTexInfo->MaxLod == 0), "Stencil Buffer LOD's not supported!");
             }
 
-            // Separate Stencil Tile-W Gen8-Gen11, otherwise Tile-Y
-            pTexInfo->Flags.Info.Linear  = 0;
-            pTexInfo->Flags.Info.TiledX  = 0;
-            pTexInfo->Flags.Info.TiledYf = 0;
-            pTexInfo->Flags.Info.TiledYs = 0;
-            pTexInfo->Flags.Info.TiledW  = 0;
-            pTexInfo->Flags.Info.TiledY  = 0;
-
-            if(GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN8_CORE &&
-               GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) <= IGFX_GEN11_CORE)
+            if(pGmmGlobalContext->GetSkuTable().FtrTileY)
             {
-                pTexInfo->Flags.Info.TiledW = 1;
+                // Separate Stencil Tile-W Gen8-Gen11, otherwise Tile-Y
+                pTexInfo->Flags.Info.Linear  = 0;
+                pTexInfo->Flags.Info.TiledX  = 0;
+                pTexInfo->Flags.Info.TiledYf = 0;
+                pTexInfo->Flags.Info.TiledW  = 0;
+                GMM_SET_4KB_TILE(pTexInfo->Flags, 0);
+                GMM_SET_64KB_TILE(pTexInfo->Flags, 0);
+
+                if(GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN8_CORE &&
+                   GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) <= IGFX_GEN11_CORE)
+                {
+                    pTexInfo->Flags.Info.TiledW = 1;
+                }
+                else
+                {
+                    GMM_SET_4KB_TILE(pTexInfo->Flags, 1);
+                }
             }
             else
             {
-                GMM_SET_4KB_TILE(pTexInfo->Flags, 1);
+                __GMM_ASSERT(pTexInfo->Flags.Info.Tile4 + pTexInfo->Flags.Info.Tile64 == 1);
             }
         }
         else
diff --git a/Source/GmmLib/TranslationTable/GmmPageTableMgr.cpp b/Source/GmmLib/TranslationTable/GmmPageTableMgr.cpp
index 0754fb1..d7fefce 100644
--- a/Source/GmmLib/TranslationTable/GmmPageTableMgr.cpp
+++ b/Source/GmmLib/TranslationTable/GmmPageTableMgr.cpp
@@ -353,7 +353,8 @@
         ptr->pClientContext = pClientContextIn;
         memcpy(&ptr->DeviceCbInt, DeviceCB, sizeof(GMM_DEVICE_CALLBACKS_INT));
 
-        if(pGmmGlobalContext->GetSkuTable().FtrE2ECompression)
+        if(pGmmGlobalContext->GetSkuTable().FtrE2ECompression &&
+           !pGmmGlobalContext->GetSkuTable().FtrFlatPhysCCS)
         {
             __GMM_ASSERT(TTFlags & AUXTT); //Aux-TT is mandatory
             ptr->AuxTTObj = new AuxTable();
diff --git a/Source/GmmLib/ULT/GmmGen12CachePolicyULT.cpp b/Source/GmmLib/ULT/GmmGen12CachePolicyULT.cpp
index 40b90c6..5da0d3f 100644
--- a/Source/GmmLib/ULT/GmmGen12CachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen12CachePolicyULT.cpp
@@ -40,7 +40,7 @@
     pGfxAdapterInfo->SystemInfo.L3CacheSizeInKb = 3072;
 
     const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrEDram     = false;
-    const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLLCBypass = 1;
+    const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLLCBypass = 0;
 
     CommonULT::SetUpTestCase();
 
diff --git a/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp b/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp
index 6ca5919..1ab9f0d 100644
--- a/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp
@@ -45,7 +45,7 @@
 
         pGfxAdapterInfo->SkuTable.FtrLinearCCS = 1; //legacy y =>0 - test both
         pGfxAdapterInfo->SkuTable.FtrTileY     = 1;
-        pGfxAdapterInfo->SkuTable.FtrLLCBypass = 1;
+        pGfxAdapterInfo->SkuTable.FtrLLCBypass = 0;
         CommonULT::SetUpTestCase();
     }
 }
diff --git a/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp b/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp
index a19b76c..9b2729b 100644
--- a/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp
@@ -49,7 +49,7 @@
 
     GfxPlatform.eProductFamily = platform;
 
-    GfxPlatform.eRenderCoreFamily = IGFX_GEN12_CORE;
+    GfxPlatform.eRenderCoreFamily = IGFX_XE_HP_CORE;
 
     pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO));
     if(pGfxAdapterInfo)
@@ -58,7 +58,7 @@
 
         pGfxAdapterInfo->SkuTable.FtrLinearCCS             = 1; //legacy y =>0 - test both
         pGfxAdapterInfo->SkuTable.FtrStandardMipTailFormat = 1;
-        pGfxAdapterInfo->SkuTable.FtrTileY                 = 1;
+        pGfxAdapterInfo->SkuTable.FtrTileY                 = 0;
         pGfxAdapterInfo->SkuTable.FtrLocalMemory           = 1;
         CommonULT::SetUpTestCase();
     }
@@ -80,6 +80,15 @@
     TearDownGen12dGPUVariant();
 }
 
+TEST_F(CTestGen12dGPUCachePolicy, TestGen12dGPU_XE_HP_SDVCachePolicy)
+{
+    SetUpGen12dGPUVariant(IGFX_XE_HP_SDV);
+
+    CheckL3Gen12dGPUCachePolicy();
+
+    TearDownGen12dGPUVariant();
+}
+
 void CTestGen12dGPUCachePolicy::CheckSpecialMocs(uint32_t                    Usage,
                                                uint32_t                    AssignedMocsIdx,
                                                GMM_CACHE_POLICY_ELEMENT ClientRequest)
@@ -88,11 +97,13 @@
     {
         EXPECT_EQ(AssignedMocsIdx, 60) << "Usage# " << Usage << ": Incorrect Index for CCS";
         EXPECT_EQ(0, ClientRequest.L3) << "Usage# " << Usage << ": Incorrect L3 cacheability for CCS";
+        EXPECT_EQ(0, ClientRequest.UcLookup) << "Usage# " << Usage << ": Incorrect L3 LookUp cacheability for CCS";
     }
     else if(Usage == GMM_RESOURCE_USAGE_CCS_MEDIA_WRITABLE) // 61
     {
         EXPECT_EQ(AssignedMocsIdx, 61) << "Usage# " << Usage << ": Incorrect Index for CCS";
         EXPECT_EQ(0, ClientRequest.L3) << "Usage# " << Usage << ": Incorrect L3 cacheability for CCS";
+        EXPECT_EQ(0, ClientRequest.UcLookup) << "Usage# " << Usage << ": Incorrect L3 LookUp cacheability for CCS";
     }
     else if(Usage == GMM_RESOURCE_USAGE_MOCS_62) //62
     {
@@ -145,12 +156,12 @@
         // Check if Mocs Index is not greater than GMM_MAX_NUMBER_MOCS_INDEXES
         EXPECT_GT(GMM_MAX_NUMBER_MOCS_INDEXES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (63)";
 
-        if(GfxPlatform.eProductFamily <= IGFX_DG1)
+        if(GfxPlatform.eProductFamily <= IGFX_XE_HP_SDV)
         {
             CheckMocsIdxHDCL1(Usage, AssignedMocsIdx, ClientRequest);
         }
 
-        if(GfxPlatform.eProductFamily <= IGFX_DG1)
+        if(GfxPlatform.eProductFamily <= IGFX_XE_HP_SDV)
         {
             CheckSpecialMocs(Usage, AssignedMocsIdx, ClientRequest);
         }
diff --git a/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp b/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp
index 62490a5..deefec2 100644
--- a/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp
@@ -35,8 +35,8 @@
 void CTestGen12dGPUResource::SetUpTestCase()
 {
     printf("%s\n", __FUNCTION__);
-    GfxPlatform.eProductFamily    = IGFX_DG1;
-    GfxPlatform.eRenderCoreFamily = IGFX_GEN12_CORE;
+    GfxPlatform.eProductFamily    = IGFX_XE_HP_SDV;
+    GfxPlatform.eRenderCoreFamily = IGFX_XE_HP_CORE;
 
     pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO));
     if(pGfxAdapterInfo)
@@ -971,9 +971,8 @@
 }
 
 /// @brief ULT for Planar Ys Compressed resource
-TEST_F(CTestGen12dGPUResource, TestPlanarYsCompressedResource)
+TEST_F(CTestGen12dGPUResource, TestPlanarTile64CompressedResource)
 {
-    const TEST_TILE_TYPE TileTypeSupported = {TEST_TILEYS};
 
     const uint32_t TileSize[TEST_BPP_MAX][2] = {
     {256, 256}, {512, 128}, {512, 128}, {1024, 64}, {1024, 64}}; // TileYS
@@ -1018,6 +1017,7 @@
         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
 	
 	GMM_REQ_OFFSET_INFO OffsetInfo = {};
+
         OffsetInfo.ReqLock             = 1;
         OffsetInfo.ReqRender           = 1;
         OffsetInfo.Plane               = GMM_PLANE_Y;
@@ -1030,9 +1030,21 @@
         //    gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
 	//    GMM_RESOURCE_INFO *AuxResourceInfo;
         //    AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
+        //    EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->G
+
+        // add verification
+
+        //{ //separate Aux
+        //    gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
+
+        //    GMM_RESOURCE_INFO *AuxResourceInfo;
+        //    AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
+
         //    EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
+
         //    pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
         //}
+
         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
     }
 }
@@ -2166,12 +2178,12 @@
         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
     }
 }
-///TODO Add MSAA/Depth Compressed Resource tests
+///Add MSAA/Depth Compressed Resource tests
 TEST_F(CTestGen12dGPUResource, DISABLED_TestLosslessMSAACompressedResource)
 {
 }
 
-///TODO Add MSAA/Depth Compressed Resource tests
+///Add MSAA/Depth Compressed Resource tests
 TEST_F(CTestGen12dGPUResource, DISABLED_TestDepthCompressedResource)
 {
     const uint32_t HAlign = 8;
diff --git a/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c b/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
index b82cc0d..dabfb0d 100644
--- a/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
+++ b/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
@@ -147,104 +147,116 @@
                 { (b15 == 'x' ? 0x8000 : 0) + (b14 == 'x' ? 0x4000 : 0) + (b13 == 'x' ? 0x2000 : 0) + (b12 == 'x' ? 0x1000 : 0) + (b11 == 'x' ? 0x0800 : 0) + (b10 == 'x' ? 0x0400 : 0) + (b9 == 'x' ? 0x0200 : 0) + (b8 == 'x' ? 0x0100 : 0) + (b7 == 'x' ? 0x0080 : 0) + (b6 == 'x' ? 0x0040 : 0) + (b5 == 'x' ? 0x0020 : 0) + (b4 == 'x' ? 0x0010 : 0) + (b3 == 'x' ? 0x0008 : 0) + (b2 == 'x' ? 0x0004 : 0) + (b1 == 'x' ? 0x0002 : 0) + (b0 == 'x' ? 0x0001 : 0), \
                   (b15 == 'y' ? 0x8000 : 0) + (b14 == 'y' ? 0x4000 : 0) + (b13 == 'y' ? 0x2000 : 0) + (b12 == 'y' ? 0x1000 : 0) + (b11 == 'y' ? 0x0800 : 0) + (b10 == 'y' ? 0x0400 : 0) + (b9 == 'y' ? 0x0200 : 0) + (b8 == 'y' ? 0x0100 : 0) + (b7 == 'y' ? 0x0080 : 0) + (b6 == 'y' ? 0x0040 : 0) + (b5 == 'y' ? 0x0020 : 0) + (b4 == 'y' ? 0x0010 : 0) + (b3 == 'y' ? 0x0008 : 0) + (b2 == 'y' ? 0x0004 : 0) + (b1 == 'y' ? 0x0002 : 0) + (b0 == 'y' ? 0x0001 : 0), \
                   (b15 == 'z' ? 0x8000 : 0) + (b14 == 'z' ? 0x4000 : 0) + (b13 == 'z' ? 0x2000 : 0) + (b12 == 'z' ? 0x1000 : 0) + (b11 == 'z' ? 0x0800 : 0) + (b10 == 'z' ? 0x0400 : 0) + (b9 == 'z' ? 0x0200 : 0) + (b8 == 'z' ? 0x0100 : 0) + (b7 == 'z' ? 0x0080 : 0) + (b6 == 'z' ? 0x0040 : 0) + (b5 == 'z' ? 0x0020 : 0) + (b4 == 'z' ? 0x0010 : 0) + (b3 == 'z' ? 0x0008 : 0) + (b2 == 'z' ? 0x0004 : 0) + (b1 == 'z' ? 0x0002 : 0) + (b0 == 'z' ? 0x0001 : 0) }
-    #endif
+#endif
     #define SWIZZLE(__SWIZZLE_Args) __SWIZZLE __SWIZZLE_Args
 
     // Legacy Intel Tiling Swizzles...
     SWIZZLE(( INTEL_TILE_X              o o o o Y Y Y X X X X X X X X X ));
     SWIZZLE(( INTEL_TILE_Y              o o o o X X X Y Y Y Y Y X X X X ));
 
-    // Standard Tiling Swizzles...
-    #define LOW_128bpp                                  X X Y Y X X X X
-    #define LOW_64bpp                                   LOW_128bpp
-    #define LOW_32bpp                                   X Y Y Y X X X X
-    #define LOW_16bpp                                   LOW_32bpp
-    #define LOW_8bpp                                    Y Y Y Y X X X X
-
-    SWIZZLE(( INTEL_TILEYF_128          o o o o X Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYF_64           o o o o X Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYF_32           o o o o X Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYF_16           o o o o X Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYF_8            o o o o X Y X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYS_128          X Y X Y X Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYS_64           X Y X Y X Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYS_32           X Y X Y X Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYS_16           X Y X Y X Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYS_8            X Y X Y X Y X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYF_MSAA2_128    o o o o S Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYF_MSAA2_64     o o o o S Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA2_32     o o o o S Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA2_16     o o o o S Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA2_8      o o o o S Y X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYS_MSAA2_128    S Y X Y X Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYS_MSAA2_64     S Y X Y X Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA2_32     S Y X Y X Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA2_16     S Y X Y X Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA2_8      S Y X Y X Y X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYF_MSAA4_128    o o o o S S X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYF_MSAA4_64     o o o o S S X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA4_32     o o o o S S X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA4_16     o o o o S S X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA4_8      o o o o S S X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYS_MSAA4_128    S S X Y X Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYS_MSAA4_64     S S X Y X Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA4_32     S S X Y X Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA4_16     S S X Y X Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA4_8      S S X Y X Y X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYF_MSAA8_128    o o o o S S S Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYF_MSAA8_64     o o o o S S S Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA8_32     o o o o S S S Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA8_16     o o o o S S S Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA8_8      o o o o S S S Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYS_MSAA8_128    S S S Y X Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYS_MSAA8_64     S S S Y X Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA8_32     S S S Y X Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA8_16     S S S Y X Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA8_8      S S S Y X Y X Y LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYF_MSAA16_128   o o o o S S S S LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYF_MSAA16_64    o o o o S S S S LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA16_32    o o o o S S S S LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA16_16    o o o o S S S S LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYF_MSAA16_8     o o o o S S S S LOW_8bpp   ));
-
-    SWIZZLE(( INTEL_TILEYS_MSAA16_128   S S S S X Y X Y LOW_128bpp ));
-    SWIZZLE(( INTEL_TILEYS_MSAA16_64    S S S S X Y X Y LOW_64bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA16_32    S S S S X Y X Y LOW_32bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA16_16    S S S S X Y X Y LOW_16bpp  ));
-    SWIZZLE(( INTEL_TILEYS_MSAA16_8     S S S S X Y X Y LOW_8bpp   ));
-
-    #define LOW_3D                                      Z Z Y Y X X X X
-
-    SWIZZLE(( INTEL_TILEYF_3D_128       o o o o Y Z X X LOW_3D ));
-    SWIZZLE(( INTEL_TILEYF_3D_64        o o o o Y Z X X LOW_3D ));
-    SWIZZLE(( INTEL_TILEYF_3D_32        o o o o Y Z X Y LOW_3D ));
-    SWIZZLE(( INTEL_TILEYF_3D_16        o o o o Y Z Y Z LOW_3D ));
-    SWIZZLE(( INTEL_TILEYF_3D_8         o o o o Y Z Y Z LOW_3D ));
-
-    SWIZZLE(( INTEL_TILEYS_3D_128       X Y Z X Y Z X X LOW_3D ));
-    SWIZZLE(( INTEL_TILEYS_3D_64        X Y Z X Y Z X X LOW_3D ));
-    SWIZZLE(( INTEL_TILEYS_3D_32        X Y Z X Y Z X Y LOW_3D ));
-    SWIZZLE(( INTEL_TILEYS_3D_16        X Y Z X Y Z Y Z LOW_3D ));
-    SWIZZLE(( INTEL_TILEYS_3D_8         X Y Z X Y Z Y Z LOW_3D ));
-
     #ifdef INTEL_TILE_W_SUPPORT
         SWIZZLE(( INTEL_TILE_W          o o o o X X X Y Y Y Y X Y X Y X ));
     #endif
+// Gen9 Swizzles...
+    SWIZZLE(( INTEL_TILE_YF_128         o o o o X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_64          o o o o X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_32          o o o o X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_16          o o o o X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_8           o o o o X Y X Y Y Y Y Y X X X X ));
 
-    #undef LOW_3D
-    #undef LOW_128bpp
-    #undef LOW_64bpp
-    #undef LOW_32bpp
-    #undef LOW_16bpp
-    #undef LOW_8bpp
+    SWIZZLE(( INTEL_TILE_YS_128         X Y X Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_64          X Y X Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_32          X Y X Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_16          X Y X Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_8           X Y X Y X Y X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YF_MSAA2_128   o o o o S Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA2_64    o o o o S Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA2_32    o o o o S Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA2_16    o o o o S Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA2_8     o o o o S Y X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YS_MSAA2_128   S Y X Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA2_64    S Y X Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA2_32    S Y X Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA2_16    S Y X Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA2_8     S Y X Y X Y X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YF_MSAA4_128   o o o o S S X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA4_64    o o o o S S X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA4_32    o o o o S S X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA4_16    o o o o S S X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA4_8     o o o o S S X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YS_MSAA4_128   S S X Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA4_64    S S X Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA4_32    S S X Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA4_16    S S X Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA4_8     S S X Y X Y X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YF_MSAA8_128   o o o o S S S Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA8_64    o o o o S S S Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA8_32    o o o o S S S Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA8_16    o o o o S S S Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA8_8     o o o o S S S Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YS_MSAA8_128   S S S Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA8_64    S S S Y X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA8_32    S S S Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA8_16    S S S Y X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA8_8     S S S Y X Y X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YF_MSAA16_128  o o o o S S S S X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA16_64   o o o o S S S S X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA16_32   o o o o S S S S X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA16_16   o o o o S S S S X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_MSAA16_8    o o o o S S S S Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YS_MSAA16_128  S S S S X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA16_64   S S S S X Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA16_32   S S S S X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA16_16   S S S S X Y X Y X Y Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_MSAA16_8    S S S S X Y X Y Y Y Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YF_3D_128      o o o o Y Z X X Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_3D_64       o o o o Y Z X X Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_3D_32       o o o o Y Z X Y Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_3D_16       o o o o Y Z Y Z Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YF_3D_8        o o o o Y Z Y Z Z Z Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_YS_3D_128      X Y Z X Y Z X X Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_3D_64       X Y Z X Y Z X X Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_3D_32       X Y Z X Y Z X Y Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_3D_16       X Y Z X Y Z Y Z Z Z Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_YS_3D_8        X Y Z X Y Z Y Z Z Z Y Y X X X X ));
+
+    // XE_HP_SDV Swizzles...
+    SWIZZLE(( INTEL_TILE_4              o o o o Y Y X Y X X Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_64_128         Y X X X Y Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_64          Y X X X Y Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_32          Y Y X X Y Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_16          Y Y X X Y Y X Y X X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_8           Y Y Y X Y Y X Y X X Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_64_MSAA2_128   Y X X X Y Y X Y S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA2_64    Y X X X Y Y X Y S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA2_32    Y Y X X Y Y X Y S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA2_16    Y Y X X Y Y X Y S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA2_8     Y Y Y X Y Y X Y S X Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_64_MSAA_128    Y X X X Y Y X S S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA_64     Y X X X Y Y X S S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA_32     Y Y X X Y Y X S S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA_16     Y Y X X Y Y X S S X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_MSAA_8      Y Y Y X Y Y X S S X Y Y X X X X ));
+
+    SWIZZLE(( INTEL_TILE_64_3D_128      Z Z Y X X X Z Y Z X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_3D_64       Z Z Y X X X Z Y Z X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_3D_32       Z Z Y X Y X Z Y Z X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_3D_16       Z Z Z Y Y X Z Y Z X Y Y X X X X ));
+    SWIZZLE(( INTEL_TILE_64_3D_8        Z Z Z X Y Y Z Y Z X Y Y X X X X ));
+
     #undef X
     #undef Y
     #undef Z
@@ -253,7 +265,6 @@
     #undef __SWIZZLE
     #undef SWIZZLE
 
-
 // Accessing Swizzled Surface ##################################################
 
 /* While graphics hardware prefers to access surfaces stored in tiled/swizzled
@@ -521,6 +532,7 @@
                 ((pSwizzledSurface->OffsetY + CopyHeight) <= pSwizzledSurface->Height)
             ) ||
             #endif
+
             ((pDest->OffsetX + CopyWidthBytes) <= pDest->Pitch) &&
             ((pDest->OffsetY + CopyHeight) <= pDest->Height) &&
             ((pSrc->OffsetX + CopyWidthBytes) <= pSrc->Pitch) &&
@@ -1091,4 +1103,4 @@
 } // CpuSwizzleBlt
 
 #endif // #ifndef INCLUDE_CpuSwizzleBlt_c_AS_HEADER
-// clang-format on
\ No newline at end of file
+// clang-format on
diff --git a/Source/GmmLib/Utility/GmmLibObject.cpp b/Source/GmmLib/Utility/GmmLibObject.cpp
index 5fe891b..1f45aa5 100644
--- a/Source/GmmLib/Utility/GmmLibObject.cpp
+++ b/Source/GmmLib/Utility/GmmLibObject.cpp
@@ -68,6 +68,7 @@
     {
         case IGFX_GEN12LP_CORE:
         case IGFX_GEN12_CORE:
+        case IGFX_XE_HP_CORE:
             return new GmmLib::PlatformInfoGen12(Platform);
             break;
         case IGFX_GEN11_CORE:
@@ -107,6 +108,7 @@
         {
             case IGFX_GEN12LP_CORE:
             case IGFX_GEN12_CORE:
+            case IGFX_XE_HP_CORE:
                 if(pGmmGlobalContext->GetSkuTable().FtrLocalMemory)
                 {
                     pGmmCachePolicy = new GmmLib::GmmGen12dGPUCachePolicy(CachePolicy);
@@ -177,6 +179,7 @@
             break;
         case IGFX_GEN12LP_CORE:
         case IGFX_GEN12_CORE:
+        case IGFX_XE_HP_CORE:
         default:
             return new GmmGen12TextureCalc();
             break;
diff --git a/Source/GmmLib/Utility/GmmUtility.cpp b/Source/GmmLib/Utility/GmmUtility.cpp
index c9e5081..125001a 100644
--- a/Source/GmmLib/Utility/GmmUtility.cpp
+++ b/Source/GmmLib/Utility/GmmUtility.cpp
@@ -566,7 +566,7 @@
             // Validate Block Dimensions...
             if(!(
 #define GMM_FORMAT_INCLUDE_ASTC_FORMATS_ONLY
-#define GMM_FORMAT(Name, bpe, Width, Height, Depth, IsRT, IsASTC, RcsSurfaceFormat, AuxL1eFormat, Availability) \
+#define GMM_FORMAT(Name, bpe, Width, Height, Depth, IsRT, IsASTC, RcsSurfaceFormat, SSCompressionFmt, Availability) \
     ((BlockWidth == (Width)) && (BlockHeight == (Height)) && (BlockDepth == (Depth))) ||
 #include "External/Common/GmmFormatTable.h"
                0)) // <-- 0 benignly terminates the chain of OR expressions.
diff --git a/Source/GmmLib/inc/External/Common/GmmCachePolicy.h b/Source/GmmLib/inc/External/Common/GmmCachePolicy.h
index 91b9f1a..b462325 100644
--- a/Source/GmmLib/inc/External/Common/GmmCachePolicy.h
+++ b/Source/GmmLib/inc/External/Common/GmmCachePolicy.h
@@ -94,7 +94,9 @@
             uint16_t ESC                : 1; // Enable Skip Caching (ESC) for L3.
             uint16_t SCC                : 3; // Skip Caching Control (SCC) for L3.
             uint16_t Cacheability       : 2; // L3 Cacheability Control (L3CC).
-            uint16_t Reserved           : 10;
+            uint16_t GlobalGo           : 1; // Global Go (GLBGO).
+            uint16_t UCLookup           : 1; // UC L3 Lookup (UcL3Lookup).
+            uint16_t Reserved           : 8;
         } ;
         uint16_t UshortValue;
     } L3;
@@ -209,6 +211,9 @@
         if (!REGISTRY_OVERRIDE_READ(Usage,CoS))        CoS        = -1;             \
         if (!REGISTRY_OVERRIDE_READ(Usage,HDCL1))      HDCL1      = -1;             \
         if (!REGISTRY_OVERRIDE_READ(Usage,L3Eviction)) L3Eviction = -1;             \
+        if (!REGISTRY_OVERRIDE_READ(Usage,GlbGo))      GlbGo      = -1;             \
+        if (!REGISTRY_OVERRIDE_READ(Usage,UcLookup))   UcLookup   = -1;             \
+
 
 
 #define SETOVERRIDES(Usage)                                                     \
@@ -264,6 +269,14 @@
         {                                                                       \
             pCachePolicy[Usage].L3Eviction = L3Eviction;                        \
         }                                                                       \
+        if (GlbGo != -1)                                                        \
+        {                                                                       \
+            pCachePolicy[Usage].GlbGo = GlbGo;                                  \
+        }                                                                       \
+        if (UcLookup != -1)                                                     \
+        {                                                                       \
+            pCachePolicy[Usage].UcLookup = UcLookup;                            \
+        }                                                                       \
         {                                                                       \
             pCachePolicy[Usage].IsOverridenByRegkey = 1;                        \
         }
@@ -296,6 +309,9 @@
         REGISTRY_OVERRIDE_WRITE(Usage,HDCL1, pCachePolicy[Usage].HDCL1);           \
         REGISTRY_OVERRIDE_WRITE(Usage,L3Eviction, pCachePolicy[Usage].L3Eviction); \
         REGISTRY_OVERRIDE_WRITE(Usage,Enable,0);                                   \
+        REGISTRY_OVERRIDE_WRITE(Usage,GlbGo, pCachePolicy[Usage].GlbGo);           \
+        REGISTRY_OVERRIDE_WRITE(Usage,UcLookup, pCachePolicy[Usage].UcLookup);     \
+
     }                                                                              \
     else if (GenerateKeys == UNCACHED || GenerateKeys == CURRENT)                  \
     {                                                                              \
@@ -317,6 +333,8 @@
         REGISTRY_OVERRIDE_WRITE(Usage,HDCL1, HDCL1);                               \
         REGISTRY_OVERRIDE_WRITE(Usage,L3Eviction, L3Eviction);                     \
         REGISTRY_OVERRIDE_WRITE(Usage,Enable,Enable);                              \
+        REGISTRY_OVERRIDE_WRITE(Usage,GlbGo, GlbGo);                               \
+        REGISTRY_OVERRIDE_WRITE(Usage,UcLookup, UcLookup);                         \
     }                                                                              \
                                                                                    \
     if (Enable)                                                                    \
diff --git a/Source/GmmLib/inc/External/Common/GmmCachePolicyExt.h b/Source/GmmLib/inc/External/Common/GmmCachePolicyExt.h
index decfbbd..9fe9d10 100644
--- a/Source/GmmLib/inc/External/Common/GmmCachePolicyExt.h
+++ b/Source/GmmLib/inc/External/Common/GmmCachePolicyExt.h
@@ -110,7 +110,7 @@
         uint32_t EncryptedData : 1;
         uint32_t Index         : 6 ;
         uint32_t               : 25;
-    }Gen9, Gen10, Gen11,Gen12;
+    }Gen9, Gen10, Gen11,Gen12, XE_HP;
 
     uint32_t                       DwordValue;
 }MEMORY_OBJECT_CONTROL_STATE;
@@ -133,4 +133,4 @@
 #else
 struct GmmCachePolicyCommon;
 typedef struct GmmCachePolicyCommon GMM_CACHE_POLICY;
-#endif
\ No newline at end of file
+#endif
diff --git a/Source/GmmLib/inc/External/Common/GmmCommonExt.h b/Source/GmmLib/inc/External/Common/GmmCommonExt.h
index 689ddab..6c57195 100644
--- a/Source/GmmLib/inc/External/Common/GmmCommonExt.h
+++ b/Source/GmmLib/inc/External/Common/GmmCommonExt.h
@@ -172,6 +172,16 @@
     ClientType = GMM_UNDEFINED_CLIENT;              \
 }                                                   \
 
+#define GET_RES_CLIENT_TYPE(pResourceInfo, ClientType)  \
+if(pResourceInfo)                                       \
+{                                                       \
+    ClientType = (pResourceInfo)->GetClientType();      \
+}                                                       \
+else                                                    \
+{                                                       \
+    ClientType = GMM_UNDEFINED_CLIENT;                  \
+}                                                       \
+
 //===========================================================================
 // typedef:
 //     GMM_TEXTURE_LAYOUT
@@ -197,7 +207,9 @@
     GMM_TILED_X,
     GMM_TILED_Y,
     GMM_TILED_W,
-    GMM_NOT_TILED
+    GMM_NOT_TILED,
+    GMM_TILED_4,
+    GMM_TILED_64
 }GMM_TILE_TYPE;
 
 //===========================================================================
@@ -402,7 +414,7 @@
 {
     GMM_FORMAT_INVALID = 0, // <-- This stays zero! (For boolean and valid range checks.)
 
-    #define GMM_FORMAT(Name, bpe, Width, Height, Depth, IsRT, IsASTC, RcsSurfaceFormat, AuxL1eFormat, Availability) \
+    #define GMM_FORMAT(Name, bpe, Width, Height, Depth, IsRT, IsASTC, RcsSurfaceFormat, SSCompressionFmt, Availability) \
         GMM_FORMAT_##Name, \
         GMM_FORMAT_##Name##_TYPE = GMM_FORMAT_##Name, // TODO(Minor): Remove _TYPE suffix from every GMM_FORMAT_ reference throughout driver and delete this aliasing. (And remove the \ from the line above.)
     #include "GmmFormatTable.h"
@@ -429,7 +441,7 @@
     GMM_SURFACESTATE_FORMAT_INVALID = -1, // Can't use zero since that's an actual enum value.
 
     #define GMM_FORMAT_INCLUDE_SURFACESTATE_FORMATS_ONLY
-    #define GMM_FORMAT(Name, bpe, Width, Height, Depth, IsRT, IsASTC, RcsSurfaceFormat, AuxL1eFormat, Availability) \
+    #define GMM_FORMAT(Name, bpe, Width, Height, Depth, IsRT, IsASTC, RcsSurfaceFormat, SSCompressionFmt, Availability) \
         GMM_SURFACESTATE_FORMAT_##Name = RcsSurfaceFormat,
     #include "GmmFormatTable.h"
 } GMM_SURFACESTATE_FORMAT;
@@ -513,7 +525,9 @@
     GMM_HW_TILED_W_WALK     = 2,
     GMM_HW_TILED_YF_WALK    = 3,
     GMM_HW_TILED_YS_WALK    = 4,
-    GMM_HW_NOT_TILED        = 5
+    GMM_HW_TILED_4_WALK     = 5,
+    GMM_HW_TILED_64_WALK    = 6,
+    GMM_HW_NOT_TILED        = 7
 } GMM_TILE_WALK;
 
 //===========================================================================
diff --git a/Source/GmmLib/inc/External/Common/GmmFormatTable.h b/Source/GmmLib/inc/External/Common/GmmFormatTable.h
index 56612b6..dd4749a 100644
--- a/Source/GmmLib/inc/External/Common/GmmFormatTable.h
+++ b/Source/GmmLib/inc/External/Common/GmmFormatTable.h
@@ -47,13 +47,16 @@
 #define WA              GMM_FORMAT_WA
 #define x               0
 #define NC              GMM_COMPR_FORMAT_INVALID
+#define MC(n)           n | (0x1 << 5) //GMM_FLATCCS_MIN_MC_FORMAT - 1
 
 #define FC(ver, bpc, fmtstr, bpcstr, typestr)                               \
-    (ver == 1 || SKU(FtrE2ECompression)) ?                                  \
+    (ver == 1 || (SKU(FtrE2ECompression) && !(SKU(FtrFlatPhysCCS)))) ?\
         ((bpc == 16) ? GMM_E2ECOMP_FORMAT_RGBAFLOAT16 :                     \
          (bpc == 32) ? GMM_E2ECOMP_FORMAT_R32G32B32A32_FLOAT :              \
          (bpc == 8) ? GMM_E2ECOMP_FORMAT_ARGB8b :                           \
-         (bpc == x) ? GMM_E2ECOMP_FORMAT_##fmtstr : NC) :NC
+         (bpc == x) ? GMM_E2ECOMP_FORMAT_##fmtstr : NC) :                   \
+    (ver == 2 || (SKU(FtrFlatPhysCCS))) ?\
+        (GMM_FLATCCS_FORMAT_##fmtstr##bpcstr##typestr) : NC
 
 /****************************************************************************\
   GMM FORMAT TABLE
diff --git a/Source/GmmLib/inc/External/Common/GmmPlatformExt.h b/Source/GmmLib/inc/External/Common/GmmPlatformExt.h
index 8651732..49cbbc6 100644
--- a/Source/GmmLib/inc/External/Common/GmmPlatformExt.h
+++ b/Source/GmmLib/inc/External/Common/GmmPlatformExt.h
@@ -115,6 +115,15 @@
     DEFINE_TILE_BPEs( YS_2D_8X  ),
     DEFINE_TILE_BPEs( YS_2D_16X ),
     DEFINE_TILE_BPEs( YS_3D     ),
+
+    // XE-HP
+    TILE4,
+    DEFINE_TILE_BPEs( _64_1D ),
+    DEFINE_TILE_BPEs( _64_2D ),
+    DEFINE_TILE_BPEs( _64_2D_2X),
+    DEFINE_TILE_BPEs( _64_2D_4X),
+    DEFINE_TILE_BPEs( _64_3D),
+
     GMM_TILE_MODES
 }GMM_TILE_MODE;
 
diff --git a/Source/GmmLib/inc/External/Common/GmmResourceFlags.h b/Source/GmmLib/inc/External/Common/GmmResourceFlags.h
index 50944bb..0b0b5cb 100644
--- a/Source/GmmLib/inc/External/Common/GmmResourceFlags.h
+++ b/Source/GmmLib/inc/External/Common/GmmResourceFlags.h
@@ -133,6 +133,8 @@
         uint32_t XAdapter                  : 1; // For WinBlue: to support Hybrid graphics
         uint32_t __PreallocatedResInfo     : 1; // Internal GMM flag--Clients don't set.
         uint32_t __PreWddm2SVM             : 1; // Internal GMM flag--Clients don't set.
+        uint32_t Tile4                     : 1; // XE-HP 4KB tile
+        uint32_t Tile64                    : 1; // XE-HP 64KB tile
     } Info;
 
     // Wa: Any Surface specific Work Around will go in here
diff --git a/Source/GmmLib/inc/External/Common/GmmResourceInfoCommon.h b/Source/GmmLib/inc/External/Common/GmmResourceInfoCommon.h
index ce95cf0..d246ee1 100644
--- a/Source/GmmLib/inc/External/Common/GmmResourceInfoCommon.h
+++ b/Source/GmmLib/inc/External/Common/GmmResourceInfoCommon.h
@@ -77,6 +77,7 @@
 #else
             GmmClientContext                   *pClientContext;    ///< ClientContext of the client creating this Resource
 #endif
+            GMM_MULTI_TILE_ARCH                MultiTileArch;
 
         private:
             GMM_STATUS          ApplyExistingSysMemRestrictions();
@@ -108,6 +109,16 @@
 
                     __GMM_ASSERT((TiledMode != 3) || (pTextureInfo->Flags.Info.TiledY || pTextureInfo->Flags.Info.TiledYf || pTextureInfo->Flags.Info.TiledYs));
                 }
+                else
+                {
+                    TiledMode =
+                        (GMM_IS_4KB_TILE(pTextureInfo->Flags)) ? 3 :
+                            (GMM_IS_64KB_TILE(pTextureInfo->Flags)) ? 1 :
+                            pTextureInfo->Flags.Info.TiledX ? 2 :
+                            /* Linear */ 0;
+
+                    __GMM_ASSERT(TiledMode || pTextureInfo->Flags.Info.Linear);
+                }
 
                 return TiledMode;
             }
@@ -125,7 +136,8 @@
                 SvmAddress(),
                 pGmmLibContext(),
                 pPrivateData(),
-                pClientContext()
+                pClientContext(),
+                MultiTileArch()
             {
 #if (!defined(__GMM_KMD__) && !defined(GMM_UNIFIED_LIB))
                 // For clients, who derive classes from GMM class and call their derived class constructors
@@ -149,7 +161,8 @@
                 SvmAddress(),
                 pGmmLibContext(),
                 pPrivateData(),
-                pClientContext()
+                pClientContext(),
+                MultiTileArch()
             {
                 pClientContext = pClientContextIn;
             }
@@ -166,6 +179,7 @@
                 SvmAddress          = rhs.SvmAddress;
                 pPrivateData        = rhs.pPrivateData;
                 pGmmLibContext      = rhs.pGmmLibContext;
+                MultiTileArch       = rhs.MultiTileArch;
 
                 return *this;
             }
@@ -584,6 +598,14 @@
                 {
                     return GMM_TILED_Y;
                 }
+                else if (Surf.Flags.Info.Tile4)
+                {
+                    return GMM_TILED_4;
+                }
+                else if (Surf.Flags.Info.Tile64)
+                {
+                    return GMM_TILED_64;
+                }
 
                 return GMM_NOT_TILED;
             }
@@ -736,7 +758,8 @@
                 __GMM_ASSERT(ArrayIndex < Surf.ArraySize);
                 __GMM_ASSERT(GMM_IS_PLANAR(Surf.Format));
 
-                if (Surf.Flags.Gpu.UnifiedAuxSurface)
+                if (Surf.Flags.Gpu.UnifiedAuxSurface  &&
+                    !((GmmClientContext*)pClientContext)->GetSkuTable().FtrFlatPhysCCS)
                 {
                     if (GmmAuxType == GMM_AUX_Y_CCS)
                     {
@@ -976,6 +999,7 @@
             /////////////////////////////////////////////////////////////////////////////////////
             GMM_INLINE_VIRTUAL GMM_INLINE_EXPORTED GMM_GFX_SIZE_T  GMM_STDCALL GetSizeSurface()
             {
+                    GMM_OVERRIDE_SIZE_64KB_ALLOC;
                     return (Surf.Size + AuxSurf.Size + AuxSecSurf.Size);
             }
 
@@ -1076,6 +1100,13 @@
                     Offset = 0;
                 }
 
+                if(((GmmClientContext*)pClientContext)->GetSkuTable().FtrFlatPhysCCS && !Surf.Flags.Gpu.ProceduralTexture &&
+                    (GmmAuxType == GMM_AUX_CCS || GmmAuxType == GMM_AUX_ZCS ||
+                    GmmAuxType == GMM_AUX_Y_CCS || GmmAuxType == GMM_AUX_UV_CCS))
+                {
+                    Offset = 0;
+                }
+
                 return Offset;
             }
 
@@ -1092,6 +1123,11 @@
                 }
                 else if (GmmAuxType == GMM_AUX_CCS || GmmAuxType == GMM_AUX_HIZ || GmmAuxType == GMM_AUX_MCS)
                 {
+                    if(GmmAuxType == GMM_AUX_CCS &&
+                       ((GmmClientContext*)pClientContext)->GetSkuTable().FtrFlatPhysCCS && !Surf.Flags.Gpu.ProceduralTexture)
+                    {
+                        return 0;
+                    }
                     if (GmmAuxType == GMM_AUX_CCS && AuxSecSurf.Type != RESOURCE_INVALID &&
                         (Surf.Flags.Gpu.CCS && (Surf.MSAA.NumSamples > 1 ||
                             Surf.Flags.Gpu.Depth)))
@@ -1325,6 +1361,24 @@
                                 default: HAlign = 1; // TODO(Benign): Change back to 0 + assert after packed YUV handling corrected.
                             }
                         }
+                        else
+                        {
+                            uint32_t Align = GetHAlign() * (GetBitsPerPixel() >> 3);
+
+                            if (Surf.BitsPerPixel == 24 || Surf.BitsPerPixel == 48 || Surf.BitsPerPixel == 96)
+                            {
+                                Align = GetHAlign();
+                            }
+
+                            switch (Align)
+                            {
+                                case  16:  HAlign = 0; break;
+                                case  32:  HAlign = 1; break;
+                                case  64:  HAlign = 2; break;
+                                case 128:  HAlign = 3; break;
+                                default:   HAlign = 0; __GMM_ASSERT(0);
+                            }
+                        }
                     }
                 }
                 else
@@ -1637,6 +1691,73 @@
             GMM_VIRTUAL GMM_STATUS              GMM_STDCALL CreateCustomRes(Context& GmmLibContext, GMM_RESCREATE_CUSTOM_PARAMS& CreateParams);
             protected:
                 GMM_VIRTUAL void UpdateUnAlignedParams();
+            public:
+
+            GMM_INLINE_VIRTUAL GMM_INLINE_EXPORTED const GMM_MULTI_TILE_ARCH& GetMultiTileArch()
+            {
+                return MultiTileArch;
+            }
+
+            /////////////////////////////////////////////////////////////////////////////////////
+            /// Returns the Flat Phys CCS Size for the resource
+            /// @return     CCS size in bytes
+            /////////////////////////////////////////////////////////////////////////////////////
+            GMM_INLINE_VIRTUAL GMM_INLINE_EXPORTED GMM_GFX_SIZE_T GMM_STDCALL GetFlatPhysCcsSize()
+            {
+                if((((GmmClientContext*)pClientContext)->GetSkuTable().FtrFlatPhysCCS) &&
+                    !(Surf.Flags.Info.AllowVirtualPadding ||
+                        Surf.Flags.Info.ExistingSysMem ||
+                        Surf.Flags.Info.NonLocalOnly))
+                {
+                    return GFX_CEIL_DIV(Surf.Size, 256);
+                }
+                return 0;
+            }
+			/////////////////////////////////////////////////////////////////////////////////////
+            /// Returns Tiled mode for DEPTH_BUFFER_STATE/STENCIL_BUFFER_STATE/ HIER_DEPTH_BUFFER programming.
+            /// HIZ is always 4kb tiling, XeHP+ TileMode for HIZ is Tile4 and main surface can be
+            /// Tile64 , GMM_AUX_INVALID, will return data for main depth/stencil resource ,
+            /// GMM_AUX_HiZ returns data for HIZ resource
+            /// @return     Tiled Resource Mode(PreGen12) / Tiled Mode(Gen12+)
+            /////////////////////////////////////////////////////////////////////////////////////
+            GMM_INLINE_VIRTUAL GMM_INLINE_EXPORTED uint32_t GMM_STDCALL GetTiledModeDepthStencilState( GMM_UNIFIED_AUX_TYPE  AuxType = GMM_AUX_INVALID)
+            {
+                uint32_t TiledMode = 0;
+
+                if(GMM_IS_TILEY)
+                {
+                    TiledMode =
+				Surf.Flags.Info.TiledYf ? 1 :
+				Surf.Flags.Info.TiledYs ? 2 :
+			        /*TILE_NONE*/		  0;
+                }
+                else
+                {
+                    //1 and 3 are only valid value , 0 and 2 are reserved for XeHP+
+                    if( (AuxType == GMM_AUX_HIZ) && AuxSurf.Flags.Gpu.HiZ )
+                    {
+                        TiledMode =
+                            AuxSurf.Flags.Info.Tile4    ? 3 :
+                            AuxSurf.Flags.Info.Tile64   ? 1 :
+                            /* Default */                 0;
+
+                        __GMM_ASSERT(TiledMode == 3);
+                    }
+                    else
+                    {
+                        TiledMode =
+                            Surf.Flags.Info.Tile4   ? 3 :
+                            Surf.Flags.Info.Tile64  ? 1 :
+                            /* Default */	      0;
+
+                        __GMM_ASSERT( TiledMode );
+
+                    }
+
+                }
+
+                return TiledMode;
+            }
 
     };
 
diff --git a/Source/GmmLib/inc/External/Common/GmmResourceInfoExt.h b/Source/GmmLib/inc/External/Common/GmmResourceInfoExt.h
index 66c7ffe..c50ac11 100644
--- a/Source/GmmLib/inc/External/Common/GmmResourceInfoExt.h
+++ b/Source/GmmLib/inc/External/Common/GmmResourceInfoExt.h
@@ -222,6 +222,49 @@
 
 //===========================================================================
 // typedef:
+//        GMM_MULTI_TILE_ARCH
+//
+// Description:
+//     This structure is provides an advanced allocation interface for 4xXeHP
+//     multi tile Gpu support
+//---------------------------------------------------------------------------
+typedef struct GMM_MULTI_TILE_ARCH_REC // FtrMultiTileArch Advanced Parameters...
+{
+
+    uint8_t Enable          : 1;    // When FALSE, this struct is ignored
+                                    // and GMM will make such decisions
+                                    // based on the process's default
+                                    // tile assignment from KMD.
+
+    uint8_t TileInstanced   : 1;    // When TRUE allocation is Tile
+                                    // instanced resource
+
+    uint8_t GpuVaMappingSet;        // Bitmask indicating which tiles
+                                    // should receive page table updates
+                                    // when this allocation is mapped.
+                                    // For all tiles set ADAPTER_INFO.MultiTileArch.TileMask
+
+    uint8_t LocalMemEligibilitySet; // Bitmask indicating which tile's
+                                    // Local Memory this allocation
+                                    // can reside in--i.e. in addition to
+                                    // its preferred set, which others
+                                    // can it be migrated to under memory
+                                    // pressure. Entirely zeroed mask
+                                    // would be used for NonLocalOnly
+                                    // allocations.
+
+    uint8_t LocalMemPreferredSet;   // Bitmask indicating subset of above
+                                    // eligibility set that is preferred
+                                    // above the others. Entirely zeroed
+                                    // mask is equivalent to mask of all
+                                    // ones--i.e. "no preference within
+                                    // eligibility set".
+
+    uint32_t Reserved;
+
+} GMM_MULTI_TILE_ARCH;
+//===========================================================================
+// typedef:
 //        GMM_RESCREATE_PARAMS
 //
 // Description:
@@ -285,6 +328,7 @@
     uint32_t                               MaximumRenamingListLength;
     uint8_t                             NoGfxMemory;
     GMM_RESOURCE_INFO                   *pPreallocatedResInfo;
+    GMM_MULTI_TILE_ARCH                 MultiTileArch;
 
 } GMM_RESCREATE_PARAMS;
 
@@ -362,6 +406,7 @@
 //     C. GmmResGetAuxSurfaceOffset(pRes, GMM_AUX_CCS or GMM_AUX_ZCS)
 typedef enum
 {
+    GMM_AUX_INVALID,   // Main resource
     GMM_AUX_CCS,    // RT buffer's color control surface (Unpadded)
     GMM_AUX_Y_CCS,  // color control surface for Y-plane
     GMM_AUX_UV_CCS, // color control surface for UV-plane
diff --git a/Source/GmmLib/inc/External/Common/GmmTextureExt.h b/Source/GmmLib/inc/External/Common/GmmTextureExt.h
index 42ccac0..65e57b9 100644
--- a/Source/GmmLib/inc/External/Common/GmmTextureExt.h
+++ b/Source/GmmLib/inc/External/Common/GmmTextureExt.h
@@ -210,14 +210,16 @@
         (TileInfo).MaxPitch = 0;                \
 }
 
-#define GMM_IS_4KB_TILE(Flags)  ((Flags).Info.TiledY)
-#define GMM_IS_64KB_TILE(Flags) (Flags.Info.TiledYs)
+#define GMM_IS_4KB_TILE(Flags)  ((Flags).Info.TiledY || (Flags).Info.Tile4)
+#define GMM_IS_64KB_TILE(Flags) (Flags.Info.TiledYs || Flags.Info.Tile64)
+#define GMM_IS_SUPPORTED_BPP_ON_TILE_64_YF_YS(bpp) ((bpp == 8) || (bpp == 16) || (bpp == 32) || (bpp == 64) || (bpp == 128))
 
-#define GMM_SET_4KB_TILE(Flags, Value) ((Flags).Info.TiledY = (Value))
-#define GMM_SET_64KB_TILE(Flags, Value) ((Flags).Info.TiledYs = (Value))
-#define GMM_SET_4KB_TILE_MODE(TileMode) (TileMode = LEGACY_TILE_Y)
+#define GMM_SET_4KB_TILE(Flags, Value) if (pGmmGlobalContext->GetSkuTable().FtrTileY) ((Flags).Info.TiledY = (Value)); else ((Flags).Info.Tile4 = (Value))
+#define GMM_SET_64KB_TILE(Flags, Value) if (pGmmGlobalContext->GetSkuTable().FtrTileY) ((Flags).Info.TiledYs = (Value)); else ((Flags).Info.Tile64 = (Value))
+#define GMM_SET_4KB_TILE_MODE(TileMode) if (pGmmGlobalContext->GetSkuTable().FtrTileY) (TileMode = LEGACY_TILE_Y); else (TileMode = TILE4)
 #define GMM_IS_TILEY (pClientContext->GetSkuTable().FtrTileY)
 
+
 // Reset packing alignment to project default
 #pragma pack(pop)
 
diff --git a/Source/GmmLib/inc/External/Common/GmmUtil.h b/Source/GmmLib/inc/External/Common/GmmUtil.h
index 1b5daaa..47d56a6 100644
--- a/Source/GmmLib/inc/External/Common/GmmUtil.h
+++ b/Source/GmmLib/inc/External/Common/GmmUtil.h
@@ -98,4 +98,11 @@
         (GmmGetGttContext(pGmmGlobalContext)->GfxAddrRange.PP.Base +                             \
          GmmGetGttContext(pGmmGlobalContext)->GfxAddrRange.PP.Size)))
 
-#define GMM_INLINE __inline
\ No newline at end of file
+#define GMM_INLINE __inline
+
+#if(defined(__GMM_KMD__))
+#define GMM_OVERRIDE_SIZE_64KB_ALLOC  if(GmmGetSkuTable(pGmmGlobalContext)->FtrPpgtt64KBWalkOptimization){ return (this->GetSizeAllocation());}
+#else 
+#define GMM_OVERRIDE_SIZE_64KB_ALLOC  if(((GmmClientContext*)pClientContext)->GetSkuTable().FtrPpgtt64KBWalkOptimization){ return (this->GetSizeAllocation());}
+#endif
+
diff --git a/Source/GmmLib/inc/Internal/Common/Platform/GmmGen12Platform.h b/Source/GmmLib/inc/Internal/Common/Platform/GmmGen12Platform.h
index fb9f8c8..e93687c 100644
--- a/Source/GmmLib/inc/Internal/Common/Platform/GmmGen12Platform.h
+++ b/Source/GmmLib/inc/Internal/Common/Platform/GmmGen12Platform.h
@@ -45,14 +45,18 @@
     FC_TILE_Y,
     FC_TILE_YF,
     FC_TILE_YS,
+    FC_TILE_4,
+    FC_TILE_64,
     //max equals last supported plus one
     FC_TILE_MAX
 } FC_TILE_TYPE;
 
 #define FCTilingType(x)    (((x) == LEGACY_TILE_Y) ? (FC_TILE_Y) : \
+                           (((x) == TILE4) ? (FC_TILE_4) : \
                            (((x) >= TILE_YF_2D_8bpe && (x) <= TILE_YF_2D_128bpe) ? (FC_TILE_YF) : \
                            (((x) >= TILE_YS_2D_8bpe && (x) <= TILE_YS_2D_128bpe) ? (FC_TILE_YS) : \
-                           (FC_TILE_MAX))))
+                           (((x) >= TILE__64_2D_8bpe && (x) <= TILE__64_2D_128bpe) ? (FC_TILE_64) : \
+                           (FC_TILE_MAX))))))
 #define FCMaxBppModes      5
 #define FCMaxModes         FC_TILE_MAX * FCMaxBppModes
 #define FCBppMode(bpp)     __GmmLog2(bpp) - 3
@@ -73,6 +77,81 @@
     CCS_UNIT CCSEx[CCS_MODES];
 }GMM_TEXTURE_ALIGN_EX;
 
+typedef enum GMM_FLATCCS_FORMAT_ENUM
+{
+    GMM_FLATCCS_FORMAT_R16S = 0,
+    GMM_FLATCCS_FORMAT_R16U = GMM_FLATCCS_FORMAT_R16S,
+    GMM_FLATCCS_FORMAT_RG16F = GMM_FLATCCS_FORMAT_R16S,
+    GMM_FLATCCS_FORMAT_RG16U = GMM_FLATCCS_FORMAT_R16S,
+    GMM_FLATCCS_FORMAT_RG16S = GMM_FLATCCS_FORMAT_R16S,
+    GMM_FLATCCS_FORMAT_RGBA16S = GMM_FLATCCS_FORMAT_R16S,
+    GMM_FLATCCS_FORMAT_RGBA16U = GMM_FLATCCS_FORMAT_R16S,
+    GMM_FLATCCS_FORMAT_RGBA16F = GMM_FLATCCS_FORMAT_R16S,
+
+    GMM_FLATCCS_MIN_RC_FORMAT = GMM_FLATCCS_FORMAT_R16S,
+
+    GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_R32S = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_R32U = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_RG32F = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_RG32S = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_RG32U = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_RGBA32F = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_RGBA32S = GMM_FLATCCS_FORMAT_R32F,
+    GMM_FLATCCS_FORMAT_RGBA32U = GMM_FLATCCS_FORMAT_R32F,
+
+    GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_RGBA4 = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_B5G6R5 = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_R8S = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_R8U = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_RG8S = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_RG8U = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_RGBA8S = GMM_FLATCCS_FORMAT_RGB5A1,
+    GMM_FLATCCS_FORMAT_RGBA8U = GMM_FLATCCS_FORMAT_RGB5A1,
+
+    GMM_FLATCCS_FORMAT_RGB10A2,
+    GMM_FLATCCS_FORMAT_RG11B10,
+
+    GMM_FLATCCS_FORMAT_R32F1,
+    GMM_FLATCCS_FORMAT_R32S1 = GMM_FLATCCS_FORMAT_R32F1,
+    GMM_FLATCCS_FORMAT_R32U1 = GMM_FLATCCS_FORMAT_R32F1,
+
+    GMM_FLATCCS_FORMAT_R16F1,
+    GMM_FLATCCS_FORMAT_R16S1 = GMM_FLATCCS_FORMAT_R16F1,
+    GMM_FLATCCS_FORMAT_R16U1 = GMM_FLATCCS_FORMAT_R16F1,
+
+    GMM_FLATCCS_FORMAT_R8S1,
+    GMM_FLATCCS_FORMAT_R8U1 = GMM_FLATCCS_FORMAT_R8S1,
+
+    GMM_FLATCCS_MAX_RC_FORMAT = GMM_FLATCCS_FORMAT_R8U1,
+
+	GMM_FLATCCS_MIN_MC_FORMAT = 0x21,               //(0x1 <<5) ie Msb-5th bit turned on to identify MC encoding, to drop before SurfaceState usage
+    GMM_FLATCCS_FORMAT_RGBA16_MEDIA = GMM_FLATCCS_MIN_MC_FORMAT,
+    GMM_FLATCCS_FORMAT_Y210,
+    GMM_FLATCCS_FORMAT_YUY2,
+    GMM_FLATCCS_FORMAT_Y410,
+    GMM_FLATCCS_FORMAT_Y216,
+    GMM_FLATCCS_FORMAT_Y416,
+    GMM_FLATCCS_FORMAT_P010,
+    GMM_FLATCCS_FORMAT_P016,
+    GMM_FLATCCS_FORMAT_AYUV,
+    GMM_FLATCCS_FORMAT_ARGB8b,
+    GMM_FLATCCS_FORMAT_SWAPY,
+    GMM_FLATCCS_FORMAT_SWAPUV,
+    GMM_FLATCCS_FORMAT_SWAPUVY,
+    GMM_FLATCCS_FORMAT_RGB10b,
+    GMM_FLATCCS_FORMAT_NV12,
+
+    GMM_FLATCCS_FORMAT_YCRCB_SWAPUV = GMM_FLATCCS_FORMAT_SWAPUV,
+    GMM_FLATCCS_FORMAT_YCRCB_SWAPUVY = GMM_FLATCCS_FORMAT_SWAPUVY,
+    GMM_FLATCCS_FORMAT_YCRCB_SWAPY = GMM_FLATCCS_FORMAT_SWAPY,
+
+    GMM_FLATCCS_MAX_MC_FORMAT = GMM_FLATCCS_FORMAT_NV12,    //should always be equal to last format encoding
+
+    GMM_FLATCCS_FORMAT_INVALID,                          //equal to last valid encoding plus one
+} GMM_FLATCCS_FORMAT;
+
 #ifdef __cplusplus
 
 namespace GmmLib
@@ -101,4 +180,4 @@
     };
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/Source/GmmLib/inc/Internal/Common/Texture/GmmGen12TextureCalc.h b/Source/GmmLib/inc/Internal/Common/Texture/GmmGen12TextureCalc.h
index 97a298c..cd34ae5 100644
--- a/Source/GmmLib/inc/Internal/Common/Texture/GmmGen12TextureCalc.h
+++ b/Source/GmmLib/inc/Internal/Common/Texture/GmmGen12TextureCalc.h
@@ -43,6 +43,16 @@
         private:
 
         protected:
+            virtual uint32_t GetMipTailByteOffset(
+            GMM_TEXTURE_INFO *pTexInfo,
+            uint32_t          MipLevel);
+
+            virtual void GetMipTailGeometryOffset(
+            GMM_TEXTURE_INFO *pTexInfo,
+            uint32_t          MipLevel,
+            uint32_t *        OffsetX,
+            uint32_t *        OffsetY,
+            uint32_t *        OffsetZ);
 
             virtual uint32_t           Get2DMipMapHeight(
                                         GMM_TEXTURE_INFO   *pTexInfo);
@@ -102,4 +112,4 @@
             /* inline functions */
     };
 }
-#endif // #ifdef __cplusplus
\ No newline at end of file
+#endif // #ifdef __cplusplus
diff --git a/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h b/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h
index 46c8583..e29f113 100644
--- a/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h
+++ b/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h
@@ -48,6 +48,7 @@
             GMM_STATUS      FillTexBlockMem(
                                 GMM_TEXTURE_INFO    *pTexInfo,
                                 __GMM_BUFFER_TYPE   *pRestrictions);
+            void           ResetRestrictions(__GMM_BUFFER_TYPE *pRestriction);
 
             void            GetTexRestrictions(
                                 GMM_TEXTURE_INFO* pTexInfo,
diff --git a/Source/inc/common/gtsysinfo.h b/Source/inc/common/gtsysinfo.h
index 2d9a6f9..cfb6280 100644
--- a/Source/inc/common/gtsysinfo.h
+++ b/Source/inc/common/gtsysinfo.h
@@ -149,6 +149,31 @@
 
 } GT_CCS_INFO;
 
+typedef struct GT_MULTI_TILE_ARCH_INFO
+{
+    // Total Count of Tiles enabled
+    uint8_t     TileCount;
+
+    // Mask of all enabled Tiles
+    union
+    {
+        struct
+        {
+            uint8_t     Tile0       : 1;
+            uint8_t     Tile1       : 1;
+            uint8_t     Tile2       : 1;
+            uint8_t     Tile3       : 1;
+            uint8_t     Reserved    : 4;
+        };
+
+        uint8_t TileMask;
+    };
+
+    // flag to check if MultiTileArchInfo has valid data or not
+    bool        IsValid;
+
+} GT_MULTI_TILE_ARCH_INFO;
+
 typedef struct GT_SQIDI_INFO
 {
         uint32_t        NumberofSQIDI;                        // Total no. of enabled SQIDIs.
@@ -235,6 +260,7 @@
     uint32_t        ReservedCCSWays;                // Reserved CCS ways provides value of reserved L3 ways for CCS when CCS is enabled.
                                                     // This is a hardcoded value as suggested by HW. No MMIO read is needed for same.
     GT_CCS_INFO     CCSInfo;                        // CCSInfo provides details(enabled/disabled) of all CCS instances.
+    GT_MULTI_TILE_ARCH_INFO MultiTileArchInfo;      // MultiTileArchInfo provides details(enabled/disabled) of GT Tiles in case of Multi Tile Architecture SKUs
 
     uint32_t        NumThreadsPerEu;                // Number of threads per EU. 
     GT_CACHE_TYPES  CacheTypes;                     // Types of caches available on system (L3/LLC/eDRAM).                     
diff --git a/Source/inc/common/igfxfmid.h b/Source/inc/common/igfxfmid.h
index dfad994..d6f6dcc 100644
--- a/Source/inc/common/igfxfmid.h
+++ b/Source/inc/common/igfxfmid.h
@@ -71,7 +71,8 @@
     IGFX_ALDERLAKE_S,
     IGFX_ALDERLAKE_P,
 
-    IGFX_DG1             = 1210,
+    IGFX_DG1  = 1210,
+    IGFX_XE_HP_SDV = 1250,
 
     IGFX_MAX_PRODUCT,
     IGFX_GENNEXT               = 0x7ffffffe,
@@ -124,6 +125,8 @@
     IGFX_GEN11LP_CORE    = 16,  //Gen11 LP Family
     IGFX_GEN12_CORE      = 17,  //Gen12 Family
     IGFX_GEN12LP_CORE    = 18,  //Gen12 LP Family
+    IGFX_XE_HP_CORE      =0x0c05, //XE_HP family
+
                                 //Please add new GENs BEFORE THIS !
     IGFX_MAX_CORE,
 
@@ -279,7 +282,8 @@
 #define GFX_GET_CURRENT_RENDERCORE(p)  ( (p).eRenderCoreFamily )
 
 // This macro returns true if the product family is discrete
-#define GFX_IS_DISCRETE_FAMILY(p)      ( ( GFX_GET_CURRENT_PRODUCT(p) == IGFX_DG1 ) )
+#define GFX_IS_DISCRETE_FAMILY(p)      ( ( GFX_GET_CURRENT_PRODUCT(p) == IGFX_DG1 ) ||  \
+                                         ( GFX_GET_CURRENT_PRODUCT(p) == IGFX_XE_HP_SDV ))
 
 // These macros return true/false depending on the current render family.
 #define GFX_IS_NAPA_RENDER_FAMILY(p)   ( ( GFX_GET_CURRENT_RENDERCORE(p) == IGFX_GEN3_CORE )    ||   \
@@ -1186,6 +1190,24 @@
 #define ITGL_LP_1x2x16_DESK_WS_65W_DEVICE_F0_ID 0x9A78      // Desktop WS- S81 - 35W/65W/95W
 #define ITGL_LP_GT0_ULT_DEVICE_F0_ID            0x9A7F      // GT0 - No GFX, Display Only
 
+#define DEV_ID_0205                                0x0205
+#define DEV_ID_020A                                0x020A
+//Internal Validation Sku's Only
+#define DEV_ID_0201                                0x0201
+#define DEV_ID_0202                                0x0202
+#define DEV_ID_0203                                0x0203
+#define DEV_ID_0204                                0x0204
+#define DEV_ID_0206                                0x0206
+#define DEV_ID_0207                                0x0207
+#define DEV_ID_0208                                0x0208
+#define DEV_ID_0209                                0x0209
+#define DEV_ID_020B                                0x020B
+#define DEV_ID_020C                                0x020C
+#define DEV_ID_020D                                0x020D
+#define DEV_ID_020E                                0x020E
+#define DEV_ID_020F                                0x020F
+#define DEV_ID_0210                                0x0210
+
 #define DEV_ID_FF20                             0xFF20
 #define DEV_ID_9A49                             0x9A49
 #define DEV_ID_9A40                             0x9A40
diff --git a/Source/inc/common/sku_wa.h b/Source/inc/common/sku_wa.h
index 160de6c..70c834f 100644
--- a/Source/inc/common/sku_wa.h
+++ b/Source/inc/common/sku_wa.h
@@ -99,6 +99,10 @@
         unsigned int   FtrLocalMemory                   : 1;
         unsigned int   FtrCameraCaptureCaching          : 1;
         unsigned int   FtrLocalMemoryAllows4KB          : 1;
+        unsigned int   FtrPpgtt64KBWalkOptimization     : 1;  // XeHP 64KB Page table walk optimization on PPGTT.
+        unsigned int   FtrFlatPhysCCS                   : 1;  // XeHP compression ie flat physical CCS
+        unsigned int   FtrDisplayXTiling                : 1;  // Fallback to Legacy TileX Display, used for Pre-SI platforms.
+        unsigned int   FtrMultiTileArch                 : 1;
    };
 
 
@@ -120,6 +124,7 @@
     {
         unsigned int   FtrRendComp : 1; // For Render Compression Feature on Gen9+
         unsigned int   FtrDisplayYTiling : 1; // For Y Tile Feature on Gen9+
+        unsigned int   FtrDisplayDisabled : 1;  // Server skus with Display
 
 	};
 
@@ -133,6 +138,10 @@
     {
         unsigned int    FtrVgt : 1;
     };
+    struct // For MultiTileArch, KMD reports default tile assignment to UMD-GmmLib - via __KmQueryDriverPrivateInfo
+    {
+        unsigned int FtrAssignedGpuTile : 3;  // Indicates Gpu Tile number assigned to a process for Naive apps.
+    };
 
 } SKU_FEATURE_TABLE, *PSKU_FEATURE_TABLE;
 
@@ -477,6 +486,12 @@
         WA_BUG_TYPE_FUNCTIONAL,
         WA_BUG_PERF_IMPACT_UNKNOWN, WA_COMPONENT_GMM)
 
+        WA_DECLARE(
+        WaDefaultTile4,
+        "[XeHP] Keep Tile4 as default on XeHP till B stepping",
+        WA_BUG_TYPE_UNKNOWN,
+        WA_BUG_PERF_IMPACT_UNKNOWN, WA_COMPONENT_GMM)
+
 } WA_TABLE, *PWA_TABLE;
 
 //********************************** SKU/WA Macros *************************************