Improve PageTableManager creation
Change-Id: If359c76ae880fb2e1f56fc561aca761530787b5e Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
parent
b602cd2bb8
commit
2cd411227c
|
@ -1,5 +1,5 @@
|
||||||
#!groovy
|
#!groovy
|
||||||
neoDependenciesRev='803657-1097'
|
neoDependenciesRev='803657-1097'
|
||||||
strategy='EQUAL'
|
strategy='EQUAL'
|
||||||
allowedCD=273
|
allowedCD=274
|
||||||
allowedF=4
|
allowedF=4
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "runtime/source_level_debugger/source_level_debugger.h"
|
#include "runtime/source_level_debugger/source_level_debugger.h"
|
||||||
#include "runtime/built_ins/sip.h"
|
#include "runtime/built_ins/sip.h"
|
||||||
#include "runtime/gmm_helper/gmm_helper.h"
|
#include "runtime/gmm_helper/gmm_helper.h"
|
||||||
|
#include "runtime/helpers/hw_helper.h"
|
||||||
#include "runtime/memory_manager/memory_manager.h"
|
#include "runtime/memory_manager/memory_manager.h"
|
||||||
#include "runtime/os_interface/device_factory.h"
|
#include "runtime/os_interface/device_factory.h"
|
||||||
#include "runtime/os_interface/os_interface.h"
|
#include "runtime/os_interface/os_interface.h"
|
||||||
|
@ -44,7 +45,7 @@ bool ExecutionEnvironment::initializeCommandStreamReceiver(const HardwareInfo *p
|
||||||
if (!commandStreamReceiver) {
|
if (!commandStreamReceiver) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (pHwInfo->capabilityTable.ftrRenderCompressedBuffers || pHwInfo->capabilityTable.ftrRenderCompressedImages) {
|
if (HwHelper::get(pHwInfo->pPlatform->eRenderCoreFamily).isPageTableManagerSupported(*pHwInfo)) {
|
||||||
commandStreamReceiver->createPageTableManager();
|
commandStreamReceiver->createPageTableManager();
|
||||||
}
|
}
|
||||||
commandStreamReceiver->setDeviceIndex(deviceIndex);
|
commandStreamReceiver->setDeviceIndex(deviceIndex);
|
||||||
|
|
|
@ -33,10 +33,11 @@ class HwHelper {
|
||||||
virtual SipKernelType getSipKernelType(bool debuggingActive) = 0;
|
virtual SipKernelType getSipKernelType(bool debuggingActive) = 0;
|
||||||
virtual uint32_t getConfigureAddressSpaceMode() = 0;
|
virtual uint32_t getConfigureAddressSpaceMode() = 0;
|
||||||
virtual bool isLocalMemoryEnabled(const HardwareInfo &hwInfo) = 0;
|
virtual bool isLocalMemoryEnabled(const HardwareInfo &hwInfo) = 0;
|
||||||
|
virtual bool isPageTableManagerSupported(const HardwareInfo &hwInfo) const = 0;
|
||||||
virtual const AubMemDump::LrcaHelper &getCsTraits(EngineType engineType) const = 0;
|
virtual const AubMemDump::LrcaHelper &getCsTraits(EngineType engineType) const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HwHelper(){};
|
HwHelper() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
|
@ -89,8 +90,10 @@ class HwHelperHw : public HwHelper {
|
||||||
|
|
||||||
bool isLocalMemoryEnabled(const HardwareInfo &hwInfo) override;
|
bool isLocalMemoryEnabled(const HardwareInfo &hwInfo) override;
|
||||||
|
|
||||||
private:
|
bool isPageTableManagerSupported(const HardwareInfo &hwInfo) const override;
|
||||||
HwHelperHw(){};
|
|
||||||
|
protected:
|
||||||
|
HwHelperHw() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DwordBuilder {
|
struct DwordBuilder {
|
||||||
|
|
|
@ -69,4 +69,9 @@ template <typename Family>
|
||||||
const AubMemDump::LrcaHelper &HwHelperHw<Family>::getCsTraits(EngineType engineType) const {
|
const AubMemDump::LrcaHelper &HwHelperHw<Family>::getCsTraits(EngineType engineType) const {
|
||||||
return *AUBFamilyMapper<Family>::csTraits[engineType];
|
return *AUBFamilyMapper<Family>::csTraits[engineType];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Family>
|
||||||
|
bool HwHelperHw<Family>::isPageTableManagerSupported(const HardwareInfo &hwInfo) const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // namespace OCLRT
|
} // namespace OCLRT
|
||||||
|
|
|
@ -367,13 +367,13 @@ bool Wddm::mapGpuVirtualAddressImpl(Gmm *gmm, D3DKMT_HANDLE handle, void *cpuPtr
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gmm->isRenderCompressed) {
|
kmDafListener->notifyMapGpuVA(featureTable->ftrKmdDaf, adapter, device, handle, MapGPUVA.VirtualAddress, gdi->escape);
|
||||||
|
|
||||||
|
if (gmm->isRenderCompressed && pageTableManager.get()) {
|
||||||
return updateAuxTable(gpuPtr, gmm, true);
|
return updateAuxTable(gpuPtr, gmm, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
kmDafListener->notifyMapGpuVA(featureTable->ftrKmdDaf, adapter, device, handle, MapGPUVA.VirtualAddress, gdi->escape);
|
return true;
|
||||||
|
|
||||||
return status == STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Wddm::freeGpuVirtualAddres(D3DGPU_VIRTUAL_ADDRESS &gpuPtr, uint64_t size) {
|
bool Wddm::freeGpuVirtualAddres(D3DGPU_VIRTUAL_ADDRESS &gpuPtr, uint64_t size) {
|
||||||
|
@ -834,15 +834,12 @@ void Wddm::releaseReservedAddress(void *reservedAddress) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Wddm::updateAuxTable(D3DGPU_VIRTUAL_ADDRESS gpuVa, Gmm *gmm, bool map) {
|
bool Wddm::updateAuxTable(D3DGPU_VIRTUAL_ADDRESS gpuVa, Gmm *gmm, bool map) {
|
||||||
if (pageTableManager.get()) {
|
GMM_DDI_UPDATEAUXTABLE ddiUpdateAuxTable = {};
|
||||||
GMM_DDI_UPDATEAUXTABLE ddiUpdateAuxTable = {};
|
ddiUpdateAuxTable.BaseGpuVA = gpuVa;
|
||||||
ddiUpdateAuxTable.BaseGpuVA = gpuVa;
|
ddiUpdateAuxTable.BaseResInfo = gmm->gmmResourceInfo->peekHandle();
|
||||||
ddiUpdateAuxTable.BaseResInfo = gmm->gmmResourceInfo->peekHandle();
|
ddiUpdateAuxTable.DoNotWait = true;
|
||||||
ddiUpdateAuxTable.DoNotWait = true;
|
ddiUpdateAuxTable.Map = map ? 1u : 0u;
|
||||||
ddiUpdateAuxTable.Map = map ? 1u : 0u;
|
return pageTableManager->updateAuxTable(&ddiUpdateAuxTable) == GMM_STATUS::GMM_SUCCESS;
|
||||||
return pageTableManager->updateAuxTable(&ddiUpdateAuxTable) == GMM_STATUS::GMM_SUCCESS;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wddm::resetPageTableManager(GmmPageTableMngr *newPageTableManager) {
|
void Wddm::resetPageTableManager(GmmPageTableMngr *newPageTableManager) {
|
||||||
|
|
|
@ -305,7 +305,7 @@ void WddmMemoryManager::freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation
|
||||||
gfxAllocation->taskCount > *this->getCommandStreamReceiver(0)->getTagAddress());
|
gfxAllocation->taskCount > *this->getCommandStreamReceiver(0)->getTagAddress());
|
||||||
|
|
||||||
if (input->gmm) {
|
if (input->gmm) {
|
||||||
if (input->gmm->isRenderCompressed) {
|
if (input->gmm->isRenderCompressed && wddm->getPageTableManager()) {
|
||||||
auto status = wddm->updateAuxTable(input->gpuPtr, input->gmm, false);
|
auto status = wddm->updateAuxTable(input->gpuPtr, input->gmm, false);
|
||||||
DEBUG_BREAK_IF(!status);
|
DEBUG_BREAK_IF(!status);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "unit_tests/mocks/mock_csr.h"
|
#include "unit_tests/mocks/mock_csr.h"
|
||||||
#include "unit_tests/mocks/mock_memory_manager.h"
|
#include "unit_tests/mocks/mock_memory_manager.h"
|
||||||
#include "unit_tests/utilities/destructor_counted.h"
|
#include "unit_tests/utilities/destructor_counted.h"
|
||||||
|
#include "unit_tests/helpers/unit_test_helper.h"
|
||||||
|
|
||||||
using namespace OCLRT;
|
using namespace OCLRT;
|
||||||
|
|
||||||
|
@ -202,23 +203,25 @@ TEST(ExecutionEnvironment, givenMultipleDevicesWhenTheyAreCreatedTheyAllReuseThe
|
||||||
|
|
||||||
typedef ::testing::Test ExecutionEnvironmentHw;
|
typedef ::testing::Test ExecutionEnvironmentHw;
|
||||||
|
|
||||||
HWTEST_F(ExecutionEnvironmentHw, givenExecutionEnvironmentWhenCommandStreamReceiverIsInitializedForCompressedBuffersThenCreatePageTableManagerIsCalled) {
|
HWTEST_F(ExecutionEnvironmentHw, givenHwHelperInputWhenInitializingCsrThenCreatePageTableManagerIfAllowed) {
|
||||||
ExecutionEnvironment executionEnvironment;
|
|
||||||
HardwareInfo localHwInfo = *platformDevices[0];
|
HardwareInfo localHwInfo = *platformDevices[0];
|
||||||
localHwInfo.capabilityTable.ftrRenderCompressedBuffers = true;
|
localHwInfo.capabilityTable.ftrRenderCompressedBuffers = false;
|
||||||
executionEnvironment.initializeCommandStreamReceiver(&localHwInfo, 0u);
|
localHwInfo.capabilityTable.ftrRenderCompressedImages = false;
|
||||||
auto csr = static_cast<UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers[0u].get());
|
|
||||||
ASSERT_NE(nullptr, csr);
|
|
||||||
EXPECT_TRUE(csr->createPageTableManagerCalled);
|
|
||||||
}
|
|
||||||
|
|
||||||
HWTEST_F(ExecutionEnvironmentHw, givenExecutionEnvironmentWhenCommandStreamReceiverIsInitializedForCompressedImagesThenCreatePageTableManagerIsCalled) {
|
|
||||||
ExecutionEnvironment executionEnvironment;
|
ExecutionEnvironment executionEnvironment;
|
||||||
HardwareInfo localHwInfo = *platformDevices[0];
|
executionEnvironment.initializeCommandStreamReceiver(&localHwInfo, 0);
|
||||||
|
auto csr0 = static_cast<UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers[0].get());
|
||||||
|
EXPECT_FALSE(csr0->createPageTableManagerCalled);
|
||||||
|
|
||||||
|
localHwInfo.capabilityTable.ftrRenderCompressedBuffers = true;
|
||||||
|
localHwInfo.capabilityTable.ftrRenderCompressedImages = false;
|
||||||
|
executionEnvironment.initializeCommandStreamReceiver(&localHwInfo, 1);
|
||||||
|
auto csr1 = static_cast<UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers[1].get());
|
||||||
|
EXPECT_EQ(UnitTestHelper<FamilyType>::isPageTableManagerSupported(localHwInfo), csr1->createPageTableManagerCalled);
|
||||||
|
|
||||||
|
localHwInfo.capabilityTable.ftrRenderCompressedBuffers = false;
|
||||||
localHwInfo.capabilityTable.ftrRenderCompressedImages = true;
|
localHwInfo.capabilityTable.ftrRenderCompressedImages = true;
|
||||||
executionEnvironment.initializeCommandStreamReceiver(&localHwInfo, 0u);
|
executionEnvironment.initializeCommandStreamReceiver(&localHwInfo, 2);
|
||||||
EXPECT_NE(nullptr, executionEnvironment.commandStreamReceivers[0]);
|
auto csr2 = static_cast<UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers[2].get());
|
||||||
auto csr = static_cast<UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers[0u].get());
|
EXPECT_EQ(UnitTestHelper<FamilyType>::isPageTableManagerSupported(localHwInfo), csr2->createPageTableManagerCalled);
|
||||||
ASSERT_NE(nullptr, csr);
|
|
||||||
EXPECT_TRUE(csr->createPageTableManagerCalled);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "runtime/helpers/options.h"
|
#include "runtime/helpers/options.h"
|
||||||
#include "unit_tests/helpers/debug_manager_state_restore.h"
|
#include "unit_tests/helpers/debug_manager_state_restore.h"
|
||||||
#include "unit_tests/helpers/hw_helper_tests.h"
|
#include "unit_tests/helpers/hw_helper_tests.h"
|
||||||
|
#include "unit_tests/helpers/unit_test_helper.h"
|
||||||
|
|
||||||
void HwHelperTest::SetUp() {
|
void HwHelperTest::SetUp() {
|
||||||
memcpy(&testPlatform, platformDevices[0]->pPlatform, sizeof(testPlatform));
|
memcpy(&testPlatform, platformDevices[0]->pPlatform, sizeof(testPlatform));
|
||||||
|
@ -23,7 +24,7 @@ void HwHelperTest::SetUp() {
|
||||||
void HwHelperTest::TearDown() {
|
void HwHelperTest::TearDown() {
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(HwHelperTest, getReturnsValidHwHelperHw) {
|
TEST_F(HwHelperTest, getReturnsValidHwHelperHw) {
|
||||||
auto &helper = HwHelper::get(renderCoreFamily);
|
auto &helper = HwHelper::get(renderCoreFamily);
|
||||||
EXPECT_NE(nullptr, &helper);
|
EXPECT_NE(nullptr, &helper);
|
||||||
}
|
}
|
||||||
|
@ -49,7 +50,7 @@ HWTEST_F(HwHelperTest, getBindingTableStateSizeReturnsCorrectSize) {
|
||||||
EXPECT_EQ(sizeof(BINDING_TABLE_STATE), pointer);
|
EXPECT_EQ(sizeof(BINDING_TABLE_STATE), pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(HwHelperTest, getBindingTableStateAlignementReturnsCorrectSize) {
|
TEST_F(HwHelperTest, getBindingTableStateAlignementReturnsCorrectSize) {
|
||||||
auto &helper = HwHelper::get(renderCoreFamily);
|
auto &helper = HwHelper::get(renderCoreFamily);
|
||||||
EXPECT_NE(0u, helper.getBindingTableStateAlignement());
|
EXPECT_NE(0u, helper.getBindingTableStateAlignement());
|
||||||
}
|
}
|
||||||
|
@ -61,7 +62,7 @@ HWTEST_F(HwHelperTest, getInterfaceDescriptorDataSizeReturnsCorrectSize) {
|
||||||
EXPECT_EQ(sizeof(INTERFACE_DESCRIPTOR_DATA), helper.getInterfaceDescriptorDataSize());
|
EXPECT_EQ(sizeof(INTERFACE_DESCRIPTOR_DATA), helper.getInterfaceDescriptorDataSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(HwHelperTest, givenDebuggingInactiveWhenSipKernelTypeIsQueriedThenCsrTypeIsReturned) {
|
TEST_F(HwHelperTest, givenDebuggingInactiveWhenSipKernelTypeIsQueriedThenCsrTypeIsReturned) {
|
||||||
auto &helper = HwHelper::get(renderCoreFamily);
|
auto &helper = HwHelper::get(renderCoreFamily);
|
||||||
EXPECT_NE(nullptr, &helper);
|
EXPECT_NE(nullptr, &helper);
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ HWTEST_F(HwHelperTest, givenDebuggingInactiveWhenSipKernelTypeIsQueriedThenCsrTy
|
||||||
EXPECT_EQ(SipKernelType::Csr, sipType);
|
EXPECT_EQ(SipKernelType::Csr, sipType);
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(HwHelperTest, givenEngineTypeRcsWhenCsTraitsAreQueiredThenCorrectNameInTraitsIsReturned) {
|
TEST_F(HwHelperTest, givenEngineTypeRcsWhenCsTraitsAreQueiredThenCorrectNameInTraitsIsReturned) {
|
||||||
auto &helper = HwHelper::get(renderCoreFamily);
|
auto &helper = HwHelper::get(renderCoreFamily);
|
||||||
EXPECT_NE(nullptr, &helper);
|
EXPECT_NE(nullptr, &helper);
|
||||||
|
|
||||||
|
@ -77,6 +78,11 @@ HWTEST_F(HwHelperTest, givenEngineTypeRcsWhenCsTraitsAreQueiredThenCorrectNameIn
|
||||||
EXPECT_STREQ("RCS", csTraits.name);
|
EXPECT_STREQ("RCS", csTraits.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST_F(HwHelperTest, givenHwHelperWhenAskedForPageTableManagerSupportThenReturnCorrectValue) {
|
||||||
|
auto &helper = HwHelper::get(renderCoreFamily);
|
||||||
|
EXPECT_EQ(helper.isPageTableManagerSupported(hwInfo), UnitTestHelper<FamilyType>::isPageTableManagerSupported(hwInfo));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(DwordBuilderTest, setNonMaskedBits) {
|
TEST(DwordBuilderTest, setNonMaskedBits) {
|
||||||
uint32_t dword = 0;
|
uint32_t dword = 0;
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,14 @@
|
||||||
namespace OCLRT {
|
namespace OCLRT {
|
||||||
|
|
||||||
class Kernel;
|
class Kernel;
|
||||||
|
struct HardwareInfo;
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
struct UnitTestHelper {
|
struct UnitTestHelper {
|
||||||
static bool isL3ConfigProgrammable();
|
static bool isL3ConfigProgrammable();
|
||||||
|
|
||||||
static bool evaluateDshUsage(size_t sizeBeforeEnqueue, size_t sizeAfterEnqueue, Kernel *kernel);
|
static bool evaluateDshUsage(size_t sizeBeforeEnqueue, size_t sizeAfterEnqueue, Kernel *kernel);
|
||||||
|
|
||||||
|
static bool isPageTableManagerSupported(const HardwareInfo &hwInfo);
|
||||||
};
|
};
|
||||||
} // namespace OCLRT
|
} // namespace OCLRT
|
||||||
|
|
|
@ -19,4 +19,9 @@ bool UnitTestHelper<GfxFamily>::evaluateDshUsage(size_t sizeBeforeEnqueue, size_
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename GfxFamily>
|
||||||
|
bool UnitTestHelper<GfxFamily>::isPageTableManagerSupported(const HardwareInfo &hwInfo) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // namespace OCLRT
|
} // namespace OCLRT
|
||||||
|
|
|
@ -68,15 +68,19 @@ TEST_F(Wddm20Tests, doubleCreation) {
|
||||||
EXPECT_TRUE(wddm->isInitialized());
|
EXPECT_TRUE(wddm->isInitialized());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(Wddm20Tests, givenNullPageTableManagerWhenUpdateAuxTableCalledThenReturnFalse) {
|
TEST_F(Wddm20Tests, givenNullPageTableManagerAndRenderCompressedResourceWhenMappingGpuVaThenDontUpdateAuxTable) {
|
||||||
wddm->resetPageTableManager(nullptr);
|
wddm->resetPageTableManager(nullptr);
|
||||||
EXPECT_EQ(nullptr, wddm->getPageTableManager());
|
|
||||||
|
|
||||||
auto gmm = std::unique_ptr<Gmm>(new Gmm(nullptr, 1, false));
|
auto gmm = std::unique_ptr<Gmm>(new Gmm(nullptr, 1, false));
|
||||||
auto mockGmmRes = reinterpret_cast<MockGmmResourceInfo *>(gmm->gmmResourceInfo.get());
|
auto mockGmmRes = reinterpret_cast<MockGmmResourceInfo *>(gmm->gmmResourceInfo.get());
|
||||||
mockGmmRes->setUnifiedAuxTranslationCapable();
|
mockGmmRes->setUnifiedAuxTranslationCapable();
|
||||||
|
|
||||||
EXPECT_FALSE(wddm->updateAuxTable(1234u, gmm.get(), true));
|
void *fakePtr = reinterpret_cast<void *>(0x100);
|
||||||
|
WddmAllocation allocation(fakePtr, 0x2100, fakePtr, 0x3000, nullptr, MemoryPool::MemoryNull);
|
||||||
|
allocation.gmm = gmm.get();
|
||||||
|
allocation.handle = ALLOCATION_HANDLE;
|
||||||
|
|
||||||
|
EXPECT_TRUE(wddm->mapGpuVirtualAddress(&allocation, allocation.getAlignedCpuPtr(), allocation.is32BitAllocation, false, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Wddm20EnumAdaptersTest, expectTrue) {
|
TEST(Wddm20EnumAdaptersTest, expectTrue) {
|
||||||
|
|
Loading…
Reference in New Issue