@@ -71,15 +71,56 @@ const RuntimeCapabilityTable CNL::capabilityTable{
7171 false // supportCacheFlushAfterWalker
7272};
7373
74+ WorkaroundTable CNL::workaroundTable = {};
75+ FeatureTable CNL::featureTable = {};
76+
77+ void CNL::setupFeatureAndWorkaroundTable (HardwareInfo *hwInfo) {
78+ FeatureTable *pSkuTable = const_cast <FeatureTable *>(hwInfo->pSkuTable );
79+ WorkaroundTable *pWaTable = const_cast <WorkaroundTable *>(hwInfo->pWaTable );
80+
81+ pSkuTable->ftrGpGpuMidThreadLevelPreempt = true ;
82+ pSkuTable->ftr3dMidBatchPreempt = true ;
83+ pSkuTable->ftr3dObjectLevelPreempt = true ;
84+ pSkuTable->ftrPerCtxtPreemptionGranularityControl = true ;
85+ pSkuTable->ftrPPGTT = true ;
86+ pSkuTable->ftrSVM = true ;
87+ pSkuTable->ftrIA32eGfxPTEs = true ;
88+ pSkuTable->ftrStandardMipTailFormat = true ;
89+ pSkuTable->ftrDisplayYTiling = true ;
90+ pSkuTable->ftrTranslationTable = true ;
91+ pSkuTable->ftrUserModeTranslationTable = true ;
92+ pSkuTable->ftrTileMappedResource = true ;
93+ pSkuTable->ftrEnableGuC = true ;
94+ pSkuTable->ftrFbc = true ;
95+ pSkuTable->ftrFbc2AddressTranslation = true ;
96+ pSkuTable->ftrFbcBlitterTracking = true ;
97+ pSkuTable->ftrFbcCpuTracking = true ;
98+ pSkuTable->ftrAstcHdr2D = true ;
99+ pSkuTable->ftrAstcLdr2D = true ;
100+ pSkuTable->ftrTileY = true ;
101+
102+ pWaTable->wa4kAlignUVOffsetNV12LinearSurface = true ;
103+ pWaTable->waSendMIFLUSHBeforeVFE = true ;
104+ pWaTable->waReportPerfCountUseGlobalContextID = true ;
105+ pWaTable->waSamplerCacheFlushBetweenRedescribedSurfaceReads = true ;
106+
107+ if ((1 << hwInfo->pPlatform ->usRevId ) & 0x3 ) {
108+ pWaTable->waFbcLinearSurfaceStride = true ;
109+ }
110+ if ((1 << hwInfo->pPlatform ->usRevId ) & 0x1 ) {
111+ pWaTable->waEncryptedEdramOnlyPartials = true ;
112+ }
113+ }
74114const HardwareInfo CNL_2x5x8::hwInfo = {
75115 &CNL::platform,
76- &emptySkuTable ,
77- &emptyWaTable ,
116+ &CNL::featureTable ,
117+ &CNL::workaroundTable ,
78118 &CNL_2x5x8::gtSystemInfo,
79119 CNL::capabilityTable,
80120};
81121GT_SYSTEM_INFO CNL_2x5x8::gtSystemInfo = {0 };
82- void CNL_2x5x8::setupHardwareInfo (GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featureTable, bool setupFeatureTable) {
122+ void CNL_2x5x8::setupHardwareInfo (HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
123+ GT_SYSTEM_INFO *gtSysInfo = const_cast <GT_SYSTEM_INFO *>(hwInfo->pSysInfo );
83124 gtSysInfo->EUCount = 39 ;
84125 gtSysInfo->ThreadCount = 39 * CNL::threadsPerEu;
85126 gtSysInfo->SliceCount = 2 ;
@@ -98,16 +139,20 @@ void CNL_2x5x8::setupHardwareInfo(GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featu
98139 gtSysInfo->MaxSubSlicesSupported = CNL::maxSubslicesSupported;
99140 gtSysInfo->IsL3HashModeEnabled = false ;
100141 gtSysInfo->IsDynamicallyPopulated = false ;
142+ if (setupFeatureTableAndWorkaroundTable) {
143+ setupFeatureAndWorkaroundTable (hwInfo);
144+ }
101145};
102146const HardwareInfo CNL_2x4x8::hwInfo = {
103147 &CNL::platform,
104- &emptySkuTable ,
105- &emptyWaTable ,
148+ &CNL::featureTable ,
149+ &CNL::workaroundTable ,
106150 &CNL_2x4x8::gtSystemInfo,
107151 CNL::capabilityTable,
108152};
109153GT_SYSTEM_INFO CNL_2x4x8::gtSystemInfo = {0 };
110- void CNL_2x4x8::setupHardwareInfo (GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featureTable, bool setupFeatureTable) {
154+ void CNL_2x4x8::setupHardwareInfo (HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
155+ GT_SYSTEM_INFO *gtSysInfo = const_cast <GT_SYSTEM_INFO *>(hwInfo->pSysInfo );
111156 gtSysInfo->EUCount = 31 ;
112157 gtSysInfo->ThreadCount = 31 * CNL::threadsPerEu;
113158 gtSysInfo->SliceCount = 2 ;
@@ -126,16 +171,20 @@ void CNL_2x4x8::setupHardwareInfo(GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featu
126171 gtSysInfo->MaxSubSlicesSupported = CNL::maxSubslicesSupported;
127172 gtSysInfo->IsL3HashModeEnabled = false ;
128173 gtSysInfo->IsDynamicallyPopulated = false ;
174+ if (setupFeatureTableAndWorkaroundTable) {
175+ setupFeatureAndWorkaroundTable (hwInfo);
176+ }
129177};
130178const HardwareInfo CNL_1x3x8::hwInfo = {
131179 &CNL::platform,
132- &emptySkuTable ,
133- &emptyWaTable ,
180+ &CNL::featureTable ,
181+ &CNL::workaroundTable ,
134182 &CNL_1x3x8::gtSystemInfo,
135183 CNL::capabilityTable,
136184};
137185GT_SYSTEM_INFO CNL_1x3x8::gtSystemInfo = {0 };
138- void CNL_1x3x8::setupHardwareInfo (GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featureTable, bool setupFeatureTable) {
186+ void CNL_1x3x8::setupHardwareInfo (HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
187+ GT_SYSTEM_INFO *gtSysInfo = const_cast <GT_SYSTEM_INFO *>(hwInfo->pSysInfo );
139188 gtSysInfo->EUCount = 23 ;
140189 gtSysInfo->ThreadCount = 23 * CNL::threadsPerEu;
141190 gtSysInfo->SliceCount = 1 ;
@@ -154,16 +203,20 @@ void CNL_1x3x8::setupHardwareInfo(GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featu
154203 gtSysInfo->MaxSubSlicesSupported = CNL::maxSubslicesSupported;
155204 gtSysInfo->IsL3HashModeEnabled = false ;
156205 gtSysInfo->IsDynamicallyPopulated = false ;
206+ if (setupFeatureTableAndWorkaroundTable) {
207+ setupFeatureAndWorkaroundTable (hwInfo);
208+ }
157209};
158210const HardwareInfo CNL_1x2x8::hwInfo = {
159211 &CNL::platform,
160- &emptySkuTable ,
161- &emptyWaTable ,
212+ &CNL::featureTable ,
213+ &CNL::workaroundTable ,
162214 &CNL_1x2x8::gtSystemInfo,
163215 CNL::capabilityTable,
164216};
165217GT_SYSTEM_INFO CNL_1x2x8::gtSystemInfo = {0 };
166- void CNL_1x2x8::setupHardwareInfo (GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featureTable, bool setupFeatureTable) {
218+ void CNL_1x2x8::setupHardwareInfo (HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
219+ GT_SYSTEM_INFO *gtSysInfo = const_cast <GT_SYSTEM_INFO *>(hwInfo->pSysInfo );
167220 gtSysInfo->EUCount = 15 ;
168221 gtSysInfo->ThreadCount = 15 * CNL::threadsPerEu;
169222 gtSysInfo->SliceCount = 1 ;
@@ -182,16 +235,20 @@ void CNL_1x2x8::setupHardwareInfo(GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featu
182235 gtSysInfo->MaxSubSlicesSupported = CNL::maxSubslicesSupported;
183236 gtSysInfo->IsL3HashModeEnabled = false ;
184237 gtSysInfo->IsDynamicallyPopulated = false ;
238+ if (setupFeatureTableAndWorkaroundTable) {
239+ setupFeatureAndWorkaroundTable (hwInfo);
240+ }
185241};
186242const HardwareInfo CNL_4x9x8::hwInfo = {
187243 &CNL::platform,
188- &emptySkuTable ,
189- &emptyWaTable ,
244+ &CNL::featureTable ,
245+ &CNL::workaroundTable ,
190246 &CNL_4x9x8::gtSystemInfo,
191247 CNL::capabilityTable,
192248};
193249GT_SYSTEM_INFO CNL_4x9x8::gtSystemInfo = {0 };
194- void CNL_4x9x8::setupHardwareInfo (GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featureTable, bool setupFeatureTable) {
250+ void CNL_4x9x8::setupHardwareInfo (HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
251+ GT_SYSTEM_INFO *gtSysInfo = const_cast <GT_SYSTEM_INFO *>(hwInfo->pSysInfo );
195252 gtSysInfo->EUCount = 71 ;
196253 gtSysInfo->ThreadCount = 71 * CNL::threadsPerEu;
197254 gtSysInfo->SliceCount = 4 ;
@@ -210,27 +267,31 @@ void CNL_4x9x8::setupHardwareInfo(GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featu
210267 gtSysInfo->MaxSubSlicesSupported = CNL::maxSubslicesSupported;
211268 gtSysInfo->IsL3HashModeEnabled = false ;
212269 gtSysInfo->IsDynamicallyPopulated = false ;
213- };
270+ if (setupFeatureTableAndWorkaroundTable) {
271+ setupFeatureAndWorkaroundTable (hwInfo);
272+ }
273+ }
274+
214275const HardwareInfo CNL::hwInfo = CNL_2x5x8::hwInfo;
215276
216- void setupCNLHardwareInfoImpl (GT_SYSTEM_INFO *gtSysInfo, FeatureTable *featureTable, bool setupFeatureTable , const std::string &hwInfoConfig) {
277+ void setupCNLHardwareInfoImpl (HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable , const std::string &hwInfoConfig) {
217278 if (hwInfoConfig == " 1x2x8" ) {
218- CNL_1x2x8::setupHardwareInfo (gtSysInfo, featureTable, setupFeatureTable );
279+ CNL_1x2x8::setupHardwareInfo (hwInfo, setupFeatureTableAndWorkaroundTable );
219280 } else if (hwInfoConfig == " 1x3x8" ) {
220- CNL_1x3x8::setupHardwareInfo (gtSysInfo, featureTable, setupFeatureTable );
281+ CNL_1x3x8::setupHardwareInfo (hwInfo, setupFeatureTableAndWorkaroundTable );
221282 } else if (hwInfoConfig == " 2x5x8" ) {
222- CNL_2x5x8::setupHardwareInfo (gtSysInfo, featureTable, setupFeatureTable );
283+ CNL_2x5x8::setupHardwareInfo (hwInfo, setupFeatureTableAndWorkaroundTable );
223284 } else if (hwInfoConfig == " 2x4x8" ) {
224- CNL_2x4x8::setupHardwareInfo (gtSysInfo, featureTable, setupFeatureTable );
285+ CNL_2x4x8::setupHardwareInfo (hwInfo, setupFeatureTableAndWorkaroundTable );
225286 } else if (hwInfoConfig == " 4x9x8" ) {
226- CNL_4x9x8::setupHardwareInfo (gtSysInfo, featureTable, setupFeatureTable );
287+ CNL_4x9x8::setupHardwareInfo (hwInfo, setupFeatureTableAndWorkaroundTable );
227288 } else if (hwInfoConfig == " default" ) {
228289 // Default config
229- CNL_2x5x8::setupHardwareInfo (gtSysInfo, featureTable, setupFeatureTable );
290+ CNL_2x5x8::setupHardwareInfo (hwInfo, setupFeatureTableAndWorkaroundTable );
230291 } else {
231292 UNRECOVERABLE_IF (true );
232293 }
233294}
234295
235- void (*CNL::setupHardwareInfo)(GT_SYSTEM_INFO *, FeatureTable *, bool , const std::string &) = setupCNLHardwareInfoImpl;
296+ void (*CNL::setupHardwareInfo)(HardwareInfo *, bool , const std::string &) = setupCNLHardwareInfoImpl;
236297} // namespace NEO
0 commit comments