Skip to content

Commit 7604a15

Browse files
Enable local memory for images for DG2 + WSL
Change GMM resource info params, so that buffers remain in system memory while images are being routed to local memory additionally, fixes single sku builds Related-To: NEO-6391 Signed-off-by: Kamil Diedrich <[email protected]>
1 parent 429fa1f commit 7604a15

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

shared/source/gmm_helper/gmm.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ Gmm::Gmm(GmmClientContext *clientContext, const void *alignedPtr, size_t aligned
6666
applyAppResource(storageInfo);
6767
applyDebugOverrides();
6868

69+
auto hardwareInfo = clientContext->getHardwareInfo();
70+
if (HwInfoConfig::get(hardwareInfo->platform.eProductFamily)->overrideResourceInfoParamsForWsl(clientContext->getDriverModelType())) {
71+
resourceParams.Flags.Info.NonLocalOnly = 1;
72+
resourceParams.Flags.Info.LocalOnly = 0;
73+
}
74+
6975
gmmResourceInfo.reset(GmmResourceInfo::create(clientContext, &resourceParams));
7076
}
7177

@@ -380,10 +386,6 @@ void Gmm::applyMemoryFlags(bool systemMemoryPool, StorageInfo &storageInfo) {
380386
resourceParams.MultiTileArch.LocalMemEligibilitySet = static_cast<uint8_t>(tileSelected);
381387
}
382388
}
383-
384-
if (HwInfoConfig::get(hardwareInfo->platform.eProductFamily)->overrideResourceInfoParamsForWsl(clientContext->getDriverModelType())) {
385-
resourceParams.Flags.Info.NonLocalOnly = 1;
386-
}
387389
}
388390

389391
void Gmm::applyDebugOverrides() {

shared/test/unit_test/os_interface/wddm_linux/configure_device_address_space_drm_or_wddm_test.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include "shared/source/gmm_helper/gmm_helper.h"
9+
#include "shared/source/helpers/surface_format_info.h"
910
#include "shared/source/os_interface/hw_info_config.h"
1011
#include "shared/source/os_interface/linux/os_time_linux.h"
1112
#include "shared/source/os_interface/os_interface.h"
@@ -17,6 +18,7 @@
1718
#include "shared/source/os_interface/windows/wddm_memory_manager.h"
1819
#include "shared/test/common/helpers/default_hw_info.h"
1920
#include "shared/test/common/mocks/mock_execution_environment.h"
21+
#include "shared/test/common/mocks/mock_gmm.h"
2022
#include "shared/test/common/mocks/mock_gmm_client_context.h"
2123
#include "shared/test/common/test_macros/test.h"
2224

@@ -239,11 +241,34 @@ using GmmTestsDG2 = WddmLinuxTest;
239241

240242
HWTEST_EXCLUDE_PRODUCT(GmmTests, givenGmmWithForceLocalMemThenNonLocalIsSetToFalse, IGFX_XE_HPG_CORE);
241243

242-
DG2TEST_F(GmmTestsDG2, givenGmmWithForceLocalMemThenNonLocalIsSetToTrue) {
244+
HWTEST2_F(GmmTestsDG2, givenGmmForBufferWithForceLocalMemThenNonLocalIsSetToTrue, IsDG2) {
243245
void *pSysMem = nullptr;
244246
std::unique_ptr<NEO::Gmm> gmm(new NEO::Gmm(mockExecEnv.rootDeviceEnvironments[0]->getGmmClientContext(), pSysMem, 4096, 0, false, false, false, {}));
245247

246248
EXPECT_EQ(gmm->resourceParams.Flags.Info.NonLocalOnly, 1u);
249+
EXPECT_EQ(gmm->resourceParams.Flags.Info.LocalOnly, 0u);
250+
}
251+
252+
HWTEST2_F(GmmTestsDG2, givenGmmForImageWithForceLocalMemThenNonLocalIsSetToFalseAndoLocalOnlyIsSetToTrue, IsDG2) {
253+
const_cast<NEO::HardwareInfo *>(mockExecEnv.rootDeviceEnvironments[0]->getHardwareInfo())->featureTable.flags.ftrLocalMemory = 1u;
254+
255+
NEO::ImageDescriptor imgDesc = {};
256+
imgDesc.imageType = NEO::ImageType::Image2DArray;
257+
imgDesc.imageWidth = 60;
258+
imgDesc.imageHeight = 1;
259+
imgDesc.imageDepth = 1;
260+
imgDesc.imageArraySize = 10;
261+
262+
NEO::ImageInfo imgInfo = NEO::MockGmm::initImgInfo(imgDesc, 0, nullptr);
263+
imgInfo.useLocalMemory = true;
264+
265+
NEO::StorageInfo storageInfo = {};
266+
storageInfo.localOnlyRequired = true;
267+
268+
std::unique_ptr<NEO::Gmm> gmm(new NEO::Gmm(mockExecEnv.rootDeviceEnvironments[0]->getGmmClientContext(), imgInfo, storageInfo, false));
269+
270+
EXPECT_EQ(gmm->resourceParams.Flags.Info.NonLocalOnly, 0u);
271+
EXPECT_EQ(gmm->resourceParams.Flags.Info.LocalOnly, 1u);
247272
}
248273

249274
using WddmLinuxConfigureDeviceAddressSpaceTest = WddmLinuxTest;

0 commit comments

Comments
 (0)