Pass maxOsContextCount to ResidencyData

Change-Id: If9cf4c9a153ee7afff3f6b66e061db4630d0c8f5
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2020-08-17 16:38:21 +02:00
committed by sys_ocldev
parent ddacea4383
commit fe163311b1
9 changed files with 30 additions and 21 deletions

View File

@ -179,7 +179,7 @@ void OsAgnosticMemoryManager::addAllocationToHostPtrManager(GraphicsAllocation *
fragment.fragmentCpuPointer = gfxAllocation->getUnderlyingBuffer();
fragment.fragmentSize = alignUp(gfxAllocation->getUnderlyingBufferSize(), MemoryConstants::pageSize);
fragment.osInternalStorage = new OsHandle();
fragment.residency = new ResidencyData();
fragment.residency = new ResidencyData(maxOsContextCount);
hostPtrManager->storeFragment(gfxAllocation->getRootDeviceIndex(), fragment);
}
@ -259,7 +259,7 @@ MemoryManager::AllocationStatus OsAgnosticMemoryManager::populateOsHandles(OsHan
for (unsigned int i = 0; i < maxFragmentsCount; i++) {
if (!handleStorage.fragmentStorageData[i].osHandleStorage && handleStorage.fragmentStorageData[i].cpuPtr) {
handleStorage.fragmentStorageData[i].osHandleStorage = new OsHandle();
handleStorage.fragmentStorageData[i].residency = new ResidencyData();
handleStorage.fragmentStorageData[i].residency = new ResidencyData(maxOsContextCount);
FragmentStorage newFragment = {};
newFragment.fragmentCpuPointer = const_cast<void *>(handleStorage.fragmentStorageData[i].cpuPtr);

View File

@ -1793,9 +1793,10 @@ TEST(ResidencyDataTest, givenGpgpuEnginesWhenAskedForMaxOsContextCountThenValueI
TEST(ResidencyDataTest, givenResidencyDataWhenUpdateCompletionDataIsCalledThenItIsProperlyUpdated) {
struct MockResidencyData : public ResidencyData {
using ResidencyData::lastFenceValues;
using ResidencyData::ResidencyData;
};
MockResidencyData residency;
MockResidencyData residency(MemoryManager::maxOsContextCount);
MockOsContext osContext(0u, 1,
HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0],

View File

@ -3428,15 +3428,16 @@ TEST_F(DrmMemoryManagerWithExplicitExpectationsTest, givenEnabledValidateHostMem
TEST_F(DrmMemoryManagerWithExplicitExpectationsTest, givenDrmMemoryManagerWhenCleanOsHandlesDeletesHandleDataThenOsHandleStorageAndResidencyIsSetToNullptr) {
std::unique_ptr<TestedDrmMemoryManager> memoryManager(new TestedDrmMemoryManager(false, false, true, *executionEnvironment));
ASSERT_NE(nullptr, memoryManager->pinBBs[device->getRootDeviceIndex()]);
auto maxOsContextCount = 1u;
OsHandleStorage handleStorage;
handleStorage.fragmentStorageData[0].osHandleStorage = new OsHandle();
handleStorage.fragmentStorageData[0].residency = new ResidencyData();
handleStorage.fragmentStorageData[0].residency = new ResidencyData(maxOsContextCount);
handleStorage.fragmentStorageData[0].cpuPtr = reinterpret_cast<void *>(0x1000);
handleStorage.fragmentStorageData[0].fragmentSize = 4096;
handleStorage.fragmentStorageData[1].osHandleStorage = new OsHandle();
handleStorage.fragmentStorageData[1].residency = new ResidencyData();
handleStorage.fragmentStorageData[1].residency = new ResidencyData(maxOsContextCount);
handleStorage.fragmentStorageData[1].cpuPtr = reinterpret_cast<void *>(0x1000);
handleStorage.fragmentStorageData[1].fragmentSize = 4096;

View File

@ -822,7 +822,8 @@ TEST_F(Wddm20Tests, givenReadOnlyMemoryWhenCreateAllocationFailsWithNoVideoMemor
OsHandleStorage handleStorage;
OsHandle handle = {0};
ResidencyData residency;
auto maxOsContextCount = 1u;
ResidencyData residency(maxOsContextCount);
handleStorage.fragmentCount = 1;
handleStorage.fragmentStorageData[0].cpuPtr = (void *)0x1000;

View File

@ -58,8 +58,9 @@ void WddmMemoryManagerFixture::SetUp() {
}
TEST(ResidencyData, givenNewlyConstructedResidencyDataThenItIsNotResidentOnAnyOsContext) {
ResidencyData residencyData;
for (auto contextId = 0u; contextId < MemoryManager::maxOsContextCount; contextId++) {
auto maxOsContextCount = 3u;
ResidencyData residencyData(maxOsContextCount);
for (auto contextId = 0u; contextId < maxOsContextCount; contextId++) {
EXPECT_EQ(false, residencyData.resident[contextId]);
}
}
@ -998,9 +999,10 @@ TEST_F(WddmMemoryManagerTest, WhenAllocating32BitMemoryThenGpuBaseAddressIsCanno
TEST_F(WddmMemoryManagerTest, GivenThreeOsHandlesWhenAskedForDestroyAllocationsThenAllMarkedAllocationsAreDestroyed) {
OsHandleStorage storage;
void *pSysMem = reinterpret_cast<void *>(0x1000);
uint32_t maxOsContextCount = 1u;
storage.fragmentStorageData[0].osHandleStorage = new OsHandle;
storage.fragmentStorageData[0].residency = new ResidencyData;
storage.fragmentStorageData[0].residency = new ResidencyData(maxOsContextCount);
storage.fragmentStorageData[0].osHandleStorage->handle = ALLOCATION_HANDLE;
storage.fragmentStorageData[0].freeTheFragment = true;
@ -1008,7 +1010,7 @@ TEST_F(WddmMemoryManagerTest, GivenThreeOsHandlesWhenAskedForDestroyAllocationsT
storage.fragmentStorageData[1].osHandleStorage = new OsHandle;
storage.fragmentStorageData[1].osHandleStorage->handle = ALLOCATION_HANDLE;
storage.fragmentStorageData[1].residency = new ResidencyData;
storage.fragmentStorageData[1].residency = new ResidencyData(maxOsContextCount);
storage.fragmentStorageData[1].freeTheFragment = false;
@ -1016,7 +1018,7 @@ TEST_F(WddmMemoryManagerTest, GivenThreeOsHandlesWhenAskedForDestroyAllocationsT
storage.fragmentStorageData[2].osHandleStorage->handle = ALLOCATION_HANDLE;
storage.fragmentStorageData[2].freeTheFragment = true;
storage.fragmentStorageData[2].osHandleStorage->gmm = new Gmm(rootDeviceEnvironment->getGmmClientContext(), pSysMem, 4096u, false);
storage.fragmentStorageData[2].residency = new ResidencyData;
storage.fragmentStorageData[2].residency = new ResidencyData(maxOsContextCount);
memoryManager->cleanOsHandles(storage, 0);
@ -1246,11 +1248,12 @@ TEST_F(BufferWithWddmMemory, givenFragmentsThatAreNotInOrderWhenGraphicsAllocati
D3DGPU_VIRTUAL_ADDRESS gpuAdress = MemoryConstants::pageSize * 1;
auto ptr = reinterpret_cast<void *>(wddm->virtualAllocAddress + MemoryConstants::pageSize);
auto size = MemoryConstants::pageSize * 2;
auto maxOsContextCount = 1u;
handleStorage.fragmentStorageData[0].cpuPtr = ptr;
handleStorage.fragmentStorageData[0].fragmentSize = size;
handleStorage.fragmentStorageData[0].osHandleStorage = new OsHandle();
handleStorage.fragmentStorageData[0].residency = new ResidencyData();
handleStorage.fragmentStorageData[0].residency = new ResidencyData(maxOsContextCount);
handleStorage.fragmentStorageData[0].freeTheFragment = true;
auto rootDeviceEnvironment = executionEnvironment->rootDeviceEnvironments[0].get();
handleStorage.fragmentStorageData[0].osHandleStorage->gmm = new Gmm(rootDeviceEnvironment->getGmmClientContext(), ptr, size, false);
@ -1281,11 +1284,12 @@ TEST_F(BufferWithWddmMemory, givenFragmentsThatAreNotInOrderWhenGraphicsAllocati
D3DGPU_VIRTUAL_ADDRESS gpuAdress = MemoryConstants::pageSize * 1;
auto ptr = reinterpret_cast<void *>(wddm->virtualAllocAddress + MemoryConstants::pageSize);
auto size = MemoryConstants::pageSize * 2;
auto maxOsContextCount = 1u;
handleStorage.fragmentStorageData[0].cpuPtr = ptr;
handleStorage.fragmentStorageData[0].fragmentSize = size;
handleStorage.fragmentStorageData[0].osHandleStorage = new OsHandle();
handleStorage.fragmentStorageData[0].residency = new ResidencyData();
handleStorage.fragmentStorageData[0].residency = new ResidencyData(maxOsContextCount);
handleStorage.fragmentStorageData[0].freeTheFragment = true;
auto rootDeviceEnvironment = executionEnvironment->rootDeviceEnvironments[0].get();
handleStorage.fragmentStorageData[0].osHandleStorage->gmm = new Gmm(rootDeviceEnvironment->getGmmClientContext(), ptr, size, false);