From b1062812be3d72505e4536430f7070d83fd7c259 Mon Sep 17 00:00:00 2001 From: Maciej Dziuban Date: Mon, 6 Jul 2020 14:42:48 +0200 Subject: [PATCH] Use family type from hwInfo in WDDM Change-Id: I3120673781b4cc0eb170833ac42eab1aad718d79 --- opencl/test/unit_test/mocks/mock_gmm_memory_base.h | 7 ++++++- opencl/test/unit_test/mocks/mock_wddm.h | 1 + shared/source/os_interface/windows/wddm/wddm.cpp | 2 +- .../unit_test/os_interface/windows/wddm_tests.cpp | 14 ++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/opencl/test/unit_test/mocks/mock_gmm_memory_base.h b/opencl/test/unit_test/mocks/mock_gmm_memory_base.h index 53349b5ca8..42b7696801 100644 --- a/opencl/test/unit_test/mocks/mock_gmm_memory_base.h +++ b/opencl/test/unit_test/mocks/mock_gmm_memory_base.h @@ -27,8 +27,12 @@ class MockGmmMemoryBase : public GmmMemory { return true; } + void overrideInternalGpuVaRangeLimit(uintptr_t value) { + this->internalGpuVaRangeLimit = value; + } + uintptr_t getInternalGpuVaRangeLimit() override { - return NEO::windowsMinAddress; + return internalGpuVaRangeLimit; } bool setDeviceInfo(GMM_DEVICE_INFO *deviceInfo) override { @@ -39,6 +43,7 @@ class MockGmmMemoryBase : public GmmMemory { GMM_GFX_PARTITIONING *partition = nullptr; bool setDeviceInfoValue = true; + uintptr_t internalGpuVaRangeLimit = NEO::windowsMinAddress; GMM_DEVICE_CALLBACKS_INT deviceCallbacks{}; }; diff --git a/opencl/test/unit_test/mocks/mock_wddm.h b/opencl/test/unit_test/mocks/mock_wddm.h index d33df0cea0..f9f1824a56 100644 --- a/opencl/test/unit_test/mocks/mock_wddm.h +++ b/opencl/test/unit_test/mocks/mock_wddm.h @@ -41,6 +41,7 @@ class WddmMock : public Wddm { using Wddm::pagingFenceAddress; using Wddm::pagingQueue; using Wddm::residencyLogger; + using Wddm::rootDeviceEnvironment; using Wddm::temporaryResources; using Wddm::wddmInterface; diff --git a/shared/source/os_interface/windows/wddm/wddm.cpp b/shared/source/os_interface/windows/wddm/wddm.cpp index b83079bb68..1d852f2d62 100644 --- a/shared/source/os_interface/windows/wddm/wddm.cpp +++ b/shared/source/os_interface/windows/wddm/wddm.cpp @@ -1000,7 +1000,7 @@ bool Wddm::configureDeviceAddressSpace() { ? maximumApplicationAddress + 1u : 0u; - bool obtainMinAddress = gfxPlatform->eRenderCoreFamily == IGFX_GEN12LP_CORE; + bool obtainMinAddress = rootDeviceEnvironment.getHardwareInfo()->platform.eRenderCoreFamily == IGFX_GEN12LP_CORE; return gmmMemory->configureDevice(getAdapter(), device, getGdi()->escape, svmSize, featureTable->ftrL3IACoherency, minAddress, obtainMinAddress); } diff --git a/shared/test/unit_test/os_interface/windows/wddm_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_tests.cpp index aa90e10c07..d59705df04 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_tests.cpp @@ -25,4 +25,18 @@ TEST_F(WddmTests, whenCreatingAllocation64kThenDoNotCreateResource) { EXPECT_EQ(FALSE, gdiParam->Flags.CreateResource); } +TEST_F(WddmTests, whenInitializingWddmThenSetMinAddressToCorrectValue) { + constexpr static uintptr_t mockedInternalGpuVaRange = 0x9876u; + auto gmmMemory = new MockGmmMemoryBase(wddm->rootDeviceEnvironment.getGmmClientContext()); + gmmMemory->overrideInternalGpuVaRangeLimit(mockedInternalGpuVaRange); + wddm->gmmMemory.reset(gmmMemory); + + ASSERT_EQ(0u, wddm->getWddmMinAddress()); + wddm->init(); + + const bool obtainFromGmm = defaultHwInfo->platform.eRenderCoreFamily == IGFX_GEN12LP_CORE; + const auto expectedMinAddress = obtainFromGmm ? mockedInternalGpuVaRange : windowsMinAddress; + ASSERT_EQ(expectedMinAddress, wddm->getWddmMinAddress()); +} + } // namespace NEO