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