Add resource flag for DG2 and align standard allocation (#88)
diff --git a/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp b/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp
index 18da915..d980c68 100644
--- a/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp
+++ b/Source/GmmLib/Resource/GmmResourceInfoCommonEx.cpp
@@ -235,13 +235,20 @@
!(GetGmmLibContext()->GetSkuTable().FtrWddm2GpuMmu ||
GetGmmLibContext()->GetSkuTable().FtrWddm2Svm);
-#if !__GMM_KMD__ && _WIN32
+#if !__GMM_KMD__ && LHDM
if(GetGmmLibContext()->GetWaTable().WaLLCCachingUnsupported)
{
Surf.Flags.Info.GttMapType = (CreateParams.Flags.Info.Cacheable) ?
GMM_GTT_CACHETYPE_VLV_SNOOPED :
GMM_GTT_CACHETYPE_UNCACHED;
}
+
+ if(GetGmmLibContext()->GetSkuTable().FtrCameraCaptureCaching == FALSE &&
+ CreateParams.Flags.Gpu.CameraCapture)
+ {
+ Surf.Flags.Info.Cacheable = 0;
+ }
+ Surf.Flags.Wa.ForceStdAllocAlign = 0;
#endif
#if(_DEBUG || _RELEASE_INTERNAL)
@@ -515,6 +522,14 @@
GMM_ASSERTDPF(((Surf.Flags.Info.NonLocalOnly && Surf.Flags.Info.LocalOnly) == 0),
"Incorrect segment preference, cannot be both local and system memory.");
+ // Before overriding the flags predetermine if compression request is deniable or not.
+ if(!Surf.Flags.Info.LocalOnly &&
+ (!(Surf.Flags.Gpu.Overlay || Surf.Flags.Gpu.FlipChain)) &&
+ !(Surf.Flags.Info.HardwareProtected))
+ {
+ Surf.Flags.Wa.DeniableLocalOnlyForCompression = 1;
+ }
+
if(Surf.Flags.Gpu.Overlay ||
Surf.Flags.Gpu.FlipChain)
{
@@ -561,10 +576,12 @@
Surf.Flags.Info.NonLocalOnly = 1;
}
- if(!Surf.Flags.Info.NonLocalOnly &&
- (!GetGmmLibContext()->GetSkuTable().FtrLocalMemoryAllows4KB))
+ if(GetGmmLibContext()->GetWaTable().Wa64kbMappingAt2mbGranularity &&
+ (!GetGmmLibContext()->GetSkuTable().FtrLocalMemoryAllows4KB) &&
+ !Surf.Flags.Info.NonLocalOnly)
{
Surf.Flags.Info.LocalOnly = true;
+
}
}
else
diff --git a/Source/GmmLib/inc/External/Common/GmmResourceFlags.h b/Source/GmmLib/inc/External/Common/GmmResourceFlags.h
index 59ad6cf..d71863e 100644
--- a/Source/GmmLib/inc/External/Common/GmmResourceFlags.h
+++ b/Source/GmmLib/inc/External/Common/GmmResourceFlags.h
@@ -151,6 +151,9 @@
uint32_t DisableDisplayCcsCompression : 1; // Disables display decompression on the surface (it disables display awareness of both fast clear/render compression)
uint32_t PreGen12FastClearOnly : 1; // i.e. AUX_CCS_D (instead of AUX_CCS_E). Flag carried by GMM between UMDs to support shared resources.
uint32_t MediaPipeUsage : 1; // TileHeight Aligned ArrayQPitch on Tile4/TileY
+ uint32_t ForceStdAllocAlign : 1; // Align standard allocation to 2MB, allowing 64K-PageTable. Set by KMD, not be used by UMDs
+ uint32_t DeniableLocalOnlyForCompression : 1; // Align standard allocation to 2MB, allowing 64K-PageTable. Set by KMD, not be used by UMDs
+
} Wa;
} GMM_RESOURCE_FLAG;
diff --git a/Source/inc/common/sku_wa.h b/Source/inc/common/sku_wa.h
index 9d07589..0912415 100644
--- a/Source/inc/common/sku_wa.h
+++ b/Source/inc/common/sku_wa.h
@@ -497,6 +497,12 @@
WA_BUG_TYPE_FUNCTIONAL,
WA_BUG_PERF_IMPACT_UNKNOWN, WA_COMPONENT_GMM)
+ WA_DECLARE(
+ Wa64kbMappingAt2mbGranularity,
+ "WA to force 2MB alignment for 64KB-LMEM pages",
+ 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",