Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gmmlib for openSUSE:Factory checked in at 2026-02-04 21:10:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gmmlib (Old) and /work/SRC/openSUSE:Factory/.gmmlib.new.1670 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gmmlib" Wed Feb 4 21:10:38 2026 rev:42 rq:1331009 version:22.9.0 Changes: -------- --- /work/SRC/openSUSE:Factory/gmmlib/gmmlib.changes 2025-09-30 17:42:01.092322054 +0200 +++ /work/SRC/openSUSE:Factory/.gmmlib.new.1670/gmmlib.changes 2026-02-04 21:11:07.717242455 +0100 @@ -1,0 +2,14 @@ +Wed Feb 4 12:33:48 UTC 2026 - Stefan Dirsch <[email protected]> + +- Update to release 22.9.0 + * Update Readme with Xe3P_HPM details (#268) + * Add Media Core Family for CRI and fix ULT (#267) + * Introduce CRI Support (#263) + * Introduce NVL Support (#261) + * Mark L4 Uncached for media usages (#265) + * Update Media resources to L3 Cacheable (#264) + * Introducing new resource usages to support command streamer instructions (#262) + * Remove unused variables from Gen12 Resource ULT (#259) + * Fix Null check in GMM Auxtable ULT (#256) + +------------------------------------------------------------------- Old: ---- intel-gmmlib-22.8.2.tar.gz New: ---- intel-gmmlib-22.9.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gmmlib.spec ++++++ --- /var/tmp/diff_new_pack.yNOJb8/_old 2026-02-04 21:11:08.549277301 +0100 +++ /var/tmp/diff_new_pack.yNOJb8/_new 2026-02-04 21:11:08.553277468 +0100 @@ -1,7 +1,7 @@ # # spec file for package gmmlib # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %global somajor 12 %global libname libigdgmm%{somajor} Name: gmmlib -Version: 22.8.2 +Version: 22.9.0 Release: 0 Summary: Intel Graphics Memory Management Library Package License: MIT ++++++ intel-gmmlib-22.8.2.tar.gz -> intel-gmmlib-22.9.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/README.rst new/gmmlib-intel-gmmlib-22.9.0/README.rst --- old/gmmlib-intel-gmmlib-22.8.2/README.rst 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/README.rst 2025-12-12 13:20:35.000000000 +0100 @@ -92,7 +92,9 @@ Xe2_HPG (BMG: Battlemage, LNL: Lunar Lake) -Xe3_LPG (Panther Lake) +Xe3_LPG/Xe3P_LPM (Panther Lake, NVL-S: Nova Lake S, NVL-U: Nova Lake U, NVL-H: Nova Lake H, NVL-HX: Nova Lake HX, NVL-UL: Nova Lake UL) + +Xe3P-XPC/Xe3P_HPM (CRI: Crescent Island) No code changes may be introduced knowingly, that would regress for any currently supported hardware. All contributions must ensure continued compatibility and functionality across all supported hardware platforms. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CMakeLists.txt new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CMakeLists.txt --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CMakeLists.txt 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CMakeLists.txt 2025-12-12 13:20:35.000000000 +0100 @@ -25,14 +25,14 @@ # GmmLib Api Version used for so naming set(GMMLIB_API_MAJOR_VERSION 12) -set(GMMLIB_API_MINOR_VERSION 8) +set(GMMLIB_API_MINOR_VERSION 9) if(NOT DEFINED MAJOR_VERSION) set(MAJOR_VERSION 12) endif() if(NOT DEFINED MINOR_VERSION) - set(MINOR_VERSION 8) + set(MINOR_VERSION 9) endif() if(NOT DEFINED PATCH_VERSION) @@ -204,7 +204,8 @@ ${BS_DIR_GMMLIB}/CachePolicy/GmmGen11CachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12CachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmXe_LPGCachePolicy.h - ${BS_DIR_GMMLIB}/CachePolicy/GmmXe2_LPGCachePolicy.h + ${BS_DIR_GMMLIB}/CachePolicy/GmmXe2_LPGCachePolicy.h + ${BS_DIR_GMMLIB}/CachePolicy/GmmXe3P_XPCCachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12dGPUCachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen8CachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen9CachePolicy.h @@ -213,6 +214,7 @@ ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyXe_LPG.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyXe2_LPG.h + ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12dGPU.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen8.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen9.h @@ -278,6 +280,7 @@ ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12CachePolicy.cpp ${BS_DIR_GMMLIB}/CachePolicy/GmmXe_LPGCachePolicy.cpp ${BS_DIR_GMMLIB}/CachePolicy/GmmXe2_LPGCachePolicy.cpp + ${BS_DIR_GMMLIB}/CachePolicy/GmmXe3P_XPCCachePolicy.cpp ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12dGPUCachePolicy.cpp ${BS_DIR_GMMLIB}/Platform/GmmGen11Platform.cpp ${BS_DIR_GMMLIB}/Platform/GmmGen12Platform.cpp @@ -323,6 +326,7 @@ ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12CachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmXe_LPGCachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmXe2_LPGCachePolicy.h + ${BS_DIR_GMMLIB}/CachePolicy/GmmXe3P_XPCCachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12dGPUCachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen8CachePolicy.h ${BS_DIR_GMMLIB}/CachePolicy/GmmGen9CachePolicy.h @@ -387,6 +391,7 @@ ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyXe_LPG.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyXe2_LPG.h + ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12dGPU.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen8.h ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen9.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h 2025-12-12 13:20:35.000000000 +0100 @@ -352,3 +352,9 @@ DEFINE_RESOURCE_USAGE(GMM_RESOURCE_USAGE_SHADER_RESOURCE_L1_NOT_CACHED) DEFINE_RESOURCE_USAGE(GMM_RESOURCE_USAGE_UMD_OCA_BUFFER) + +// Usages for command streamer instructions +DEFINE_RESOURCE_USAGE(GMM_RESOURCE_USAGE_DEFAULT) +DEFINE_RESOURCE_USAGE(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT) +DEFINE_RESOURCE_USAGE(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT) +DEFINE_RESOURCE_USAGE(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen10CachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -239,4 +239,10 @@ DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0); +//Usages for command streamer instructions +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 0 , 0 , 1 , 0 , 0 , 0, 0, 0, 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 0 , 0 , 1 , 0 , 0 , 0, 0, 0, 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0); + #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen11CachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -289,4 +289,10 @@ DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0, 0); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0, 0); +//Usages for command streamer instructions. +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 0 , 0 , 1 , 0 , 0 , 0, 0, 0, 0, 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 0 , 0 , 1 , 0 , 0 , 0, 0, 0, 0, 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 0 , 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0, 0); + #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen12CachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen12CachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen12CachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen12CachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -310,5 +310,11 @@ // Shader resource uncachable, needed for WA_18013889147 DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE_L1_NOT_CACHED , 0 , 1 , 1 , 0 , 0 , 0, 0, 0, 0, 0, 0, 0, RO ); +//Usages for command streamer instructions. +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 1 , 1 , 1 , 0 , 3 , 0, 0, 0, 0, 0, 0, 0, RO); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 1 , 1 , 1 , 0 , 3 , 0, 0, 0, 0, 0, 0, 0, RO); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 1 , 0 , 0 , 0 , 3 , 0, 0, 0, 0, 0, 0, 0, NA); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 1 , 0 , 0 , 0 , 3 , 0, 0, 0, 0, 0, 0, 0, NA); + #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -300,5 +300,11 @@ DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0 , 0 , 0 , 1 , 0, 1); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0 , 0 , 0 , 1 , 0, 1); +//Usages for command streamer instructions +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 1 , 0 , 0 , 0 , 1, 1); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 1 , 0 , 0 , 0 , 1, 1); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 0 , 0 , 0 , 1 , 0, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 0 , 0 , 0 , 1 , 0, 0); + #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmGen9CachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -252,6 +252,12 @@ DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0 , 0 , 0 , 0 , UC); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0 , 0 , 0 , 0 , UC); +//Usages for command streamer instructions +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 0 , 0 , 1 , 0 , UC); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 0 , 0 , 1 , 0 , UC); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 0 , 0 , 0 , 0 , UC); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 0 , 0 , 0 , 0 , UC); + #undef UC #undef WB #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe2_LPGCachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe2_LPGCachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe2_LPGCachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe2_LPGCachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -25,6 +25,8 @@ #define _WT 0x2 #define _L1_WB 0x2 #define dGPU SKU(FtrDiscrete) +#define iGPU (!dGPU) +#define L4_IgPAT (iGPU & (GFX_GET_CURRENT_PRODUCT((pGmmLibContext->GetPlatformInfo()).Platform) < IGFX_PTL)) // L4 Uncached and IgPAT = 0 #if (_DEBUG || _RELEASE_INTERNAL) #define _WA_WB_Emu (WA(Wa_EmuMufasaSupportOnBmg)) @@ -240,33 +242,33 @@ // USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency, IgPAT ) DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MEDIA_BATCH_BUFFERS , 0, 0, 0, 0, 0, 0 , 1, NoP ); // DECODE -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INPUT_BITSTREAM , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INPUT_REFERENCE , dGPU, 0, 0, 1, 1, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INPUT_BITSTREAM , 1, 0, 0, 0, L4_IgPAT, 0 , L4_IgPAT, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INPUT_REFERENCE , 1, 0, 0, 1, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_WRITE , 0, 0, 0, 0, 0, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_CACHE , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_CACHE , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_NOCACHE , 0, 0, 0, 0, 0, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_PICTURE , 3, 0, 0, 0, 2, 0 , 0, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_WRITE , 0, 0, 0, 0, 0, 1 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_READ_WRITE , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_READ_WRITE , 1, 0, 0, 0, 1, 0 , 1, NoP ); // ENCODE -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INPUT_RAW , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INPUT_RECON , dGPU, 0, 0, 1, 1, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INPUT_RAW , 1, 0, 0, 0, L4_IgPAT, 0 , L4_IgPAT, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INPUT_RECON , 1, 0, 0, 1, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_WRITE , 0, 0, 0, 0, 0, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_CACHE , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_CACHE , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_NOCACHE , 0, 0, 0, 0, 0, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_EXTERNAL_READ , 0, 0, 0, 0, 0, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_PICTURE , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_PICTURE , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_BITSTREAM , 0, 0, 0, 0, 0, 1 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_WRITE , 0, 0, 0, 0, 0, 1 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_READ_WRITE , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_READ_WRITE , 1, 0, 0, 0, 1, 0 , 1, NoP ); // VP -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_PICTURE_FF , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_REFERENCE_FF , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_PICTURE_FF , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_REFERENCE_FF , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_FF , 0, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_WRITE_FF , 0, 0, 0, 0, 1, 0 , 1, NoP ); -DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_FF , dGPU, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_FF , 1, 0, 0, 0, 1, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_OUTPUT_PICTURE_FF , 3, 0, 0, 0, 2, 0 , 0, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_PICTURE_RENDER , 1, 0, 0, 0, 0, 0 , 1, NoP ); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_REFERENCE_RENDER , 1, 0, 0, 0, 0, 0 , 1, NoP ); @@ -288,8 +290,17 @@ DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0, 0, 0 , 0, 0, 0, 1, NoP); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0, 0, 0 , 0, 0, 0, 1, NoP); +//Usages for command streamer instructions +// USAGE TYPE , L3_CC, L3_CLOS, L1CC, L2CC, L4CC, Coherency, IgPAT) +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 1, 0, 0 , 0, 0, 0, 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 1, 0, 0 , 0, 0, 1, 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 1, 0, 0 , 0, 0, 2, 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 1, 0, 0 , 0, 0, 2, 1, NoP); + // clang-format on #undef _WT +#undef iGPU +#undef L4_IgPAT #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.cpp new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.cpp --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.cpp 2025-12-12 13:20:35.000000000 +0100 @@ -0,0 +1,533 @@ +/*============================================================================== +Copyright(c) 2025 Intel Corporation +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files(the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and / or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +============================================================================*/ + +#include "Internal/Common/GmmLibInc.h" +#include "External/Common/GmmCachePolicy.h" +#include "External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h" + +//============================================================================= +// +// Function: __:GmmXe3P_XPCInitCachePolicy +// +// Desc: This function initializes the cache policy +// +// Parameters: pCachePolicy -> Ptr to array to be populated with the +// mapping of usages -> cache settings. +// +// Return: GMM_STATUS +// +//----------------------------------------------------------------------------- +GMM_STATUS GmmLib::GmmXe3P_XPCCachePolicy::InitCachePolicy() +{ + __GMM_ASSERTPTR(pCachePolicy, GMM_ERROR); +#define DEFINE_CACHE_ELEMENT(usage, l3_cc, l3_clos, l1cc, l2cc, l4cc, coherency, igPAT, segov) DEFINE_CP_ELEMENT(usage, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, segov, 0, 0, l1cc, l2cc, l4cc, coherency, l3_cc, l3_clos, igPAT) + +#include "GmmXe3P_XPCCachePolicy.h" + + SetUpMOCSTable(); + SetupPAT(); + + // Define index of cache element + uint32_t Usage = 0; + uint32_t ReservedPATIdx = 11; /* Rsvd PAT section 11-22 */ + uint32_t ReservedPATIdxEnd = 22; + +#if (_WIN32 && (_DEBUG || _RELEASE_INTERNAL)) + void *pKmdGmmContext = NULL; +#if (defined(__GMM_KMD__)) + pKmdGmmContext = pGmmLibContext->GetGmmKmdContext(); +#endif + OverrideCachePolicy(pKmdGmmContext); +#endif + // Process the cache policy and fill in the look up table + for (; Usage < GMM_RESOURCE_USAGE_MAX; Usage++) + { + bool CachePolicyError = false; + int32_t PATIdx = -1, CPTblIdx = -1, PATIdxCompressed = -1, CoherentPATIdx = -1; + uint32_t i, j; + GMM_XE3P_PRIVATE_PAT UsagePATElement = {0}; + GMM_CACHE_POLICY_TBL_ELEMENT UsageEle = {0}; + GMM_PTE_CACHE_CONTROL_BITS PTE = {0}; + + // MOCS data + { + // Get L3 ,L4 and Convert GMM indicative values to actual regiser values. + GetL3L4(&UsageEle, &UsagePATElement, Usage); + // Convert L1 GMM indicative values to actual regiser values and store into pCachePolicy to return to UMD's. + SetL1CachePolicy(Usage); + + /* If MOCS is not needed fall back to Defer to PAT i.e MOCS#0 */ + if (false == UsageEle.L3.PhysicalL3.igPAT) + { + /* Set cache policy index to defered to PAT i.e. MOCS Index 0 */ + CPTblIdx = 0; + } + else + { + /* MOCS Index 1-3 are valid */ + for (j = 1; j <= CurrentMaxMocsIndex; j++) + { + GMM_CACHE_POLICY_TBL_ELEMENT *TblEle = &pGmmLibContext->GetCachePolicyTlbElement()[j]; + if (UsageEle.L3.PhysicalL3.L4CC == TblEle->L3.PhysicalL3.L4CC && + UsageEle.L3.PhysicalL3.L3CC == TblEle->L3.PhysicalL3.L3CC && + UsageEle.L3.PhysicalL3.L3CLOS == TblEle->L3.PhysicalL3.L3CLOS && + UsageEle.L3.PhysicalL3.igPAT == true) + { + CPTblIdx = j; + break; + } + } + } + + if (CPTblIdx == -1) + { + { + /* Invalid MOCS setting Fail the GMM Initialzation */ + GMM_ASSERTDPF(false, "CRITICAL: Cache Policy Usage value for L3/L4 specified by Client is not defined in Fixed MOCS Table"); + CachePolicyError = true; + } + } + } + + + // PAT data + { + + for (i = 0; i <= CurrentMaxPATIndex; i++) + { + GMM_PRIVATE_PAT PAT = GetPrivatePATEntry(i); + if (UsagePATElement.Xe3P.L4CC == PAT.Xe2.L4CC && + UsagePATElement.Xe3P.Coherency == PAT.Xe2.Coherency && + UsagePATElement.Xe3P.L3CC == PAT.Xe2.L3CC && + UsagePATElement.Xe3P.L3CLOS == PAT.Xe2.L3CLOS && + false == PAT.Xe2.LosslessCompressionEn) + { + PATIdx = i; + break; + } + } + + // Compression is not supported in PAT table, compressed PAT to be same as uncompressed PAT + PATIdxCompressed = PATIdx; + + if (PATIdx == -1) + { +// Didn't find the caching settings in one of the already programmed PAT table entries. +// Need to add a new lookup table entry. + GMM_ASSERTDPF( + "Cache Policy Init Error: Invalid Cache Programming, too many unique caching combinations" + "(we only support NumPATRegisters = %d)", + CurrentMaxPATIndex); + CachePolicyError = true; + + PATIdx = GMM_PAT_ERROR; + } + + /* Find a PATIndex for a coherent uncompressed case, if usage is 2-way or 1-way already, take that, otherwise search for oneway*/ + if ((UsagePATElement.Xe3P.Coherency == GMM_GFX_PHY_COHERENT_ONE_WAY_IA_SNOOP) || + (UsagePATElement.Xe3P.Coherency == GMM_GFX_PHY_COHERENT_TWO_WAY_IA_GPU_SNOOP)) + { + //Already coherent + CoherentPATIdx = PATIdx; + } + else + { + // search for equivalent one way coherent index + for (i = 0; i <= CurrentMaxPATIndex; i++) + { + GMM_PRIVATE_PAT PAT = GetPrivatePATEntry(i); + if (UsagePATElement.Xe3P.L4CC == PAT.Xe2.L4CC && + UsagePATElement.Xe3P.L3CC == PAT.Xe2.L3CC && + UsagePATElement.Xe3P.L3CLOS == PAT.Xe2.L3CLOS && + GMM_GFX_PHY_COHERENT_ONE_WAY_IA_SNOOP == PAT.Xe2.Coherency) + { + if ((false == PAT.Xe2.LosslessCompressionEn) && (CoherentPATIdx == -1)) + { + CoherentPATIdx = i; + } + if (CoherentPATIdx != -1) + { + break; + } + } + } + if (CoherentPATIdx == -1) + { + //redo matching based on L3:UC, L4:UC, we should find one + for (i = 0; i <= CurrentMaxPATIndex; i++) + { + GMM_PRIVATE_PAT PAT = GetPrivatePATEntry(i); + if (GMM_GFX_PHY_L4_MT_UC == PAT.Xe2.L4CC && + GMM_GFX_PHY_L3_MT_UC == PAT.Xe2.L3CC && + UsagePATElement.Xe3P.L3CLOS == PAT.Xe2.L3CLOS && + GMM_GFX_PHY_COHERENT_ONE_WAY_IA_SNOOP == PAT.Xe2.Coherency) + { + if ((false == PAT.Xe2.LosslessCompressionEn) && (CoherentPATIdx == -1)) + { + CoherentPATIdx = i; + } + + if (CoherentPATIdx != -1) + { + break; + } + } + } + } + } + } + + pCachePolicy[Usage].PATIndex = PATIdx; + pCachePolicy[Usage].CoherentPATIndex = GET_COHERENT_PATINDEX_LOWER_BITS(CoherentPATIdx); // Coherent uncompressed lower bits + pCachePolicy[Usage].CoherentPATIndexHigherBit = GET_COHERENT_PATINDEX_HIGHER_BIT(CoherentPATIdx); // Coherent uncompressed higher bits + pCachePolicy[Usage].PATIndexCompressed = PATIdxCompressed; + pCachePolicy[Usage].PTE.DwordValue = GMM_GET_PTE_BITS_FROM_PAT_IDX(PATIdx) & 0xFFFFFFFF; + pCachePolicy[Usage].PTE.HighDwordValue = GMM_GET_PTE_BITS_FROM_PAT_IDX(PATIdx) >> 32; + pCachePolicy[Usage].MemoryObjectOverride.XE_HP.Index = CPTblIdx; + pCachePolicy[Usage].MemoryObjectOverride.XE_HP.EncryptedData = 0; + pCachePolicy[Usage].Override = ALWAYS_OVERRIDE; + + //printf("Usage: [%d], PAT: [%d], Comp:[%d], MOCSIdx:[%d] \n", Usage, PATIdx, PATIdxCompressed, CPTblIdx); + + if (CachePolicyError) + { + GMM_ASSERTDPF(false, "Cache Policy Init Error: Invalid Cache Programming "); + return GMM_INVALIDPARAM; + } + } + return GMM_SUCCESS; +} + +//============================================================================= +// +// Function: __:GetL3L4 +// +// Desc: This function converts GMM indicative values to actual register values +// +// Parameters: +// +// Return: GMM_STATUS +// +//----------------------------------------------------------------------------- +void GmmLib::GmmXe3P_XPCCachePolicy::GetL3L4(GMM_CACHE_POLICY_TBL_ELEMENT *pUsageEle, GMM_XE3P_PRIVATE_PAT *pUsagePATElement, uint32_t Usage) +{ + + //MOCS + pUsageEle->L3.PhysicalL3.Reserved0 = pUsageEle->L3.PhysicalL3.Reserved = 0; + //L3CLOS + pUsageEle->L3.PhysicalL3.L3CLOS = 0; + //IgPAT + pUsageEle->L3.PhysicalL3.igPAT = pCachePolicy[Usage].IgnorePAT; + + + //PAT + pUsagePATElement->Xe3P.Reserved1 = 0; + pUsagePATElement->Xe3P.Reserved2 = 0; + + pUsagePATElement->Xe3P.L3CLOS = 0; + + switch (pCachePolicy[Usage].L3CC) + { + case GMM_UC: + pUsageEle->L3.PhysicalL3.L3CC = GMM_GFX_PHY_L3_MT_UC; + pUsagePATElement->Xe3P.L3CC = GMM_GFX_PHY_L3_MT_UC; + break; + case GMM_WB: + pUsageEle->L3.PhysicalL3.L3CC = GMM_GFX_PHY_L3_MT_WB; + pUsagePATElement->Xe3P.L3CC = GMM_GFX_PHY_L3_MT_WB; + break; + default: + pUsageEle->L3.PhysicalL3.L3CC = GMM_GFX_PHY_L3_MT_UC; + pUsagePATElement->Xe3P.L3CC = GMM_GFX_PHY_L3_MT_UC; + } + + switch (pCachePolicy[Usage].L4CC) + { + case GMM_UC: + pUsageEle->L3.PhysicalL3.L4CC = GMM_GFX_PHY_L4_MT_UC; + pUsagePATElement->Xe3P.L4CC = GMM_GFX_PHY_L4_MT_UC; + break; + case GMM_WB: + pUsageEle->L3.PhysicalL3.L4CC = GMM_GFX_PHY_L4_MT_WB; + pUsagePATElement->Xe3P.L4CC = GMM_GFX_PHY_L4_MT_WB; + break; + default: + pUsageEle->L3.PhysicalL3.L4CC = GMM_GFX_PHY_L4_MT_UC; + pUsagePATElement->Xe3P.L4CC = GMM_GFX_PHY_L4_MT_UC; + } + + switch (pCachePolicy[Usage].Coherency) + { + case GMM_NON_COHERENT_NO_SNOOP: + pUsagePATElement->Xe3P.Coherency = GMM_GFX_NON_COHERENT_NO_SNOOP; + break; + case GMM_COHERENT_ONE_WAY_IA_SNOOP: + pUsagePATElement->Xe3P.Coherency = GMM_GFX_COHERENT_ONE_WAY_IA_SNOOP; + break; + case GMM_COHERENT_TWO_WAY_IA_GPU_SNOOP: + pUsagePATElement->Xe3P.Coherency = GMM_GFX_COHERENT_TWO_WAY_IA_GPU_SNOOP; + break; + default: + pUsagePATElement->Xe3P.Coherency = GMM_GFX_NON_COHERENT_NO_SNOOP; + break; + } +} + +///////////////////////////////////////////////////////////////////////////////////// +/// A simple getter function returning the PAT (cache policy) for a given +/// use Usage of the named resource pResInfo. +/// Typically used to populate PPGTT/GGTT. +/// +/// @param[in] pResInfo: Resource info for resource, can be NULL. +/// @param[in] Usage: Current usage for resource. +/// @param[Optional] Usage: for Xe3P-XPC compression parameter +/// +/// @return PATIndex +///////////////////////////////////////////////////////////////////////////////////// +uint32_t GMM_STDCALL GmmLib::GmmXe3P_XPCCachePolicy::CachePolicyGetPATIndex(GMM_RESOURCE_INFO *pResInfo, GMM_RESOURCE_USAGE_TYPE Usage, bool *pCompressionEnable, bool IsCpuCacheable) +{ + __GMM_ASSERT(pGmmLibContext->GetCachePolicyElement(Usage).Initialized); + + uint32_t PATIndex = pGmmLibContext->GetCachePolicyElement(Usage).PATIndex; + GMM_CACHE_POLICY_ELEMENT TempElement = pGmmLibContext->GetCachePolicyElement(Usage); + uint32_t TempCoherentPATIndex = 0; + + // This is to check if PATIndexCompressed, CoherentPATIndex are valid + // Increment by 1 to have the rollover and value resets to 0 if the PAT in not valid. + TempElement.PATIndexCompressed += 1; + TempCoherentPATIndex = (uint32_t)GET_COHERENT_PATINDEX_VALUE(pGmmLibContext, Usage); + + // Higher bit of CoherentPATIndex would tell us if its a valid or not.0--> valid, 1-->invalid + uint32_t CoherentPATIndex = (uint32_t)((GET_COHERENT_PATINDEX_HIGHER_BIT(TempCoherentPATIndex) == 1) ? GMM_PAT_ERROR : GET_COHERENT_PATINDEX_VALUE(pGmmLibContext, Usage)); + //For PATIndexCompressed, rollover value would be 0 if its invalid + uint32_t PATIndexCompressed = (uint32_t)(TempElement.PATIndexCompressed == 0 ? GMM_PAT_ERROR : pGmmLibContext->GetCachePolicyElement(Usage).PATIndexCompressed); + uint32_t ReturnPATIndex = GMM_PAT_ERROR; + bool CompressionEnable = (pCompressionEnable) ? *pCompressionEnable : false; + + // Prevent wrong Usage for XAdapter resources. UMD does not call GetMemoryObject on shader resources but, + // when they add it someone could call it without knowing the restriction. + if (pResInfo && + pResInfo->GetResFlags().Info.XAdapter && + (Usage != GMM_RESOURCE_USAGE_XADAPTER_SHARED_RESOURCE)) + { + __GMM_ASSERT(false); + } + + // requested compressed and coherent + if (CompressionEnable && IsCpuCacheable) + { + // return coherent uncompressed + ReturnPATIndex = CoherentPATIndex; + CompressionEnable = false; + GMM_ASSERTDPF(false, "Coherent Compressed is not supported. However, respecting the coherency and returning CoherentPATIndex"); + } + // requested compressed only + else if (CompressionEnable) + { + + if (GMM_PAT_ERROR != PATIndexCompressed) + { + // return compresed, may or may not coherent which depends on orinigal usage + ReturnPATIndex = PATIndexCompressed; + CompressionEnable = true; + } + else + { + // return original index + ReturnPATIndex = PATIndex; + CompressionEnable = false; + } + } + // requested coherent only + else if (IsCpuCacheable) + { + //return coherent uncompressed + ReturnPATIndex = CoherentPATIndex; + CompressionEnable = false; + } + /* Requested UnCompressed PAT */ + else + { + if (GMM_PAT_ERROR != PATIndex) + { + ReturnPATIndex = PATIndex; + CompressionEnable = false; + } + } + + /* No valid PAT Index found */ + if (GMM_PAT_ERROR == ReturnPATIndex) + { + ReturnPATIndex = GMM_XE2_DEFAULT_PAT_INDEX; //default to uncached PAT index 2: GMM_CP_NON_COHERENT_UC + CompressionEnable = false; + __GMM_ASSERT(false); + } + + if (pCompressionEnable) + { + *pCompressionEnable = CompressionEnable; + } + + return ReturnPATIndex; +} + +//============================================================================= +// +// Function: SetUpMOCSTable +// +// Desc: +// +// Parameters: +// +// Return: GMM_STATUS +// +//----------------------------------------------------------------------------- +void GmmLib::GmmXe3P_XPCCachePolicy::SetUpMOCSTable() +{ + GMM_CACHE_POLICY_TBL_ELEMENT *pCachePolicyTlbElement = &(pGmmLibContext->GetCachePolicyTlbElement()[0]); + +#define L4_WB (0x0) +#define L4_UC (0x3) + +#define L3_WB (0x0) +#define L3_UC (0x3) + +#define GMM_DEFINE_MOCS(indx, L4Caching, L3Caching, L3ClassOfService, ignorePAT) \ + { \ + pCachePolicyTlbElement[indx].L3.PhysicalL3.L4CC = L4Caching; \ + pCachePolicyTlbElement[indx].L3.PhysicalL3.Reserved0 = 0; \ + pCachePolicyTlbElement[indx].L3.PhysicalL3.L3CC = L3Caching; \ + pCachePolicyTlbElement[indx].L3.PhysicalL3.L3CLOS = L3ClassOfService; \ + pCachePolicyTlbElement[indx].L3.PhysicalL3.igPAT = ignorePAT; \ + } + + // clang-format off + // Default MOCS Table + for(uint32_t j = 0; j < GMM_XE3P_NUM_MOCS_ENTRIES; j++) + { // Index CachingPolicy L3Caching L3ClassOfService ignorePAT + GMM_DEFINE_MOCS( j, L4_UC, L3_UC, 0 , 0 ) + } + + // Index L4 CachingPolicy L3 CachingPolicy L3 CLOS ignorePAT + GMM_DEFINE_MOCS( 0 , L4_UC , L3_WB , 0 , 0) // Defer to PAT + GMM_DEFINE_MOCS( 1 , L4_UC , L3_UC , 0 , 1) // UC + GMM_DEFINE_MOCS( 2 , L4_UC , L3_WB , 0 , 1) // L3 + GMM_DEFINE_MOCS( 3 , L4_WB , L3_UC , 0 , 1) // L4 + GMM_DEFINE_MOCS( 4 , L4_WB , L3_WB , 0 , 1) // L3+L4 + + CurrentMaxMocsIndex = 4; + CurrentMaxL1HdcMocsIndex = 0; + CurrentMaxSpecialMocsIndex = 0; + // clang-format on + +#undef GMM_DEFINE_MOCS +#undef L4_WB +#undef L4_UC + +#undef L3_WB +#undef L3_UC +} + + +//============================================================================= +// +// Function: SetupPAT +// +// Desc: +// +// Parameters: +// +// Return: GMM_STATUS +// +//----------------------------------------------------------------------------- +GMM_STATUS GmmLib::GmmXe3P_XPCCachePolicy::SetupPAT() +{ + GMM_PRIVATE_PAT *pPATTlbElement = &(pGmmLibContext->GetPrivatePATTable()[0]); + +#define L4_WB (0x0) +#define L4_UC (0x3) + +#define L3_WB (0x0) +#define L3_UC (0x3) + +#define GMM_DEFINE_PAT_ELEMENT(indx, Coh, L4Caching, L3Caching, L3ClassOfService, NoCachePromote) \ + { \ + pPATTlbElement[indx].Xe2.Coherency = Coh; \ + pPATTlbElement[indx].Xe2.L4CC = L4Caching; \ + pPATTlbElement[indx].Xe2.Reserved1 = 0; \ + pPATTlbElement[indx].Xe2.Reserved2 = 0; \ + pPATTlbElement[indx].Xe2.L3CC = L3Caching; \ + pPATTlbElement[indx].Xe2.L3CLOS = L3ClassOfService; \ + pPATTlbElement[indx].Xe2.LosslessCompressionEn = 0; \ + pPATTlbElement[indx].Xe2.NoCachingPromote = NoCachePromote; \ + } + + // clang-format off + + // Default PAT Table + // 32 nos + for (uint32_t i = 0; i < (NumPATRegisters); i++) + { // Index Coherency CachingPolicy L3Caching L3ClassOfService NoCachingPromote + GMM_DEFINE_PAT_ELEMENT( i, 3, L4_UC, L3_UC, 0, 0); + } + + // Fixed PAT Table + // Index Coherency L4 CachingPolicy L3 CachingPolicy L3 CLOS NoCachingPromote + //Group: GGT/PPGTT[4] + GMM_DEFINE_PAT_ELEMENT( 0 , 0 , L4_WB , L3_WB , 0 , 0) // | L3_WB | L4_WB + GMM_DEFINE_PAT_ELEMENT( 1 , 2 , L4_WB , L3_WB , 0 , 0) // | L3_WB | L4_WB | 1 way coherent + GMM_DEFINE_PAT_ELEMENT( 2 , 3 , L4_WB , L3_WB , 0 , 0) // | L3_WB | L4_WB | 2 way coherent + GMM_DEFINE_PAT_ELEMENT( 3 , 0 , L4_UC , L3_UC , 0 , 0) // | UC + //Group: Other UC + GMM_DEFINE_PAT_ELEMENT( 4 , 2 , L4_UC , L3_UC , 0 , 0) // | UC | 1 way coherent + //Group L4 only + GMM_DEFINE_PAT_ELEMENT( 5 , 0 , L4_WB , L3_UC , 0 , 0) // | L4_WB + GMM_DEFINE_PAT_ELEMENT( 6 , 2 , L4_WB , L3_UC , 0 , 0) // | L4_WB | 1 way coherent + GMM_DEFINE_PAT_ELEMENT( 7 , 3 , L4_WB , L3_UC , 0 , 0) // | L4_WB | 2 way coherent + //Group L3 only + GMM_DEFINE_PAT_ELEMENT( 8 , 0 , L4_UC , L3_WB , 0 , 0) // | L3_WB + GMM_DEFINE_PAT_ELEMENT( 9 , 2 , L4_UC , L3_WB , 0 , 0) // | L3_WB | 1 way coherent + GMM_DEFINE_PAT_ELEMENT( 10 , 3 , L4_UC , L3_WB , 0 , 0) // | L3_WB | 2 way coherent + // Reserved 11 - 22 + //Group: CLOS1 + GMM_DEFINE_PAT_ELEMENT( 23 , 0 , L4_WB , L3_WB , 1 , 0) // | L3_WB | L4_WB + GMM_DEFINE_PAT_ELEMENT( 24 , 2 , L4_WB , L3_WB , 1 , 0) // | L3_WB | L4_WB | 1 way coherent + GMM_DEFINE_PAT_ELEMENT( 25 , 3 , L4_WB , L3_WB , 1 , 0) // | L3_WB | L4_WB | 2 way coherent + //Group: CLOS2 + GMM_DEFINE_PAT_ELEMENT( 26 , 0 , L4_WB , L3_WB , 2 , 0) // | L3_WB | L4_WB + GMM_DEFINE_PAT_ELEMENT( 27 , 2 , L4_WB , L3_WB , 2 , 0) // | L3_WB | L4_WB | 1 way coherent + GMM_DEFINE_PAT_ELEMENT( 28 , 3 , L4_WB , L3_WB , 2 , 0) // | L3_WB | L4_WB | 2 way coherent + //Group: CLOS3 + GMM_DEFINE_PAT_ELEMENT( 29 , 0 , L4_WB , L3_WB , 3 , 0) // | L3_WB | L4_WB + GMM_DEFINE_PAT_ELEMENT( 30 , 2 , L4_WB , L3_WB , 3 , 0) // | L3_WB | L4_WB | 1 way coherent + GMM_DEFINE_PAT_ELEMENT( 31 , 3 , L4_WB , L3_WB , 3 , 0) // | L3_WB | L4_WB | 2 way coherent + + CurrentMaxPATIndex = 31; + +// clang-format on +#undef GMM_DEFINE_PAT +#undef L4_WB +#undef L4_UC + +#undef L3_WB +#undef L3_UC + return GMM_SUCCESS; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.h 1970-01-01 01:00:00.000000000 +0100 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe3P_XPCCachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -0,0 +1,303 @@ +/*============================================================================== +Copyright(c) 2025 Intel Corporation +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files(the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and / or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +============================================================================*/ + +#include "GmmCachePolicyConditionals.h" + +#define _SN 0x1 +#define _IA_GPU_SN 0x2 +#define _WT 0x2 +#define _L1_WB 0x2 +#define dGPU SKU(FtrDiscrete) + +#if (_DEBUG || _RELEASE_INTERNAL) +#define _WA_WB_Emu (WA(Wa_EmuMufasaSupportOnBmg)) +#else +#define _WA_WB_Emu 0 +#endif + + +// clang-format off +//typedef enum GMM_CACHING_POLICY_REC +//{ +// GMM_UC = 0x0, //uncached +// GMM_WB = 0x1, // Write back +// GMM_WT = 0x2, // write-through +// GMM_WBTD = 0x3, // WB_T_Display +// GMM_WBTA = 0x4, // WB_T_App +// GMM_WBP = 0x5, // write bypass mode +// GMM_WS = 0x6, // Write-Streaming +//} GMM_CACHING_POLICY; +// +// typedef enum GMM_COHERENCY_TYPE_REC +//{ +//GMM_NON_COHERENT_NO_SNOOP = 0x0, +//GMM_COHERENT_ONE_WAY_IA_SNOOP = 0x1, +//GMM_COHERENT_TWO_WAY_IA_GPU_SNOOP = 0x2 +//} GMM_COHERENCY_TYPE; +// Cache Policy Definition +// L3_CLOS : L3 class of service (0,1,2,3) +// IgPAT : Ignore PAT 1 = Override by MOCS, 0 = Defer to PAT +// +//Macros for segment-preference +#define NoP 0x0 +#define NonLocal_Only 0x1 +#define Local_Only 0x2 +#define LMemBarOrNonLocal_Only 0x3 +#define SystemOverflowToLocal 0x4 +#define NonLocalOnlyOnLimitedLmemBar 0x5 +#define LMemBar_Preferred 0x6 +#define LMemBar_Indifferent 0x7 + +#define ISWA_1401844305USAGE(usage) ((Usage == GMM_USAGE_COPY_SOURCE) || \ + (Usage == GMM_USAGE_COPY_DEST) || \ + (Usage == GMM_RESOURCE_USAGE_BLT_SOURCE) || \ + (Usage == GMM_RESOURCE_USAGE_BLT_DESTINATION) || \ + (Usage == GMM_RESOURCE_USAGE_COPY_SOURCE) || \ + (Usage == GMM_RESOURCE_USAGE_COPY_DEST)) + +// SegOv: Override segment preference : 0= Default ie no override, 1=NonLocal_Only ie NonLocal Only, 2=Local_Only ie Local Only (NonCpuVisible Bar on Small Lmem Configs else CpuVisble Bar) +// SegOv: 3=LMemBarOrNonLocalOnly ie CpuVisible Bar but overflow to System, 4=SystemOverflowToLocal ie System but overflow to Local, +// SegOV: 5=NonLocalOnlyOnLimitedLmemBar ie System Only on Small Lmem Configs, +// SegOV: 6=LMemBarPreferred ie CpuVisible Bar overflow to NonCPUVisible bar overlow to System +// SegOV: 7= LMemBarIndifferent ie NonCPUVisible Bar overflow to System) +//******************************************************************************************************************************************************************/ +// USAGE TYPE L3_CC, L3_CLOS, L1CC, L2CC, L4CC, Coherency, IgPAT, SegOv) +/*******************************************************************************************************************************************************************/ +// KMD Usages +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BATCH_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMP_FRAME_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SWITCH_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CURSOR , 3, 0, 0, 0 , 0 , 0 , 0, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAY_STATIC_IMG_FOR_SMOOTH_ROTATION_BUFFER , 3, 0, 0, 0 , 0 , 0 , 0, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DUMMY_PAGE , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GDI_SURFACE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GENERIC_KMD_RESOURCE , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +// GMM_RESOURCE_USAGE_GFX_RING is only used if WaEnableRingHostMapping is enabled . +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GFX_RING , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GTT_TRANSFER_REGION , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HW_CONTEXT , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATE_MANAGER_KERNEL_STATE , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_STAGING_SURFACE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MBM_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_NNDI_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OVERLAY_MBM , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PRIMARY_SURFACE , 3, 0, 0, 0 , 0 , 0 , 0, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SCREEN_PROTECTION_INTERMEDIATE_SURFACE , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADOW_SURFACE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SM_SCRATCH_STATE , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STATUS_PAGE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TIMER_PERF_QUEUE , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNKNOWN , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UNMAP_PAGING_RESERVED_GTT_DMA_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VSC_BATCH_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WA_BATCH_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_OCA_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); + +// +// 3D Usages +// +// USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency , IgPAT) +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_DEPTH_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_HIZ , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UMD_BATCH_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_BINDING_TABLE_POOL , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CCS , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONSTANT_BUFFER_POOL , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEPTH_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DISPLAYABLE_RENDER_TARGET , 3, 0, 0, 0 , 0 , 0 , 0, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GATHER_POOL , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_SURFACE_STATE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_DYNAMIC_STATE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_GENERAL_STATE_UC , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_STATELESS_DATA_PORT , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_STATELESS_DATA_PORT_L1_CACHED , 1, 0, 1, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INDIRECT_OBJECT , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HEAP_INSTRUCTION , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_HIZ , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_COHERENT_UC , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_INDEX_BUFFER_L3_CACHED , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MCS , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PUSH_CONSTANT_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PULL_CONSTANT_BUFFER , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_QUERY , _WA_WB_Emu, 0, 0, 0 , 0 , 1 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STAGING , _WA_WB_Emu, 0, 0, 0 , 0 , 1 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STENCIL_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_STREAM_OUTPUT_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILE_POOL , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_SHADER_RESOURCE_LLC_BYPASS , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MOCS_62 , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_L3_EVICTION_SPECIAL , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UMD_OCA_BUFFER , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PROCEDURAL_TEXTURE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); + +// Tiled Resource +// +// USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency, IgPAT) +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_DEPTH_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_HIZ , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_MCS , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_CCS , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_RENDER_TARGET_AND_SHADER_RESOURCE , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_SHADER_RESOURCE , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_TILED_UAV , 1, 0, 0, 0 , 0 , 0 , 1, NoP); + +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_UAV , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_COHERENT_UC , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VERTEX_BUFFER_L3_CACHED , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OGL_WSTN_VERTEX_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_POSH_VERTEX_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_RENDER_TARGET_AND_SHADER_RESOURCE , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_WDDM_HISTORY_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CONTEXT_SAVE_RESTORE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PTBR_PAGE_POOL , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_PTBR_BATCH_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); + +// +// CM USAGES +// +// USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency, IgPAT) +DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_SurfaceState, 1, 0, 0, 0 , 1 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_L1_Enabled_SurfaceState, 1, 0, 1, 0 , 1 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_StateHeap, 1, 0, 0, 0 , 1 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_L3_SurfaceState, 0, 0, 0, 0 , 1 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(CM_RESOURCE_USAGE_NO_CACHE_SurfaceState, 0, 0, 0, 0 , 0 , 0 , 1, NoP); + +// +// MP USAGES +// +// USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency, IgPAT ) +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_BEGIN, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT_FF, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_DEFAULT_RCS, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState, 1, 0, 0, 0 , 1 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState_FF, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_SurfaceState_RCS, 1, 0, 0, 0 , 1 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MP_RESOURCE_USAGE_END, 0, 0, 0, 0 , 0 , 0 , 1, NoP); + +// MHW - SFC +// USAGE TYPE , L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency, IgPAT) +DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_CurrentOutputSurface, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_AvsLineBufferSurface, 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(MHW_RESOURCE_USAGE_Sfc_IefLineBufferSurface, 0, 0, 0, 0 , 0 , 0 , 1, NoP); + + + +/**********************************************************************************/ + +// +// OCL Usages +// +// USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency , IgPAT) +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_IMAGE , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_INLINE_CONST_HDC , 1, 0, 5, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SCRATCH , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRIVATE_MEM , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_PRINTF_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER , 1, 0, 0, 0 , 0 , 1 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED , 0, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_ISH_HEAP_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TAG_MEMORY_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_TEXTURE_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_OCL_SELF_SNOOP_BUFFER , 1, 0, 0, 0 , 0 , 0 , 1, NoP); +/**********************************************************************************/ + +// Cross Adapter +// USAGE TYPE ,L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency , IgPAT) +DEFINE_CACHE_ELEMENT( GMM_RESOURCE_USAGE_XADAPTER_SHARED_RESOURCE , 1, 0, 1, 0 , 0 , 0 , 1, NoP); +/**********************************************************************************/ + +// BCS +// USAGE TYPE L3_CC, L3_CLOS, L1CC, L2CC, L4CC, Coherency, IgPAT) +DEFINE_CACHE_ELEMENT( GMM_RESOURCE_USAGE_BLT_SOURCE , 0, 0, 0, 0, 0, 0, 1, NoP); +DEFINE_CACHE_ELEMENT( GMM_RESOURCE_USAGE_BLT_DESTINATION , 0, 0, 0, 0, 0, 0, 1, NoP); + +/**********************************************************************************/ +// +// MEDIA USAGES +// USAGE TYPE L3_CC, L3_CLOS,L1CC, L2CC, L4CC, Coherency, IgPAT ) +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_MEDIA_BATCH_BUFFERS , 0, 0, 0, 0, 0, 0 , 1, NoP ); +// DECODE +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INPUT_BITSTREAM , 1, 0, 0, 0, 0, 0 , 0, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INPUT_REFERENCE , 1, 0, 0, 1, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_WRITE , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_CACHE , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_INTERNAL_READ_WRITE_NOCACHE , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_PICTURE , 3, 0, 0, 0, 2, 0 , 0, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_WRITE , 0, 0, 0, 0, 0, 1 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DECODE_OUTPUT_STATISTICS_READ_WRITE , 1, 0, 0, 0, 1, 0 , 1, NoP ); +// ENCODE +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INPUT_RAW , 1, 0, 0, 0, 0, 0 , 0, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INPUT_RECON , 1, 0, 0, 1, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_WRITE , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_CACHE , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_INTERNAL_READ_WRITE_NOCACHE , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_EXTERNAL_READ , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_PICTURE , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_BITSTREAM , 0, 0, 0, 0, 0, 1 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_WRITE , 0, 0, 0, 0, 0, 1 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_ENCODE_OUTPUT_STATISTICS_READ_WRITE , 1, 0, 0, 0, 1, 0 , 1, NoP ); +// VP +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_PICTURE_FF , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_REFERENCE_FF , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_FF , 0, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_WRITE_FF , 0, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_FF , 1, 0, 0, 0, 1, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_OUTPUT_PICTURE_FF , 3, 0, 0, 0, 2, 0 , 0, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_PICTURE_RENDER , 1, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INPUT_REFERENCE_RENDER , 1, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_RENDER , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_WRITE_RENDER , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_INTERNAL_READ_WRITE_RENDER , 1, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_VP_OUTPUT_PICTURE_RENDER , 3, 0, 0, 0, 0, 0 , 0, NoP ); +// CP +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CP_EXTERNAL_READ , 0, 0, 0, 0, 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_CP_INTERNAL_WRITE , 0, 0, 0, 0, 0, 0 , 1, NoP ); + +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_GSC_KMD_RESOURCE , 0, 0, 0, 0, 0, 0 , 1, NoP ); + +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_KMD_NULL_CONTEXT_BB , 0, 0, 0, 0 , 0, 0 , 1, NoP ); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COMMAND_STREAMER , 0, 0, 0, 0 , 0, 0 , 1, NoP ); + +// USAGE TYPE , L3_CC, L3_CLOS, L1CC, L2CC, L4CC, Coherency, IgPAT) +// Uncacheable copies +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0, 0, 0 , 0, 0, 0, 1, NoP); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0, 0, 0 , 0, 0, 0, 1, NoP); + +// clang-format on + +#undef _WT +#include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe_LPGCachePolicy.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe_LPGCachePolicy.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/CachePolicy/GmmXe_LPGCachePolicy.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/CachePolicy/GmmXe_LPGCachePolicy.h 2025-12-12 13:20:35.000000000 +0100 @@ -252,5 +252,12 @@ DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_SOURCE , 0 , 0 , 1 , 0 , 1 , 0, 0, 0); DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COPY_DEST , 0 , 0 , 1 , 0 , 1 , 0, 0, 0); +//Usages for command streamer instructions +// USAGE TYPE , L3, L3_SCC, GO, UcLookup, L1CC, L2CC, L4CC, Coherency) +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_DEFAULT , 1 , 0 , 0 , 1 , 0 , 0, 1, 0); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_COARSE_GRAINED_COHERENT , 1 , 0 , 0 , 1 , 0 , 0, 1, 1); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT , 0 , 0 , 1 , 1 , 0 , 0, 1, 1); +DEFINE_CACHE_ELEMENT(GMM_RESOURCE_USAGE_FINE_GRAINED_COHERENT_MULTI_WRITE , 0 , 0 , 1 , 1 , 0 , 0, 1, 0); + #include "GmmCachePolicyUndefineConditionals.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/GlobalInfo/GmmInfo.cpp new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/GlobalInfo/GmmInfo.cpp --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/GlobalInfo/GmmInfo.cpp 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/GlobalInfo/GmmInfo.cpp 2025-12-12 13:20:35.000000000 +0100 @@ -1098,8 +1098,12 @@ { return GetCachePolicyObj(); } - - if(ProductFamily >= IGFX_BMG) + + if (ProductFamily == IGFX_CRI) + { + pGmmCachePolicy = new GmmLib::GmmXe3P_XPCCachePolicy(CachePolicy, this); + } + else if(ProductFamily >= IGFX_BMG) { pGmmCachePolicy = new GmmLib::GmmXe2_LPGCachePolicy(CachePolicy, this); } @@ -1113,6 +1117,7 @@ { case IGFX_XE2_HPG_CORE: case IGFX_XE3_CORE: + case IGFX_XE3P_CORE: pGmmCachePolicy = new GmmLib::GmmXe2_LPGCachePolicy(CachePolicy, this); break; case IGFX_GEN12LP_CORE: @@ -1194,7 +1199,8 @@ break; case IGFX_XE2_HPG_CORE: case IGFX_XE3_CORE: - default: + case IGFX_XE3P_CORE: + default: return new GmmXe_LPGTextureCalc(this); break; } @@ -1230,6 +1236,7 @@ case IGFX_XE_HPC_CORE: case IGFX_XE2_HPG_CORE: case IGFX_XE3_CORE: + case IGFX_XE3P_CORE: return new GmmLib::PlatformInfoGen12(Platform, (GMM_LIB_CONTEXT *)this); break; case IGFX_GEN11_CORE: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmAuxTableULT.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmAuxTableULT.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmAuxTableULT.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmAuxTableULT.h 2025-12-12 13:20:35.000000000 +0100 @@ -87,13 +87,16 @@ mResInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams); + if (!mResInfo) + return false; + size = mResInfo->GetSizeSurface(); alignment = mResInfo->GetResFlags().Info.TiledYf ? GMM_KBYTE(16) : GMM_KBYTE(64); mBuf = aligned_alloc(alignment, ALIGN(size, alignment)); - if(!mResInfo || !mBuf) + if(!mBuf) return false; mYBase = (GMM_GFX_ADDRESS)mBuf; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp 2025-12-12 13:20:35.000000000 +0100 @@ -2839,17 +2839,6 @@ /// @brief ULT for MSAA Resource - TODO adddepth MSAA, MCS surf param verificaton, compression case TEST_F(CTestGen12Resource, TestColorMSAA) { - //Tile dimensions in Bytes - const uint32_t MCSTileSize[1][2] = {128, 32}; //MCS is TileY - - const uint32_t TestDimensions[4][2] = { - //Input dimensions in #Tiles - {15, 20}, //16 Tiles x 20 <Max Width: Depth MSS crosses Pitch limit beyond this> - {0, 0}, //1x1x1 - {1, 0}, //2 Tilesx1 - {1, 1}, //2 Tiles x 2 - }; - uint32_t TestArraySize[2] = {1, 5}; uint32_t MinPitch = 32; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp 2025-12-12 13:20:35.000000000 +0100 @@ -1461,9 +1461,6 @@ TEST_F(CTestGen12dGPUResource, TestPlanarTile64CompressedResource) { - const uint32_t TileSize[TEST_BPP_MAX][2] = { - {256, 256}, {512, 128}, {512, 128}, {1024, 64}, {1024, 64}}; // TileYS - GMM_RESCREATE_PARAMS gmmParams = {}; gmmParams.Type = RESOURCE_2D; gmmParams.NoGfxMemory = 1; @@ -3124,17 +3121,6 @@ /// @brief ULT for MSAA Resource - adddepth MSAA, MCS surf param verificaton, compression case TEST_F(CTestGen12dGPUResource, DISABLED_TestColorMSAA) { - //Tile dimensions in Bytes - const uint32_t MCSTileSize[1][2] = {128, 32}; //MCS is TileY - - const uint32_t TestDimensions[4][2] = { - //Input dimensions in #Tiles - {15, 20}, //16 Tiles x 20 <Max Width: Depth MSS crosses Pitch limit beyond this> - {0, 0}, //1x1x1 - {1, 0}, //2 Tilesx1 - {1, 1}, //2 Tiles x 2 - }; - uint32_t TestArraySize[2] = {1, 5}; uint32_t MinPitch = 32; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmXe_LPGCachePolicyULT.cpp new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmXe_LPGCachePolicyULT.cpp --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/ULT/GmmXe_LPGCachePolicyULT.cpp 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/ULT/GmmXe_LPGCachePolicyULT.cpp 2025-12-12 13:20:35.000000000 +0100 @@ -61,6 +61,11 @@ GfxPlatform.eRenderCoreFamily = IGFX_XE_HPG_CORE; } + if (platform == IGFX_NVL_XE3G) + { + GfxPlatform.eRenderCoreFamily = IGFX_XE3_CORE; + } + pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO)); if(pGfxAdapterInfo) { @@ -128,6 +133,16 @@ TearDownXe_LPGVariant(); } + +TEST_F(CTestXe_LPGCachePolicy, TestXe3CachePolicy_FtrL4CacheEnabled) +{ + SetUpXe_LPGVariant(IGFX_NVL_XE3G); + CheckXe2_HPGVirtualL3CachePolicy(); + CheckPAT(); // Has both L3 and PAT within + Check_Xe2_HPG_PATCompressed(); + TearDownXe_LPGVariant(); +} + void CTestXe_LPGCachePolicy::CheckVirtualL3CachePolicy() { const uint32_t L4_WB_CACHEABLE = 0x0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h 1970-01-01 01:00:00.000000000 +0100 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/inc/External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h 2025-12-12 13:20:35.000000000 +0100 @@ -0,0 +1,82 @@ +/*============================================================================== +Copyright(c) 2025 Intel Corporation +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files(the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and / or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +============================================================================*/ +#pragma once + +#ifdef __cplusplus +#include "../GmmCachePolicyCommon.h" + +#define GMM_XE3P_NUM_MOCS_ENTRIES (16) +#define GMM_XE3P_DEFAULT_PAT_INDEX (PAT2) + + +#ifdef __cplusplus +extern "C" { +#endif /*__cplusplus*/ + +typedef union GMM_XE3P_PRIVATE_PAT_REC +{ + struct + { + uint32_t Coherency : 2; + uint32_t L4CC : 2; + uint32_t L3CC : 2; + uint32_t L3CLOS : 2; + uint32_t Reserved1 : 1; + uint32_t LosslessCompressionEn: 1; + uint32_t Reserved2 : 22; + } Xe3P; + uint32_t Value; +} GMM_XE3P_PRIVATE_PAT; + +namespace GmmLib +{ + class NON_PAGED_SECTION GmmXe3P_XPCCachePolicy : public GmmXe2_LPGCachePolicy + { + protected: + + public: + /* Constructors */ + GmmXe3P_XPCCachePolicy(GMM_CACHE_POLICY_ELEMENT *pCachePolicyContext, Context *pGmmLibContext) + : GmmXe2_LPGCachePolicy(pCachePolicyContext, pGmmLibContext) + { + NumPATRegisters = GMM_NUM_PAT_ENTRIES; + NumMOCSRegisters = GMM_XE3P_NUM_MOCS_ENTRIES; + CurrentMaxPATIndex = 0; + CurrentMaxMocsIndex = 0; + } + virtual ~GmmXe3P_XPCCachePolicy() + { + } + + /* Function prototypes */ + GMM_STATUS InitCachePolicy(); + GMM_STATUS SetupPAT(); + void SetUpMOCSTable(); + void GetL3L4(GMM_CACHE_POLICY_TBL_ELEMENT *pUsageEle, GMM_XE3P_PRIVATE_PAT *pUsagePATElement, uint32_t Usage); + uint32_t GMM_STDCALL CachePolicyGetPATIndex(GMM_RESOURCE_INFO *pResInfo, GMM_RESOURCE_USAGE_TYPE Usage, bool *pCompressionEnable, bool IsCpuCacheable); + }; +} // namespace GmmLib +#endif // #ifdef __cplusplus + +#ifdef __cplusplus +} +#endif /* end__cplusplus*/ + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/inc/Internal/Common/GmmLibInc.h new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/inc/Internal/Common/GmmLibInc.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/GmmLib/inc/Internal/Common/GmmLibInc.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/GmmLib/inc/Internal/Common/GmmLibInc.h 2025-12-12 13:20:35.000000000 +0100 @@ -41,6 +41,7 @@ #include "External/Common/CachePolicy/GmmCachePolicyGen12.h" #include "External/Common/CachePolicy/GmmCachePolicyXe_LPG.h" #include "External/Common/CachePolicy/GmmCachePolicyXe2_LPG.h" +#include "External/Common/CachePolicy/GmmCachePolicyXe3P_XPC.h" #include "External/Common/CachePolicy/GmmCachePolicyGen12dGPU.h" #include "External/Common/GmmResourceInfoExt.h" #include "../Platform/GmmPlatforms.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/inc/common/igfxfmid.h new/gmmlib-intel-gmmlib-22.9.0/Source/inc/common/igfxfmid.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/inc/common/igfxfmid.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/inc/common/igfxfmid.h 2025-12-12 13:20:35.000000000 +0100 @@ -80,7 +80,9 @@ IGFX_BMG = 1274, IGFX_LUNARLAKE = 1275, IGFX_PTL = 1300, - + IGFX_NVL_XE3G = 1340, + IGFX_CRI = 1380, + IGFX_MAX_PRODUCT, IGFX_GENNEXT = 0x7ffffffe, PRODUCT_FAMILY_FORCE_ULONG = 0x7fffffff @@ -143,6 +145,8 @@ IGFX_XE2_LPG_CORE = 0x0c09, // XE2_LPG Family IGFX_XE2_HPG_CORE = IGFX_XE2_LPG_CORE, //XE2_HPG Family IGFX_XE3_CORE = 0x1e00, // XE3 Family + IGFX_XE3P_CORE = 0x2300, // XE3P Family + IGFX_XE3P_HPM = 0x2301, // XE3P HPM Family //Please add new GENs BEFORE THIS ! IGFX_MAX_CORE, @@ -303,7 +307,8 @@ #define GFX_IS_DISCRETE_PRODUCT(pf) ( ( pf == IGFX_DG1 ) || \ ( pf == IGFX_DG2 ) || \ ( pf == IGFX_XE_HP_SDV ) || \ - ( pf == IGFX_BMG ) ) + ( pf == IGFX_BMG ) || \ + ( pf == IGFX_CRI) ) #define GFX_IS_DISCRETE_FAMILY(p) GFX_IS_DISCRETE_PRODUCT(GFX_GET_CURRENT_PRODUCT(p)) @@ -2021,7 +2026,18 @@ // WCL #define DEV_ID_FD80 0xFD80 -#define DEV_ID_FD81 0xFD81 +#define DEV_ID_FD81 0xFD81 + +// NVL +#define DEV_ID_D740 0xD740 +#define DEV_ID_D741 0xD741 +#define DEV_ID_D742 0xD742 +#define DEV_ID_D743 0xD743 +#define DEV_ID_D744 0xD744 +#define DEV_ID_D745 0xD745 + +// CRI +#define DEV_ID_674C 0x674C #define MGM_HAS 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmmlib-intel-gmmlib-22.8.2/Source/inc/common/sku_wa.h new/gmmlib-intel-gmmlib-22.9.0/Source/inc/common/sku_wa.h --- old/gmmlib-intel-gmmlib-22.8.2/Source/inc/common/sku_wa.h 2025-09-08 15:17:27.000000000 +0200 +++ new/gmmlib-intel-gmmlib-22.9.0/Source/inc/common/sku_wa.h 2025-12-12 13:20:35.000000000 +0100 @@ -114,7 +114,9 @@ unsigned int FtrXe2Compression : 1; // Xe2 Stateless Compression unsigned int FtrXe2PlusTiling : 1; // Tile64 MSAA Layout unsigned int FtrL4Cache : 1; // L4 cache support - unsigned int FtrPml5Support : 1; // xe2 page tables + unsigned int FtrPml5Support : 1; // xe2 page tables + unsigned int Ftr3DSamplerRemoved : 1; + unsigned int FtrEfficient64BitAddressing : 1; // Efficient 64bit addressing (Xe3P) feature. };
