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 UMD’s 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",