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 *************************************